Merge "Assigns Ids to the internal rotation resolver callback." into sc-dev

This commit is contained in:
Yi Jiang
2021-05-14 05:14:25 +00:00
committed by Android (Google) Code Review

View File

@@ -1076,6 +1076,9 @@ public abstract class WindowOrientationListener {
private boolean mRotationEvaluationScheduled; private boolean mRotationEvaluationScheduled;
private long mRotationResolverTimeoutMillis; private long mRotationResolverTimeoutMillis;
private final ActivityTaskManagerInternal mActivityTaskManagerInternal; private final ActivityTaskManagerInternal mActivityTaskManagerInternal;
private int mCurrentCallbackId = 0;
private Runnable mCancelRotationResolverRequest;
OrientationSensorJudge() { OrientationSensorJudge() {
super(); super();
setupRotationResolverParameters(); setupRotationResolverParameters();
@@ -1142,8 +1145,6 @@ public abstract class WindowOrientationListener {
RotationResolverInternal.class); RotationResolverInternal.class);
} }
final CancellationSignal cancellationSignal = new CancellationSignal();
String packageName = null; String packageName = null;
if (mActivityTaskManagerInternal != null) { if (mActivityTaskManagerInternal != null) {
final WindowProcessController controller = final WindowProcessController controller =
@@ -1155,16 +1156,40 @@ public abstract class WindowOrientationListener {
} }
} }
mCurrentCallbackId++;
if (mCancelRotationResolverRequest != null) {
getHandler().removeCallbacks(mCancelRotationResolverRequest);
}
final CancellationSignal cancellationSignal = new CancellationSignal();
mCancelRotationResolverRequest = cancellationSignal::cancel;
getHandler().postDelayed(
mCancelRotationResolverRequest, mRotationResolverTimeoutMillis);
mRotationResolverService.resolveRotation( mRotationResolverService.resolveRotation(
new RotationResolverInternal.RotationResolverCallbackInternal() { new RotationResolverInternal.RotationResolverCallbackInternal() {
private final int mCallbackId = mCurrentCallbackId;
@Override @Override
public void onSuccess(int result) { public void onSuccess(int result) {
finalizeRotation(result); finalizeRotationIfFresh(result);
} }
@Override @Override
public void onFailure(int error) { public void onFailure(int error) {
finalizeRotation(reportedRotation); finalizeRotationIfFresh(reportedRotation);
}
private void finalizeRotationIfFresh(int rotation) {
// Ignore the callback if it's not the latest.
if (mCallbackId == mCurrentCallbackId) {
getHandler().removeCallbacks(mCancelRotationResolverRequest);
finalizeRotation(rotation);
} else {
Slog.d(TAG, String.format(
"An outdated callback received [%s vs. %s]. Ignoring "
+ "it.",
mCallbackId, mCurrentCallbackId));
}
} }
}, },
packageName, packageName,
@@ -1172,8 +1197,6 @@ public abstract class WindowOrientationListener {
mCurrentRotation, mCurrentRotation,
mRotationResolverTimeoutMillis, mRotationResolverTimeoutMillis,
cancellationSignal); cancellationSignal);
getHandler().postDelayed(cancellationSignal::cancel,
mRotationResolverTimeoutMillis);
} else { } else {
finalizeRotation(reportedRotation); finalizeRotation(reportedRotation);
} }