From cdaf4f797001dc49af070f205a50a1e02b5bebc6 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 3 Nov 2016 15:55:18 -0700 Subject: [PATCH] More cleanup in input & language settings. - Removed unused preferences that are commented out in pref xml. - Also removed code that references to them in Fragment. Bug: 32637613 Test: compile/manual Change-Id: I84be24f9c5df7531843f03b047a93f9aa912432e --- res/xml/language_settings.xml | 25 +- .../InputMethodAndLanguageSettings.java | 323 +----------------- 2 files changed, 14 insertions(+), 334 deletions(-) diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml index 9074d0acdc4..d829dc46943 100644 --- a/res/xml/language_settings.xml +++ b/res/xml/language_settings.xml @@ -15,9 +15,8 @@ --> + android:key="language_keyboard_settings" + android:title="@string/language_keyboard_settings_title"> - - - - - - - - - - - - - - - - - - - - diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index f1fa70ddad5..ea6c529029d 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -18,20 +18,14 @@ package com.android.settings.inputmethod; import android.app.Activity; import android.app.Fragment; -import android.app.admin.DevicePolicyManager; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.ServiceInfo; -import android.content.res.Configuration; -import android.database.ContentObserver; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.os.Bundle; -import android.os.Handler; import android.provider.Settings; import android.provider.Settings.System; import android.speech.tts.TtsEngines; @@ -39,9 +33,6 @@ import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceClickListener; import android.support.v7.preference.PreferenceCategory; -import android.support.v7.preference.PreferenceManager; -import android.support.v7.preference.PreferenceScreen; -import android.text.TextUtils; import android.view.InputDevice; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; @@ -65,39 +56,23 @@ import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; -import java.text.Collator; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.TreeSet; public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment implements InputManager.InputDeviceListener, - KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable, - InputMethodPreference.OnSavePreferenceListener { + KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable { + private static final String KEY_SPELL_CHECKERS = "spellcheckers_settings"; private static final String KEY_PHONE_LANGUAGE = "phone_language"; - private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method"; private static final String KEY_USER_DICTIONARY_SETTINGS = "key_user_dictionary_settings"; - private static final String KEY_PREVIOUSLY_ENABLED_SUBTYPES = "previously_enabled_subtypes"; - private PreferenceCategory mKeyboardSettingsCategory; - private PreferenceCategory mHardKeyboardCategory; private PreferenceCategory mGameControllerCategory; private Preference mLanguagePref; - private final ArrayList mInputMethodPreferenceList = new ArrayList<>(); - private final ArrayList mHardKeyboardPreferenceList = new ArrayList<>(); private InputManager mIm; - private InputMethodManager mImm; - private boolean mShowsOnlyFullImeAndKeyboardList; - private Handler mHandler; - private SettingsObserver mSettingsObserver; private Intent mIntentWaitingForResult; private InputMethodSettingValuesWrapper mInputMethodSettingValues; - private DevicePolicyManager mDpm; @Override public int getMetricsCategory() { @@ -111,7 +86,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment addPreferencesFromResource(R.xml.language_settings); final Activity activity = getActivity(); - mImm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(activity); if (activity.getAssets().getLocales().length == 1) { @@ -123,28 +97,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment new VoiceInputOutputSettings(this).onCreate(); - // Get references to dynamically constructed categories. - mHardKeyboardCategory = (PreferenceCategory)findPreference("hard_keyboard"); - mKeyboardSettingsCategory = (PreferenceCategory)findPreference( - "keyboard_settings_category"); mGameControllerCategory = (PreferenceCategory)findPreference( "game_controller_settings_category"); - final Intent startingIntent = activity.getIntent(); - // Filter out irrelevant features if invoked from IME settings button. - mShowsOnlyFullImeAndKeyboardList = Settings.ACTION_INPUT_METHOD_SETTINGS.equals( - startingIntent.getAction()); - if (mShowsOnlyFullImeAndKeyboardList) { - getPreferenceScreen().removeAll(); - if (mHardKeyboardCategory != null) { - getPreferenceScreen().addPreference(mHardKeyboardCategory); - } - if (mKeyboardSettingsCategory != null) { - mKeyboardSettingsCategory.removeAll(); - getPreferenceScreen().addPreference(mKeyboardSettingsCategory); - } - } - // Build hard keyboard and game controller preference categories. mIm = (InputManager)activity.getSystemService(Context.INPUT_SERVICE); updateInputDevices(); @@ -162,19 +117,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment R.string.spellcheckers_settings_title); spellChecker.setIntent(intent); } - - mHandler = new Handler(); - mSettingsObserver = new SettingsObserver(mHandler, activity); - mDpm = (DevicePolicyManager) (getActivity(). - getSystemService(Context.DEVICE_POLICY_SERVICE)); - - // If we've launched from the keyboard layout notification, go ahead and just show the - // keyboard layout dialog. - final InputDeviceIdentifier identifier = - startingIntent.getParcelableExtra(Settings.EXTRA_INPUT_DEVICE_IDENTIFIER); - if (mShowsOnlyFullImeAndKeyboardList && identifier != null) { - showKeyboardLayoutDialog(identifier); - } } private void updateUserDictionaryPreference(Preference userDictionaryPreference) { @@ -221,7 +163,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment public void onResume() { super.onResume(); - mSettingsObserver.resume(); mIm.registerInputDeviceListener(this, null); final Preference spellChecker = findPreference(KEY_SPELL_CHECKERS); @@ -240,22 +181,19 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment } } - if (!mShowsOnlyFullImeAndKeyboardList) { - if (mLanguagePref != null) { - final String localeNames = FeatureFactory.getFactory(getContext()) - .getLocaleFeatureProvider().getLocaleNames(); - mLanguagePref.setSummary(localeNames); - } - - updateUserDictionaryPreference(findPreference(KEY_USER_DICTIONARY_SETTINGS)); + if (mLanguagePref != null) { + final String localeNames = FeatureFactory.getFactory(getContext()) + .getLocaleFeatureProvider().getLocaleNames(); + mLanguagePref.setSummary(localeNames); } + updateUserDictionaryPreference(findPreference(KEY_USER_DICTIONARY_SETTINGS)); + updateInputDevices(); // Refresh internal states in mInputMethodSettingValues to keep the latest // "InputMethodInfo"s and "InputMethodSubtype"s mInputMethodSettingValues.refreshAllInputMethodAndSubtypes(); - updateInputMethodPreferenceViews(); } @Override @@ -263,12 +201,11 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment super.onPause(); mIm.unregisterInputDeviceListener(this); - mSettingsObserver.pause(); // TODO: Consolidate the logic to InputMethodSettingsWrapper InputMethodAndSubtypeUtil.saveInputMethodSubtypeList( this, getContentResolver(), mInputMethodSettingValues.getInputMethodList(), - !mHardKeyboardPreferenceList.isEmpty()); + false /* hasHardKeyboard */); } @Override @@ -292,15 +229,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (Utils.isMonkeyRunning()) { return false; } - if (preference instanceof PreferenceScreen) { - if (preference.getFragment() != null) { - // Fragment will be handled correctly by the super class. - } else if (KEY_CURRENT_INPUT_METHOD.equals(preference.getKey())) { - final InputMethodManager imm = (InputMethodManager) - getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showInputMethodPicker(false /* showAuxiliarySubtypes */); - } - } else if (preference instanceof SwitchPreference) { + if (preference instanceof SwitchPreference) { final SwitchPreference pref = (SwitchPreference) preference; if (pref == mGameControllerCategory.findPreference("vibrate_input_devices")) { System.putInt(getContentResolver(), Settings.System.VIBRATE_INPUT_DEVICES, @@ -311,202 +240,10 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment return super.onPreferenceTreeClick(preference); } - private void updateInputMethodPreferenceViews() { - if (mKeyboardSettingsCategory == null) { - return; - } - - synchronized (mInputMethodPreferenceList) { - // Clear existing "InputMethodPreference"s - for (final InputMethodPreference pref : mInputMethodPreferenceList) { - mKeyboardSettingsCategory.removePreference(pref); - } - mInputMethodPreferenceList.clear(); - List permittedList = mDpm.getPermittedInputMethodsForCurrentUser(); - final Context context = getPrefContext(); - final List imis = mShowsOnlyFullImeAndKeyboardList - ? mInputMethodSettingValues.getInputMethodList() - : mImm.getEnabledInputMethodList(); - final int N = (imis == null ? 0 : imis.size()); - for (int i = 0; i < N; ++i) { - final InputMethodInfo imi = imis.get(i); - final boolean isAllowedByOrganization = permittedList == null - || permittedList.contains(imi.getPackageName()); - final InputMethodPreference pref = new InputMethodPreference( - context, imi, mShowsOnlyFullImeAndKeyboardList /* hasSwitch */, - isAllowedByOrganization, this); - mInputMethodPreferenceList.add(pref); - } - final Collator collator = Collator.getInstance(); - Collections.sort(mInputMethodPreferenceList, new Comparator() { - @Override - public int compare(InputMethodPreference lhs, InputMethodPreference rhs) { - return lhs.compareTo(rhs, collator); - } - }); - for (int i = 0; i < N; ++i) { - final InputMethodPreference pref = mInputMethodPreferenceList.get(i); - mKeyboardSettingsCategory.addPreference(pref); - InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference(pref); - pref.updatePreferenceViews(); - } - } - updateCurrentImeName(); - // TODO: Consolidate the logic with InputMethodSettingsWrapper - // CAVEAT: The preference class here does not know about the default value - that is - // managed by the Input Method Manager Service, so in this case it could save the wrong - // value. Hence we must update the checkboxes here. - InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( - this, getContentResolver(), - mInputMethodSettingValues.getInputMethodList(), null); - } - - @Override - public void onSaveInputMethodPreference(final InputMethodPreference pref) { - final InputMethodInfo imi = pref.getInputMethodInfo(); - if (!pref.isChecked()) { - // An IME is being disabled. Save enabled subtypes of the IME to shared preference to be - // able to re-enable these subtypes when the IME gets re-enabled. - saveEnabledSubtypesOf(imi); - } - final boolean hasHardwareKeyboard = getResources().getConfiguration().keyboard - == Configuration.KEYBOARD_QWERTY; - InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(this, getContentResolver(), - mImm.getInputMethodList(), hasHardwareKeyboard); - // Update input method settings and preference list. - mInputMethodSettingValues.refreshAllInputMethodAndSubtypes(); - if (pref.isChecked()) { - // An IME is being enabled. Load the previously enabled subtypes from shared preference - // and enable these subtypes. - restorePreviouslyEnabledSubtypesOf(imi); - } - for (final InputMethodPreference p : mInputMethodPreferenceList) { - p.updatePreferenceViews(); - } - } - - private void saveEnabledSubtypesOf(final InputMethodInfo imi) { - final HashSet enabledSubtypeIdSet = new HashSet<>(); - final List enabledSubtypes = mImm.getEnabledInputMethodSubtypeList( - imi, true /* allowsImplicitlySelectedSubtypes */); - for (final InputMethodSubtype subtype : enabledSubtypes) { - final String subtypeId = Integer.toString(subtype.hashCode()); - enabledSubtypeIdSet.add(subtypeId); - } - final HashMap> imeToEnabledSubtypeIdsMap = - loadPreviouslyEnabledSubtypeIdsMap(); - final String imiId = imi.getId(); - imeToEnabledSubtypeIdsMap.put(imiId, enabledSubtypeIdSet); - savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap); - } - - private void restorePreviouslyEnabledSubtypesOf(final InputMethodInfo imi) { - final HashMap> imeToEnabledSubtypeIdsMap = - loadPreviouslyEnabledSubtypeIdsMap(); - final String imiId = imi.getId(); - final HashSet enabledSubtypeIdSet = imeToEnabledSubtypeIdsMap.remove(imiId); - if (enabledSubtypeIdSet == null) { - return; - } - savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap); - InputMethodAndSubtypeUtil.enableInputMethodSubtypesOf( - getContentResolver(), imiId, enabledSubtypeIdSet); - } - - private HashMap> loadPreviouslyEnabledSubtypeIdsMap() { - final Context context = getActivity(); - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - final String imesAndSubtypesString = prefs.getString(KEY_PREVIOUSLY_ENABLED_SUBTYPES, null); - return InputMethodAndSubtypeUtil.parseInputMethodsAndSubtypesString(imesAndSubtypesString); - } - - private void savePreviouslyEnabledSubtypeIdsMap( - final HashMap> subtypesMap) { - final Context context = getActivity(); - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - final String imesAndSubtypesString = InputMethodAndSubtypeUtil - .buildInputMethodsAndSubtypesString(subtypesMap); - prefs.edit().putString(KEY_PREVIOUSLY_ENABLED_SUBTYPES, imesAndSubtypesString).apply(); - } - - private void updateCurrentImeName() { - final Context context = getActivity(); - if (context == null || mImm == null) return; - final Preference curPref = getPreferenceScreen().findPreference(KEY_CURRENT_INPUT_METHOD); - if (curPref != null) { - final CharSequence curIme = - mInputMethodSettingValues.getCurrentInputMethodName(context); - if (!TextUtils.isEmpty(curIme)) { - synchronized (this) { - curPref.setSummary(curIme); - } - } - } - } - private void updateInputDevices() { - updateHardKeyboards(); updateGameControllers(); } - private void updateHardKeyboards() { - if (mHardKeyboardCategory == null) { - return; - } - - mHardKeyboardPreferenceList.clear(); - final int[] devices = InputDevice.getDeviceIds(); - for (int i = 0; i < devices.length; i++) { - InputDevice device = InputDevice.getDevice(devices[i]); - if (device != null - && !device.isVirtual() - && device.isFullKeyboard()) { - final InputDeviceIdentifier identifier = device.getIdentifier(); - final String keyboardLayoutDescriptor = - mIm.getCurrentKeyboardLayoutForInputDevice(identifier); - final KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ? - mIm.getKeyboardLayout(keyboardLayoutDescriptor) : null; - - final PreferenceScreen pref = new PreferenceScreen(getPrefContext(), null); - pref.setTitle(device.getName()); - if (keyboardLayout != null) { - pref.setSummary(keyboardLayout.toString()); - } else { - pref.setSummary(R.string.keyboard_layout_default_label); - } - pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - showKeyboardLayoutDialog(identifier); - return true; - } - }); - mHardKeyboardPreferenceList.add(pref); - } - } - - if (!mHardKeyboardPreferenceList.isEmpty()) { - for (int i = mHardKeyboardCategory.getPreferenceCount(); i-- > 0; ) { - final Preference pref = mHardKeyboardCategory.getPreference(i); - if (pref.getOrder() < 1000) { - mHardKeyboardCategory.removePreference(pref); - } - } - - Collections.sort(mHardKeyboardPreferenceList); - final int count = mHardKeyboardPreferenceList.size(); - for (int i = 0; i < count; i++) { - final Preference pref = mHardKeyboardPreferenceList.get(i); - pref.setOrder(i); - mHardKeyboardCategory.addPreference(pref); - } - - getPreferenceScreen().addPreference(mHardKeyboardCategory); - } else { - getPreferenceScreen().removePreference(mHardKeyboardCategory); - } - } - private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) { KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment) getFragmentManager().findFragmentByTag("keyboardLayout"); @@ -563,31 +300,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment return false; } - private class SettingsObserver extends ContentObserver { - private Context mContext; - - public SettingsObserver(Handler handler, Context context) { - super(handler); - mContext = context; - } - - @Override public void onChange(boolean selfChange) { - updateCurrentImeName(); - } - - public void resume() { - final ContentResolver cr = mContext.getContentResolver(); - cr.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.DEFAULT_INPUT_METHOD), false, this); - cr.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE), false, this); - } - - public void pause() { - mContext.getContentResolver().unregisterContentObserver(this); - } - } - private static class SummaryProvider implements SummaryLoader.SummaryProvider { private final Context mContext; @@ -613,7 +325,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment = new SummaryLoader.SummaryProviderFactory() { @Override public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, - SummaryLoader summaryLoader) { + SummaryLoader summaryLoader) { return new SummaryProvider(activity, summaryLoader); } }; @@ -668,16 +380,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment .getInstance(context); immValues.refreshAllInputMethodAndSubtypes(); - // Current IME. - String currImeName = immValues.getCurrentInputMethodName(context).toString(); - indexable = new SearchIndexableRaw(context); - indexable.key = KEY_CURRENT_INPUT_METHOD; - indexable.title = context.getString(R.string.current_input_method); - indexable.summaryOn = currImeName; - indexable.summaryOff = currImeName; - indexable.screenTitle = screenTitle; - indexables.add(indexable); - InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService( Context.INPUT_METHOD_SERVICE); @@ -744,8 +446,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment // Hard keyboard category. indexable = new SearchIndexableRaw(context); indexable.key = "builtin_keyboard_settings"; - indexable.title = context.getString( - R.string.builtin_keyboard_settings_title); + indexable.title = context.getString(R.string.builtin_keyboard_settings_title); indexable.screenTitle = screenTitle; indexables.add(indexable); }