diff options
3 files changed, 29 insertions, 2 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index f21f0e73e787..1a72cf023453 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2732,7 +2732,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err, String[] args, ShellCallback callback, ResultReceiver resultReceiver) { - new AccessibilityShellCommand(this).exec(this, in, out, err, args, + new AccessibilityShellCommand(this, mSystemActionPerformer).exec(this, in, out, err, args, callback, resultReceiver); } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java index 20a11bd9acd3..b36626f9d736 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java @@ -18,6 +18,8 @@ package com.android.server.accessibility; import android.annotation.NonNull; import android.app.ActivityManager; +import android.os.Binder; +import android.os.Process; import android.os.ShellCommand; import android.os.UserHandle; @@ -28,9 +30,12 @@ import java.io.PrintWriter; */ final class AccessibilityShellCommand extends ShellCommand { final @NonNull AccessibilityManagerService mService; + final @NonNull SystemActionPerformer mSystemActionPerformer; - AccessibilityShellCommand(@NonNull AccessibilityManagerService service) { + AccessibilityShellCommand(@NonNull AccessibilityManagerService service, + @NonNull SystemActionPerformer systemActionPerformer) { mService = service; + mSystemActionPerformer = systemActionPerformer; } @Override @@ -45,6 +50,9 @@ final class AccessibilityShellCommand extends ShellCommand { case "set-bind-instant-service-allowed": { return runSetBindInstantServiceAllowed(); } + case "call-system-action": { + return runCallSystemAction(); + } } return -1; } @@ -74,6 +82,22 @@ final class AccessibilityShellCommand extends ShellCommand { return 0; } + private int runCallSystemAction() { + final int callingUid = Binder.getCallingUid(); + if (callingUid != Process.ROOT_UID + && callingUid != Process.SYSTEM_UID + && callingUid != Process.SHELL_UID) { + return -1; + } + final String option = getNextArg(); + if (option != null) { + int actionId = Integer.parseInt(option); + mSystemActionPerformer.performSystemAction(actionId); + return 0; + } + return -1; + } + private Integer parseUserId() { final String option = getNextOption(); if (option != null) { @@ -97,5 +121,7 @@ final class AccessibilityShellCommand extends ShellCommand { pw.println(" Set whether binding to services provided by instant apps is allowed."); pw.println(" get-bind-instant-service-allowed [--user <USER_ID>]"); pw.println(" Get whether binding to services provided by instant apps is allowed."); + pw.println(" call-system-action <ACTION_ID>"); + pw.println(" Calls the system action with the given action id."); } }
\ No newline at end of file diff --git a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java index ef8d524bee25..fbdef8fffb13 100644 --- a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java +++ b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java @@ -302,6 +302,7 @@ public class SystemActionPerformer { case AccessibilityService.GLOBAL_ACTION_TAKE_SCREENSHOT: return takeScreenshot(); default: + Slog.e(TAG, "Invalid action id: " + actionId); return false; } } finally { |