From cbe35cc08f380823b781309618145d5e94fccd4f Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Thu, 2 May 2019 14:24:55 -0700 Subject: [PATCH] Clean augmented-only autofill sessions when augmented service changes. Test: manual verification Test: atest CtsContentCaptureServiceTestCases # sanity check Bug: 123100811 Merged-In: I3de4895e2baea6f127ec3062bc0affbc40343d52 Change-Id: I3de4895e2baea6f127ec3062bc0affbc40343d52 --- .../autofill/AutofillManagerServiceImpl.java | 22 +++++++++++++++++-- .../com/android/server/autofill/Session.java | 11 ++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 386dec472019a..04aedcde045b1 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -1051,6 +1051,14 @@ final class AutofillManagerServiceImpl } } + @GuardedBy("mLock") + void destroySessionsForAugmentedAutofillOnlyLocked() { + final int sessionCount = mSessions.size(); + for (int i = sessionCount - 1; i >= 0; i--) { + mSessions.valueAt(i).forceRemoveSelfIfForAugmentedAutofillOnlyLocked(); + } + } + // TODO(b/64940307): remove this method if SaveUI is refactored to be attached on activities @GuardedBy("mLock") void destroyFinishedSessionsLocked() { @@ -1070,9 +1078,18 @@ final class AutofillManagerServiceImpl @GuardedBy("mLock") void listSessionsLocked(ArrayList output) { final int numSessions = mSessions.size(); + if (numSessions <= 0) return; + + final String fmt = "%d:%s:%s"; for (int i = 0; i < numSessions; i++) { - output.add((mInfo != null ? mInfo.getServiceInfo().getComponentName() - : null) + ":" + mSessions.keyAt(i)); + final int id = mSessions.keyAt(i); + final String service = mInfo == null + ? "no_svc" + : mInfo.getServiceInfo().getComponentName().flattenToShortString(); + final String augmentedService = mRemoteAugmentedAutofillServiceInfo == null + ? "no_aug" + : mRemoteAugmentedAutofillServiceInfo.getComponentName().flattenToShortString(); + output.add(String.format(fmt, id, service, augmentedService)); } } @@ -1136,6 +1153,7 @@ final class AutofillManagerServiceImpl Slog.v(TAG, "updateRemoteAugmentedAutofillService(): " + "destroying old remote service"); } + destroySessionsForAugmentedAutofillOnlyLocked(); mRemoteAugmentedAutofillService.destroy(); mRemoteAugmentedAutofillService = null; mRemoteAugmentedAutofillServiceInfo = null; diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 1a0353cde8cee..c4716666be1a5 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -3267,6 +3267,17 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState forceRemoveSelfLocked(AutofillManager.STATE_UNKNOWN); } + @GuardedBy("mLock") + void forceRemoveSelfIfForAugmentedAutofillOnlyLocked() { + if (sVerbose) { + Slog.v(TAG, "forceRemoveSelfIfForAugmentedAutofillOnly(" + this.id + "): " + + mForAugmentedAutofillOnly); + } + if (!mForAugmentedAutofillOnly) return; + + forceRemoveSelfLocked(); + } + @GuardedBy("mLock") void forceRemoveSelfLocked(int clientState) { if (sVerbose) Slog.v(TAG, "forceRemoveSelfLocked(): " + mPendingSaveUi);