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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14255000

Change-Id: Ib84e3d7e6ad727bace762d50b364d8c03933da85
This commit is contained in:
Yi Jiang
2021-05-14 05:31:36 +00:00
committed by Automerger Merge Worker

View File

@@ -1076,6 +1076,9 @@ public abstract class WindowOrientationListener {
private boolean mRotationEvaluationScheduled;
private long mRotationResolverTimeoutMillis;
private final ActivityTaskManagerInternal mActivityTaskManagerInternal;
private int mCurrentCallbackId = 0;
private Runnable mCancelRotationResolverRequest;
OrientationSensorJudge() {
super();
setupRotationResolverParameters();
@@ -1142,8 +1145,6 @@ public abstract class WindowOrientationListener {
RotationResolverInternal.class);
}
final CancellationSignal cancellationSignal = new CancellationSignal();
String packageName = null;
if (mActivityTaskManagerInternal != null) {
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(
new RotationResolverInternal.RotationResolverCallbackInternal() {
private final int mCallbackId = mCurrentCallbackId;
@Override
public void onSuccess(int result) {
finalizeRotation(result);
finalizeRotationIfFresh(result);
}
@Override
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,
@@ -1172,8 +1197,6 @@ public abstract class WindowOrientationListener {
mCurrentRotation,
mRotationResolverTimeoutMillis,
cancellationSignal);
getHandler().postDelayed(cancellationSignal::cancel,
mRotationResolverTimeoutMillis);
} else {
finalizeRotation(reportedRotation);
}