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