Merge "Fixed animation type for animation on the navigation bar." into tm-dev
This commit is contained in:
@@ -20,7 +20,7 @@ import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLES
|
|||||||
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
|
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
|
import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
|
||||||
|
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_FIXED_TRANSFORM;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.os.HandlerExecutor;
|
import android.os.HandlerExecutor;
|
||||||
@@ -224,7 +224,7 @@ class AsyncRotationController extends FadeAnimationController implements Consume
|
|||||||
if (DEBUG) Slog.d(TAG, "finishOp fade-in " + windowToken.getTopChild());
|
if (DEBUG) Slog.d(TAG, "finishOp fade-in " + windowToken.getTopChild());
|
||||||
// The previous animation leash will be dropped when preparing fade-in animation, so
|
// The previous animation leash will be dropped when preparing fade-in animation, so
|
||||||
// simply apply new animation without restoring the transformation.
|
// simply apply new animation without restoring the transformation.
|
||||||
fadeWindowToken(true /* show */, windowToken, ANIMATION_TYPE_FIXED_TRANSFORM);
|
fadeWindowToken(true /* show */, windowToken, ANIMATION_TYPE_TOKEN_TRANSFORM);
|
||||||
} else if (op.mAction == Operation.ACTION_SEAMLESS && mRotator != null
|
} else if (op.mAction == Operation.ACTION_SEAMLESS && mRotator != null
|
||||||
&& op.mLeash != null && op.mLeash.isValid()) {
|
&& op.mLeash != null && op.mLeash.isValid()) {
|
||||||
if (DEBUG) Slog.d(TAG, "finishOp undo seamless " + windowToken.getTopChild());
|
if (DEBUG) Slog.d(TAG, "finishOp undo seamless " + windowToken.getTopChild());
|
||||||
@@ -298,7 +298,7 @@ class AsyncRotationController extends FadeAnimationController implements Consume
|
|||||||
final WindowToken windowToken = mTargetWindowTokens.keyAt(i);
|
final WindowToken windowToken = mTargetWindowTokens.keyAt(i);
|
||||||
final Operation op = mTargetWindowTokens.valueAt(i);
|
final Operation op = mTargetWindowTokens.valueAt(i);
|
||||||
if (op.mAction == Operation.ACTION_FADE) {
|
if (op.mAction == Operation.ACTION_FADE) {
|
||||||
fadeWindowToken(false /* show */, windowToken, ANIMATION_TYPE_FIXED_TRANSFORM);
|
fadeWindowToken(false /* show */, windowToken, ANIMATION_TYPE_TOKEN_TRANSFORM);
|
||||||
op.mLeash = windowToken.getAnimationLeash();
|
op.mLeash = windowToken.getAnimationLeash();
|
||||||
if (DEBUG) Slog.d(TAG, "Start fade-out " + windowToken.getTopChild());
|
if (DEBUG) Slog.d(TAG, "Start fade-out " + windowToken.getTopChild());
|
||||||
} else if (op.mAction == Operation.ACTION_SEAMLESS) {
|
} else if (op.mAction == Operation.ACTION_SEAMLESS) {
|
||||||
@@ -332,7 +332,7 @@ class AsyncRotationController extends FadeAnimationController implements Consume
|
|||||||
mHideImmediately = true;
|
mHideImmediately = true;
|
||||||
final Operation op = new Operation(Operation.ACTION_FADE);
|
final Operation op = new Operation(Operation.ACTION_FADE);
|
||||||
mTargetWindowTokens.put(windowToken, op);
|
mTargetWindowTokens.put(windowToken, op);
|
||||||
fadeWindowToken(false /* show */, windowToken, ANIMATION_TYPE_FIXED_TRANSFORM);
|
fadeWindowToken(false /* show */, windowToken, ANIMATION_TYPE_TOKEN_TRANSFORM);
|
||||||
op.mLeash = windowToken.getAnimationLeash();
|
op.mLeash = windowToken.getAnimationLeash();
|
||||||
mHideImmediately = original;
|
mHideImmediately = original;
|
||||||
if (DEBUG) Slog.d(TAG, "hideImmediately " + windowToken.getTopChild());
|
if (DEBUG) Slog.d(TAG, "hideImmediately " + windowToken.getTopChild());
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.android.server.wm;
|
package com.android.server.wm;
|
||||||
|
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.view.SurfaceControl;
|
import android.view.SurfaceControl;
|
||||||
@@ -83,7 +83,7 @@ public class NavBarFadeAnimationController extends FadeAnimationController{
|
|||||||
final AsyncRotationController controller =
|
final AsyncRotationController controller =
|
||||||
mDisplayContent.getAsyncRotationController();
|
mDisplayContent.getAsyncRotationController();
|
||||||
final Runnable fadeAnim = () -> fadeWindowToken(show, mNavigationBar.mToken,
|
final Runnable fadeAnim = () -> fadeWindowToken(show, mNavigationBar.mToken,
|
||||||
ANIMATION_TYPE_APP_TRANSITION);
|
ANIMATION_TYPE_TOKEN_TRANSFORM);
|
||||||
if (controller == null) {
|
if (controller == null) {
|
||||||
fadeAnim.run();
|
fadeAnim.run();
|
||||||
} else if (!controller.isTargetToken(mNavigationBar.mToken)) {
|
} else if (!controller.isTargetToken(mNavigationBar.mToken)) {
|
||||||
|
|||||||
@@ -553,10 +553,10 @@ class SurfaceAnimator {
|
|||||||
public static final int ANIMATION_TYPE_INSETS_CONTROL = 1 << 5;
|
public static final int ANIMATION_TYPE_INSETS_CONTROL = 1 << 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Animation when a fixed rotation transform is applied to a window token.
|
* Animation applied to a non-app window token, e.g. a fixed rotation transform.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static final int ANIMATION_TYPE_FIXED_TRANSFORM = 1 << 6;
|
public static final int ANIMATION_TYPE_TOKEN_TRANSFORM = 1 << 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Animation when a reveal starting window animation is applied to app window.
|
* Animation when a reveal starting window animation is applied to app window.
|
||||||
@@ -582,7 +582,7 @@ class SurfaceAnimator {
|
|||||||
ANIMATION_TYPE_RECENTS,
|
ANIMATION_TYPE_RECENTS,
|
||||||
ANIMATION_TYPE_WINDOW_ANIMATION,
|
ANIMATION_TYPE_WINDOW_ANIMATION,
|
||||||
ANIMATION_TYPE_INSETS_CONTROL,
|
ANIMATION_TYPE_INSETS_CONTROL,
|
||||||
ANIMATION_TYPE_FIXED_TRANSFORM,
|
ANIMATION_TYPE_TOKEN_TRANSFORM,
|
||||||
ANIMATION_TYPE_STARTING_REVEAL
|
ANIMATION_TYPE_STARTING_REVEAL
|
||||||
})
|
})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@@ -600,7 +600,7 @@ class SurfaceAnimator {
|
|||||||
case ANIMATION_TYPE_RECENTS: return "recents_animation";
|
case ANIMATION_TYPE_RECENTS: return "recents_animation";
|
||||||
case ANIMATION_TYPE_WINDOW_ANIMATION: return "window_animation";
|
case ANIMATION_TYPE_WINDOW_ANIMATION: return "window_animation";
|
||||||
case ANIMATION_TYPE_INSETS_CONTROL: return "insets_animation";
|
case ANIMATION_TYPE_INSETS_CONTROL: return "insets_animation";
|
||||||
case ANIMATION_TYPE_FIXED_TRANSFORM: return "fixed_rotation";
|
case ANIMATION_TYPE_TOKEN_TRANSFORM: return "token_transform";
|
||||||
case ANIMATION_TYPE_STARTING_REVEAL: return "starting_reveal";
|
case ANIMATION_TYPE_STARTING_REVEAL: return "starting_reveal";
|
||||||
default: return "unknown type:" + type;
|
default: return "unknown type:" + type;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
|
|||||||
import static com.android.server.wm.ActivityTaskSupervisor.ON_TOP;
|
import static com.android.server.wm.ActivityTaskSupervisor.ON_TOP;
|
||||||
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
|
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_FIXED_TRANSFORM;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
|
||||||
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
|
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
|
||||||
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
|
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
|
||||||
import static com.android.server.wm.WindowContainer.POSITION_TOP;
|
import static com.android.server.wm.WindowContainer.POSITION_TOP;
|
||||||
@@ -1439,7 +1439,7 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
displayContent.setRotationAnimation(rotationAnim);
|
displayContent.setRotationAnimation(rotationAnim);
|
||||||
// The fade rotation animation also starts to hide some non-app windows.
|
// The fade rotation animation also starts to hide some non-app windows.
|
||||||
assertNotNull(displayContent.getAsyncRotationController());
|
assertNotNull(displayContent.getAsyncRotationController());
|
||||||
assertTrue(statusBar.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
|
assertTrue(statusBar.isAnimating(PARENTS, ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
|
|
||||||
for (WindowState w : windows) {
|
for (WindowState w : windows) {
|
||||||
w.setOrientationChanging(true);
|
w.setOrientationChanging(true);
|
||||||
@@ -1493,10 +1493,10 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
final AsyncRotationController asyncRotationController =
|
final AsyncRotationController asyncRotationController =
|
||||||
mDisplayContent.getAsyncRotationController();
|
mDisplayContent.getAsyncRotationController();
|
||||||
assertNotNull(asyncRotationController);
|
assertNotNull(asyncRotationController);
|
||||||
assertTrue(mStatusBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
|
assertTrue(mStatusBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
assertTrue(mNavBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
|
assertTrue(mNavBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
// Notification shade may have its own view animation in real case so do not fade out it.
|
// Notification shade may have its own view animation in real case so do not fade out it.
|
||||||
assertFalse(mNotificationShadeWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
|
assertFalse(mNotificationShadeWindow.isAnimating(PARENTS, ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
|
|
||||||
// If the visibility of insets state is changed, the rotated state should be updated too.
|
// If the visibility of insets state is changed, the rotated state should be updated too.
|
||||||
final InsetsState rotatedState = app.getFixedRotationTransformInsetsState();
|
final InsetsState rotatedState = app.getFixedRotationTransformInsetsState();
|
||||||
@@ -1567,7 +1567,7 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
app.token, app.token, mDisplayContent.mDisplayId);
|
app.token, app.token, mDisplayContent.mDisplayId);
|
||||||
assertTrue(asyncRotationController.isTargetToken(mImeWindow.mToken));
|
assertTrue(asyncRotationController.isTargetToken(mImeWindow.mToken));
|
||||||
assertTrue(mImeWindow.mToken.hasFixedRotationTransform());
|
assertTrue(mImeWindow.mToken.hasFixedRotationTransform());
|
||||||
assertTrue(mImeWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
|
assertTrue(mImeWindow.isAnimating(PARENTS, ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
|
|
||||||
// The fixed rotation transform can only be finished when all animation finished.
|
// The fixed rotation transform can only be finished when all animation finished.
|
||||||
doReturn(false).when(app2).isAnimating(anyInt(), anyInt());
|
doReturn(false).when(app2).isAnimating(anyInt(), anyInt());
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_P
|
|||||||
import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_ORIGINAL_POSITION;
|
import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_ORIGINAL_POSITION;
|
||||||
import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_TOP;
|
import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_TOP;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
|
||||||
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@@ -595,6 +596,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
|||||||
eq(mDefaultDisplay.mDisplayId), eq(true));
|
eq(mDefaultDisplay.mDisplayId), eq(true));
|
||||||
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
||||||
assertFalse(mController.isNavigationBarAttachedToApp());
|
assertFalse(mController.isNavigationBarAttachedToApp());
|
||||||
|
assertTrue(navToken.isAnimating(ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -622,6 +624,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
|||||||
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
||||||
verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
|
verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
|
||||||
assertFalse(mController.isNavigationBarAttachedToApp());
|
assertFalse(mController.isNavigationBarAttachedToApp());
|
||||||
|
assertFalse(navToken.isAnimating(ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -649,6 +652,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
|||||||
eq(mDefaultDisplay.mDisplayId), eq(true));
|
eq(mDefaultDisplay.mDisplayId), eq(true));
|
||||||
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
|
||||||
assertFalse(mController.isNavigationBarAttachedToApp());
|
assertFalse(mController.isNavigationBarAttachedToApp());
|
||||||
|
assertTrue(navToken.isAnimating(ANIMATION_TYPE_TOKEN_TRANSFORM));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user