Use new input device listener API to refresh keyboards.
Bug: 6110399
Change-Id: Ibb0bbeb40af2ee7204e4682bc7493262407fd83f
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index ac9a27b..7d02a1f 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -52,7 +52,7 @@
import java.util.Set;
public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
- implements Preference.OnPreferenceChangeListener{
+ implements Preference.OnPreferenceChangeListener, InputManager.InputDeviceListener {
private static final String KEY_PHONE_LANGUAGE = "phone_language";
private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method";
@@ -78,6 +78,7 @@
new ArrayList<InputMethodPreference>();
private final ArrayList<PreferenceScreen> mHardKeyboardPreferenceList =
new ArrayList<PreferenceScreen>();
+ private InputManager mIm;
private InputMethodManager mImm;
private List<InputMethodInfo> mImis;
private boolean mIsOnlyImeSettings;
@@ -159,6 +160,7 @@
}
// Build hard keyboard preference category.
+ mIm = (InputManager)getActivity().getSystemService(Context.INPUT_SERVICE);
updateHardKeyboards();
// Spell Checker
@@ -214,6 +216,9 @@
@Override
public void onResume() {
super.onResume();
+
+ mIm.registerInputDeviceListener(this, null);
+
if (!mIsOnlyImeSettings) {
if (mLanguagePref != null) {
Configuration conf = getResources().getConfiguration();
@@ -251,6 +256,9 @@
@Override
public void onPause() {
super.onPause();
+
+ mIm.unregisterInputDeviceListener(this);
+
if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) {
mShowInputMethodSelectorPref.setOnPreferenceChangeListener(null);
}
@@ -259,6 +267,21 @@
}
@Override
+ public void onInputDeviceAdded(int deviceId) {
+ updateHardKeyboards();
+ }
+
+ @Override
+ public void onInputDeviceChanged(int deviceId) {
+ updateHardKeyboards();
+ }
+
+ @Override
+ public void onInputDeviceRemoved(int deviceId) {
+ updateHardKeyboards();
+ }
+
+ @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
// Input Method stuff
if (Utils.isMonkeyRunning()) {
@@ -362,9 +385,6 @@
private void updateHardKeyboards() {
mHardKeyboardPreferenceList.clear();
if (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY) {
- final InputManager im =
- (InputManager)getActivity().getSystemService(Context.INPUT_SERVICE);
-
final int[] devices = InputDevice.getDeviceIds();
for (int i = 0; i < devices.length; i++) {
InputDevice device = InputDevice.getDevice(devices[i]);
@@ -374,9 +394,9 @@
&& device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC) {
final String inputDeviceDescriptor = device.getDescriptor();
final String keyboardLayoutDescriptor =
- im.getKeyboardLayoutForInputDevice(inputDeviceDescriptor);
+ mIm.getKeyboardLayoutForInputDevice(inputDeviceDescriptor);
final KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ?
- im.getKeyboardLayout(keyboardLayoutDescriptor) : null;
+ mIm.getKeyboardLayout(keyboardLayoutDescriptor) : null;
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClass(getActivity(), KeyboardLayoutPickerActivity.class);
@@ -409,6 +429,8 @@
pref.setOrder(i);
mHardKeyboardCategory.addPreference(pref);
}
+
+ getPreferenceScreen().addPreference(mHardKeyboardCategory);
} else {
getPreferenceScreen().removePreference(mHardKeyboardCategory);
}