Merge "Don't call remoteFillService.destroy() until session is removed." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-05-31 18:50:55 +00:00
committed by Android (Google) Code Review
2 changed files with 16 additions and 5 deletions

View File

@@ -51,6 +51,7 @@ import android.service.autofill.FillEventHistory.Event;
import android.service.autofill.FillResponse;
import android.service.autofill.IAutoFillService;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.LocalLog;
import android.util.Slog;
import android.util.SparseArray;
@@ -465,10 +466,17 @@ final class AutofillManagerServiceImpl {
if (sVerbose) Slog.v(TAG, "destroyLocked()");
final int numSessions = mSessions.size();
final ArraySet<RemoteFillService> remoteFillServices = new ArraySet<>(numSessions);
for (int i = 0; i < numSessions; i++) {
mSessions.valueAt(i).destroyLocked();
final RemoteFillService remoteFillService = mSessions.valueAt(i).destroyLocked();
if (remoteFillService != null) {
remoteFillServices.add(remoteFillService);
}
}
mSessions.clear();
for (int i = 0; i < remoteFillServices.size(); i++) {
remoteFillServices.valueAt(i).destroy();
}
sendStateToClients(true);
}

View File

@@ -1496,15 +1496,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
void destroyLocked() {
RemoteFillService destroyLocked() {
if (mDestroyed) {
return;
return null;
}
mRemoteFillService.destroy();
hideAllUiIfOwnedByMe();
mUi.clearCallback(this);
mDestroyed = true;
mMetricsLogger.action(MetricsEvent.AUTOFILL_SESSION_FINISHED, mPackageName);
return mRemoteFillService;
}
private void hideAllUiIfOwnedByMe() {
@@ -1528,8 +1528,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
+ id + " destroyed");
return;
}
destroyLocked();
final RemoteFillService remoteFillService = destroyLocked();
mService.removeSessionLocked(id);
if (remoteFillService != null) {
remoteFillService.destroy();
}
}
private int getLastResponseIndex() {