From 0f3a378bb5c4a548cef654a615ed9580ae3310fc Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 4 Mar 2020 17:23:45 -0800 Subject: [PATCH] Add shell command to trigger global action Bug: 150817783 Test: adb shell cmd accessibility call-system-action Change-Id: Iaa85b7ada85d39305300b56b1a3725fcbfee4e95 --- .../AccessibilityManagerService.java | 2 +- .../AccessibilityShellCommand.java | 28 ++++++++++++++++++- .../accessibility/SystemActionPerformer.java | 1 + 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 f21f0e73e7873..1a72cf023453d 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 20a11bd9acd3c..b36626f9d736e 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 ]"); pw.println(" Get whether binding to services provided by instant apps is allowed."); + pw.println(" call-system-action "); + 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 ef8d524bee25a..fbdef8fffb13a 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 {