diff options
| author | 2023-03-30 23:25:19 +0000 | |
|---|---|---|
| committer | 2023-04-14 13:31:50 +0000 | |
| commit | cce00a0b15593877eb2089971a18bbde2863911c (patch) | |
| tree | 1163a6c46b6ab14adb18a49ae23b23a01a71008a /libs | |
| parent | aff4a412a08f841a750615b272f2a31013fb98a5 (diff) | |
Fix tv pip menu rounded corner artifacts
While the tv pip menu edu text is showing, we draw a "pip border"
around the pip content to draw rounded corners on top of the
non-rounded corners of the pip surface.
Separately, we draw a "pip frame" around the whole pip menu, including
the edu text, which turns white when the pip menu is focused.
The pip frame and the pip border have the same width and rounded corners
values. When the edu text closes, the pip border and the pip frame
overlap exactly and theoretically, the pip border should not be visible
behind the pip frame. However, when the pip frame is highlighted, the
pip border is slightly visible at the rounded corners.
To mitigate this, in this CL we change the visibility of the pip border
to GONE when the edu text animation ends. At that point the pip border
and the pip frame overlap exactly, so there is no need for the pip
border anymore.
Bug: 275693800
Test: manual
Change-Id: If3cceb8e01253ae2fb1ffd37dd2287927ad4ac58
Diffstat (limited to 'libs')
3 files changed, 36 insertions, 17 deletions
diff --git a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml index dcce4698c252..ab64f9e359b0 100644 --- a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml +++ b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml @@ -67,7 +67,7 @@ <!-- Temporarily extending the background to show an edu text hint for opening the menu --> <FrameLayout - android:id="@+id/tv_pip_menu_edu_text_drawer_placeholder" + android:id="@+id/tv_pip_menu_edu_text_container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/tv_pip" diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java index dca246b566ff..f86f987039ba 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java @@ -260,11 +260,12 @@ class TvPipMenuEduTextDrawer extends FrameLayout { }); heightAnimator.start(); - mListener.onCloseEduText(); + mListener.onCloseEduTextAnimationStart(); } public void onCloseEduTextAnimationEnd() { setVisibility(GONE); + mListener.onCloseEduTextAnimationEnd(); } /** @@ -295,11 +296,8 @@ class TvPipMenuEduTextDrawer extends FrameLayout { * A listener for edu text drawer event states. */ interface Listener { - /** - * The edu text closing impacts the size of the Picture-in-Picture window and influences - * how it is positioned on the screen. - */ - void onCloseEduText(); + void onCloseEduTextAnimationStart(); + void onCloseEduTextAnimationEnd(); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java index 235d07b56b7f..d07641892552 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java @@ -57,7 +57,8 @@ import java.util.List; * A View that represents Pip Menu on TV. It's responsible for displaying the Pip menu actions from * the TvPipActionsProvider as well as the buttons for manually moving the PiP. */ -public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener { +public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener, + TvPipMenuEduTextDrawer.Listener { private static final String TAG = "TvPipMenuView"; private final TvPipMenuView.Listener mListener; @@ -76,6 +77,7 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L private final View mDimLayer; private final TvPipMenuEduTextDrawer mEduTextDrawer; + private final ViewGroup mEduTextContainer; private final int mPipMenuOuterSpace; private final int mPipMenuBorderWidth; @@ -139,9 +141,9 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L mPipMenuBorderWidth = context.getResources() .getDimensionPixelSize(R.dimen.pip_menu_border_width); - mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, mListener); - ((FrameLayout) findViewById(R.id.tv_pip_menu_edu_text_drawer_placeholder)) - .addView(mEduTextDrawer); + mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, this); + mEduTextContainer = (ViewGroup) findViewById(R.id.tv_pip_menu_edu_text_container); + mEduTextContainer.addView(mEduTextDrawer); } void onPipTransitionToTargetBoundsStarted(Rect targetBounds) { @@ -235,11 +237,13 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L * pip menu when it gains focus. */ private void updatePipFrameBounds() { - final ViewGroup.LayoutParams pipFrameParams = mPipFrameView.getLayoutParams(); - if (pipFrameParams != null) { - pipFrameParams.width = mCurrentPipBounds.width() + 2 * mPipMenuBorderWidth; - pipFrameParams.height = mCurrentPipBounds.height() + 2 * mPipMenuBorderWidth; - mPipFrameView.setLayoutParams(pipFrameParams); + if (mPipFrameView.getVisibility() == VISIBLE) { + final ViewGroup.LayoutParams pipFrameParams = mPipFrameView.getLayoutParams(); + if (pipFrameParams != null) { + pipFrameParams.width = mCurrentPipBounds.width() + 2 * mPipMenuBorderWidth; + pipFrameParams.height = mCurrentPipBounds.height() + 2 * mPipMenuBorderWidth; + mPipFrameView.setLayoutParams(pipFrameParams); + } } final ViewGroup.LayoutParams pipViewParams = mPipView.getLayoutParams(); @@ -406,6 +410,17 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L } @Override + public void onCloseEduTextAnimationStart() { + mListener.onCloseEduText(); + } + + @Override + public void onCloseEduTextAnimationEnd() { + mPipFrameView.setVisibility(GONE); + mEduTextContainer.setVisibility(GONE); + } + + @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == ACTION_UP) { @@ -551,7 +566,7 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L } } - interface Listener extends TvPipMenuEduTextDrawer.Listener { + interface Listener { void onBackPress(); @@ -573,5 +588,11 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L * has lost focus. */ void onPipWindowFocusChanged(boolean focused); + + /** + * The edu text closing impacts the size of the Picture-in-Picture window and influences + * how it is positioned on the screen. + */ + void onCloseEduText(); } } |