summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/autofill/java/com/android/server/autofill/Helper.java8
-rw-r--r--services/autofill/java/com/android/server/autofill/RemoteFieldClassificationService.java23
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java6
3 files changed, 35 insertions, 2 deletions
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index ac770439a524..82af38200166 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -46,6 +46,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.server.utils.Slogf;
import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
@@ -319,6 +320,13 @@ public final class Helper {
return context.createDisplayContext(display);
}
+ static <T> @Nullable T weakDeref(WeakReference<T> weakRef, String tag, String prefix) {
+ T deref = weakRef.get();
+ if (deref == null) {
+ Slog.wtf(tag, prefix + "fail to deref " + weakRef);
+ }
+ return deref;
+ }
private interface ViewNodeFilter {
boolean matches(ViewNode node);
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFieldClassificationService.java b/services/autofill/java/com/android/server/autofill/RemoteFieldClassificationService.java
index ea31074ff5d2..bcca0069eb34 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFieldClassificationService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFieldClassificationService.java
@@ -44,6 +44,8 @@ import android.util.Slog;
import com.android.internal.infra.AbstractRemoteService;
import com.android.internal.infra.ServiceConnector;
+import java.lang.ref.WeakReference;
+
/**
* Class responsible for connection with the Remote {@link FieldClassificationService}.
* This class is instantiated when {@link AutofillManagerServiceImpl} is established.
@@ -133,7 +135,8 @@ final class RemoteFieldClassificationService
}
public void onFieldClassificationRequest(@NonNull FieldClassificationRequest request,
- FieldClassificationServiceCallbacks fieldClassificationServiceCallbacks) {
+ WeakReference<FieldClassificationServiceCallbacks>
+ fieldClassificationServiceCallbacksWeakRef) {
final long startTime = SystemClock.elapsedRealtime();
if (sVerbose) {
Slog.v(TAG, "onFieldClassificationRequest request:" + request);
@@ -170,6 +173,15 @@ final class RemoteFieldClassificationService
Slog.d(TAG, "onSuccess " + msg);
}
}
+ FieldClassificationServiceCallbacks
+ fieldClassificationServiceCallbacks =
+ Helper.weakDeref(
+ fieldClassificationServiceCallbacksWeakRef,
+ TAG, "onSuccess "
+ );
+ if (fieldClassificationServiceCallbacks == null) {
+ return;
+ }
fieldClassificationServiceCallbacks
.onClassificationRequestSuccess(response);
}
@@ -180,6 +192,15 @@ final class RemoteFieldClassificationService
if (sDebug) {
Slog.d(TAG, "onFailure");
}
+ FieldClassificationServiceCallbacks
+ fieldClassificationServiceCallbacks =
+ Helper.weakDeref(
+ fieldClassificationServiceCallbacksWeakRef,
+ TAG, "onFailure "
+ );
+ if (fieldClassificationServiceCallbacks == null) {
+ return;
+ }
fieldClassificationServiceCallbacks
.onClassificationRequestFailure(0, null);
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 0c3f8667f4f8..fb26f427dad7 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -850,8 +850,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
RemoteFieldClassificationService remoteFieldClassificationService =
mService.getRemoteFieldClassificationServiceLocked();
if (remoteFieldClassificationService != null) {
+ WeakReference<RemoteFieldClassificationService.FieldClassificationServiceCallbacks>
+ fieldClassificationServiceCallbacksWeakRef =
+ new WeakReference<>(Session.this);
remoteFieldClassificationService.onFieldClassificationRequest(
- mClassificationState.mPendingFieldClassificationRequest, Session.this);
+ mClassificationState.mPendingFieldClassificationRequest,
+ fieldClassificationServiceCallbacksWeakRef);
}
mClassificationState.onFieldClassificationRequestSent();
}