diff options
| author | 2023-05-09 17:19:13 +0000 | |
|---|---|---|
| committer | 2023-05-09 17:19:13 +0000 | |
| commit | 550f35fcdb79c43d79007a2c5fc18fe0c3efe983 (patch) | |
| tree | d7cf02818aead14826a8a1d7fbeab58bb44ac8e7 | |
| parent | 641d66ba66818269414e6ba28135622d756078ec (diff) | |
| parent | b1c2d729e30f9a74453f621c01e45efd1af22149 (diff) | |
Merge "Change unfold background color based on split screen state" into udc-dev
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; |