summaryrefslogtreecommitdiff
path: root/src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java')
-rw-r--r--src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java321
1 files changed, 321 insertions, 0 deletions
diff --git a/src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java b/src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java
new file mode 100644
index 0000000..ae2a97b
--- /dev/null
+++ b/src/plugins/devices.services/src/com/motorola/studio/android/devices/services/lang/model/LocationComposite.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.motorola.studio.android.devices.services.lang.model;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import com.motorola.studio.android.devices.services.i18n.ServicesNLS;
+
+/**
+ * Composite containing the current language in use and two combo boxes where
+ * the user can choose a language and country
+ */
+public class LocationComposite extends Composite
+{
+ // id for listeners
+ static final int LOCATION_CHANGE = 1234;
+
+ // selected language
+ private String language = "";
+
+ // selected country
+ private String country = "";
+
+ // language combobox
+ private Combo comboLanguage = null;
+
+ // country combobox
+ private Combo comboCountry = null;
+
+ /**
+ * Constructor
+ *
+ * @param parent the parent composite
+ */
+ public LocationComposite(Composite parent)
+ {
+ this(parent, null, null);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param parent the parent composite
+ * @param currentLanguageId the id of the current language in use by given emulator instance.
+ * @param currentCountryId the id of the current country in use by given emulator instance.
+ */
+ public LocationComposite(Composite parent, String currentLanguageId, String currentCountryId)
+ {
+ super(parent, SWT.NONE);
+
+ Label label;
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 2;
+ this.setLayout(gridLayout);
+
+ /*
+ * Language label and combobox
+ */
+ label = new Label(this, SWT.LEFT);
+ label.setText(ServicesNLS.UI_Language);
+
+ comboLanguage = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ comboLanguage.addSelectionListener(new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent event)
+ {
+ language = comboLanguage.getText();
+ notifyListeners(LOCATION_CHANGE, null);
+ }
+ });
+ if ((currentLanguageId != null) && (!currentLanguageId.equals("")))
+ {
+ fillComboBoxAndSelectCurrentLanguage(currentLanguageId);
+ }
+ else
+ {
+ comboLanguage.setItems(getLanguagesList());
+ }
+ language = comboLanguage.getText();
+ comboLanguage.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ comboLanguage.setVisibleItemCount(20);
+
+ /*
+ * Country label and combobox
+ */
+ label = new Label(this, SWT.LEFT);
+ label.setText(ServicesNLS.UI_Country);
+
+ comboCountry = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ comboCountry.addSelectionListener(new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent event)
+ {
+ country = comboCountry.getText();
+ notifyListeners(LOCATION_CHANGE, null);
+ }
+ });
+ if ((currentCountryId != null) && (!currentCountryId.equals("")))
+ {
+ fillComboBoxAndSelectCurrentCountry(currentCountryId);
+ }
+ else
+ {
+ comboCountry.setItems(getCountriesList());
+ }
+ country = comboCountry.getText();
+ comboCountry.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ comboCountry.setVisibleItemCount(20);
+ }
+
+ /*
+ * Sets an array of languages in the language combo box and select that item which is
+ * the current in use by emulator instance. <p>
+ *
+ * There are some needed explanations here: <p>
+ *
+ * 1. The currentLanguageId parameter was obtained through an ADB shell command sent
+ * to emulator. The ID returned is a String similar to "pt", "en", "fr" for Portuguese,
+ * English and French respectively. For more details, please see: <br>
+ * com.motorola.studio.android.adt.DDMSUtils.getCurrentEmulatorLanguageAndCountry
+ * method. <p>
+ *
+ * 2. The currentLanguageId parameter is passed to getLanguagesList method in order to
+ * be returned an array of Strings holding all languages available and, at the
+ * length-plus-one position of this array, the number representing the index of
+ * array regarding the current language name in use by emulator. <p>
+ *
+ * 3. The language combo box is filled with all languages contained in langNamesAndIndex
+ * array. Then the number, held at last position of array, is passed as parameter to
+ * select() method of the combo box. Thus, the current language appears as selected
+ * when combo box is rendered. <p>
+ *
+ * @param currentLanguageId The ID of the current language in use by emulator
+ * instance.
+ */
+ private void fillComboBoxAndSelectCurrentLanguage(String currentLanguageId)
+ {
+ String[] langNamesAndIndex = getLanguagesList(currentLanguageId);
+ int index = langNamesAndIndex.length - 1;
+ int currentLanguageIndex = Integer.parseInt(langNamesAndIndex[index]);
+ comboLanguage.setItems(langNamesAndIndex);
+ comboLanguage.remove(index);
+ comboLanguage.select(currentLanguageIndex);
+ }
+
+ /*
+ * Sets an array of countries in the country combo box and select that item which is
+ * the current in use by emulator instance. <p>
+ *
+ * There are some needed explanations here: <p>
+ *
+ * 1. The currentCountryId parameter was obtained through an ADB shell command sent
+ * to emulator. The ID returned is a String similar to "it", "us", "ru" for Italy,
+ * USA and Russia respectively. For more details, please see: <br>
+ * com.motorola.studio.android.adt.DDMSUtils.getCurrentEmulatorLanguageAndCountry
+ * method. <p>
+ *
+ * 2. The currentCountryId parameter is passed to getCountriesList method in order to
+ * be returned an array of Strings holding all country available and, at the
+ * length-plus-one position of this array, the number representing the index of
+ * array regarding the current country name in use by emulator. <p>
+ *
+ * 3. The country combo box is filled with all countries contained in countryNamesAndIndex
+ * array. Then the number, held at last position of array, is passed as parameter to
+ * select() method of the combo box. Thus, the current country appears as selected
+ * when combo box is rendered. <p>
+ *
+ * @param currentCountryId The ID of the current country in use by emulator
+ * instance.
+ */
+ private void fillComboBoxAndSelectCurrentCountry(String currentCountryId)
+ {
+ String[] countryNamesAndIndex = getCountriesList(currentCountryId);
+ int index = countryNamesAndIndex.length - 1;
+ int currentCountryIndex = Integer.parseInt(countryNamesAndIndex[index]);
+ comboCountry.setItems(countryNamesAndIndex);
+ comboCountry.remove(index);
+ comboCountry.select(currentCountryIndex);
+ }
+
+ /*
+ * Get the list of languages to be used to populate the combobox
+ *
+ * @return the list of languages to be used to populate the combobox
+ */
+ private String[] getLanguagesList()
+ {
+ List<Language> languageObjs = Language.getLanguageList();
+ String[] languages = new String[languageObjs.size()];
+
+ int i = 0;
+ for (Language language : languageObjs)
+ {
+ languages[i] = language.getName();
+ i++;
+ }
+ return languages;
+ }
+
+ /*
+ * Get the list of languages to be used to populate the combo box. Also,
+ * returns the index of the current language at last position of the array.
+ *
+ * @param currentlanguageId
+ * @return An array of Strings containing the list of languages and the
+ * current language index.
+ */
+ private String[] getLanguagesList(String currentlanguageId)
+ {
+ List<Language> languageObjs = Language.getLanguageList();
+ int size = languageObjs.size();
+ String[] langNamesAndIndex = new String[size + 1];
+ String languageIndex = null;
+ int i = 0;
+ for (Language language : languageObjs)
+ {
+ String name = language.getName();
+ String id = language.getId();
+ if (id.equalsIgnoreCase(currentlanguageId))
+ {
+ languageIndex = String.valueOf(i);
+ langNamesAndIndex[size] = languageIndex;
+ }
+ langNamesAndIndex[i] = name;
+ i++;
+ }
+ return langNamesAndIndex;
+ }
+
+ /*
+ * Get the list of countries to be used to populate the combobox
+ *
+ * @return the list of countries to be used to populate the combobox
+ */
+ private String[] getCountriesList()
+ {
+ List<Country> countryObjs = Country.getCountryList();
+ String[] countries = new String[countryObjs.size()];
+ int i = 0;
+ for (Country country : countryObjs)
+ {
+ countries[i] = country.getName();
+ i++;
+ }
+ return countries;
+ }
+
+ /*
+ * Get the list of countries to be used to populate the combo box. Also,
+ * returns the index of the current country at last position of the array.
+ *
+ * @param currentCountryId
+ * @return An array of Strings containing the list of countries and the
+ * current country index.
+ */
+ private String[] getCountriesList(String currentCountryId)
+ {
+ List<Country> countryObjs = Country.getCountryList();
+ int size = countryObjs.size();
+ String[] countryNamesAndIndex = new String[size + 1];
+ String countryIndex = null;
+ int i = 0;
+ for (Country country : countryObjs)
+ {
+ String name = country.getName();
+ String id = country.getId();
+ if (id.equalsIgnoreCase(currentCountryId))
+ {
+ countryIndex = String.valueOf(i);
+ countryNamesAndIndex[size] = countryIndex;
+ }
+ countryNamesAndIndex[i] = name;
+ i++;
+ }
+ return countryNamesAndIndex;
+ }
+
+ /**
+ * Get the selected language
+ *
+ * @return selected language name
+ */
+ public String getLanguage()
+ {
+ return language;
+ }
+
+ /**
+ * Get the selected country
+ *
+ * @return selected country name
+ */
+ public String getCountry()
+ {
+ return country;
+ }
+}