summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nicolo' Mazzucato <nicomazz@google.com> 2023-05-08 11:56:40 +0000
committer Nicolo' Mazzucato <nicomazz@google.com> 2023-05-09 11:36:22 +0000
commitb1c2d729e30f9a74453f621c01e45efd1af22149 (patch)
tree6900ddce06cda31c22c898baca3e0011f13ac4ce
parent9a5003dbc88a355996b1c49546c0cc7857c15d4c (diff)
Change unfold background color based on split screen state
After this cl, task background will have the same color of the split divider when the fold/unfold animation happens while in splitscreen. For all other cases, the behaviour is the same as before. Before this cl, the task background and split divider had different colors that didn't match. Bug: 278071265 Test: 1. Folded while in split screen 2. checked the colors match 3. went to single app 4. checked the color was the original one Change-Id: I6915ea0c249a2c1de15f59ed01f8290e0b8b02b8
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java40
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java5
2 files changed, 40 insertions, 5 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
index 96657af22e37..9d4e6b475c53 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
@@ -20,6 +20,7 @@ import static android.graphics.Color.blue;
import static android.graphics.Color.green;
import static android.graphics.Color.red;
+import android.annotation.ColorRes;
import android.annotation.NonNull;
import android.content.Context;
import android.view.SurfaceControl;
@@ -33,10 +34,14 @@ public class UnfoldBackgroundController {
private static final int BACKGROUND_LAYER_Z_INDEX = -1;
private final float[] mBackgroundColor;
+ private final float[] mSplitScreenBackgroundColor;
+ private float[] mBackgroundColorSet;
private SurfaceControl mBackgroundLayer;
+ private boolean mSplitScreenVisible = false;
public UnfoldBackgroundController(@NonNull Context context) {
- mBackgroundColor = getBackgroundColor(context);
+ mBackgroundColor = getRGBColorFromId(context, R.color.unfold_background);
+ mSplitScreenBackgroundColor = getRGBColorFromId(context, R.color.split_divider_background);
}
/**
@@ -44,7 +49,14 @@ public class UnfoldBackgroundController {
* @param transaction where we should add the background if it is not added
*/
public void ensureBackground(@NonNull SurfaceControl.Transaction transaction) {
- if (mBackgroundLayer != null) return;
+ float[] expectedColor = getCurrentBackgroundColor();
+ if (mBackgroundLayer != null) {
+ if (mBackgroundColorSet != expectedColor) {
+ transaction.setColor(mBackgroundLayer, expectedColor);
+ mBackgroundColorSet = expectedColor;
+ }
+ return;
+ }
SurfaceControl.Builder colorLayerBuilder = new SurfaceControl.Builder()
.setName("app-unfold-background")
@@ -53,9 +65,10 @@ public class UnfoldBackgroundController {
mBackgroundLayer = colorLayerBuilder.build();
transaction
- .setColor(mBackgroundLayer, mBackgroundColor)
+ .setColor(mBackgroundLayer, expectedColor)
.show(mBackgroundLayer)
.setLayer(mBackgroundLayer, BACKGROUND_LAYER_Z_INDEX);
+ mBackgroundColorSet = expectedColor;
}
/**
@@ -70,8 +83,25 @@ public class UnfoldBackgroundController {
mBackgroundLayer = null;
}
- private float[] getBackgroundColor(Context context) {
- int colorInt = context.getResources().getColor(R.color.unfold_background);
+ /**
+ * Expected to be called whenever split screen visibility changes.
+ *
+ * @param visible True when split screen is visible
+ */
+ public void onSplitVisibilityChanged(boolean visible) {
+ mSplitScreenVisible = visible;
+ }
+
+ private float[] getCurrentBackgroundColor() {
+ if (mSplitScreenVisible) {
+ return mSplitScreenBackgroundColor;
+ } else {
+ return mBackgroundColor;
+ }
+ }
+
+ private float[] getRGBColorFromId(Context context, @ColorRes int id) {
+ int colorInt = context.getResources().getColor(id);
return new float[]{
(float) red(colorInt) / 255.0F,
(float) green(colorInt) / 255.0F,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
index 2f0c96487d68..123bf3bfca2e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
@@ -292,6 +292,11 @@ public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator,
.setCornerRadius(context.mLeash, 0.0F);
}
+ @Override
+ public void onSplitVisibilityChanged(boolean visible) {
+ mUnfoldBackgroundController.onSplitVisibilityChanged(visible);
+ }
+
private class AnimationContext {
final SurfaceControl mLeash;