diff options
| author | 2017-07-27 11:45:24 -0700 | |
|---|---|---|
| committer | 2017-08-10 11:17:27 -0700 | |
| commit | 052562c40fcf113ff854556a3ec73170ec9165d6 (patch) | |
| tree | 440ee80e244769718c3abea9d3d8861b85ee02b7 | |
| parent | 57ae4db22508d3ee764650fec89effb5f3f461c8 (diff) | |
Calls CancellationSignal when onFillRequest() times out.
Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases -t android.autofillservice.cts.LoginActivityTest#testCancellationSignalCalledAfterTimeout
Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases
Fixes: 64034169
Change-Id: I501653405e8244543a4c27f736bacfa23d22e6f7
| -rw-r--r-- | core/java/android/service/autofill/AutofillService.java | 10 | ||||
| -rw-r--r-- | services/autofill/java/com/android/server/autofill/RemoteFillService.java | 27 |
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); } } } |