diff options
| author | Yi Jiang <eejiang@google.com> | 2021-04-30 20:33:03 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-04-30 20:33:03 +0000 |
| commit | 73d3172e96c2185357d19fdbf317ae588910119f (patch) | |
| tree | 212be9608aff805648f4257440ca25aa25a484aa /core/java | |
| parent | bc75177c71faaa0a7d48542f06f62542029698e1 (diff) | |
| parent | bd4a6002256b5644e1c57f7d42dac37775c8fc2e (diff) | |
Merge "Adds expirations for remote callbacks" into sc-dev
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/service/rotationresolver/RotationResolverService.java | 14 |
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); } |
