Support unique calibration per orientation
Updates the format of the calibration XML to store the Surface rotation
that a specific calibration applies to. Also updates the API to require
a rotation value for get/set, and has the native framework supply this
according to the current rotation whenever it changes.
Change-Id: I72b6703f646dd18db537365c5c9843f720a5f41e
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 35c6583..e1069ae 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -198,8 +198,10 @@
virtual void notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices);
virtual sp<KeyCharacterMap> getKeyboardLayoutOverlay(const InputDeviceIdentifier& identifier);
virtual String8 getDeviceAlias(const InputDeviceIdentifier& identifier);
- TouchAffineTransformation getTouchAffineTransformation(JNIEnv *env, jfloatArray matrixArr);
- TouchAffineTransformation getTouchAffineTransformation(const String8& inputDeviceDescriptor);
+ virtual TouchAffineTransformation getTouchAffineTransformation(JNIEnv *env,
+ jfloatArray matrixArr);
+ virtual TouchAffineTransformation getTouchAffineTransformation(
+ const String8& inputDeviceDescriptor, int32_t surfaceRotation);
/* --- InputDispatcherPolicyInterface implementation --- */
@@ -781,13 +783,14 @@
}
TouchAffineTransformation NativeInputManager::getTouchAffineTransformation(
- const String8& inputDeviceDescriptor) {
+ const String8& inputDeviceDescriptor, int32_t surfaceRotation) {
JNIEnv* env = jniEnv();
ScopedLocalRef<jstring> descriptorObj(env, env->NewStringUTF(inputDeviceDescriptor.string()));
jobject cal = env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getTouchCalibrationForInputDevice, descriptorObj.get());
+ gServiceClassInfo.getTouchCalibrationForInputDevice, descriptorObj.get(),
+ surfaceRotation);
jfloatArray matrixArr = jfloatArray(env->CallObjectMethod(cal,
gTouchCalibrationClassInfo.getAffineTransform));
@@ -1506,7 +1509,7 @@
GET_METHOD_ID(gServiceClassInfo.getTouchCalibrationForInputDevice, clazz,
"getTouchCalibrationForInputDevice",
- "(Ljava/lang/String;)Landroid/hardware/input/TouchCalibration;");
+ "(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;");
// InputDevice