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"-->
-                <!--/>-->
-        <!--&lt;!&ndash; Enabled input method list will be populated programmatically here. &ndash;&gt;-->
-    <!--</PreferenceCategory>-->
-
-    <!--<PreferenceCategory-->
-            <!--android:key="hard_keyboard"-->
-            <!--android:title="@string/builtin_keyboard_settings_title"-->
-            <!--android:persistent="false">-->
-        <!--&lt;!&ndash; Additional preference screens are inserted here programmatically-->
-             <!--with low order values to set the key map of each attached keyboard. &ndash;&gt;-->
-    <!--</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);
             }