From 06f0519a01b2c43fcd599168e5d112a3afcecf05 Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Wed, 10 Apr 2019 16:16:26 -0700 Subject: Make RemoteService propagate Context#bindService failure to PendingRequests ...and fix the attached bug which was caused by infinite wait due to lack of said signal Fixes: 129549258 Bug: 126266412 Test: - atest CtsContentCaptureServiceTestCases - Ensure b/129549258#comment5 no longer reproduces Change-Id: Id434ce268ca4ae6aa09140a3e17b6d8f476f3d9f --- core/java/android/app/role/RoleControllerManager.java | 5 +++++ .../AbstractMultiplePendingRequestsRemoteService.java | 14 ++++++++++++++ .../com/android/internal/infra/AbstractRemoteService.java | 13 +++++++++++++ .../infra/AbstractSinglePendingRequestRemoteService.java | 9 +++++++++ 4 files changed, 41 insertions(+) diff --git a/core/java/android/app/role/RoleControllerManager.java b/core/java/android/app/role/RoleControllerManager.java index bd981179e2ff..76b219981c59 100644 --- a/core/java/android/app/role/RoleControllerManager.java +++ b/core/java/android/app/role/RoleControllerManager.java @@ -252,6 +252,11 @@ public class RoleControllerManager { Log.e(LOG_TAG, "Error calling grantDefaultRoles()", e); } } + + @Override + protected void onFailed() { + mRemoteCallback.sendResult(null); + } } /** diff --git a/core/java/com/android/internal/infra/AbstractMultiplePendingRequestsRemoteService.java b/core/java/com/android/internal/infra/AbstractMultiplePendingRequestsRemoteService.java index 206efa94b7f6..5efa94a09cdf 100644 --- a/core/java/com/android/internal/infra/AbstractMultiplePendingRequestsRemoteService.java +++ b/core/java/com/android/internal/infra/AbstractMultiplePendingRequestsRemoteService.java @@ -75,6 +75,20 @@ public abstract class AbstractMultiplePendingRequestsRemoteService request = mPendingRequests.get(i); + request.onFailed(); + request.finish(); + } + mPendingRequests = null; + } + } + @Override // from AbstractRemoteService public void dump(@NonNull String prefix, @NonNull PrintWriter pw) { super.dump(prefix, pw); diff --git a/core/java/com/android/internal/infra/AbstractRemoteService.java b/core/java/com/android/internal/infra/AbstractRemoteService.java index 1155854efd55..a09013ce816e 100644 --- a/core/java/com/android/internal/infra/AbstractRemoteService.java +++ b/core/java/com/android/internal/infra/AbstractRemoteService.java @@ -397,6 +397,11 @@ public abstract class AbstractRemoteService pendingRequest); + /** + * Called if {@link Context#bindServiceAsUser} returns {@code false}. + */ + abstract void handleBindFailure(); + private boolean handleIsBound() { return mService != null; } @@ -418,6 +423,8 @@ public abstract class AbstractRemoteService