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
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 386dec4..04aedcd 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 @@
}
}
+ @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 @@
@GuardedBy("mLock")
void listSessionsLocked(ArrayList<String> 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 @@
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 1a0353c..c471666 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -3268,6 +3268,17 @@
}
@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);