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.fullscreen.FullscreenTaskListener;
|
||||
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.OneHandedController;
|
||||
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.PipUiEventLogger;
|
||||
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.RecentTasksController;
|
||||
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.windowdecor.WindowDecorViewModel;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import dagger.BindsOptionalOf;
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -548,13 +548,15 @@ public abstract class WMShellBaseModule {
|
||||
@ShellMainThread ShellExecutor mainExecutor,
|
||||
@ShellMainThread Handler mainHandler,
|
||||
@ShellAnimationThread ShellExecutor animExecutor,
|
||||
ShellCommandHandler shellCommandHandler) {
|
||||
ShellCommandHandler shellCommandHandler,
|
||||
RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
|
||||
if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
|
||||
// TODO(b/238217847): Force override shell init if registration is disabled
|
||||
shellInit = new ShellInit(mainExecutor);
|
||||
}
|
||||
return new Transitions(context, shellInit, shellController, organizer, pool,
|
||||
displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler);
|
||||
displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler,
|
||||
rootTaskDisplayAreaOrganizer);
|
||||
}
|
||||
|
||||
@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_NONE;
|
||||
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.getTransitionBackgroundColorIfSet;
|
||||
import static com.android.wm.shell.transition.TransitionAnimationHelper.loadAttributeAnimation;
|
||||
@@ -76,6 +75,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Insets;
|
||||
import android.graphics.Point;
|
||||
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.TransitionAnimation;
|
||||
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.DisplayLayout;
|
||||
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 float mTransitionAnimationScaleSetting = 1.0f;
|
||||
|
||||
private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
|
||||
private final int mCurrentUserId;
|
||||
|
||||
private Drawable mEnterpriseThumbnailDrawable;
|
||||
@@ -157,7 +159,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
||||
@NonNull DisplayController displayController,
|
||||
@NonNull TransactionPool transactionPool,
|
||||
@NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
|
||||
@NonNull ShellExecutor animExecutor) {
|
||||
@NonNull ShellExecutor animExecutor,
|
||||
@NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
|
||||
mDisplayController = displayController;
|
||||
mTransactionPool = transactionPool;
|
||||
mContext = context;
|
||||
@@ -168,6 +171,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
||||
mCurrentUserId = UserHandle.myUserId();
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
shellInit.addInitCallback(this::onInit, this);
|
||||
mRootTDAOrganizer = rootTDAOrganizer;
|
||||
}
|
||||
|
||||
private void onInit() {
|
||||
@@ -510,10 +514,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
||||
}
|
||||
|
||||
if (backgroundColorForTransition != 0) {
|
||||
for (int i = 0; i < info.getRootCount(); ++i) {
|
||||
addBackgroundToTransition(info.getRoot(i).getLeash(), backgroundColorForTransition,
|
||||
startTransaction, finishTransaction);
|
||||
}
|
||||
addBackgroundColorOnTDA(info, backgroundColorForTransition, startTransaction,
|
||||
finishTransaction);
|
||||
}
|
||||
|
||||
if (postStartTransactionCallbacks.size() > 0) {
|
||||
@@ -543,6 +545,28 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
||||
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) {
|
||||
for (int i = info.getChanges().size() - 1; i >= 0; --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,
|
||||
SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
|
||||
SurfaceControl leash, Animation anim, Transformation tmpTransformation, float[] matrix,
|
||||
Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
|
||||
anim.getTransformation(time, transformation);
|
||||
tmpTransformation.clear();
|
||||
anim.getTransformation(time, tmpTransformation);
|
||||
if (position != null) {
|
||||
transformation.getMatrix().postTranslate(position.x, position.y);
|
||||
tmpTransformation.getMatrix().postTranslate(position.x, position.y);
|
||||
}
|
||||
t.setMatrix(leash, transformation.getMatrix(), matrix);
|
||||
t.setAlpha(leash, transformation.getAlpha());
|
||||
t.setMatrix(leash, tmpTransformation.getMatrix(), matrix);
|
||||
t.setAlpha(leash, tmpTransformation.getAlpha());
|
||||
|
||||
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()) {
|
||||
// Clip out any overflowing edge extension
|
||||
clipRect.inset(extensionInsets);
|
||||
|
||||
@@ -69,6 +69,7 @@ import androidx.annotation.BinderThread;
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
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.ExternalInterfaceBinder;
|
||||
import com.android.wm.shell.common.RemoteCallable;
|
||||
@@ -265,7 +266,8 @@ public class Transitions implements RemoteCallable<Transitions>,
|
||||
@NonNull Handler mainHandler,
|
||||
@NonNull ShellExecutor animExecutor) {
|
||||
this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
|
||||
mainHandler, animExecutor, null);
|
||||
mainHandler, animExecutor, null,
|
||||
new RootTaskDisplayAreaOrganizer(mainExecutor, context));
|
||||
}
|
||||
|
||||
public Transitions(@NonNull Context context,
|
||||
@@ -277,7 +279,8 @@ public class Transitions implements RemoteCallable<Transitions>,
|
||||
@NonNull ShellExecutor mainExecutor,
|
||||
@NonNull Handler mainHandler,
|
||||
@NonNull ShellExecutor animExecutor,
|
||||
@Nullable ShellCommandHandler shellCommandHandler) {
|
||||
@Nullable ShellCommandHandler shellCommandHandler,
|
||||
@NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
|
||||
mOrganizer = organizer;
|
||||
mContext = context;
|
||||
mMainExecutor = mainExecutor;
|
||||
@@ -285,7 +288,7 @@ public class Transitions implements RemoteCallable<Transitions>,
|
||||
mDisplayController = displayController;
|
||||
mPlayerImpl = new TransitionPlayerImpl();
|
||||
mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
|
||||
displayController, pool, mainExecutor, mainHandler, animExecutor);
|
||||
displayController, pool, mainExecutor, mainHandler, animExecutor, rootTDAOrganizer);
|
||||
mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
|
||||
mShellController = shellController;
|
||||
// The very last handler (0 in the list) should be the default one.
|
||||
|
||||
Reference in New Issue
Block a user