Use SwitchPreference for input method subtype enabler

Bug: 15781377
Change-Id: I80fe987e499722af7768147a184934650bbf8385
This commit is contained in:
Tadashi G. Takaoka
2014-07-19 18:16:43 -07:00
parent 686c250323
commit 1f53937469
4 changed files with 50 additions and 22 deletions

View File

@@ -21,11 +21,11 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceCategory; import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.TwoStatePreference;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
@@ -46,7 +46,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
private boolean mHaveHardKeyboard; private boolean mHaveHardKeyboard;
private final HashMap<String, List<Preference>> mInputMethodAndSubtypePrefsMap = private final HashMap<String, List<Preference>> mInputMethodAndSubtypePrefsMap =
new HashMap<>(); new HashMap<>();
private final HashMap<String, CheckBoxPreference> mAutoSelectionPrefsMap = new HashMap<>(); private final HashMap<String, TwoStatePreference> mAutoSelectionPrefsMap = new HashMap<>();
private InputMethodManager mImm; private InputMethodManager mImm;
// TODO: Change mInputMethodInfoList to Map // TODO: Change mInputMethodInfoList to Map
private List<InputMethodInfo> mInputMethodInfoList; private List<InputMethodInfo> mInputMethodInfoList;
@@ -130,7 +130,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
for (final String imiId : mAutoSelectionPrefsMap.keySet()) { for (final String imiId : mAutoSelectionPrefsMap.keySet()) {
// An auto select subtype preference is changing. // An auto select subtype preference is changing.
if (mAutoSelectionPrefsMap.get(imiId) == pref) { if (mAutoSelectionPrefsMap.get(imiId) == pref) {
final CheckBoxPreference autoSelectionPref = (CheckBoxPreference) pref; final TwoStatePreference autoSelectionPref = (TwoStatePreference) pref;
autoSelectionPref.setChecked(isChecking); autoSelectionPref.setChecked(isChecking);
// Enable or disable subtypes depending on the auto selection preference. // Enable or disable subtypes depending on the auto selection preference.
setAutoSelectionSubtypesEnabled(imiId, autoSelectionPref.isChecked()); setAutoSelectionSubtypesEnabled(imiId, autoSelectionPref.isChecked());
@@ -167,7 +167,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
keyboardSettingsCategory.setTitle(label); keyboardSettingsCategory.setTitle(label);
keyboardSettingsCategory.setKey(imiId); keyboardSettingsCategory.setKey(imiId);
// TODO: Use toggle Preference if images are ready. // TODO: Use toggle Preference if images are ready.
final CheckBoxPreference autoSelectionPref = new CheckBoxPreference(context); final TwoStatePreference autoSelectionPref = new SwitchWithNoTextPreference(context);
mAutoSelectionPrefsMap.put(imiId, autoSelectionPref); mAutoSelectionPrefsMap.put(imiId, autoSelectionPref);
keyboardSettingsCategory.addPreference(autoSelectionPref); keyboardSettingsCategory.addPreference(autoSelectionPref);
autoSelectionPref.setOnPreferenceChangeListener(this); autoSelectionPref.setOnPreferenceChangeListener(this);
@@ -219,7 +219,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
private boolean isNoSubtypesExplicitlySelected(final String imiId) { private boolean isNoSubtypesExplicitlySelected(final String imiId) {
final List<Preference> subtypePrefs = mInputMethodAndSubtypePrefsMap.get(imiId); final List<Preference> subtypePrefs = mInputMethodAndSubtypePrefsMap.get(imiId);
for (final Preference pref : subtypePrefs) { for (final Preference pref : subtypePrefs) {
if (pref instanceof CheckBoxPreference && ((CheckBoxPreference)pref).isChecked()) { if (pref instanceof TwoStatePreference && ((TwoStatePreference)pref).isChecked()) {
return false; return false;
} }
} }
@@ -228,20 +228,20 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
private void setAutoSelectionSubtypesEnabled(final String imiId, private void setAutoSelectionSubtypesEnabled(final String imiId,
final boolean autoSelectionEnabled) { final boolean autoSelectionEnabled) {
final CheckBoxPreference autoSelectionPref = mAutoSelectionPrefsMap.get(imiId); final TwoStatePreference autoSelectionPref = mAutoSelectionPrefsMap.get(imiId);
if (autoSelectionPref == null) { if (autoSelectionPref == null) {
return; return;
} }
autoSelectionPref.setChecked(autoSelectionEnabled); autoSelectionPref.setChecked(autoSelectionEnabled);
final List<Preference> subtypePrefs = mInputMethodAndSubtypePrefsMap.get(imiId); final List<Preference> subtypePrefs = mInputMethodAndSubtypePrefsMap.get(imiId);
for (final Preference pref : subtypePrefs) { for (final Preference pref : subtypePrefs) {
if (pref instanceof CheckBoxPreference) { if (pref instanceof TwoStatePreference) {
// When autoSelectionEnabled is true, all subtype prefs need to be disabled with // When autoSelectionEnabled is true, all subtype prefs need to be disabled with
// implicitly checked subtypes. In case of false, all subtype prefs need to be // implicitly checked subtypes. In case of false, all subtype prefs need to be
// enabled. // enabled.
pref.setEnabled(!autoSelectionEnabled); pref.setEnabled(!autoSelectionEnabled);
if (autoSelectionEnabled) { if (autoSelectionEnabled) {
((CheckBoxPreference)pref).setChecked(false); ((TwoStatePreference)pref).setChecked(false);
} }
} }
} }
@@ -256,7 +256,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
// When targetImiId is null, apply to all subtypes of all IMEs // When targetImiId is null, apply to all subtypes of all IMEs
for (final InputMethodInfo imi : mInputMethodInfoList) { for (final InputMethodInfo imi : mInputMethodInfoList) {
final String imiId = imi.getId(); final String imiId = imi.getId();
final CheckBoxPreference autoSelectionPref = mAutoSelectionPrefsMap.get(imiId); final TwoStatePreference autoSelectionPref = mAutoSelectionPrefsMap.get(imiId);
// No need to update implicitly enabled subtypes when the user has unchecked the // No need to update implicitly enabled subtypes when the user has unchecked the
// "subtype auto selection". // "subtype auto selection".
if (autoSelectionPref == null || !autoSelectionPref.isChecked()) { if (autoSelectionPref == null || !autoSelectionPref.isChecked()) {
@@ -277,10 +277,10 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
return; return;
} }
for (final Preference pref : subtypePrefs) { for (final Preference pref : subtypePrefs) {
if (!(pref instanceof CheckBoxPreference)) { if (!(pref instanceof TwoStatePreference)) {
continue; continue;
} }
final CheckBoxPreference subtypePref = (CheckBoxPreference)pref; final TwoStatePreference subtypePref = (TwoStatePreference)pref;
subtypePref.setChecked(false); subtypePref.setChecked(false);
if (check) { if (check) {
for (final InputMethodSubtype subtype : implicitlyEnabledSubtypes) { for (final InputMethodSubtype subtype : implicitlyEnabledSubtypes) {

View File

@@ -18,7 +18,6 @@ package com.android.settings.inputmethod;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.TwoStatePreference; import android.preference.TwoStatePreference;
@@ -186,12 +185,12 @@ class InputMethodAndSubtypeUtil {
for (int i = 0; i < subtypeCount; ++i) { for (int i = 0; i < subtypeCount; ++i) {
InputMethodSubtype subtype = imi.getSubtypeAt(i); InputMethodSubtype subtype = imi.getSubtypeAt(i);
final String subtypeHashCodeStr = String.valueOf(subtype.hashCode()); final String subtypeHashCodeStr = String.valueOf(subtype.hashCode());
CheckBoxPreference subtypePref = (CheckBoxPreference) context.findPreference( final TwoStatePreference subtypePref = (TwoStatePreference) context
imiId + subtypeHashCodeStr); .findPreference(imiId + subtypeHashCodeStr);
// In the Configure input method screen which does not have subtype preferences. // In the Configure input method screen which does not have subtype preferences.
if (subtypePref == null) continue; if (subtypePref == null) continue;
if (!subtypePrefFound) { if (!subtypePrefFound) {
// Once subtype checkbox is found, subtypeSet needs to be cleared. // Once subtype preference is found, subtypeSet needs to be cleared.
// Because of system change, hashCode value could have been changed. // Because of system change, hashCode value could have been changed.
subtypesSet.clear(); subtypesSet.clear();
// If selected subtype preference is disabled, needs to reset. // If selected subtype preference is disabled, needs to reset.
@@ -283,10 +282,10 @@ class InputMethodAndSubtypeUtil {
for (final InputMethodInfo imi : inputMethodInfos) { for (final InputMethodInfo imi : inputMethodInfos) {
final String imiId = imi.getId(); final String imiId = imi.getId();
final Preference pref = context.findPreference(imiId); final Preference pref = context.findPreference(imiId);
if (pref instanceof CheckBoxPreference) { if (pref instanceof TwoStatePreference) {
final CheckBoxPreference checkBoxPreference = (CheckBoxPreference) pref; final TwoStatePreference subtypePref = (TwoStatePreference) pref;
final boolean isEnabled = enabledSubtypes.containsKey(imiId); final boolean isEnabled = enabledSubtypes.containsKey(imiId);
checkBoxPreference.setChecked(isEnabled); subtypePref.setChecked(isEnabled);
if (inputMethodPrefsMap != null) { if (inputMethodPrefsMap != null) {
for (final Preference childPref: inputMethodPrefsMap.get(imiId)) { for (final Preference childPref: inputMethodPrefsMap.get(imiId)) {
childPref.setEnabled(isEnabled); childPref.setEnabled(isEnabled);
@@ -307,7 +306,7 @@ class InputMethodAndSubtypeUtil {
final int subtypeCount = imi.getSubtypeCount(); final int subtypeCount = imi.getSubtypeCount();
for (int i = 0; i < subtypeCount; ++i) { for (int i = 0; i < subtypeCount; ++i) {
final InputMethodSubtype subtype = imi.getSubtypeAt(i); final InputMethodSubtype subtype = imi.getSubtypeAt(i);
final CheckBoxPreference pref = (CheckBoxPreference) preferenceScreen final TwoStatePreference pref = (TwoStatePreference) preferenceScreen
.findPreference(id + subtype.hashCode()); .findPreference(id + subtype.hashCode());
if (pref != null) { if (pref != null) {
pref.setEnabled(enabled); pref.setEnabled(enabled);
@@ -336,7 +335,7 @@ class InputMethodAndSubtypeUtil {
Log.d(TAG, "--- Set checked state: " + "id" + ", " + hashCode + ", " Log.d(TAG, "--- Set checked state: " + "id" + ", " + hashCode + ", "
+ enabledSubtypesSet.contains(hashCode)); + enabledSubtypesSet.contains(hashCode));
} }
final CheckBoxPreference pref = (CheckBoxPreference) preferenceScreen final TwoStatePreference pref = (TwoStatePreference) preferenceScreen
.findPreference(id + hashCode); .findPreference(id + hashCode);
if (pref != null) { if (pref != null) {
pref.setChecked(enabledSubtypesSet.contains(hashCode)); pref.setChecked(enabledSubtypesSet.contains(hashCode));

View File

@@ -17,7 +17,6 @@
package com.android.settings.inputmethod; package com.android.settings.inputmethod;
import android.content.Context; import android.content.Context;
import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
@@ -33,7 +32,7 @@ import java.util.Locale;
* *
* This preference represents a subtype of an IME. It is used to enable or disable the subtype. * This preference represents a subtype of an IME. It is used to enable or disable the subtype.
*/ */
class InputMethodSubtypePreference extends CheckBoxPreference { class InputMethodSubtypePreference extends SwitchWithNoTextPreference {
private final boolean mIsSystemLocale; private final boolean mIsSystemLocale;
private final boolean mIsSystemLanguage; private final boolean mIsSystemLanguage;

View File

@@ -0,0 +1,30 @@
/*
* 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.settings.inputmethod;
import android.content.Context;
import android.preference.SwitchPreference;
class SwitchWithNoTextPreference extends SwitchPreference {
private static final String EMPTY_TEXT = "";
SwitchWithNoTextPreference(final Context context) {
super(context);
setSwitchTextOn(EMPTY_TEXT);
setSwitchTextOff(EMPTY_TEXT);
}
}