/******************************************************************************* * Copyright (c) 2012 Nokia Corporation * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Comarch team - initial API and implementation *******************************************************************************/ package org.ned.client.view; import com.sun.lwuit.Display; import com.sun.lwuit.events.ActionEvent; import com.sun.lwuit.events.ActionListener; import com.sun.lwuit.events.SelectionListener; import com.sun.lwuit.layouts.BoxLayout; import java.util.Enumeration; import java.util.Vector; import org.ned.client.LanguageLister; import org.ned.client.LanguageManager; import org.ned.client.NedMidlet; import org.ned.client.NedResources; import org.ned.client.command.*; import org.ned.client.utils.LanguageInfo; import org.ned.client.view.customComponents.NedList; import org.ned.client.view.renderer.RadioButtonCellRenderer; public class LanguagesScreen extends NedFormBase implements ActionListener, SelectionListener { private NedList mCommands; private LanguageLister mLanguage; private LanguageManager mManager; public LanguagesScreen() { super(); mLanguage = new LanguageLister( NedMidlet.getAccountManager(). getLocalizationUri() ); setLayout( new BoxLayout( BoxLayout.Y_AXIS ) ); setNedTitle( NedResources.LANGUAGES ); LanguageInfo currentLanguage = NedMidlet.getAccountManager().getLanguage(); String currentLanguageName = null; if ( currentLanguage != null ) { currentLanguageName = currentLanguage.getLocale(); } mManager = new LanguageManager(); mCommands = new NedList( mManager.getLanguages() ); mCommands.setContextMenu( new LanguageContextMenu( mCommands, 1 ) ); mCommands.setMinElementHeight( 7 ); mCommands.setWidth( Display.getInstance().getDisplayWidth() ); mCommands.setRenderer( new RadioButtonCellRenderer( currentLanguageName == null ? "en-GB" : currentLanguageName ) ); mCommands.addActionListener( this ); mCommands.addSelectionListener( this ); addComponent( mCommands ); commandList(); addCommandListener( this ); } private void commandList() { addCommand( BackLanguagesCommand.getInstance().getCommand() ); addCommand( HelpCommand.getInstance().getCommand() ); if ( mCommands.getSelectedItem() != null && ((LanguageInfo)mCommands.getSelectedItem()).isLocal() ) { addCommand( DownloadLanguageAgainCommand.getInstance().getCommand() ); } addCommand( CheckForLanguageUpdateCommand.getInstance().getCommand() ); addCommand( ConfirmLanguageSelectCommand.getInstance().getCommand() ); } public void actionPerformed( ActionEvent evt ) { Object src = evt.getSource(); if ( src == BackLanguagesCommand.getInstance().getCommand() ) { BackLanguagesCommand.getInstance().execute( null ); } else if ( src == ConfirmLanguageSelectCommand.getInstance().getCommand() || (src == mCommands && mCommands.getSelectedIndex() >= 0) ) { LanguageInfo newLanguage = (LanguageInfo)mCommands.getSelectedItem(); if ( !newLanguage.isLocal() ) { DownloadLanguageCommand.getInstance().beginAsync( newLanguage, new LanguageDownloadedCallback(), true ); } else { mCommands.setRenderer( new RadioButtonCellRenderer( newLanguage. getLocale() ) ); ConfirmLanguageSelectCommand.getInstance().execute( newLanguage ); } } else if ( src == HelpCommand.getInstance().getCommand() ) { HelpCommand.getInstance().execute( this.getClass() ); } else if ( src == CheckForLanguageUpdateCommand.getInstance(). getCommand() ) { CheckForLanguageUpdateCommand.getInstance().beginAsync( mLanguage, new CheckCallback(), true ); } else if ( src == DownloadLanguageAgainCommand.getInstance().getCommand() ) { LanguageInfo language = (LanguageInfo)mCommands.getSelectedItem(); DownloadLanguageAgainCommand.getInstance().beginAsync( language, new DownloadAgainCallback( mCommands ), true ); } } public void selectionChanged( int i, int i1 ) { commandList(); } private class CheckCallback implements AsyncCompletedCallback { public void onSuccess() { Vector newLang = mLanguage.getNew(); if ( newLang.isEmpty() ) { GeneralAlert.show( NedResources.NO_NEW_LANGUAGE, GeneralAlert.INFO, true ); } else { String messageStr = NedResources.NEW_LANGUAGE + ":\n"; for ( int idx = 0; idx < newLang.size(); idx++ ) { messageStr += ((LanguageInfo)newLang.elementAt( idx )). getLangName(); if ( idx != newLang.size() - 1 ) { messageStr += ", "; } } GeneralAlert.show( messageStr, GeneralAlert.INFO, true ); Enumeration iter = newLang.elements(); while ( iter.hasMoreElements() ) { mCommands.getModel().addItem( iter.nextElement() ); } mManager.saveSetup(); } } public void onFailure( String error ) { GeneralAlert.show( error, GeneralAlert.WARNING, true ); } } private class LanguageDownloadedCallback implements AsyncCompletedCallback { public void onSuccess() { mCommands.repaint(); LanguageInfo newLanguage = (LanguageInfo)mCommands.getSelectedItem(); mCommands.setRenderer( new RadioButtonCellRenderer( newLanguage. getLocale() ) ); ConfirmLanguageSelectCommand.getInstance().execute( newLanguage ); } public void onFailure( String error ) { GeneralAlert.show( error, GeneralAlert.WARNING, true ); } } }