diff --git a/libs/WindowManager/Shell/res/drawable/pip_ic_move_down.xml b/libs/WindowManager/Shell/res/drawable/pip_ic_move_down.xml deleted file mode 100644 index d8f356164358d..0000000000000 --- a/libs/WindowManager/Shell/res/drawable/pip_ic_move_down.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/WindowManager/Shell/res/drawable/pip_ic_move_left.xml b/libs/WindowManager/Shell/res/drawable/pip_ic_move_left.xml deleted file mode 100644 index 3e0011c65942f..0000000000000 --- a/libs/WindowManager/Shell/res/drawable/pip_ic_move_left.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/WindowManager/Shell/res/drawable/pip_ic_move_right.xml b/libs/WindowManager/Shell/res/drawable/pip_ic_move_right.xml deleted file mode 100644 index f6b3c72e3cb5f..0000000000000 --- a/libs/WindowManager/Shell/res/drawable/pip_ic_move_right.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/WindowManager/Shell/res/drawable/pip_ic_move_up.xml b/libs/WindowManager/Shell/res/drawable/pip_ic_move_up.xml deleted file mode 100644 index 1a34462495738..0000000000000 --- a/libs/WindowManager/Shell/res/drawable/pip_ic_move_up.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml index dcce4698c2524..bcb789586bfb2 100644 --- a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml +++ b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml @@ -104,9 +104,7 @@ android:layout_centerHorizontal="true" android:layout_alignParentTop="true" android:alpha="0" - android:contentDescription="@string/a11y_action_pip_move_up" - android:elevation="@dimen/pip_menu_arrow_elevation" - android:src="@drawable/pip_ic_move_up" /> + android:contentDescription="@string/a11y_action_pip_move_up"/> + android:contentDescription="@string/a11y_action_pip_move_right"/> + android:contentDescription="@string/a11y_action_pip_move_down"/> + android:contentDescription="@string/a11y_action_pip_move_left"/> diff --git a/libs/WindowManager/Shell/res/values-tvdpi/dimen.xml b/libs/WindowManager/Shell/res/values-tvdpi/dimen.xml index adbf65648dd12..fd825639f1e81 100644 --- a/libs/WindowManager/Shell/res/values-tvdpi/dimen.xml +++ b/libs/WindowManager/Shell/res/values-tvdpi/dimen.xml @@ -33,8 +33,8 @@ 20dp - 24dp - 5dp + 12dp + 1dp 1dp 7dp diff --git a/libs/WindowManager/Shell/res/values/colors_tv.xml b/libs/WindowManager/Shell/res/values/colors_tv.xml index e6933ca3fce62..5f7fb12c30022 100644 --- a/libs/WindowManager/Shell/res/values/colors_tv.xml +++ b/libs/WindowManager/Shell/res/values/colors_tv.xml @@ -27,6 +27,10 @@ #E8EAED #990E0E0F #1E232C + + #F1F3F4 #99D2E3FC #D2E3FC 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 6eb719ba60a36..bcf70aa2bd3ea 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 @@ -31,12 +31,19 @@ import static com.android.wm.shell.pip.tv.TvPipMenuController.MODE_MOVE_MENU; import static com.android.wm.shell.pip.tv.TvPipMenuController.MODE_NO_MENU; import android.content.Context; +import android.content.res.Resources; +import android.graphics.Outline; +import android.graphics.Path; import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.PathShape; import android.os.Handler; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.accessibility.AccessibilityManager; import android.widget.FrameLayout; import android.widget.ImageView; @@ -89,6 +96,8 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L private final ImageView mArrowLeft; private final TvWindowMenuActionButton mA11yDoneButton; + private final int mArrowElevation; + private @TvPipMenuController.TvPipMenuMode int mCurrentMenuMode = MODE_NO_MENU; private final Rect mCurrentPipBounds = new Rect(); private int mCurrentPipGravity; @@ -129,21 +138,70 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L mArrowLeft = findViewById(R.id.tv_pip_menu_arrow_left); mA11yDoneButton = findViewById(R.id.tv_pip_menu_done_button); - mResizeAnimationDuration = context.getResources().getInteger( - R.integer.config_pipResizeAnimationDuration); - mPipMenuFadeAnimationDuration = context.getResources() - .getInteger(R.integer.tv_window_menu_fade_animation_duration); + final Resources res = context.getResources(); + mResizeAnimationDuration = res.getInteger(R.integer.config_pipResizeAnimationDuration); + mPipMenuFadeAnimationDuration = + res.getInteger(R.integer.tv_window_menu_fade_animation_duration); + mPipMenuOuterSpace = res.getDimensionPixelSize(R.dimen.pip_menu_outer_space); + mPipMenuBorderWidth = res.getDimensionPixelSize(R.dimen.pip_menu_border_width); + mArrowElevation = res.getDimensionPixelSize(R.dimen.pip_menu_arrow_elevation); - mPipMenuOuterSpace = context.getResources() - .getDimensionPixelSize(R.dimen.pip_menu_outer_space); - mPipMenuBorderWidth = context.getResources() - .getDimensionPixelSize(R.dimen.pip_menu_border_width); + initMoveArrows(); mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, mListener); ((FrameLayout) findViewById(R.id.tv_pip_menu_edu_text_drawer_placeholder)) .addView(mEduTextDrawer); } + private void initMoveArrows() { + final int arrowSize = + mContext.getResources().getDimensionPixelSize(R.dimen.pip_menu_arrow_size); + final Path arrowPath = createArrowPath(arrowSize); + + final ShapeDrawable arrowDrawable = new ShapeDrawable(); + arrowDrawable.setShape(new PathShape(arrowPath, arrowSize, arrowSize)); + arrowDrawable.setTint(mContext.getResources().getColor(R.color.tv_pip_menu_arrow_color)); + + final ViewOutlineProvider arrowOutlineProvider = new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setPath(createArrowPath(view.getMeasuredHeight())); + } + }; + + initArrow(mArrowRight, arrowOutlineProvider, arrowDrawable, 0); + initArrow(mArrowDown, arrowOutlineProvider, arrowDrawable, 90); + initArrow(mArrowLeft, arrowOutlineProvider, arrowDrawable, 180); + initArrow(mArrowUp, arrowOutlineProvider, arrowDrawable, 270); + } + + /** + * Creates a Path for a movement arrow in the MODE_MOVE_MENU. The resulting Path is a simple + * right-pointing triangle with its tip in the center of a size x size square: + * _ _ _ _ _ + * |* | + * |* * | + * |* * | + * |* * | + * |* _ _ _ _| + * + */ + private Path createArrowPath(int size) { + final Path triangle = new Path(); + triangle.lineTo(0, size); + triangle.lineTo(size / 2, size / 2); + triangle.close(); + return triangle; + } + + private void initArrow(View v, ViewOutlineProvider arrowOutlineProvider, Drawable arrowDrawable, + int rotation) { + v.setOutlineProvider(arrowOutlineProvider); + v.setBackground(arrowDrawable); + v.setRotation(rotation); + v.setElevation(mArrowElevation); + } + void onPipTransitionToTargetBoundsStarted(Rect targetBounds) { if (targetBounds == null) { return;