有做任务赚赏金的网站吗,怎么做仿制网站,网站搭建需要的公司,wordpress调用网站标题外界实体物理键盘#xff0c;需要选择键盘布局#xff0c;不然会对应输入不正确#xff0c;某些平台是这样的。
实体键盘在插入设备中后会自动设置一个布局#xff0c;但是可能不是我们想要的。 修改两个功能#xff1a; 根据系统语言设置默认的键盘。
默认添加两个键盘…外界实体物理键盘需要选择键盘布局不然会对应输入不正确某些平台是这样的。
实体键盘在插入设备中后会自动设置一个布局但是可能不是我们想要的。 修改两个功能 根据系统语言设置默认的键盘。
默认添加两个键盘布局到选择键盘布局 的dialog界面 键盘的布局文件apk位置:
frameworks/base/packages/InputDevices/res/raw/
frameworks/base/packages/InputDevices/res/xml/keyboard_layouts.xml 追查设置中的布局找到这里选择键盘布局的Dialogpackages/apps/Settings/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java 点击设置键盘布局会走到 packages/apps/Settings/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java
查看到 addKeyboardLayoutForInputDevice 设置键盘布局所以利用这里我们添加。
Overridepublic boolean handlePreferenceTreeClick(Preference preference) {if(DEBUG)Log.d(testkeyboard,----handlePreferenceTreeClick---);if (!(preference instanceof SwitchPreference)) {return false;}final SwitchPreference switchPref (SwitchPreference) preference;final KeyboardLayout layout mPreferenceMap.get(switchPref);if (layout ! null) {final boolean checked switchPref.isChecked();if (checked) {mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier,layout.getDescriptor());if(DEBUG)Log.d(testkeyboard,layout.getDescriptor() layout.getDescriptor());} else {mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier,layout.getDescriptor());}}return true;} 主要修改 frameworks/base/services/core/java/com/android/server/input/InputManagerService.java
addKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,String keyboardLayoutDescriptor) 如下修改
diff --git a/frameworks/base/services/core/java/com/android/server/input/InputManagerService.java b/frameworks/base/services/core/java/com/android/server/input/InputManagerService.java
index 5fc3712d221..1bc1ee6cef7 100755
--- a/frameworks/base/services/core/java/com/android/server/input/InputManagerService.javab/frameworks/base/services/core/java/com/android/server/input/InputManagerService.java-1101,6 1101,7 public class InputManagerService extends IInputManager.StubString layout getCurrentKeyboardLayoutForInputDevice(inputDevice.getIdentifier());if (layout null) {if(DEBUG) Slog.d(testkeyboard, ---goto--getDefaultKeyboardLayout);layout getDefaultKeyboardLayout(inputDevice);if (layout ! null) {setCurrentKeyboardLayoutForInputDevice(-1134,6 1135,20 public class InputManagerService extends IInputManager.Stubfinal Locale systemLocale mContext.getResources().getConfiguration().locale;// If our locale doesnt have a language for some reason, then we dont really have a// reasonable default.if(DEBUG) Slog.d(testkeyboard, ---getDefaultKeyboardLayout---getLanguagesystemLocale.getLanguage());String russuan com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_russian;String english_us com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_english_us;//根据语言设置当前键盘if(systemLocale.getLanguage().equals(en)){return english_us;}if(systemLocale.getLanguage().equals(ru)){return russuan;}//这里就是添加的两个键盘addKeyboardLayoutForInputDevice(d.getIdentifier(),russuan);addKeyboardLayoutForInputDevice(d.getIdentifier(),english_us);
if (TextUtils.isEmpty(systemLocale.getLanguage())) {return null;}-1150,6 1165,7 public class InputManagerService extends IInputManager.Stubfor (int localeIndex 0; localeIndex numLocales; localeIndex) {if (isCompatibleLocale(systemLocale, locales.get(localeIndex))) {layouts.add(layout);if(DEBUG) Slog.d(testkeyboard, ---getDefaultKeyboardLayout---for--getLanguagesystemLocale.getLanguage());break;}}-1386,10 1402,12 public class InputManagerService extends IInputManager.StubOverride // Binder callpublic KeyboardLayout[] getKeyboardLayoutsForInputDevice(final InputDeviceIdentifier identifier) {if(DEBUG) Slog.d(testkeyboard, ---getKeyboardLayoutsForInputDevice---);final String[] enabledLayoutDescriptors getEnabledKeyboardLayoutsForInputDevice(identifier);final ArrayListKeyboardLayout enabledLayouts new ArrayList(enabledLayoutDescriptors.length);if(DEBUG) Slog.d(testkeyboard, ---ArrayList enabledLayouts---);final ArrayListKeyboardLayout potentialLayouts new ArrayList();visitAllKeyboardLayouts(new KeyboardLayoutVisitor() {boolean mHasSeenDeviceSpecificLayout;-1402,6 1420,7 public class InputManagerService extends IInputManager.Stubfor (String s : enabledLayoutDescriptors) {if (s ! null s.equals(layout.getDescriptor())) {enabledLayouts.add(layout);if(DEBUG) Slog.d(testkeyboard, ---ArrayList enabledLayouts.add---);return;}}-1436,8 1455,10 public class InputManagerService extends IInputManager.Stubpublic KeyboardLayout getKeyboardLayout(String keyboardLayoutDescriptor) {Objects.requireNonNull(keyboardLayoutDescriptor,keyboardLayoutDescriptor must not be null);if(DEBUG) Slog.d(testkeyboard, ---getKeyboardLayout---keyboardLayoutDescriptorkeyboardLayoutDescriptor);final KeyboardLayout[] result new KeyboardLayout[1];if(result!null) Slog.d(testkeyboard, ---getKeyboardLayout---result.lengthresult.length);visitKeyboardLayout(keyboardLayoutDescriptor,(resources, keyboardLayoutResId, layout) - result[0] layout);if (result[0] null) {-1632,12 1653,15 public class InputManagerService extends IInputManager.StubOverride // Binder callpublic String[] getEnabledKeyboardLayoutsForInputDevice(InputDeviceIdentifier identifier) {String key getLayoutDescriptor(identifier);if(DEBUG) Slog.d(testkeyboard, ---getEnabledKeyboardLayoutsForInputDevice---keykey);synchronized (mDataStore) {String[] layouts mDataStore.getKeyboardLayouts(key);if(DEBUG) Slog.d(testkeyboard, ---getEnabledKeyboardLayoutsForInputDevice---getDescriptoridentifier.getDescriptor());if ((layouts null || layouts.length 0) !key.equals(identifier.getDescriptor())) {layouts mDataStore.getKeyboardLayouts(identifier.getDescriptor());}if(DEBUG) Slog.d(testkeyboard, ---getEnabledKeyboardLayoutsForInputDevice---lengthlayouts.length);return layouts;}}-1645,6 1669,7 public class InputManagerService extends IInputManager.StubOverride // Binder callpublic void addKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,String keyboardLayoutDescriptor) {if(DEBUG) Slog.d(testkeyboard, ---addKeyboardLayoutForInputDevice---keyboardLayoutDescriptorkeyboardLayoutDescriptor);if (!checkCallingPermission(android.Manifest.permission.SET_KEYBOARD_LAYOUT,addKeyboardLayoutForInputDevice())) {throw new SecurityException(Requires SET_KEYBOARD_LAYOUT permission);-1653,6 1678,7 public class InputManagerService extends IInputManager.StubkeyboardLayoutDescriptor must not be null);String key getLayoutDescriptor(identifier);if(DEBUG) Slog.d(testkeyboard, ---addKeyboardLayoutForInputDevice---keykey);synchronized (mDataStore) {try {String oldLayout mDataStore.getCurrentKeyboardLayout(key);