From a70dd8c952f33b18534dcc707e334ae13dac0e3e Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Tue, 19 Mar 2019 10:21:28 -0700 Subject: New autofill cmds to enable / disable / check default augmented service. Also fixed FrameworkResourcesServiceNameResolver so setDefaultServiceEnabled(true) doesn't thrown and exception when it's already true. Example: adb shell cmd content_capture set default-service-enabled 0 true Exception occurred while executing: java.lang.ArrayIndexOutOfBoundsException: src.length=11 srcPos=1 dst.length=11 dstPos=0 length=-1 at java.lang.System.arraycopy(Native Method) at android.util.SparseBooleanArray.removeAt(SparseBooleanArray.java:127) at com.android.server.infra.FrameworkResourcesServiceNameResolver.setDefaultServiceEnabled(FrameworkResourcesServiceNameResolver.java:180) Test: adb shell cmd autofill set default-augmented-service-enabled 0 false Test: adb shell cmd autofill get default-augmented-service-enabled 0 Test: atest CtsAutoFillServiceTestCases Bug: 123952975 Bug: 126266412 Change-Id: If24c69f4451a82c803a7f067956454f93b722f8f --- .../server/autofill/AutofillManagerService.java | 36 ++++++++++++++++++++++ .../autofill/AutofillManagerServiceImpl.java | 1 + .../AutofillManagerServiceShellCommand.java | 28 +++++++++++++++++ .../ContentCaptureManagerServiceShellCommand.java | 11 ++++--- .../server/infra/AbstractMasterSystemService.java | 14 +++++++-- .../FrameworkResourcesServiceNameResolver.java | 16 ++++++++-- .../android/server/infra/ServiceNameResolver.java | 6 ++-- 7 files changed, 102 insertions(+), 10 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index 65973121b74e..c9172683b39c 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -569,6 +569,42 @@ public final class AutofillManagerService } } + // Called by Shell command + boolean isDefaultAugmentedServiceEnabled(@UserIdInt int userId) { + enforceCallingPermissionForManagement(); + + synchronized (mLock) { + final AutofillManagerServiceImpl service = getServiceForUserLocked(userId); + if (service != null) { + return service.mAugmentedAutofillResolver.isDefaultServiceEnabled(userId); + } + } + return false; + } + + // Called by Shell command + boolean setDefaultAugmentedServiceEnabled(@UserIdInt int userId, boolean enabled) { + Slog.i(mTag, "setDefaultAugmentedServiceEnabled() for userId " + userId + ": " + enabled); + enforceCallingPermissionForManagement(); + + synchronized (mLock) { + final AutofillManagerServiceImpl service = getServiceForUserLocked(userId); + if (service != null) { + final boolean changed = service.mAugmentedAutofillResolver + .setDefaultServiceEnabled(userId, enabled); + if (changed) { + service.updateRemoteAugmentedAutofillService(); + return true; + } else { + if (debug) { + Slog.d(TAG, "setDefaultAugmentedServiceEnabled(): already " + enabled); + } + } + } + } + return false; + } + private void setLoggingLevelsLocked(boolean debug, boolean verbose) { com.android.server.autofill.Helper.sDebug = debug; android.view.autofill.Helper.sDebug = debug; diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 96123468d245..4bb805564f09 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -156,6 +156,7 @@ final class AutofillManagerServiceImpl /** When was {@link PruneTask} last executed? */ private long mLastPrune = 0; + // TODO(b/128911469): move to AutofillManagerService /** * Object used to set the name of the augmented autofill service. */ diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java index c562fb1b7dde..bbe37a5df4f4 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java @@ -109,6 +109,13 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { + "implementation."); pw.println(" To reset, call with just the USER_ID argument."); pw.println(""); + pw.println(" set default-augmented-service-enabled USER_ID [true|false]"); + pw.println(" Enable / disable the default augmented autofill service for the user."); + pw.println(""); + pw.println(" get default-augmented-service-enabled USER_ID"); + pw.println(" Checks whether the default augmented autofill service is enabled for " + + "the user."); + pw.println(""); pw.println(" list sessions [--user USER_ID]"); pw.println(" Lists all pending sessions."); pw.println(""); @@ -136,6 +143,8 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { return getFullScreenMode(pw); case "bind-instant-service-allowed": return getBindInstantService(pw); + case "default-augmented-service-enabled": + return getDefaultAugmentedServiceEnabled(pw); default: pw.println("Invalid set: " + what); return -1; @@ -158,6 +167,8 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { return setBindInstantService(pw); case "temporary-augmented-service": return setTemporaryAugmentedService(pw); + case "default-augmented-service-enabled": + return setDefaultAugmentedServiceEnabled(pw); default: pw.println("Invalid set: " + what); return -1; @@ -314,6 +325,23 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand { return 0; } + private int getDefaultAugmentedServiceEnabled(PrintWriter pw) { + final int userId = getNextIntArgRequired(); + final boolean enabled = mService.isDefaultAugmentedServiceEnabled(userId); + pw.println(enabled); + return 0; + } + + private int setDefaultAugmentedServiceEnabled(PrintWriter pw) { + final int userId = getNextIntArgRequired(); + final boolean enabled = Boolean.parseBoolean(getNextArgRequired()); + final boolean changed = mService.setDefaultAugmentedServiceEnabled(userId, enabled); + if (!changed) { + pw.println("already " + enabled); + } + return 0; + } + private int requestDestroy(PrintWriter pw) { if (!isNextArgSessions(pw)) { return -1; diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerServiceShellCommand.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerServiceShellCommand.java index 86ad52d9a42b..fc9754a2b0f5 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerServiceShellCommand.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerServiceShellCommand.java @@ -114,7 +114,7 @@ public final class ContentCaptureManagerServiceShellCommand extends ShellCommand case "temporary-service": return setTemporaryService(pw); case "default-service-enabled": - return setDefaultServiceEnabled(); + return setDefaultServiceEnabled(pw); default: pw.println("Invalid set: " + what); return -1; @@ -159,10 +159,13 @@ public final class ContentCaptureManagerServiceShellCommand extends ShellCommand return 0; } - private int setDefaultServiceEnabled() { + private int setDefaultServiceEnabled(PrintWriter pw) { final int userId = getNextIntArgRequired(); - final boolean enabled = Boolean.parseBoolean(getNextArg()); - mService.setDefaultServiceEnabled(userId, enabled); + final boolean enabled = Boolean.parseBoolean(getNextArgRequired()); + final boolean changed = mService.setDefaultServiceEnabled(userId, enabled); + if (!changed) { + pw.println("already " + enabled); + } return 0; } diff --git a/services/core/java/com/android/server/infra/AbstractMasterSystemService.java b/services/core/java/com/android/server/infra/AbstractMasterSystemService.java index 3c27bf240570..430203de8268 100644 --- a/services/core/java/com/android/server/infra/AbstractMasterSystemService.java +++ b/services/core/java/com/android/server/infra/AbstractMasterSystemService.java @@ -332,21 +332,31 @@ public abstract class AbstractMasterSystemService