Merge "Assigns Ids to the internal rotation resolver callback." into sc-dev
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user