Merge "InsetAnimationControlImpl: Copy SurfaceControl" into rvc-dev am: 6e2a98a1f8
Change-Id: Id3b7b9b87f44b2850c1f31860dd2634304d74792
This commit is contained in:
@@ -56,4 +56,10 @@ public interface InsetsAnimationControlCallbacks {
|
||||
* apply.
|
||||
*/
|
||||
void applySurfaceParams(SyncRtSurfaceTransactionApplier.SurfaceParams... params);
|
||||
|
||||
/**
|
||||
* Post a message to release the Surface, guaranteed to happen after all
|
||||
* previous calls to applySurfaceParams.
|
||||
*/
|
||||
void releaseSurfaceControlFromRt(SurfaceControl sc);
|
||||
}
|
||||
|
||||
@@ -180,10 +180,19 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
|
||||
mAnimation.setAlpha(mPendingAlpha);
|
||||
if (mFinished) {
|
||||
mController.notifyFinished(this, mShownOnFinish);
|
||||
releaseLeashes();
|
||||
}
|
||||
return mFinished;
|
||||
}
|
||||
|
||||
private void releaseLeashes() {
|
||||
for (int i = mControls.size() - 1; i >= 0; i--) {
|
||||
final InsetsSourceControl c = mControls.valueAt(i);
|
||||
if (c == null) continue;
|
||||
c.release(mController::releaseSurfaceControlFromRt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish(boolean shown) {
|
||||
if (mCancelled || mFinished) {
|
||||
@@ -191,6 +200,7 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
|
||||
}
|
||||
setInsetsAndAlpha(shown ? mShownInsets : mHiddenInsets, 1f /* alpha */, 1f /* fraction */);
|
||||
mFinished = true;
|
||||
|
||||
mShownOnFinish = shown;
|
||||
}
|
||||
|
||||
@@ -207,6 +217,8 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
|
||||
}
|
||||
mCancelled = true;
|
||||
mListener.onCancelled();
|
||||
|
||||
releaseLeashes();
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
|
||||
@@ -75,6 +75,12 @@ public class InsetsAnimationThreadControlRunner implements InsetsAnimationContro
|
||||
t.apply();
|
||||
t.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSurfaceControlFromRt(SurfaceControl sc) {
|
||||
// Since we don't push the SurfaceParams to the RT we can release directly
|
||||
sc.release();
|
||||
}
|
||||
};
|
||||
|
||||
@UiThread
|
||||
|
||||
@@ -704,7 +704,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
|
||||
}
|
||||
final InsetsSourceControl control = consumer.getControl();
|
||||
if (control != null) {
|
||||
controls.put(consumer.getType(), control);
|
||||
controls.put(consumer.getType(), new InsetsSourceControl(control));
|
||||
typesReady |= toPublicType(consumer.getType());
|
||||
} else if (animationType == ANIMATION_TYPE_SHOW) {
|
||||
|
||||
|
||||
@@ -409,6 +409,13 @@ class InsetsPolicy {
|
||||
t.close();
|
||||
}
|
||||
|
||||
// Since we don't push applySurfaceParams to a Handler-queue we don't need
|
||||
// to push release in this case.
|
||||
@Override
|
||||
public void releaseSurfaceControlFromRt(SurfaceControl sc) {
|
||||
sc.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startAnimation(InsetsAnimationControlImpl controller,
|
||||
WindowInsetsAnimationControlListener listener, int types,
|
||||
|
||||
Reference in New Issue
Block a user