diff options
4 files changed, 41 insertions, 0 deletions
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 @@ -76,6 +76,20 @@ public abstract class AbstractMultiplePendingRequestsRemoteService<S } @Override // from AbstractRemoteService + final void handleBindFailure() { + if (mPendingRequests != null) { + final int size = mPendingRequests.size(); + if (mVerbose) Slog.v(mTag, "Sending failure to " + size + " pending requests"); + for (int i = 0; i < size; i++) { + final BasePendingRequest<S, I> 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<S extends AbstractRemoteService<S, I abstract void handlePendingRequestWhileUnBound( @NonNull BasePendingRequest<S, I> 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<S extends AbstractRemoteService<S, I mBinding = false; if (!mServiceDied) { + // TODO(b/126266412): merge these 2 calls? + handleBindFailure(); handleBinderDied(); } } @@ -547,6 +554,12 @@ public abstract class AbstractRemoteService<S extends AbstractRemoteService<S, I void onFinished() { } /** + * Called when request fails due to reasons internal to {@link AbstractRemoteService}, + * e.g. failure to bind to service. + */ + protected void onFailed() { } + + /** * Checks whether this request was cancelled. */ @GuardedBy("mLock") diff --git a/core/java/com/android/internal/infra/AbstractSinglePendingRequestRemoteService.java b/core/java/com/android/internal/infra/AbstractSinglePendingRequestRemoteService.java index 66bee95b0302..2ebf2fd820d8 100644 --- a/core/java/com/android/internal/infra/AbstractSinglePendingRequestRemoteService.java +++ b/core/java/com/android/internal/infra/AbstractSinglePendingRequestRemoteService.java @@ -67,6 +67,15 @@ public abstract class AbstractSinglePendingRequestRemoteService<S } @Override // from AbstractRemoteService + void handleBindFailure() { + if (mPendingRequest != null) { + if (mVerbose) Slog.v(mTag, "Sending failure to " + mPendingRequest); + mPendingRequest.onFailed(); + mPendingRequest = null; + } + } + + @Override // from AbstractRemoteService public void dump(@NonNull String prefix, @NonNull PrintWriter pw) { super.dump(prefix, pw); pw.append(prefix).append("hasPendingRequest=") |