diff options
author | Biswarup Pal <biswarupp@google.com> | 2024-01-25 23:02:42 +0000 |
---|---|---|
committer | Biswarup Pal <biswarupp@google.com> | 2024-02-03 07:47:25 +0000 |
commit | f31e168cf768b3b29b0254656f08512fe5fd3d59 (patch) | |
tree | ccb60c6d22f81cef5ea71b90b9c89177a651cd41 | |
parent | 679d9285b9ca7f43bd4b05f0c0af5edd480dc542 (diff) | |
download | base-f31e168cf768b3b29b0254656f08512fe5fd3d59.tar.gz |
Test API's for mouse pointer speed
- Add getMousePointerSpeed test API
- Expose InputSettings#DEFAULT_POINTER_SPEED as a test API
- Expose pointer speed settings key as a test API
Test: atest VirtualMouseTest
Bug: 319564269
Change-Id: I7dbef785e21dbd054a65420a2d7aac96ce71b937
Merged-In: Ie14a1522905d3de25d69f99029f75e47fa66aa5f
8 files changed, 58 insertions, 1 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 0c9569f730cd..5f0b12619596 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1606,6 +1606,7 @@ package android.hardware.input { method @NonNull public java.util.List<java.lang.String> getKeyboardLayoutDescriptorsForInputDevice(@NonNull android.view.InputDevice); method @NonNull public String getKeyboardLayoutTypeForLayoutDescriptor(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public java.util.Map<java.lang.Integer,java.lang.Integer> getModifierKeyRemapping(); + method public int getMousePointerSpeed(); method @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public void remapModifierKey(int, int); method @RequiresPermission(android.Manifest.permission.SET_KEYBOARD_LAYOUT) public void removeKeyboardLayoutForInputDevice(@NonNull android.hardware.input.InputDeviceIdentifier, @NonNull String); method public void removeUniqueIdAssociation(@NonNull String); @@ -1615,6 +1616,7 @@ package android.hardware.input { public class InputSettings { method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void setMaximumObscuringOpacityForTouch(@NonNull android.content.Context, @FloatRange(from=0, to=1) float); + field public static final int DEFAULT_POINTER_SPEED = 0; // 0x0 } } @@ -2762,6 +2764,10 @@ package android.provider { field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service"; } + public static final class Settings.System extends android.provider.Settings.NameValueTable { + field public static final String POINTER_SPEED = "pointer_speed"; + } + public static final class Telephony.Sms.Intents { field public static final String SMS_CARRIER_PROVISION_ACTION = "android.provider.Telephony.SMS_CARRIER_PROVISION"; } diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl index c3fae55fd00c..059e99f372e7 100644 --- a/core/java/android/hardware/input/IInputManager.aidl +++ b/core/java/android/hardware/input/IInputManager.aidl @@ -63,6 +63,9 @@ interface IInputManager { // active keyboard layout. int getKeyCodeForKeyLocation(int deviceId, in int locationKeyCode); + // Returns the mouse pointer speed. + int getMousePointerSpeed(); + // Temporarily changes the pointer speed. void tryPointerSpeed(int speed); diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index a0cceae98ba9..08fc5c2cf209 100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SuppressLint; import android.annotation.SystemService; import android.annotation.TestApi; import android.annotation.UserIdInt; @@ -835,6 +836,28 @@ public final class InputManager { } /** + * Returns the mouse pointer speed. + * + * <p>The pointer speed is a value between {@link InputSettings#MIN_POINTER_SPEED} and + * {@link InputSettings#MAX_POINTER_SPEED}, the default value being + * {@link InputSettings#DEFAULT_POINTER_SPEED}. + * + * <p> Note that while setting the mouse pointer speed, it's possible that the input reader has + * only received this value and has not yet completed reconfiguring itself with this value. + * + * @hide + */ + @SuppressLint("UnflaggedApi") // TestApi without associated feature. + @TestApi + public int getMousePointerSpeed() { + try { + return mIm.getMousePointerSpeed(); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + + /** * Changes the mouse pointer speed temporarily, but does not save the setting. * <p> * Requires {@link android.Manifest.permission#SET_POINTER_SPEED}. diff --git a/core/java/android/hardware/input/InputSettings.java b/core/java/android/hardware/input/InputSettings.java index 17bbe1459d03..aaf005555ea8 100644 --- a/core/java/android/hardware/input/InputSettings.java +++ b/core/java/android/hardware/input/InputSettings.java @@ -48,8 +48,8 @@ public class InputSettings { /** * Pointer Speed: The default pointer speed (0). - * @hide */ + @SuppressLint("UnflaggedApi") // TestApi without associated feature. public static final int DEFAULT_POINTER_SPEED = 0; /** diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index d695c0cb3760..9a299f5dd323 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5619,8 +5619,10 @@ public final class Settings { * +7 = fastest * @hide */ + @SuppressLint({"NoSettingsProvider", "UnflaggedApi"}) // TestApi without associated feature. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Readable + @TestApi public static final String POINTER_SPEED = "pointer_speed"; /** diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 4cb22dbcf308..aefc6f4728c1 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -1319,6 +1319,11 @@ public class InputManagerService extends IInputManager.Stub } @Override // Binder call + public int getMousePointerSpeed() { + return mNative.getMousePointerSpeed(); + } + + @Override // Binder call public void tryPointerSpeed(int speed) { if (!checkCallingPermission(android.Manifest.permission.SET_POINTER_SPEED, "tryPointerSpeed()")) { diff --git a/services/core/java/com/android/server/input/NativeInputManagerService.java b/services/core/java/com/android/server/input/NativeInputManagerService.java index 363bc94b49bd..79c042d7760c 100644 --- a/services/core/java/com/android/server/input/NativeInputManagerService.java +++ b/services/core/java/com/android/server/input/NativeInputManagerService.java @@ -117,6 +117,8 @@ interface NativeInputManagerService { */ boolean transferTouch(IBinder destChannelToken, int displayId); + int getMousePointerSpeed(); + void setPointerSpeed(int speed); void setPointerAcceleration(float acceleration); @@ -343,6 +345,9 @@ interface NativeInputManagerService { public native boolean transferTouch(IBinder destChannelToken, int displayId); @Override + public native int getMousePointerSpeed(); + + @Override public native void setPointerSpeed(int speed); @Override diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index f0d718a30535..20240d497339 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -289,6 +289,7 @@ public: void setInputDispatchMode(bool enabled, bool frozen); void setSystemUiLightsOut(bool lightsOut); void setPointerDisplayId(int32_t displayId); + int32_t getMousePointerSpeed(); void setPointerSpeed(int32_t speed); void setPointerAcceleration(float acceleration); void setTouchpadPointerSpeed(int32_t speed); @@ -1083,6 +1084,11 @@ void NativeInputManager::setPointerDisplayId(int32_t displayId) { InputReaderConfiguration::Change::DISPLAY_INFO); } +int32_t NativeInputManager::getMousePointerSpeed() { + std::scoped_lock _l(mLock); + return mLocked.pointerSpeed; +} + void NativeInputManager::setPointerSpeed(int32_t speed) { { // acquire lock std::scoped_lock _l(mLock); @@ -2015,6 +2021,12 @@ static jboolean nativeTransferTouch(JNIEnv* env, jobject nativeImplObj, jobject } } +static jint nativeGetMousePointerSpeed(JNIEnv* env, jobject nativeImplObj) { + NativeInputManager* im = getNativeInputManager(env, nativeImplObj); + + return static_cast<jint>(im->getMousePointerSpeed()); +} + static void nativeSetPointerSpeed(JNIEnv* env, jobject nativeImplObj, jint speed) { NativeInputManager* im = getNativeInputManager(env, nativeImplObj); @@ -2599,6 +2611,7 @@ static const JNINativeMethod gInputManagerMethods[] = { {"transferTouchFocus", "(Landroid/os/IBinder;Landroid/os/IBinder;Z)Z", (void*)nativeTransferTouchFocus}, {"transferTouch", "(Landroid/os/IBinder;I)Z", (void*)nativeTransferTouch}, + {"getMousePointerSpeed", "()I", (void*)nativeGetMousePointerSpeed}, {"setPointerSpeed", "(I)V", (void*)nativeSetPointerSpeed}, {"setPointerAcceleration", "(F)V", (void*)nativeSetPointerAcceleration}, {"setTouchpadPointerSpeed", "(I)V", (void*)nativeSetTouchpadPointerSpeed}, |