Loading core/java/android/hardware/input/IInputManager.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -241,12 +241,12 @@ interface IInputManager { KeyGlyphMap getKeyGlyphMap(int deviceId); @EnforcePermission("MANAGE_KEY_GESTURES") @PermissionManuallyEnforced @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.MANAGE_KEY_GESTURES)") void registerKeyGestureEventListener(IKeyGestureEventListener listener); @EnforcePermission("MANAGE_KEY_GESTURES") @PermissionManuallyEnforced @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.MANAGE_KEY_GESTURES)") void unregisterKeyGestureEventListener(IKeyGestureEventListener listener); Loading core/java/android/hardware/input/input_framework.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,17 @@ flag { bug: "358603902" } flag { namespace: "input_native" name: "manage_key_gestures" description: "Manage key gestures through Input APIs" is_exported: true bug: "358569822" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "keyboard_repeat_keys" namespace: "input" Loading core/res/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,7 @@ android_app { "android.os.flags-aconfig", "android.os.vibrator.flags-aconfig", "android.media.tv.flags-aconfig", "com.android.hardware.input.input-aconfig", ], } Loading core/res/AndroidManifest.xml +2 −1 Original line number Diff line number Diff line Loading @@ -8171,7 +8171,8 @@ <p>Not for use by third-party applications. @hide --> <permission android:name="android.permission.MANAGE_KEY_GESTURES" android:protectionLevel="signature" /> android:protectionLevel="signature" android:featureFlag="com.android.hardware.input.manage_key_gestures" /> <uses-permission android:name="android.permission.HANDLE_QUERY_PACKAGE_RESTART" /> Loading services/core/java/com/android/server/input/InputManagerService.java +36 −9 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.Manifest; import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.PermissionManuallyEnforced; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.ActivityManagerInternal; import android.bluetooth.BluetoothAdapter; Loading @@ -35,6 +37,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.graphics.PixelFormat; import android.graphics.PointF; import android.hardware.SensorPrivacyManager; Loading Loading @@ -84,7 +87,6 @@ import android.os.VibrationEffect; import android.os.vibrator.StepSegment; import android.os.vibrator.VibrationEffectSegment; import android.provider.DeviceConfig; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.util.IndentingPrintWriter; Loading Loading @@ -125,7 +127,6 @@ import com.android.server.Watchdog; import com.android.server.input.InputManagerInternal.LidSwitchCallback; import com.android.server.input.debug.FocusEventDebugView; import com.android.server.input.debug.TouchpadDebugViewController; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.policy.WindowManagerPolicy; import libcore.io.IoUtils; Loading Loading @@ -175,7 +176,7 @@ public class InputManagerService extends IInputManager.Stub private final InputManagerHandler mHandler; private DisplayManagerInternal mDisplayManagerInternal; private InputMethodManagerInternal mInputMethodManagerInternal; private PackageManagerInternal mPackageManagerInternal; private final File mDoubleTouchGestureEnableFile; Loading Loading @@ -546,8 +547,7 @@ public class InputManagerService extends IInputManager.Stub } mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mInputMethodManagerInternal = LocalServices.getService(InputMethodManagerInternal.class); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); mSettingsObserver.registerAndUpdate(); Loading Loading @@ -2740,21 +2740,48 @@ public class InputManagerService extends IInputManager.Stub lockedModifierState); } /** * Enforces the caller contains the necessary permission to manage key gestures. */ @RequiresPermission(Manifest.permission.MANAGE_KEY_GESTURES) private void enforceManageKeyGesturePermission() { // TODO(b/361567988): Use @EnforcePermission to enforce permission once flag guarding the // permission is rolled out String systemUIPackage = mContext.getString(R.string.config_systemUi); int systemUIAppId = UserHandle.getAppId(mPackageManagerInternal .getPackageUid(systemUIPackage, PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM)); if (UserHandle.getCallingAppId() == systemUIAppId) { return; } if (mContext.checkCallingOrSelfPermission( Manifest.permission.MANAGE_KEY_GESTURES) == PackageManager.PERMISSION_GRANTED) { return; } String message = "Managing Key Gestures requires the following permission: " + Manifest.permission.MANAGE_KEY_GESTURES; throw new SecurityException(message); } @Override @EnforcePermission(Manifest.permission.MANAGE_KEY_GESTURES) @PermissionManuallyEnforced public void registerKeyGestureEventListener( @NonNull IKeyGestureEventListener listener) { super.registerKeyGestureEventListener_enforcePermission(); enforceManageKeyGesturePermission(); Objects.requireNonNull(listener); mKeyGestureController.registerKeyGestureEventListener(listener, Binder.getCallingPid()); } @Override @EnforcePermission(Manifest.permission.MANAGE_KEY_GESTURES) @PermissionManuallyEnforced public void unregisterKeyGestureEventListener( @NonNull IKeyGestureEventListener listener) { super.unregisterKeyGestureEventListener_enforcePermission(); enforceManageKeyGesturePermission(); Objects.requireNonNull(listener); mKeyGestureController.unregisterKeyGestureEventListener(listener, Binder.getCallingPid()); Loading Loading
core/java/android/hardware/input/IInputManager.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -241,12 +241,12 @@ interface IInputManager { KeyGlyphMap getKeyGlyphMap(int deviceId); @EnforcePermission("MANAGE_KEY_GESTURES") @PermissionManuallyEnforced @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.MANAGE_KEY_GESTURES)") void registerKeyGestureEventListener(IKeyGestureEventListener listener); @EnforcePermission("MANAGE_KEY_GESTURES") @PermissionManuallyEnforced @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.MANAGE_KEY_GESTURES)") void unregisterKeyGestureEventListener(IKeyGestureEventListener listener); Loading
core/java/android/hardware/input/input_framework.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,17 @@ flag { bug: "358603902" } flag { namespace: "input_native" name: "manage_key_gestures" description: "Manage key gestures through Input APIs" is_exported: true bug: "358569822" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "keyboard_repeat_keys" namespace: "input" Loading
core/res/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,7 @@ android_app { "android.os.flags-aconfig", "android.os.vibrator.flags-aconfig", "android.media.tv.flags-aconfig", "com.android.hardware.input.input-aconfig", ], } Loading
core/res/AndroidManifest.xml +2 −1 Original line number Diff line number Diff line Loading @@ -8171,7 +8171,8 @@ <p>Not for use by third-party applications. @hide --> <permission android:name="android.permission.MANAGE_KEY_GESTURES" android:protectionLevel="signature" /> android:protectionLevel="signature" android:featureFlag="com.android.hardware.input.manage_key_gestures" /> <uses-permission android:name="android.permission.HANDLE_QUERY_PACKAGE_RESTART" /> Loading
services/core/java/com/android/server/input/InputManagerService.java +36 −9 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.Manifest; import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.PermissionManuallyEnforced; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.ActivityManagerInternal; import android.bluetooth.BluetoothAdapter; Loading @@ -35,6 +37,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.graphics.PixelFormat; import android.graphics.PointF; import android.hardware.SensorPrivacyManager; Loading Loading @@ -84,7 +87,6 @@ import android.os.VibrationEffect; import android.os.vibrator.StepSegment; import android.os.vibrator.VibrationEffectSegment; import android.provider.DeviceConfig; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.util.IndentingPrintWriter; Loading Loading @@ -125,7 +127,6 @@ import com.android.server.Watchdog; import com.android.server.input.InputManagerInternal.LidSwitchCallback; import com.android.server.input.debug.FocusEventDebugView; import com.android.server.input.debug.TouchpadDebugViewController; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.policy.WindowManagerPolicy; import libcore.io.IoUtils; Loading Loading @@ -175,7 +176,7 @@ public class InputManagerService extends IInputManager.Stub private final InputManagerHandler mHandler; private DisplayManagerInternal mDisplayManagerInternal; private InputMethodManagerInternal mInputMethodManagerInternal; private PackageManagerInternal mPackageManagerInternal; private final File mDoubleTouchGestureEnableFile; Loading Loading @@ -546,8 +547,7 @@ public class InputManagerService extends IInputManager.Stub } mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mInputMethodManagerInternal = LocalServices.getService(InputMethodManagerInternal.class); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); mSettingsObserver.registerAndUpdate(); Loading Loading @@ -2740,21 +2740,48 @@ public class InputManagerService extends IInputManager.Stub lockedModifierState); } /** * Enforces the caller contains the necessary permission to manage key gestures. */ @RequiresPermission(Manifest.permission.MANAGE_KEY_GESTURES) private void enforceManageKeyGesturePermission() { // TODO(b/361567988): Use @EnforcePermission to enforce permission once flag guarding the // permission is rolled out String systemUIPackage = mContext.getString(R.string.config_systemUi); int systemUIAppId = UserHandle.getAppId(mPackageManagerInternal .getPackageUid(systemUIPackage, PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM)); if (UserHandle.getCallingAppId() == systemUIAppId) { return; } if (mContext.checkCallingOrSelfPermission( Manifest.permission.MANAGE_KEY_GESTURES) == PackageManager.PERMISSION_GRANTED) { return; } String message = "Managing Key Gestures requires the following permission: " + Manifest.permission.MANAGE_KEY_GESTURES; throw new SecurityException(message); } @Override @EnforcePermission(Manifest.permission.MANAGE_KEY_GESTURES) @PermissionManuallyEnforced public void registerKeyGestureEventListener( @NonNull IKeyGestureEventListener listener) { super.registerKeyGestureEventListener_enforcePermission(); enforceManageKeyGesturePermission(); Objects.requireNonNull(listener); mKeyGestureController.registerKeyGestureEventListener(listener, Binder.getCallingPid()); } @Override @EnforcePermission(Manifest.permission.MANAGE_KEY_GESTURES) @PermissionManuallyEnforced public void unregisterKeyGestureEventListener( @NonNull IKeyGestureEventListener listener) { super.unregisterKeyGestureEventListener_enforcePermission(); enforceManageKeyGesturePermission(); Objects.requireNonNull(listener); mKeyGestureController.unregisterKeyGestureEventListener(listener, Binder.getCallingPid()); Loading