diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index 2ea03604315d1..3bb9c01d3c3e7 100755 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -458,6 +458,18 @@ public final class InputDevice implements Parcelable { return mIsExternal; } + /** + * Returns true if the device is a full keyboard. + * + * @return True if the device is a full keyboard. + * + * @hide + */ + public boolean isFullKeyboard() { + return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD + && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; + } + /** * Gets the name of this input device. * @return The input device name. diff --git a/services/java/com/android/server/input/InputManagerService.java b/services/java/com/android/server/input/InputManagerService.java index d85facc619702..bdd0aa463e000 100644 --- a/services/java/com/android/server/input/InputManagerService.java +++ b/services/java/com/android/server/input/InputManagerService.java @@ -592,7 +592,7 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog. deviceIdAndGeneration[i * 2] = inputDevice.getId(); deviceIdAndGeneration[i * 2 + 1] = inputDevice.getGeneration(); - if (isFullKeyboard(inputDevice)) { + if (!inputDevice.isVirtual() && inputDevice.isFullKeyboard()) { if (!containsInputDeviceWithDescriptor(oldInputDevices, inputDevice.getDescriptor())) { mTempFullKeyboards.add(numFullKeyboardsAdded++, inputDevice); @@ -695,12 +695,6 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog. reloadKeyboardLayouts(); } - private static boolean isFullKeyboard(InputDevice inputDevice) { - return !inputDevice.isVirtual() - && (inputDevice.getSources() & InputDevice.SOURCE_KEYBOARD) != 0 - && inputDevice.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC; - } - private static boolean containsInputDeviceWithDescriptor(InputDevice[] inputDevices, String descriptor) { final int numDevices = inputDevices.length; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 4ce8c97541d79..10919f2578699 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -6466,17 +6466,18 @@ public class WindowManagerService extends IWindowManager.Stub WindowManagerPolicy.PRESENCE_INTERNAL; if (mIsTouchDevice) { - if ((sources & InputDevice.SOURCE_TOUCHSCREEN) != 0) { + if ((sources & InputDevice.SOURCE_TOUCHSCREEN) == + InputDevice.SOURCE_TOUCHSCREEN) { config.touchscreen = Configuration.TOUCHSCREEN_FINGER; } } else { config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; } - if ((sources & InputDevice.SOURCE_TRACKBALL) != 0) { + if ((sources & InputDevice.SOURCE_TRACKBALL) == InputDevice.SOURCE_TRACKBALL) { config.navigation = Configuration.NAVIGATION_TRACKBALL; navigationPresence |= presenceFlag; - } else if ((sources & InputDevice.SOURCE_DPAD) != 0 + } else if ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD && config.navigation == Configuration.NAVIGATION_NONAV) { config.navigation = Configuration.NAVIGATION_DPAD; navigationPresence |= presenceFlag;