Merge "Draw background color above display area..." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c7e6a78235
@@ -70,6 +70,8 @@ import com.android.wm.shell.draganddrop.DragAndDropController;
|
|||||||
import com.android.wm.shell.freeform.FreeformComponents;
|
import com.android.wm.shell.freeform.FreeformComponents;
|
||||||
import com.android.wm.shell.fullscreen.FullscreenTaskListener;
|
import com.android.wm.shell.fullscreen.FullscreenTaskListener;
|
||||||
import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController;
|
import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController;
|
||||||
|
import com.android.wm.shell.keyguard.KeyguardTransitionHandler;
|
||||||
|
import com.android.wm.shell.keyguard.KeyguardTransitions;
|
||||||
import com.android.wm.shell.onehanded.OneHanded;
|
import com.android.wm.shell.onehanded.OneHanded;
|
||||||
import com.android.wm.shell.onehanded.OneHandedController;
|
import com.android.wm.shell.onehanded.OneHandedController;
|
||||||
import com.android.wm.shell.pip.Pip;
|
import com.android.wm.shell.pip.Pip;
|
||||||
@@ -77,8 +79,6 @@ import com.android.wm.shell.pip.PipMediaController;
|
|||||||
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
|
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
|
||||||
import com.android.wm.shell.pip.PipUiEventLogger;
|
import com.android.wm.shell.pip.PipUiEventLogger;
|
||||||
import com.android.wm.shell.pip.phone.PipTouchHandler;
|
import com.android.wm.shell.pip.phone.PipTouchHandler;
|
||||||
import com.android.wm.shell.keyguard.KeyguardTransitionHandler;
|
|
||||||
import com.android.wm.shell.keyguard.KeyguardTransitions;
|
|
||||||
import com.android.wm.shell.recents.RecentTasks;
|
import com.android.wm.shell.recents.RecentTasks;
|
||||||
import com.android.wm.shell.recents.RecentTasksController;
|
import com.android.wm.shell.recents.RecentTasksController;
|
||||||
import com.android.wm.shell.recents.RecentsTransitionHandler;
|
import com.android.wm.shell.recents.RecentsTransitionHandler;
|
||||||
@@ -102,13 +102,13 @@ import com.android.wm.shell.unfold.UnfoldAnimationController;
|
|||||||
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
|
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
|
||||||
import com.android.wm.shell.windowdecor.WindowDecorViewModel;
|
import com.android.wm.shell.windowdecor.WindowDecorViewModel;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import dagger.BindsOptionalOf;
|
import dagger.BindsOptionalOf;
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
|
* Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
|
||||||
* accessible from components within the WM subcomponent (can be explicitly exposed to the
|
* accessible from components within the WM subcomponent (can be explicitly exposed to the
|
||||||
@@ -548,13 +548,15 @@ public abstract class WMShellBaseModule {
|
|||||||
@ShellMainThread ShellExecutor mainExecutor,
|
@ShellMainThread ShellExecutor mainExecutor,
|
||||||
@ShellMainThread Handler mainHandler,
|
@ShellMainThread Handler mainHandler,
|
||||||
@ShellAnimationThread ShellExecutor animExecutor,
|
@ShellAnimationThread ShellExecutor animExecutor,
|
||||||
ShellCommandHandler shellCommandHandler) {
|
ShellCommandHandler shellCommandHandler,
|
||||||
|
RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
|
||||||
if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
|
if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
|
||||||
// TODO(b/238217847): Force override shell init if registration is disabled
|
// TODO(b/238217847): Force override shell init if registration is disabled
|
||||||
shellInit = new ShellInit(mainExecutor);
|
shellInit = new ShellInit(mainExecutor);
|
||||||
}
|
}
|
||||||
return new Transitions(context, shellInit, shellController, organizer, pool,
|
return new Transitions(context, shellInit, shellController, organizer, pool,
|
||||||
displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler);
|
displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler,
|
||||||
|
rootTaskDisplayAreaOrganizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@WMSingleton
|
@WMSingleton
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITI
|
|||||||
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_INTRA_OPEN;
|
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_INTRA_OPEN;
|
||||||
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE;
|
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE;
|
||||||
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN;
|
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN;
|
||||||
import static com.android.wm.shell.transition.TransitionAnimationHelper.addBackgroundToTransition;
|
|
||||||
import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
|
import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
|
||||||
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
|
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
|
||||||
import static com.android.wm.shell.transition.TransitionAnimationHelper.loadAttributeAnimation;
|
import static com.android.wm.shell.transition.TransitionAnimationHelper.loadAttributeAnimation;
|
||||||
@@ -76,6 +75,7 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.Insets;
|
import android.graphics.Insets;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
@@ -103,6 +103,7 @@ import com.android.internal.policy.AttributeCache;
|
|||||||
import com.android.internal.policy.ScreenDecorationsUtils;
|
import com.android.internal.policy.ScreenDecorationsUtils;
|
||||||
import com.android.internal.policy.TransitionAnimation;
|
import com.android.internal.policy.TransitionAnimation;
|
||||||
import com.android.internal.protolog.common.ProtoLog;
|
import com.android.internal.protolog.common.ProtoLog;
|
||||||
|
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
|
||||||
import com.android.wm.shell.common.DisplayController;
|
import com.android.wm.shell.common.DisplayController;
|
||||||
import com.android.wm.shell.common.DisplayLayout;
|
import com.android.wm.shell.common.DisplayLayout;
|
||||||
import com.android.wm.shell.common.ShellExecutor;
|
import com.android.wm.shell.common.ShellExecutor;
|
||||||
@@ -137,6 +138,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
private final Rect mInsets = new Rect(0, 0, 0, 0);
|
private final Rect mInsets = new Rect(0, 0, 0, 0);
|
||||||
private float mTransitionAnimationScaleSetting = 1.0f;
|
private float mTransitionAnimationScaleSetting = 1.0f;
|
||||||
|
|
||||||
|
private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
|
||||||
private final int mCurrentUserId;
|
private final int mCurrentUserId;
|
||||||
|
|
||||||
private Drawable mEnterpriseThumbnailDrawable;
|
private Drawable mEnterpriseThumbnailDrawable;
|
||||||
@@ -157,7 +159,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
@NonNull DisplayController displayController,
|
@NonNull DisplayController displayController,
|
||||||
@NonNull TransactionPool transactionPool,
|
@NonNull TransactionPool transactionPool,
|
||||||
@NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
|
@NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
|
||||||
@NonNull ShellExecutor animExecutor) {
|
@NonNull ShellExecutor animExecutor,
|
||||||
|
@NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
|
||||||
mDisplayController = displayController;
|
mDisplayController = displayController;
|
||||||
mTransactionPool = transactionPool;
|
mTransactionPool = transactionPool;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -168,6 +171,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
mCurrentUserId = UserHandle.myUserId();
|
mCurrentUserId = UserHandle.myUserId();
|
||||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
shellInit.addInitCallback(this::onInit, this);
|
shellInit.addInitCallback(this::onInit, this);
|
||||||
|
mRootTDAOrganizer = rootTDAOrganizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onInit() {
|
private void onInit() {
|
||||||
@@ -510,10 +514,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (backgroundColorForTransition != 0) {
|
if (backgroundColorForTransition != 0) {
|
||||||
for (int i = 0; i < info.getRootCount(); ++i) {
|
addBackgroundColorOnTDA(info, backgroundColorForTransition, startTransaction,
|
||||||
addBackgroundToTransition(info.getRoot(i).getLeash(), backgroundColorForTransition,
|
finishTransaction);
|
||||||
startTransaction, finishTransaction);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (postStartTransactionCallbacks.size() > 0) {
|
if (postStartTransactionCallbacks.size() > 0) {
|
||||||
@@ -543,6 +545,28 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addBackgroundColorOnTDA(@NonNull TransitionInfo info,
|
||||||
|
@ColorInt int color, @NonNull SurfaceControl.Transaction startTransaction,
|
||||||
|
@NonNull SurfaceControl.Transaction finishTransaction) {
|
||||||
|
final Color bgColor = Color.valueOf(color);
|
||||||
|
final float[] colorArray = new float[] { bgColor.red(), bgColor.green(), bgColor.blue() };
|
||||||
|
|
||||||
|
for (int i = 0; i < info.getRootCount(); ++i) {
|
||||||
|
final int displayId = info.getRoot(i).getDisplayId();
|
||||||
|
final SurfaceControl.Builder colorLayerBuilder = new SurfaceControl.Builder()
|
||||||
|
.setName("animation-background")
|
||||||
|
.setCallsite("DefaultTransitionHandler")
|
||||||
|
.setColorLayer();
|
||||||
|
|
||||||
|
mRootTDAOrganizer.attachToDisplayArea(displayId, colorLayerBuilder);
|
||||||
|
final SurfaceControl backgroundSurface = colorLayerBuilder.build();
|
||||||
|
startTransaction.setColor(backgroundSurface, colorArray)
|
||||||
|
.setLayer(backgroundSurface, -1)
|
||||||
|
.show(backgroundSurface);
|
||||||
|
finishTransaction.remove(backgroundSurface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isDreamTransition(@NonNull TransitionInfo info) {
|
private static boolean isDreamTransition(@NonNull TransitionInfo info) {
|
||||||
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
|
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
|
||||||
final TransitionInfo.Change change = info.getChanges().get(i);
|
final TransitionInfo.Change change = info.getChanges().get(i);
|
||||||
@@ -886,17 +910,18 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void applyTransformation(long time, SurfaceControl.Transaction t,
|
private static void applyTransformation(long time, SurfaceControl.Transaction t,
|
||||||
SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
|
SurfaceControl leash, Animation anim, Transformation tmpTransformation, float[] matrix,
|
||||||
Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
|
Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
|
||||||
anim.getTransformation(time, transformation);
|
tmpTransformation.clear();
|
||||||
|
anim.getTransformation(time, tmpTransformation);
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
transformation.getMatrix().postTranslate(position.x, position.y);
|
tmpTransformation.getMatrix().postTranslate(position.x, position.y);
|
||||||
}
|
}
|
||||||
t.setMatrix(leash, transformation.getMatrix(), matrix);
|
t.setMatrix(leash, tmpTransformation.getMatrix(), matrix);
|
||||||
t.setAlpha(leash, transformation.getAlpha());
|
t.setAlpha(leash, tmpTransformation.getAlpha());
|
||||||
|
|
||||||
final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
|
final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
|
||||||
Insets extensionInsets = Insets.min(transformation.getInsets(), Insets.NONE);
|
Insets extensionInsets = Insets.min(tmpTransformation.getInsets(), Insets.NONE);
|
||||||
if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
|
if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
|
||||||
// Clip out any overflowing edge extension
|
// Clip out any overflowing edge extension
|
||||||
clipRect.inset(extensionInsets);
|
clipRect.inset(extensionInsets);
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ import androidx.annotation.BinderThread;
|
|||||||
import com.android.internal.R;
|
import com.android.internal.R;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.protolog.common.ProtoLog;
|
import com.android.internal.protolog.common.ProtoLog;
|
||||||
|
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
|
||||||
import com.android.wm.shell.common.DisplayController;
|
import com.android.wm.shell.common.DisplayController;
|
||||||
import com.android.wm.shell.common.ExternalInterfaceBinder;
|
import com.android.wm.shell.common.ExternalInterfaceBinder;
|
||||||
import com.android.wm.shell.common.RemoteCallable;
|
import com.android.wm.shell.common.RemoteCallable;
|
||||||
@@ -265,7 +266,8 @@ public class Transitions implements RemoteCallable<Transitions>,
|
|||||||
@NonNull Handler mainHandler,
|
@NonNull Handler mainHandler,
|
||||||
@NonNull ShellExecutor animExecutor) {
|
@NonNull ShellExecutor animExecutor) {
|
||||||
this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
|
this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
|
||||||
mainHandler, animExecutor, null);
|
mainHandler, animExecutor, null,
|
||||||
|
new RootTaskDisplayAreaOrganizer(mainExecutor, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transitions(@NonNull Context context,
|
public Transitions(@NonNull Context context,
|
||||||
@@ -277,7 +279,8 @@ public class Transitions implements RemoteCallable<Transitions>,
|
|||||||
@NonNull ShellExecutor mainExecutor,
|
@NonNull ShellExecutor mainExecutor,
|
||||||
@NonNull Handler mainHandler,
|
@NonNull Handler mainHandler,
|
||||||
@NonNull ShellExecutor animExecutor,
|
@NonNull ShellExecutor animExecutor,
|
||||||
@Nullable ShellCommandHandler shellCommandHandler) {
|
@Nullable ShellCommandHandler shellCommandHandler,
|
||||||
|
@NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
|
||||||
mOrganizer = organizer;
|
mOrganizer = organizer;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mMainExecutor = mainExecutor;
|
mMainExecutor = mainExecutor;
|
||||||
@@ -285,7 +288,7 @@ public class Transitions implements RemoteCallable<Transitions>,
|
|||||||
mDisplayController = displayController;
|
mDisplayController = displayController;
|
||||||
mPlayerImpl = new TransitionPlayerImpl();
|
mPlayerImpl = new TransitionPlayerImpl();
|
||||||
mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
|
mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
|
||||||
displayController, pool, mainExecutor, mainHandler, animExecutor);
|
displayController, pool, mainExecutor, mainHandler, animExecutor, rootTDAOrganizer);
|
||||||
mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
|
mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
|
||||||
mShellController = shellController;
|
mShellController = shellController;
|
||||||
// The very last handler (0 in the list) should be the default one.
|
// The very last handler (0 in the list) should be the default one.
|
||||||
|
|||||||
Reference in New Issue
Block a user