summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorYi Jiang <eejiang@google.com>2021-04-30 20:33:03 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-04-30 20:33:03 +0000
commit73d3172e96c2185357d19fdbf317ae588910119f (patch)
tree212be9608aff805648f4257440ca25aa25a484aa /core/java
parentbc75177c71faaa0a7d48542f06f62542029698e1 (diff)
parentbd4a6002256b5644e1c57f7d42dac37775c8fc2e (diff)
Merge "Adds expirations for remote callbacks" into sc-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/service/rotationresolver/RotationResolverService.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/core/java/android/service/rotationresolver/RotationResolverService.java b/core/java/android/service/rotationresolver/RotationResolverService.java
index 0932901edf50..8278ded4b18b 100644
--- a/core/java/android/service/rotationresolver/RotationResolverService.java
+++ b/core/java/android/service/rotationresolver/RotationResolverService.java
@@ -31,6 +31,7 @@ import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.view.Surface;
import java.lang.annotation.Retention;
@@ -136,12 +137,16 @@ public abstract class RotationResolverService extends Service {
@MainThread
private void resolveRotation(IRotationResolverCallback callback,
RotationResolutionRequest request, ICancellationSignal transport) {
+ // If there is a valid, uncancelled pending callback running in process, the new rotation
+ // resolution request will be rejected immediately with a failure result.
if (mPendingCallback != null
- && (mCancellationSignal == null || !mCancellationSignal.isCanceled())) {
+ && (mCancellationSignal == null || !mCancellationSignal.isCanceled())
+ && (SystemClock.uptimeMillis() < mPendingCallback.mExpirationTime)) {
reportFailures(callback, ROTATION_RESULT_FAILURE_PREEMPTED);
return;
}
- mPendingCallback = new RotationResolverCallbackWrapper(callback, this);
+ mPendingCallback = new RotationResolverCallbackWrapper(callback, this,
+ SystemClock.uptimeMillis() + request.getTimeoutMillis());
mCancellationSignal = CancellationSignal.fromTransport(transport);
onResolveRotation(request, mCancellationSignal, mPendingCallback);
@@ -224,12 +229,15 @@ public abstract class RotationResolverService extends Service {
@NonNull
private final Handler mHandler;
+ private final long mExpirationTime;
+
private RotationResolverCallbackWrapper(
@NonNull android.service.rotationresolver.IRotationResolverCallback callback,
- RotationResolverService service) {
+ RotationResolverService service, long expirationTime) {
mCallback = callback;
mService = service;
mHandler = service.mMainThreadHandler;
+ mExpirationTime = expirationTime;
Objects.requireNonNull(mHandler);
}