summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/input/InputReader.cpp42
-rw-r--r--services/input/InputReader.h10
-rw-r--r--services/input/tests/InputReader_test.cpp90
-rw-r--r--services/java/com/android/server/PowerManagerService.java4
-rw-r--r--services/java/com/android/server/input/InputManagerService.java19
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java44
-rw-r--r--services/jni/com_android_server_input_InputManagerService.cpp33
7 files changed, 50 insertions, 192 deletions
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index c6b701f..cd6a2ec 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -250,7 +250,6 @@ InputReader::InputReader(const sp<EventHubInterface>& eventHub,
refreshConfigurationLocked(0);
updateGlobalMetaStateLocked();
- updateInputConfigurationLocked();
} // release lock
}
@@ -502,9 +501,6 @@ void InputReader::handleConfigurationChangedLocked(nsecs_t when) {
// Reset global meta state because it depends on the list of all configured devices.
updateGlobalMetaStateLocked();
- // Update input configuration.
- updateInputConfigurationLocked();
-
// Enqueue configuration changed.
NotifyConfigurationChangedArgs args(when);
mQueuedListener->notifyConfigurationChanged(&args);
@@ -542,36 +538,6 @@ int32_t InputReader::getGlobalMetaStateLocked() {
return mGlobalMetaState;
}
-void InputReader::updateInputConfigurationLocked() {
- int32_t touchScreenConfig = InputConfiguration::TOUCHSCREEN_NOTOUCH;
- int32_t keyboardConfig = InputConfiguration::KEYBOARD_NOKEYS;
- int32_t navigationConfig = InputConfiguration::NAVIGATION_NONAV;
- InputDeviceInfo deviceInfo;
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- if (!(device->getClasses() & INPUT_DEVICE_CLASS_VIRTUAL)) {
- device->getDeviceInfo(& deviceInfo);
- uint32_t sources = deviceInfo.getSources();
-
- if ((sources & AINPUT_SOURCE_TOUCHSCREEN) == AINPUT_SOURCE_TOUCHSCREEN) {
- touchScreenConfig = InputConfiguration::TOUCHSCREEN_FINGER;
- }
- if ((sources & AINPUT_SOURCE_TRACKBALL) == AINPUT_SOURCE_TRACKBALL) {
- navigationConfig = InputConfiguration::NAVIGATION_TRACKBALL;
- } else if ((sources & AINPUT_SOURCE_DPAD) == AINPUT_SOURCE_DPAD) {
- navigationConfig = InputConfiguration::NAVIGATION_DPAD;
- }
- if (deviceInfo.getKeyboardType() == AINPUT_KEYBOARD_TYPE_ALPHABETIC) {
- keyboardConfig = InputConfiguration::KEYBOARD_QWERTY;
- }
- }
- }
-
- mInputConfiguration.touchScreen = touchScreenConfig;
- mInputConfiguration.keyboard = keyboardConfig;
- mInputConfiguration.navigation = navigationConfig;
-}
-
void InputReader::disableVirtualKeysUntilLocked(nsecs_t time) {
mDisableVirtualKeysTimeout = time;
}
@@ -608,12 +574,6 @@ int32_t InputReader::bumpGenerationLocked() {
return ++mGeneration;
}
-void InputReader::getInputConfiguration(InputConfiguration* outConfiguration) {
- AutoMutex _l(mLock);
-
- *outConfiguration = mInputConfiguration;
-}
-
void InputReader::getInputDevices(Vector<InputDeviceInfo>& outInputDevices) {
AutoMutex _l(mLock);
getInputDevicesLocked(outInputDevices);
@@ -1049,7 +1009,7 @@ void InputDevice::timeoutExpired(nsecs_t when) {
}
void InputDevice::getDeviceInfo(InputDeviceInfo* outDeviceInfo) {
- outDeviceInfo->initialize(mId, mGeneration, mIdentifier, mAlias);
+ outDeviceInfo->initialize(mId, mGeneration, mIdentifier, mAlias, mIsExternal);
size_t numMappers = mMappers.size();
for (size_t i = 0; i < numMappers; i++) {
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 8257dbc..03198a6 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -259,12 +259,6 @@ public:
*/
virtual void loopOnce() = 0;
- /* Gets the current input device configuration.
- *
- * This method may be called on any thread (usually by the input manager).
- */
- virtual void getInputConfiguration(InputConfiguration* outConfiguration) = 0;
-
/* Gets information about all input devices.
*
* This method may be called on any thread (usually by the input manager).
@@ -344,7 +338,6 @@ public:
virtual void loopOnce();
- virtual void getInputConfiguration(InputConfiguration* outConfiguration);
virtual void getInputDevices(Vector<InputDeviceInfo>& outInputDevices);
virtual int32_t getScanCodeState(int32_t deviceId, uint32_t sourceMask,
@@ -425,9 +418,6 @@ private:
int32_t mGeneration;
int32_t bumpGenerationLocked();
- InputConfiguration mInputConfiguration;
- void updateInputConfigurationLocked();
-
void getInputDevicesLocked(Vector<InputDeviceInfo>& outInputDevices);
nsecs_t mDisableVirtualKeysTimeout;
diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp
index 0f755ae..abda10b 100644
--- a/services/input/tests/InputReader_test.cpp
+++ b/services/input/tests/InputReader_test.cpp
@@ -984,96 +984,6 @@ protected:
}
};
-TEST_F(InputReaderTest, GetInputConfiguration_WhenNoDevices_ReturnsDefaults) {
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_NONAV, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenAlphabeticKeyboardPresent_ReturnsQwertyKeyboard) {
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("keyboard"),
- INPUT_DEVICE_CLASS_KEYBOARD | INPUT_DEVICE_CLASS_ALPHAKEY, NULL));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_QWERTY, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_NONAV, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenTouchScreenPresent_ReturnsFingerTouchScreen) {
- PropertyMap configuration;
- configuration.addProperty(String8("touch.deviceType"), String8("touchScreen"));
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("touchscreen"),
- INPUT_DEVICE_CLASS_TOUCH, &configuration));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_NONAV, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_FINGER, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenTouchPadPresent_ReturnsFingerNoTouch) {
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("touchpad"),
- INPUT_DEVICE_CLASS_TOUCH, NULL));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_NONAV, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenMousePresent_ReturnsNoNavigation) {
- sp<FakePointerController> controller = new FakePointerController();
- mFakePolicy->setPointerController(0, controller);
-
- PropertyMap configuration;
- configuration.addProperty(String8("cursor.mode"), String8("pointer"));
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("mouse"),
- INPUT_DEVICE_CLASS_CURSOR, &configuration));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_NONAV, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenTrackballPresent_ReturnsTrackballNavigation) {
- PropertyMap configuration;
- configuration.addProperty(String8("cursor.mode"), String8("navigation"));
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("trackball"),
- INPUT_DEVICE_CLASS_CURSOR, &configuration));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_TRACKBALL, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
-TEST_F(InputReaderTest, GetInputConfiguration_WhenDPadPresent_ReturnsDPadNavigation) {
- ASSERT_NO_FATAL_FAILURE(addDevice(0, String8("dpad"),
- INPUT_DEVICE_CLASS_DPAD, NULL));
-
- InputConfiguration config;
- mReader->getInputConfiguration(&config);
-
- ASSERT_EQ(InputConfiguration::KEYBOARD_NOKEYS, config.keyboard);
- ASSERT_EQ(InputConfiguration::NAVIGATION_DPAD, config.navigation);
- ASSERT_EQ(InputConfiguration::TOUCHSCREEN_NOTOUCH, config.touchScreen);
-}
-
TEST_F(InputReaderTest, GetInputDevices) {
ASSERT_NO_FATAL_FAILURE(addDevice(1, String8("keyboard"),
INPUT_DEVICE_CLASS_KEYBOARD, NULL));
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index bd50e22..5ec1fa5 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -2521,8 +2521,8 @@ public class PowerManagerService extends IPowerManager.Stub
return val;
} catch (Exception e) {
// guard against null pointer or index out of bounds errors
- Slog.e(TAG, "Values array must be non-empty and must be the same length "
- + "as the auto-brightness levels array. Check config.xml.", e);
+ Slog.e(TAG, "Values array must be non-empty and must be one element longer than "
+ + "the auto-brightness levels array. Check config.xml.", e);
return 255;
}
}
diff --git a/services/java/com/android/server/input/InputManagerService.java b/services/java/com/android/server/input/InputManagerService.java
index aece7d2..117e064 100644
--- a/services/java/com/android/server/input/InputManagerService.java
+++ b/services/java/com/android/server/input/InputManagerService.java
@@ -162,7 +162,6 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog.
private static native void nativeSetSystemUiVisibility(int ptr, int visibility);
private static native void nativeSetFocusedApplication(int ptr,
InputApplicationHandle application);
- private static native void nativeGetInputConfiguration(int ptr, Configuration configuration);
private static native boolean nativeTransferTouchFocus(int ptr,
InputChannel fromChannel, InputChannel toChannel);
private static native void nativeSetPointerSpeed(int ptr, int speed);
@@ -298,14 +297,6 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog.
}
nativeSetDisplayOrientation(mPtr, displayId, rotation);
}
-
- public void getInputConfiguration(Configuration config) {
- if (config == null) {
- throw new IllegalArgumentException("config must not be null.");
- }
-
- nativeGetInputConfiguration(mPtr, config);
- }
/**
* Gets the current state of a key or button by key code.
@@ -522,6 +513,16 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog.
}
}
+ /**
+ * Gets all input devices in the system.
+ * @return The array of input devices.
+ */
+ public InputDevice[] getInputDevices() {
+ synchronized (mInputDevicesLock) {
+ return mInputDevices;
+ }
+ }
+
@Override // Binder call
public void registerInputDevicesChangedListener(IInputDevicesChangedListener listener) {
if (listener == null) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index ae1cc7f..633b884 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -6283,8 +6283,6 @@ public class WindowManagerService extends IWindowManager.Stub
final int dh = mCurDisplayHeight;
if (config != null) {
- mInputManager.getInputConfiguration(config);
-
int orientation = Configuration.ORIENTATION_SQUARE;
if (dw < dh) {
orientation = Configuration.ORIENTATION_PORTRAIT;
@@ -6327,12 +6325,46 @@ public class WindowManagerService extends IWindowManager.Stub
config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale);
config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, dm, dw, dh);
+ // Update the configuration based on available input devices, lid switch,
+ // and platform configuration.
+ config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH;
+ config.keyboard = Configuration.KEYBOARD_NOKEYS;
+ config.navigation = Configuration.NAVIGATION_NONAV;
+
+ int keyboardPresence = 0;
+ int navigationPresence = 0;
+ for (InputDevice device : mInputManager.getInputDevices()) {
+ if (!device.isVirtual()) {
+ final int sources = device.getSources();
+ final int presenceFlag = device.isExternal() ?
+ WindowManagerPolicy.PRESENCE_EXTERNAL :
+ WindowManagerPolicy.PRESENCE_INTERNAL;
+
+ if ((sources & InputDevice.SOURCE_TOUCHSCREEN) != 0) {
+ config.touchscreen = Configuration.TOUCHSCREEN_FINGER;
+ }
+
+ if ((sources & InputDevice.SOURCE_TRACKBALL) != 0) {
+ config.navigation = Configuration.NAVIGATION_TRACKBALL;
+ navigationPresence |= presenceFlag;
+ } else if ((sources & InputDevice.SOURCE_DPAD) != 0
+ && config.navigation == Configuration.NAVIGATION_NONAV) {
+ config.navigation = Configuration.NAVIGATION_DPAD;
+ navigationPresence |= presenceFlag;
+ }
+
+ if (device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC) {
+ config.keyboard = Configuration.KEYBOARD_QWERTY;
+ keyboardPresence |= presenceFlag;
+ }
+ }
+ }
+
// Determine whether a hard keyboard is available and enabled.
boolean hardKeyboardAvailable = config.keyboard != Configuration.KEYBOARD_NOKEYS;
if (hardKeyboardAvailable != mHardKeyboardAvailable) {
mHardKeyboardAvailable = hardKeyboardAvailable;
mHardKeyboardEnabled = hardKeyboardAvailable;
-
mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
}
@@ -6340,13 +6372,11 @@ public class WindowManagerService extends IWindowManager.Stub
config.keyboard = Configuration.KEYBOARD_NOKEYS;
}
- // Update value of keyboardHidden, hardKeyboardHidden and navigationHidden
- // based on whether a hard or soft keyboard is present, whether navigation keys
- // are present and the lid switch state.
+ // Let the policy update hidden states.
config.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_NO;
config.navigationHidden = Configuration.NAVIGATIONHIDDEN_NO;
- mPolicy.adjustConfigurationLw(config);
+ mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence);
}
return true;
diff --git a/services/jni/com_android_server_input_InputManagerService.cpp b/services/jni/com_android_server_input_InputManagerService.cpp
index b2a2429..b6378bf 100644
--- a/services/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/jni/com_android_server_input_InputManagerService.cpp
@@ -98,12 +98,6 @@ static struct {
jclass clazz;
} gMotionEventClassInfo;
-static struct {
- jfieldID touchscreen;
- jfieldID keyboard;
- jfieldID navigation;
-} gConfigurationClassInfo;
-
// --- Global functions ---
@@ -1228,18 +1222,6 @@ static void nativeSetSystemUiVisibility(JNIEnv* env,
im->setSystemUiVisibility(visibility);
}
-static void nativeGetInputConfiguration(JNIEnv* env,
- jclass clazz, jint ptr, jobject configObj) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- InputConfiguration config;
- im->getInputManager()->getReader()->getInputConfiguration(& config);
-
- env->SetIntField(configObj, gConfigurationClassInfo.touchscreen, config.touchScreen);
- env->SetIntField(configObj, gConfigurationClassInfo.keyboard, config.keyboard);
- env->SetIntField(configObj, gConfigurationClassInfo.navigation, config.navigation);
-}
-
static jboolean nativeTransferTouchFocus(JNIEnv* env,
jclass clazz, jint ptr, jobject fromChannelObj, jobject toChannelObj) {
NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
@@ -1372,8 +1354,6 @@ static JNINativeMethod gInputManagerMethods[] = {
(void*) nativeSetInputDispatchMode },
{ "nativeSetSystemUiVisibility", "(II)V",
(void*) nativeSetSystemUiVisibility },
- { "nativeGetInputConfiguration", "(ILandroid/content/res/Configuration;)V",
- (void*) nativeGetInputConfiguration },
{ "nativeTransferTouchFocus", "(ILandroid/view/InputChannel;Landroid/view/InputChannel;)Z",
(void*) nativeTransferTouchFocus },
{ "nativeSetPointerSpeed", "(II)V",
@@ -1504,19 +1484,6 @@ int register_android_server_InputManager(JNIEnv* env) {
FIND_CLASS(gMotionEventClassInfo.clazz, "android/view/MotionEvent");
gMotionEventClassInfo.clazz = jclass(env->NewGlobalRef(gMotionEventClassInfo.clazz));
- // Configuration
-
- FIND_CLASS(clazz, "android/content/res/Configuration");
-
- GET_FIELD_ID(gConfigurationClassInfo.touchscreen, clazz,
- "touchscreen", "I");
-
- GET_FIELD_ID(gConfigurationClassInfo.keyboard, clazz,
- "keyboard", "I");
-
- GET_FIELD_ID(gConfigurationClassInfo.navigation, clazz,
- "navigation", "I");
-
return 0;
}