Merge "Animate divider bar and roottasks along with keyguard-exit" into rvc-dev am: 32d37c9d53
Change-Id: Iaaa93ae0caa9230f5a4ea8f50258da3b77402c2f
This commit is contained in:
@@ -76,7 +76,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
|
||||
import static com.android.server.wm.WindowManagerInternal.AppTransitionListener;
|
||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
|
||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_BEFORE_ANIM;
|
||||
import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
|
||||
|
||||
import android.annotation.DrawableRes;
|
||||
@@ -1807,15 +1806,11 @@ public class AppTransition implements Dump {
|
||||
}
|
||||
|
||||
int getAppStackClipMode() {
|
||||
// When dismiss keyguard animation occurs, clip before the animation to prevent docked
|
||||
// app from showing beyond the divider
|
||||
if (mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY
|
||||
|| mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER) {
|
||||
return STACK_CLIP_BEFORE_ANIM;
|
||||
}
|
||||
return mNextAppTransition == TRANSIT_ACTIVITY_RELAUNCH
|
||||
|| mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS
|
||||
|| mNextAppTransitionType == NEXT_TRANSIT_TYPE_CLIP_REVEAL
|
||||
|| mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY
|
||||
|| mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER
|
||||
? STACK_CLIP_NONE
|
||||
: STACK_CLIP_AFTER_ANIM;
|
||||
}
|
||||
|
||||
@@ -197,7 +197,6 @@ import android.view.ViewRootImpl;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManagerPolicyConstants.PointerEventListener;
|
||||
import android.window.ITaskOrganizer;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
@@ -3554,6 +3553,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
onWallpaper, goingToShade, subtle));
|
||||
}
|
||||
}, true /* traverseTopToBottom */);
|
||||
for (int i = mShellRoots.size() - 1; i >= 0; --i) {
|
||||
mShellRoots.valueAt(i).startAnimation(policy.createHiddenByKeyguardExit(
|
||||
onWallpaper, goingToShade, subtle));
|
||||
}
|
||||
}
|
||||
|
||||
/** @return {@code true} if there is window to wait before enabling the screen. */
|
||||
|
||||
@@ -16,12 +16,20 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
|
||||
|
||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
|
||||
import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.graphics.Point;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Slog;
|
||||
import android.view.DisplayInfo;
|
||||
import android.view.IWindow;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.animation.Animation;
|
||||
|
||||
/**
|
||||
* Represents a piece of the hierarchy under which a client Shell can manage sub-windows.
|
||||
@@ -70,5 +78,29 @@ public class ShellRoot {
|
||||
IWindow getClient() {
|
||||
return mClient;
|
||||
}
|
||||
|
||||
void startAnimation(Animation anim) {
|
||||
// Only do this for the divider
|
||||
if (mToken.windowType != TYPE_DOCK_DIVIDER) {
|
||||
return;
|
||||
}
|
||||
|
||||
DisplayInfo displayInfo = mToken.getFixedRotationTransformDisplayInfo();
|
||||
if (displayInfo == null) {
|
||||
displayInfo = mDisplayContent.getDisplayInfo();
|
||||
}
|
||||
|
||||
// Mostly copied from WindowState to enable keyguard transition animation
|
||||
anim.initialize(displayInfo.logicalWidth, displayInfo.logicalHeight,
|
||||
displayInfo.appWidth, displayInfo.appHeight);
|
||||
anim.restrictDuration(MAX_ANIMATION_DURATION);
|
||||
anim.scaleCurrentDuration(mDisplayContent.mWmService.getWindowAnimationScaleLocked());
|
||||
final AnimationAdapter adapter = new LocalAnimationAdapter(
|
||||
new WindowAnimationSpec(anim, new Point(0, 0), false /* canSkipFirstFrame */,
|
||||
0 /* windowCornerRadius */),
|
||||
mDisplayContent.mWmService.mSurfaceAnimationRunner);
|
||||
mToken.startAnimation(mToken.getPendingTransaction(), adapter, false /* hidden */,
|
||||
ANIMATION_TYPE_WINDOW_ANIMATION, null /* animationFinishedCallback */);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1612,6 +1612,11 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean canCreateRemoteAnimationTarget() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for when the order of the stacks in the display changes.
|
||||
*/
|
||||
|
||||
@@ -379,6 +379,7 @@ class TaskSnapshotSurface implements StartingSurface {
|
||||
frame = null;
|
||||
mTmpDstFrame.set(mFrame);
|
||||
}
|
||||
mTmpDstFrame.offsetTo(0, 0);
|
||||
|
||||
// Scale the mismatch dimensions to fill the task bounds
|
||||
mTmpSnapshotSize.set(0, 0, buffer.getWidth(), buffer.getHeight());
|
||||
|
||||
@@ -2295,6 +2295,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
|
||||
mLastLayer = -1;
|
||||
reassignLayer(t);
|
||||
|
||||
// Leash is now responsible for position, so set our position to 0.
|
||||
t.setPosition(mSurfaceControl, 0, 0);
|
||||
mLastSurfacePosition.set(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -2302,6 +2306,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
mLastLayer = -1;
|
||||
mSurfaceFreezer.unfreeze(t);
|
||||
reassignLayer(t);
|
||||
updateSurfacePosition(t);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2365,11 +2370,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
}
|
||||
}
|
||||
|
||||
void updateSurfacePosition() {
|
||||
final void updateSurfacePosition() {
|
||||
updateSurfacePosition(getPendingTransaction());
|
||||
}
|
||||
|
||||
void updateSurfacePosition(Transaction t) {
|
||||
// Avoid fighting with the organizer over Surface position.
|
||||
if (isOrganized()) return;
|
||||
|
||||
if (mSurfaceControl == null) {
|
||||
if (mSurfaceControl == null || mSurfaceAnimator.hasLeash()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2378,7 +2387,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
return;
|
||||
}
|
||||
|
||||
getPendingTransaction().setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y);
|
||||
t.setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y);
|
||||
mLastSurfacePosition.set(mTmpPos.x, mTmpPos.y);
|
||||
}
|
||||
|
||||
|
||||
@@ -5237,23 +5237,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
@Override
|
||||
public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
|
||||
super.onAnimationLeashCreated(t, leash);
|
||||
|
||||
// Leash is now responsible for position, so set our position to 0.
|
||||
t.setPosition(mSurfaceControl, 0, 0);
|
||||
mLastSurfacePosition.set(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationLeashLost(Transaction t) {
|
||||
super.onAnimationLeashLost(t);
|
||||
updateSurfacePosition(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateSurfacePosition() {
|
||||
updateSurfacePosition(getPendingTransaction());
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void updateSurfacePosition(Transaction t) {
|
||||
if (mSurfaceControl == null) {
|
||||
|
||||
@@ -535,8 +535,8 @@ class WindowToken extends WindowContainer<WindowState> {
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateSurfacePosition() {
|
||||
super.updateSurfacePosition();
|
||||
void updateSurfacePosition(SurfaceControl.Transaction t) {
|
||||
super.updateSurfacePosition(t);
|
||||
if (isFixedRotationTransforming()) {
|
||||
// The window is layouted in a simulated rotated display but the real display hasn't
|
||||
// rotated, so here transforms its surface to fit in the real display.
|
||||
|
||||
Reference in New Issue
Block a user