Merge "Set animation layer for SurfaceFreezer leash" into sc-v2-dev
This commit is contained in:
@@ -123,6 +123,18 @@ class SurfaceFreezer {
|
||||
}
|
||||
}
|
||||
|
||||
void setLayer(SurfaceControl.Transaction t, int layer) {
|
||||
if (mLeash != null) {
|
||||
t.setLayer(mLeash, layer);
|
||||
}
|
||||
}
|
||||
|
||||
void setRelativeLayer(SurfaceControl.Transaction t, SurfaceControl relativeTo, int layer) {
|
||||
if (mLeash != null) {
|
||||
t.setRelativeLayer(mLeash, relativeTo, layer);
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasLeash() {
|
||||
return mLeash != null;
|
||||
}
|
||||
|
||||
@@ -2334,10 +2334,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
}
|
||||
|
||||
protected void setLayer(Transaction t, int layer) {
|
||||
|
||||
// Route through surface animator to accommodate that our surface control might be
|
||||
// attached to the leash, and leash is attached to parent container.
|
||||
mSurfaceAnimator.setLayer(t, layer);
|
||||
if (mSurfaceFreezer.hasLeash()) {
|
||||
// When the freezer has created animation leash parent for the window, set the layer
|
||||
// there instead.
|
||||
mSurfaceFreezer.setLayer(t, layer);
|
||||
} else {
|
||||
// Route through surface animator to accommodate that our surface control might be
|
||||
// attached to the leash, and leash is attached to parent container.
|
||||
mSurfaceAnimator.setLayer(t, layer);
|
||||
}
|
||||
}
|
||||
|
||||
int getLastLayer() {
|
||||
@@ -2345,10 +2350,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
}
|
||||
|
||||
protected void setRelativeLayer(Transaction t, SurfaceControl relativeTo, int layer) {
|
||||
|
||||
// Route through surface animator to accommodate that our surface control might be
|
||||
// attached to the leash, and leash is attached to parent container.
|
||||
mSurfaceAnimator.setRelativeLayer(t, relativeTo, layer);
|
||||
if (mSurfaceFreezer.hasLeash()) {
|
||||
// When the freezer has created animation leash parent for the window, set the layer
|
||||
// there instead.
|
||||
mSurfaceFreezer.setRelativeLayer(t, relativeTo, layer);
|
||||
} else {
|
||||
// Route through surface animator to accommodate that our surface control might be
|
||||
// attached to the leash, and leash is attached to parent container.
|
||||
mSurfaceAnimator.setRelativeLayer(t, relativeTo, layer);
|
||||
}
|
||||
}
|
||||
|
||||
protected void reparentSurfaceControl(Transaction t, SurfaceControl newParent) {
|
||||
|
||||
@@ -1071,6 +1071,41 @@ public class WindowContainerTests extends WindowTestsBase {
|
||||
verify(surfaceAnimator).setRelativeLayer(t, relativeParent, 1 /* layer */);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssignAnimationLayer() {
|
||||
final WindowContainer container = new WindowContainer(mWm);
|
||||
container.mSurfaceControl = mock(SurfaceControl.class);
|
||||
final SurfaceAnimator surfaceAnimator = container.mSurfaceAnimator;
|
||||
final SurfaceFreezer surfaceFreezer = container.mSurfaceFreezer;
|
||||
final SurfaceControl relativeParent = mock(SurfaceControl.class);
|
||||
final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
|
||||
spyOn(container);
|
||||
spyOn(surfaceAnimator);
|
||||
spyOn(surfaceFreezer);
|
||||
|
||||
container.setLayer(t, 1);
|
||||
container.setRelativeLayer(t, relativeParent, 2);
|
||||
|
||||
// Set through surfaceAnimator if surfaceFreezer doesn't have leash.
|
||||
verify(surfaceAnimator).setLayer(t, 1);
|
||||
verify(surfaceAnimator).setRelativeLayer(t, relativeParent, 2);
|
||||
verify(surfaceFreezer, never()).setLayer(any(), anyInt());
|
||||
verify(surfaceFreezer, never()).setRelativeLayer(any(), any(), anyInt());
|
||||
|
||||
clearInvocations(surfaceAnimator);
|
||||
clearInvocations(surfaceFreezer);
|
||||
doReturn(true).when(surfaceFreezer).hasLeash();
|
||||
|
||||
container.setLayer(t, 1);
|
||||
container.setRelativeLayer(t, relativeParent, 2);
|
||||
|
||||
// Set through surfaceFreezer if surfaceFreezer has leash.
|
||||
verify(surfaceFreezer).setLayer(t, 1);
|
||||
verify(surfaceFreezer).setRelativeLayer(t, relativeParent, 2);
|
||||
verify(surfaceAnimator, never()).setLayer(any(), anyInt());
|
||||
verify(surfaceAnimator, never()).setRelativeLayer(any(), any(), anyInt());
|
||||
}
|
||||
|
||||
/* Used so we can gain access to some protected members of the {@link WindowContainer} class */
|
||||
private static class TestWindowContainer extends WindowContainer<TestWindowContainer> {
|
||||
private final int mLayer;
|
||||
|
||||
Reference in New Issue
Block a user