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
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
index 9074d0a..d829dc4 100644
--- a/res/xml/language_settings.xml
+++ b/res/xml/language_settings.xml
@@ -15,9 +15,8 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
- android:key="language_keyboard_settings"
- android:title="@string/language_keyboard_settings_title">
+ android:key="language_keyboard_settings"
+ android:title="@string/language_keyboard_settings_title">
<PreferenceScreen
android:key="phone_language"
@@ -50,26 +49,6 @@
android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" />
</PreferenceCategory>
- <!-- Temporarily disabled: -->
- <!--<PreferenceCategory-->
- <!--android:key="keyboard_settings_category"-->
- <!--android:title="@string/keyboard_settings_category">-->
-
- <!--<PreferenceScreen-->
- <!--android:key="current_input_method"-->
- <!--android:title="@string/current_input_method"-->
- <!--/>-->
- <!--<!– Enabled input method list will be populated programmatically here. –>-->
- <!--</PreferenceCategory>-->
-
- <!--<PreferenceCategory-->
- <!--android:key="hard_keyboard"-->
- <!--android:title="@string/builtin_keyboard_settings_title"-->
- <!--android:persistent="false">-->
- <!--<!– Additional preference screens are inserted here programmatically-->
- <!--with low order values to set the key map of each attached keyboard. –>-->
- <!--</PreferenceCategory>-->
-
<PreferenceCategory
android:key="voice_category"
android:title="@string/voice_category" >
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index f1fa70d..ea6c529 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -18,20 +18,14 @@
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.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.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<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
- private final ArrayList<PreferenceScreen> 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 @@
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 @@
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 @@
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 void onResume() {
super.onResume();
- mSettingsObserver.resume();
mIm.registerInputDeviceListener(this, null);
final Preference spellChecker = findPreference(KEY_SPELL_CHECKERS);
@@ -240,22 +181,19 @@
}
}
- 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 @@
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 @@
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 @@
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<String> permittedList = mDpm.getPermittedInputMethodsForCurrentUser();
- final Context context = getPrefContext();
- final List<InputMethodInfo> 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<InputMethodPreference>() {
- @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<String> enabledSubtypeIdSet = new HashSet<>();
- final List<InputMethodSubtype> enabledSubtypes = mImm.getEnabledInputMethodSubtypeList(
- imi, true /* allowsImplicitlySelectedSubtypes */);
- for (final InputMethodSubtype subtype : enabledSubtypes) {
- final String subtypeId = Integer.toString(subtype.hashCode());
- enabledSubtypeIdSet.add(subtypeId);
- }
- final HashMap<String, HashSet<String>> imeToEnabledSubtypeIdsMap =
- loadPreviouslyEnabledSubtypeIdsMap();
- final String imiId = imi.getId();
- imeToEnabledSubtypeIdsMap.put(imiId, enabledSubtypeIdSet);
- savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap);
- }
-
- private void restorePreviouslyEnabledSubtypesOf(final InputMethodInfo imi) {
- final HashMap<String, HashSet<String>> imeToEnabledSubtypeIdsMap =
- loadPreviouslyEnabledSubtypeIdsMap();
- final String imiId = imi.getId();
- final HashSet<String> enabledSubtypeIdSet = imeToEnabledSubtypeIdsMap.remove(imiId);
- if (enabledSubtypeIdSet == null) {
- return;
- }
- savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap);
- InputMethodAndSubtypeUtil.enableInputMethodSubtypesOf(
- getContentResolver(), imiId, enabledSubtypeIdSet);
- }
-
- private HashMap<String, HashSet<String>> 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<String, HashSet<String>> 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 @@
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 @@
= new SummaryLoader.SummaryProviderFactory() {
@Override
public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
- SummaryLoader summaryLoader) {
+ SummaryLoader summaryLoader) {
return new SummaryProvider(activity, summaryLoader);
}
};
@@ -668,16 +380,6 @@
.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 @@
// 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);
}