From d6a30c8b0c3c1784242f0528a997415827e3cfaf Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 22 Mar 2019 17:07:49 -0700 Subject: [PATCH] Fixed augmented autofill workflow so it's bound right away when main service is disabled. Test: manual verification Test: atest AugmentedLoginActivityTest CtsAutoFillServiceTestCases:android.autofillservice.cts.augmented.DisableAutofillTest Fixes: 123100813 Change-Id: Ibf95c83346c0df21afa6a6f9f6e10357a9b61478 --- .../autofill/AutofillManagerService.java | 10 ++++---- .../autofill/AutofillManagerServiceImpl.java | 23 ++++++++++++++++-- .../infra/AbstractPerUserSystemService.java | 24 +++++++++++++++---- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index 87a265cf38d40..7020e7ea69658 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -198,6 +198,11 @@ public final class AutofillManagerService filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); context.registerReceiver(mBroadcastReceiver, filter, null, FgThread.getHandler()); + mAugmentedAutofillResolver = new FrameworkResourcesServiceNameResolver(getContext(), + com.android.internal.R.string.config_defaultAugmentedAutofillService); + mAugmentedAutofillResolver.setOnTemporaryServiceNameChangedCallback( + (u, s) -> getServiceForUserLocked(u).updateRemoteAugmentedAutofillService()); + if (mSupportedSmartSuggestionModes != AutofillManager.FLAG_SMART_SUGGESTION_OFF) { // Must eager load the services so they bind to the augmented autofill service final UserManager um = getContext().getSystemService(UserManager.class); @@ -207,11 +212,6 @@ public final class AutofillManagerService getServiceForUserLocked(userId); } } - - mAugmentedAutofillResolver = new FrameworkResourcesServiceNameResolver(getContext(), - com.android.internal.R.string.config_defaultAugmentedAutofillService); - mAugmentedAutofillResolver.setOnTemporaryServiceNameChangedCallback( - (u, s) -> getServiceForUserLocked(u).updateRemoteAugmentedAutofillService()); } @Override // from AbstractMasterSystemService diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 89c4043072029..55b4dce6792e2 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -246,7 +246,8 @@ final class AutofillManagerServiceImpl if (isEnabledLocked()) return FLAG_ADD_CLIENT_ENABLED; // Check if it's enabled for augmented autofill - if (isSetupCompletedLocked() && isWhitelistedForAugmentedAutofillLocked(componentName)) { + if (isAugmentedAutofillServiceAvailableLocked() + && isWhitelistedForAugmentedAutofillLocked(componentName)) { return FLAG_ADD_CLIENT_ENABLED_FOR_AUGMENTED_AUTOFILL_ONLY; } @@ -1149,12 +1150,30 @@ final class AutofillManagerServiceImpl mRemoteAugmentedAutofillServiceInfo = null; } - if (isEnabledLocked()) { + final boolean available = isAugmentedAutofillServiceAvailableLocked(); + if (sVerbose) Slog.v(TAG, "updateRemoteAugmentedAutofillService(): " + available); + + if (available) { mRemoteAugmentedAutofillService = getRemoteAugmentedAutofillServiceLocked(); } } } + private boolean isAugmentedAutofillServiceAvailableLocked() { + if (mMaster.verbose) { + Slog.v(TAG, "isAugmentedAutofillService(): " + + "setupCompleted=" + isSetupCompletedLocked() + + ", disabled=" + isDisabledByUserRestrictionsLocked() + + ", augmentedService=" + + mMaster.mAugmentedAutofillResolver.getServiceName(mUserId)); + } + if (!isSetupCompletedLocked() || isDisabledByUserRestrictionsLocked() + || mMaster.mAugmentedAutofillResolver.getServiceName(mUserId) == null) { + return false; + } + return true; + } + /** * Sets which packages and activities can trigger augmented autofill. * diff --git a/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java b/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java index ac07e9d6b0b73..c52921ef344b9 100644 --- a/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java +++ b/services/core/java/com/android/server/infra/AbstractPerUserSystemService.java @@ -112,6 +112,13 @@ public abstract class AbstractPerUserSystemService