From 6b71530017fbf4521bf1b0e1f936d4216251c42d Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Wed, 23 Jul 2014 23:34:35 -0700 Subject: [PATCH] Use fragment for multi lingual preference screen Bug: 16522808 Change-Id: I0bfac43513e1fb85b5d4c07f56dd4c5b82f75ed1 --- java/res/xml/prefs.xml | 21 +---- java/res/xml/prefs_screen_multi_lingual.xml | 38 ++++++++ ... => CustomInputStyleSettingsFragment.java} | 8 +- .../MultiLingualSettingsFragment.java | 86 +++++++++++++++++++ .../latin/settings/SettingsFragment.java | 27 ------ .../latin/utils/FragmentUtils.java | 6 +- 6 files changed, 133 insertions(+), 53 deletions(-) create mode 100644 java/res/xml/prefs_screen_multi_lingual.xml rename java/src/com/android/inputmethod/latin/settings/{AdditionalSubtypeSettings.java => CustomInputStyleSettingsFragment.java} (99%) create mode 100644 java/src/com/android/inputmethod/latin/settings/MultiLingualSettingsFragment.java diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml index 749551c2a..6493d0cbd 100644 --- a/java/res/xml/prefs.xml +++ b/java/res/xml/prefs.xml @@ -29,26 +29,9 @@ android:entries="@array/keyboard_theme_names" android:persistent="true" /> - - - - + android:key="screen_multi_lingual" /> diff --git a/java/res/xml/prefs_screen_multi_lingual.xml b/java/res/xml/prefs_screen_multi_lingual.xml new file mode 100644 index 000000000..937d439d6 --- /dev/null +++ b/java/res/xml/prefs_screen_multi_lingual.xml @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java b/java/src/com/android/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java similarity index 99% rename from java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java rename to java/src/com/android/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java index ad411f9ee..21f2afd01 100644 --- a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java +++ b/java/src/com/android/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java @@ -43,7 +43,6 @@ import android.widget.SpinnerAdapter; import android.widget.Toast; import com.android.inputmethod.compat.InputMethodSubtypeCompatUtils; -import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.RichInputMethodManager; import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils; @@ -54,7 +53,7 @@ import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import java.util.ArrayList; import java.util.TreeSet; -public final class AdditionalSubtypeSettings extends PreferenceFragment { +public final class CustomInputStyleSettingsFragment extends PreferenceFragment { private RichInputMethodManager mRichImm; private SharedPreferences mPrefs; private SubtypeLocaleAdapter mSubtypeLocaleAdapter; @@ -124,9 +123,8 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment { if (localeString.equals(SubtypeLocaleUtils.NO_LANGUAGE)) { final String displayName = context.getString(R.string.subtype_no_language); return new SubtypeLocaleItem(localeString, displayName); - } else { - return new SubtypeLocaleItem(localeString); } + return new SubtypeLocaleItem(localeString); } } @@ -385,7 +383,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment { } } - public AdditionalSubtypeSettings() { + public CustomInputStyleSettingsFragment() { // Empty constructor for fragment generation. } diff --git a/java/src/com/android/inputmethod/latin/settings/MultiLingualSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/MultiLingualSettingsFragment.java new file mode 100644 index 000000000..f40106ba9 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/settings/MultiLingualSettingsFragment.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2014 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.android.inputmethod.latin.settings; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.os.Bundle; +import android.preference.PreferenceScreen; +import android.text.TextUtils; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.latin.R; +import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils; +import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; + +import java.util.ArrayList; + +/** + * "Multi lingual options" settings sub screen. + * + * This settings sub screen handles the following input preferences. + * - Language switch key + * - Switch to other input methods + * - Custom input styles + */ +public final class MultiLingualSettingsFragment extends SubScreenFragment { + @Override + public void onCreate(final Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.prefs_screen_multi_lingual); + + final Context context = getActivity(); + + // When we are called from the Settings application but we are not already running, some + // singleton and utility classes may not have been initialized. We have to call + // initialization method of these classes here. See {@link LatinIME#onCreate()}. + SubtypeLocaleUtils.init(context); + + if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) { + removePreference(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY); + removePreference(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST); + } + } + + @Override + public void onResume() { + super.onResume(); + updateCustomInputStylesSummary(); + } + + @Override + public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { + // Nothing to do here. + } + + private void updateCustomInputStylesSummary() { + final SharedPreferences prefs = getSharedPreferences(); + final Resources res = getResources(); + final PreferenceScreen customInputStyles = + (PreferenceScreen)findPreference(Settings.PREF_CUSTOM_INPUT_STYLES); + final String prefSubtype = Settings.readPrefAdditionalSubtypes(prefs, res); + final InputMethodSubtype[] subtypes = + AdditionalSubtypeUtils.createAdditionalSubtypesArray(prefSubtype); + final ArrayList subtypeNames = new ArrayList<>(); + for (final InputMethodSubtype subtype : subtypes) { + subtypeNames.add(SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(subtype)); + } + // TODO: A delimiter of custom input styles should be localized. + customInputStyles.setSummary(TextUtils.join(", ", subtypeNames)); + } +} diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java index ec842eff2..f0bc27972 100644 --- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java +++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java @@ -36,7 +36,6 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.inputmethod.InputMethodSubtype; import com.android.inputmethod.dictionarypack.DictionarySettingsActivity; import com.android.inputmethod.keyboard.KeyboardTheme; @@ -46,10 +45,8 @@ import com.android.inputmethod.latin.define.ProductionFlags; import com.android.inputmethod.latin.setup.LauncherIconVisibilityManager; import com.android.inputmethod.latin.userdictionary.UserDictionaryList; import com.android.inputmethod.latin.userdictionary.UserDictionarySettings; -import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils; import com.android.inputmethod.latin.utils.ApplicationUtils; import com.android.inputmethod.latin.utils.FeedbackUtils; -import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import com.android.inputmethodcommon.InputMethodSettingsFragment; import java.util.TreeSet; @@ -113,7 +110,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment // When we are called from the Settings application but we are not already running, some // singleton and utility classes may not have been initialized. We have to call // initialization method of these classes here. See {@link LatinIME#onCreate()}. - SubtypeLocaleUtils.init(context); AudioAndHapticFeedbackManager.init(context); final SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); @@ -121,8 +117,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment ensureConsistencyOfAutoCorrectionSettings(); - final PreferenceScreen multiLingualScreen = - (PreferenceScreen) findPreference(Settings.SCREEN_MULTI_LINGUAL); final PreferenceScreen gestureScreen = (PreferenceScreen) findPreference(Settings.SCREEN_GESTURE); final PreferenceScreen correctionScreen = @@ -139,11 +133,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) { removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedScreen); } - if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) { - removePreference(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, multiLingualScreen); - removePreference( - Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, multiLingualScreen); - } // TODO: consolidate key preview dismiss delay with the key preview animation parameters. if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) { @@ -238,7 +227,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment keyboardThemePref.setSummary(entryIndex < 0 ? null : entries[entryIndex]); keyboardThemePref.setValue(value); } - updateCustomInputStylesSummary(prefs, res); } @Override @@ -292,21 +280,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment Settings.PREF_BIGRAM_PREDICTIONS, !currentSetting.equals(autoCorrectionOff)); } - private void updateCustomInputStylesSummary(final SharedPreferences prefs, - final Resources res) { - final PreferenceScreen customInputStyles = - (PreferenceScreen)findPreference(Settings.PREF_CUSTOM_INPUT_STYLES); - final String prefSubtype = Settings.readPrefAdditionalSubtypes(prefs, res); - final InputMethodSubtype[] subtypes = - AdditionalSubtypeUtils.createAdditionalSubtypesArray(prefSubtype); - final StringBuilder styles = new StringBuilder(); - for (final InputMethodSubtype subtype : subtypes) { - if (styles.length() > 0) styles.append(", "); - styles.append(SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(subtype)); - } - customInputStyles.setSummary(styles); - } - private void refreshEnablingsOfKeypressSoundAndVibrationSettings( final SharedPreferences sp, final Resources res) { setPreferenceEnabled(Settings.PREF_VIBRATION_DURATION_SETTINGS, diff --git a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java index 5d77097b2..a44c5764a 100644 --- a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java @@ -18,9 +18,10 @@ package com.android.inputmethod.latin.utils; import com.android.inputmethod.dictionarypack.DictionarySettingsFragment; import com.android.inputmethod.latin.about.AboutPreferences; -import com.android.inputmethod.latin.settings.AdditionalSubtypeSettings; +import com.android.inputmethod.latin.settings.CustomInputStyleSettingsFragment; import com.android.inputmethod.latin.settings.DebugSettings; import com.android.inputmethod.latin.settings.InputSettingsFragment; +import com.android.inputmethod.latin.settings.MultiLingualSettingsFragment; import com.android.inputmethod.latin.settings.SettingsFragment; import com.android.inputmethod.latin.spellcheck.SpellCheckerSettingsFragment; import com.android.inputmethod.latin.userdictionary.UserDictionaryAddWordFragment; @@ -36,7 +37,8 @@ public class FragmentUtils { sLatinImeFragments.add(DictionarySettingsFragment.class.getName()); sLatinImeFragments.add(AboutPreferences.class.getName()); sLatinImeFragments.add(InputSettingsFragment.class.getName()); - sLatinImeFragments.add(AdditionalSubtypeSettings.class.getName()); + sLatinImeFragments.add(MultiLingualSettingsFragment.class.getName()); + sLatinImeFragments.add(CustomInputStyleSettingsFragment.class.getName()); sLatinImeFragments.add(DebugSettings.class.getName()); sLatinImeFragments.add(SettingsFragment.class.getName()); sLatinImeFragments.add(SpellCheckerSettingsFragment.class.getName());