summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/autofill/AutofillService.java10
-rw-r--r--services/autofill/java/com/android/server/autofill/RemoteFillService.java27
2 files changed, 25 insertions, 12 deletions
diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java
index c068e6a21db6..b35e57286a37 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -18,16 +18,15 @@ package android.service.autofill;
import android.annotation.CallSuper;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.os.RemoteException;
-import android.provider.Settings;
-
-import com.android.internal.os.HandlerCaller;
import android.annotation.SdkConstant;
-import android.app.Service;import android.content.Intent;
+import android.app.Service;
+import android.content.Intent;
import android.os.CancellationSignal;
import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.Looper;
+import android.os.RemoteException;
+import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.ViewStructure;
@@ -35,6 +34,7 @@ import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
+import com.android.internal.os.HandlerCaller;
import com.android.internal.os.SomeArgs;
/**
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index 5e25dfa49d70..2a2797c160d8 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -290,7 +290,7 @@ final class RemoteFillService implements DeathRecipient {
}
private void dispatchOnFillRequestFailure(PendingRequest pendingRequest,
- CharSequence message) {
+ @Nullable CharSequence message) {
mHandler.getHandler().post(() -> {
if (handleResponseCallbackCommon(pendingRequest)) {
mCallbacks.onFillRequestFailure(message, mComponentName.getPackageName());
@@ -298,6 +298,16 @@ final class RemoteFillService implements DeathRecipient {
});
}
+ private void dispatchOnFillTimeout(@NonNull ICancellationSignal cancellationSignal) {
+ mHandler.getHandler().post(() -> {
+ try {
+ cancellationSignal.cancel();
+ } catch (RemoteException e) {
+ Slog.w(LOG_TAG, "Error calling cancellation signal: " + e);
+ }
+ });
+ }
+
private void dispatchOnSaveRequestSuccess(PendingRequest pendingRequest) {
mHandler.getHandler().post(() -> {
if (handleResponseCallbackCommon(pendingRequest)) {
@@ -307,7 +317,7 @@ final class RemoteFillService implements DeathRecipient {
}
private void dispatchOnSaveRequestFailure(PendingRequest pendingRequest,
- CharSequence message) {
+ @Nullable CharSequence message) {
mHandler.getHandler().post(() -> {
if (handleResponseCallbackCommon(pendingRequest)) {
mCallbacks.onSaveRequestFailure(message, mComponentName.getPackageName());
@@ -432,7 +442,7 @@ final class RemoteFillService implements DeathRecipient {
if (remoteService != null) {
Slog.w(LOG_TAG, getClass().getSimpleName() + " timed out after "
+ TIMEOUT_REMOTE_REQUEST_MILLIS + " ms");
- fail(remoteService);
+ onTimeout(remoteService);
}
};
mServiceHandler.postAtTime(mTimeoutTrigger,
@@ -485,7 +495,7 @@ final class RemoteFillService implements DeathRecipient {
* Called by the self-destructure timeout when the AutofilllService didn't reply to the
* request on time.
*/
- abstract void fail(RemoteFillService remoteService);
+ abstract void onTimeout(RemoteFillService remoteService);
/**
* @return whether this request leads to a final state where no
@@ -549,7 +559,10 @@ final class RemoteFillService implements DeathRecipient {
}
@Override
- void fail(RemoteFillService remoteService) {
+ void onTimeout(RemoteFillService remoteService) {
+ // NOTE: Must make these 2 calls asynchronously, because the cancellation signal is
+ // handled by the service, which could block.
+ remoteService.dispatchOnFillTimeout(mCancellation);
remoteService.dispatchOnFillRequestFailure(PendingFillRequest.this, null);
}
@@ -617,7 +630,7 @@ final class RemoteFillService implements DeathRecipient {
}
@Override
- void fail(RemoteFillService remoteService) {
+ void onTimeout(RemoteFillService remoteService) {
remoteService.dispatchOnSaveRequestFailure(PendingSaveRequest.this, null);
}
@@ -630,7 +643,7 @@ final class RemoteFillService implements DeathRecipient {
} catch (RemoteException e) {
Slog.e(LOG_TAG, "Error calling on save request", e);
- remoteService.dispatchOnFillRequestFailure(PendingSaveRequest.this, null);
+ remoteService.dispatchOnSaveRequestFailure(PendingSaveRequest.this, null);
}
}
}