Merge "Add shell command to trigger global action" into rvc-dev am: 18c1d27df9

Change-Id: Iacf836f041dc9b5f9373eaaec6ff38d3845e5c4f
This commit is contained in:
Winson Chung
2020-04-21 03:33:56 +00:00
committed by Automerger Merge Worker
3 changed files with 29 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -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.");
}
}

View File

@@ -305,6 +305,7 @@ public class SystemActionPerformer {
sendDownAndUpKeyEvents(KeyEvent.KEYCODE_HEADSETHOOK);
return true;
default:
Slog.e(TAG, "Invalid action id: " + actionId);
return false;
}
} finally {