Merge "[Bugfix][RemoteAnimation] Fix IndexOutOfBoundsException in onAnimationFinished of RemoteAnimationController" am: 4b7206b8d8 am: b7e86b3e01 am: 8d5e476385 am: 0bb4677873
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2132452 Change-Id: Ifae7b9e5d21925fe0c28acaeb24e4f6583d9adf3 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -71,6 +71,7 @@ class RemoteAnimationController implements DeathRecipient {
|
|||||||
final ArrayList<NonAppWindowAnimationAdapter> mPendingNonAppAnimations = new ArrayList<>();
|
final ArrayList<NonAppWindowAnimationAdapter> mPendingNonAppAnimations = new ArrayList<>();
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final Runnable mTimeoutRunnable = () -> cancelAnimation("timeoutRunnable");
|
private final Runnable mTimeoutRunnable = () -> cancelAnimation("timeoutRunnable");
|
||||||
|
private boolean mIsFinishing;
|
||||||
|
|
||||||
private FinishedCallback mFinishedCallback;
|
private FinishedCallback mFinishedCallback;
|
||||||
private final boolean mIsActivityEmbedding;
|
private final boolean mIsActivityEmbedding;
|
||||||
@@ -275,6 +276,7 @@ class RemoteAnimationController implements DeathRecipient {
|
|||||||
mPendingAnimations.size());
|
mPendingAnimations.size());
|
||||||
mHandler.removeCallbacks(mTimeoutRunnable);
|
mHandler.removeCallbacks(mTimeoutRunnable);
|
||||||
synchronized (mService.mGlobalLock) {
|
synchronized (mService.mGlobalLock) {
|
||||||
|
mIsFinishing = true;
|
||||||
unlinkToDeathOfRunner();
|
unlinkToDeathOfRunner();
|
||||||
releaseFinishedCallback();
|
releaseFinishedCallback();
|
||||||
mService.openSurfaceTransaction();
|
mService.openSurfaceTransaction();
|
||||||
@@ -319,6 +321,7 @@ class RemoteAnimationController implements DeathRecipient {
|
|||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
mService.closeSurfaceTransaction("RemoteAnimationController#finished");
|
mService.closeSurfaceTransaction("RemoteAnimationController#finished");
|
||||||
|
mIsFinishing = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Reset input for all activities when the remote animation is finished.
|
// Reset input for all activities when the remote animation is finished.
|
||||||
@@ -558,6 +561,9 @@ class RemoteAnimationController implements DeathRecipient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationCancelled(SurfaceControl animationLeash) {
|
public void onAnimationCancelled(SurfaceControl animationLeash) {
|
||||||
|
if (mIsFinishing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mRecord.mAdapter == this) {
|
if (mRecord.mAdapter == this) {
|
||||||
mRecord.mAdapter = null;
|
mRecord.mAdapter = null;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user