From 350b2dca6c252dad099bc8e2d96cbffd6e98dfef Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 26 May 2017 09:24:33 -0700 Subject: [PATCH] Disable autofill while user setup is not completed. Test: manual verification with experimental app Test: manual verification with Autofill with Google on flashed deviced Test: existing CtsAutoFillServiceTestCases pass Test: new LoginActivityTest.testSetupComplete pass Fixes: 62049772 Change-Id: I1e914c44062755f8c88656482338e76aeaafd543 --- .../autofill/AutofillManagerService.java | 3 +++ .../autofill/AutofillManagerServiceImpl.java | 27 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index 93b5ed5e23d7c..03f25bf065d27 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -711,10 +711,13 @@ public final class AutofillManagerService extends SystemService { ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.AUTOFILL_SERVICE), false, this, UserHandle.USER_ALL); + resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.USER_SETUP_COMPLETE), false, this, UserHandle.USER_ALL); } @Override public void onChange(boolean selfChange, Uri uri, int userId) { + if (sVerbose) Slog.v(TAG, "onChange(): uri=" + uri + ", userId=" + userId); synchronized (mLock) { updateCachedServiceLocked(userId); } diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 2cb0bd5d1064a..7abaf7ff99220 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -51,7 +51,6 @@ import android.service.autofill.FillEventHistory.Event; import android.service.autofill.FillResponse; import android.service.autofill.IAutoFillService; import android.text.TextUtils; -import android.util.ArrayMap; import android.util.LocalLog; import android.util.Slog; import android.util.SparseArray; @@ -99,6 +98,12 @@ final class AutofillManagerServiceImpl { */ private boolean mDisabled; + /** + * Caches whether the setup completed for the current user. + */ + @GuardedBy("mLock") + private boolean mSetupComplete; + private final HandlerCaller.Callback mHandlerCallback = (msg) -> { switch (msg.what) { case MSG_SERVICE_SAVE: @@ -171,6 +176,12 @@ final class AutofillManagerServiceImpl { } } + private boolean isSetupCompletedLocked() { + final String setupComplete = Settings.Secure.getStringForUser( + mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, mUserId); + return "1".equals(setupComplete); + } + private String getComponentNameFromSettings() { return Settings.Secure.getStringForUser( mContext.getContentResolver(), Settings.Secure.AUTOFILL_SERVICE, mUserId); @@ -178,6 +189,12 @@ final class AutofillManagerServiceImpl { void updateLocked(boolean disabled) { final boolean wasEnabled = isEnabled(); + if (sVerbose) { + Slog.v(TAG, "updateLocked(u=" + mUserId + "): wasEnabled=" + wasEnabled + + ", mSetupComplete= " + mSetupComplete + + ", disabled=" + disabled + ", mDisabled=" + mDisabled); + } + mSetupComplete = isSetupCompletedLocked(); mDisabled = disabled; ComponentName serviceComponent = null; ServiceInfo serviceInfo = null; @@ -199,8 +216,9 @@ final class AutofillManagerServiceImpl { } else { mInfo = null; } - if (wasEnabled != isEnabled()) { - if (!isEnabled()) { + final boolean isEnabled = isEnabled(); + if (wasEnabled != isEnabled) { + if (!isEnabled) { final int sessionCount = mSessions.size(); for (int i = sessionCount - 1; i >= 0; i--) { final Session session = mSessions.valueAt(i); @@ -534,6 +552,7 @@ final class AutofillManagerServiceImpl { pw.print(prefix); pw.print("Default component: "); pw.println(mContext.getString(R.string.config_defaultAutofillService)); pw.print(prefix); pw.print("Disabled: "); pw.println(mDisabled); + pw.print(prefix); pw.print("Setup complete: "); pw.println(mSetupComplete); pw.print(prefix); pw.print("Last prune: "); pw.println(mLastPrune); final int size = mSessions.size(); @@ -617,7 +636,7 @@ final class AutofillManagerServiceImpl { } boolean isEnabled() { - return mInfo != null && !mDisabled; + return mSetupComplete && mInfo != null && !mDisabled; } @Override