diff options
| author | 2019-03-20 20:42:06 +0000 | |
|---|---|---|
| committer | 2019-03-20 20:42:06 +0000 | |
| commit | d766168cda9d3f58b5d29c1abea28ca5bf2f076b (patch) | |
| tree | e1f05ddebf841c6008708b778adf877f1ac528d7 | |
| parent | 29162935f0be3cba1b59730caf8034d9961b81c4 (diff) | |
| parent | a70dd8c952f33b18534dcc707e334ae13dac0e3e (diff) | |
Merge "New autofill cmds to enable / disable / check default augmented service."
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 22e586594ba5..dd3efa0b4afa 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<M extends AbstractMasterSystem * with the test results. * * @throws SecurityException if caller is not allowed to manage this service's settings. + * + * @return whether the enabled state changed. */ - public final void setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) { + public final boolean setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) { Slog.i(mTag, "setDefaultServiceEnabled() for userId " + userId + ": " + enabled); enforceCallingPermissionForManagement(); synchronized (mLock) { + final boolean changed = mServiceNameResolver.setDefaultServiceEnabled(userId, enabled); + if (!changed) { + if (verbose) { + Slog.v(mTag, "setDefaultServiceEnabled(" + userId + "): already " + enabled); + } + return false; + } + final S oldService = peekServiceForUserLocked(userId); if (oldService != null) { oldService.removeSelfFromCacheLocked(); } - mServiceNameResolver.setDefaultServiceEnabled(userId, enabled); // Must update the service on cache so its initialization code is triggered updateCachedServiceLocked(userId); } + return true; } /** diff --git a/services/core/java/com/android/server/infra/FrameworkResourcesServiceNameResolver.java b/services/core/java/com/android/server/infra/FrameworkResourcesServiceNameResolver.java index 1b237949a543..d20481331e56 100644 --- a/services/core/java/com/android/server/infra/FrameworkResourcesServiceNameResolver.java +++ b/services/core/java/com/android/server/infra/FrameworkResourcesServiceNameResolver.java @@ -174,23 +174,35 @@ public final class FrameworkResourcesServiceNameResolver implements ServiceNameR } @Override - public void setDefaultServiceEnabled(int userId, boolean enabled) { + public boolean setDefaultServiceEnabled(int userId, boolean enabled) { synchronized (mLock) { + final boolean currentlyEnabled = isDefaultServiceEnabledLocked(userId); + if (currentlyEnabled == enabled) { + Slog.i(TAG, "setDefaultServiceEnabled(" + userId + "): already " + enabled); + return false; + } if (enabled) { + Slog.i(TAG, "disabling default service for user " + userId); mDefaultServicesDisabled.removeAt(userId); } else { + Slog.i(TAG, "enabling default service for user " + userId); mDefaultServicesDisabled.put(userId, true); } } + return true; } @Override public boolean isDefaultServiceEnabled(int userId) { synchronized (mLock) { - return !mDefaultServicesDisabled.get(userId); + return isDefaultServiceEnabledLocked(userId); } } + private boolean isDefaultServiceEnabledLocked(int userId) { + return !mDefaultServicesDisabled.get(userId); + } + @Override public String toString() { return "FrameworkResourcesServiceNamer[temps=" + mTemporaryServiceNames + "]"; diff --git a/services/core/java/com/android/server/infra/ServiceNameResolver.java b/services/core/java/com/android/server/infra/ServiceNameResolver.java index 5b60413eefad..8c348ebbfcd4 100644 --- a/services/core/java/com/android/server/infra/ServiceNameResolver.java +++ b/services/core/java/com/android/server/infra/ServiceNameResolver.java @@ -115,11 +115,13 @@ public interface ServiceNameResolver { * * @param userId user handle * @param enabled whether the default service should be used when the temporary service is not - * set + * set. If the service enabled state is already that value, the command is ignored and this + * method return {@code false}. * + * @return whether the enabled state changed. * @throws UnsupportedOperationException if not implemented. */ - default void setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) { + default boolean setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) { throw new UnsupportedOperationException("changing default service not supported"); } |