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 ff284dcabfd0e..d3cd48a81eaba 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -247,7 +247,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; } @@ -1150,12 +1151,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