Merge "InsetAnimationControlImpl: Copy SurfaceControl" into rvc-dev
This commit is contained in:
@@ -56,4 +56,10 @@ public interface InsetsAnimationControlCallbacks {
|
|||||||
* apply.
|
* apply.
|
||||||
*/
|
*/
|
||||||
void applySurfaceParams(SyncRtSurfaceTransactionApplier.SurfaceParams... params);
|
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);
|
mAnimation.setAlpha(mPendingAlpha);
|
||||||
if (mFinished) {
|
if (mFinished) {
|
||||||
mController.notifyFinished(this, mShownOnFinish);
|
mController.notifyFinished(this, mShownOnFinish);
|
||||||
|
releaseLeashes();
|
||||||
}
|
}
|
||||||
return mFinished;
|
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
|
@Override
|
||||||
public void finish(boolean shown) {
|
public void finish(boolean shown) {
|
||||||
if (mCancelled || mFinished) {
|
if (mCancelled || mFinished) {
|
||||||
@@ -191,6 +200,7 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
|
|||||||
}
|
}
|
||||||
setInsetsAndAlpha(shown ? mShownInsets : mHiddenInsets, 1f /* alpha */, 1f /* fraction */);
|
setInsetsAndAlpha(shown ? mShownInsets : mHiddenInsets, 1f /* alpha */, 1f /* fraction */);
|
||||||
mFinished = true;
|
mFinished = true;
|
||||||
|
|
||||||
mShownOnFinish = shown;
|
mShownOnFinish = shown;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +217,8 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
|
|||||||
}
|
}
|
||||||
mCancelled = true;
|
mCancelled = true;
|
||||||
mListener.onCancelled();
|
mListener.onCancelled();
|
||||||
|
|
||||||
|
releaseLeashes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCancelled() {
|
public boolean isCancelled() {
|
||||||
|
|||||||
@@ -75,6 +75,12 @@ public class InsetsAnimationThreadControlRunner implements InsetsAnimationContro
|
|||||||
t.apply();
|
t.apply();
|
||||||
t.close();
|
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
|
@UiThread
|
||||||
|
|||||||
@@ -704,7 +704,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
|
|||||||
}
|
}
|
||||||
final InsetsSourceControl control = consumer.getControl();
|
final InsetsSourceControl control = consumer.getControl();
|
||||||
if (control != null) {
|
if (control != null) {
|
||||||
controls.put(consumer.getType(), control);
|
controls.put(consumer.getType(), new InsetsSourceControl(control));
|
||||||
typesReady |= toPublicType(consumer.getType());
|
typesReady |= toPublicType(consumer.getType());
|
||||||
} else if (animationType == ANIMATION_TYPE_SHOW) {
|
} else if (animationType == ANIMATION_TYPE_SHOW) {
|
||||||
|
|
||||||
|
|||||||
@@ -409,6 +409,13 @@ class InsetsPolicy {
|
|||||||
t.close();
|
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
|
@Override
|
||||||
public void startAnimation(InsetsAnimationControlImpl controller,
|
public void startAnimation(InsetsAnimationControlImpl controller,
|
||||||
WindowInsetsAnimationControlListener listener, int types,
|
WindowInsetsAnimationControlListener listener, int types,
|
||||||
|
|||||||
Reference in New Issue
Block a user