Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99fdf7a7 authored by Uwais Ashraf's avatar Uwais Ashraf
Browse files

App chip refactor

- Adds background outline replacing 2 circles + rect approach. This
enables easier shadow drawing code.
- Simplify structure of AppChipView.
- Adds an anchor View to simplify laying out of menu around app chip

Bug: 313644427
Bug: 317007147
Fix: 322760765
Flag: ACONFIG com.android.launcher3.enable_grid_only_overview TEAMFOOD
Flag: ACONFIG com.android.launcher3.enable_overview_icon_menu TEAMFOOD
Test: OverviewImageTest
Change-Id: I56c2644779863c083ae475a740a84321b1d0c396
parent e35d5d8c
Loading
Loading
Loading
Loading
+24 −28
Original line number Diff line number Diff line
@@ -17,45 +17,41 @@
<com.android.quickstep.views.IconAppChipView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_width="@dimen/task_thumbnail_icon_menu_expanded_width"
    android:layout_height="@dimen/task_thumbnail_icon_menu_expanded_height"
    android:clipToOutline="true"
    android:focusable="false"
    android:importantForAccessibility="no"
    android:autoMirrored="true"
    android:background="@drawable/icon_menu_elevation_background"
    android:elevation="@dimen/task_thumbnail_icon_menu_elevation" >
    android:elevation="@dimen/task_thumbnail_icon_menu_elevation"
    android:background="?androidprv:attr/materialColorSurfaceBright">

    <ImageView
        android:id="@+id/icon_view_background_corners_start"
        android:layout_width="@dimen/task_thumbnail_icon_menu_corner_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_min_height"
        android:src="@drawable/icon_menu_background_corners"
        android:importantForAccessibility="no" />
    <ImageView
        android:id="@+id/icon_view_background"
        android:layout_width="@dimen/task_thumbnail_icon_menu_background_min_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_min_height"
        android:src="@drawable/icon_menu_background"
        android:importantForAccessibility="no" />
    <ImageView
        android:id="@+id/icon_view_background_corners_end"
        android:layout_width="@dimen/task_thumbnail_icon_menu_corner_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_min_height"
        android:src="@drawable/icon_menu_background_corners"
        android:importantForAccessibility="no" />
    <!-- ignoring warning because the user of the anchor is a Rect where RTL is not needed -->
    <!-- This anchor's bounds is in the expected location after rotations and translations are
    applied to the parent. The same is not true of the parent so an anchor is used. -->
    <!-- marginTop is applied in java to get the gap between chip and menu -->
    <View
        android:id="@+id/icon_view_menu_anchor"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="left|top"
        android:focusable="false"
        android:importantForAccessibility="no"
        tools:ignore="RtlHardcoded" />

    <com.android.quickstep.views.IconView
        android:id="@+id/icon_view"
        android:layout_width="@dimen/task_thumbnail_icon_size"
        android:layout_height="@dimen/task_thumbnail_icon_size"
        android:layout_width="@dimen/task_thumbnail_icon_menu_app_icon_collapsed_size"
        android:layout_height="@dimen/task_thumbnail_icon_menu_app_icon_collapsed_size"
        android:focusable="false"
        android:importantForAccessibility="no" />

    <TextView
        android:id="@+id/icon_text_collapsed"
        android:layout_width="@dimen/task_thumbnail_icon_menu_text_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_drawable_size"
        android:layout_width="@dimen/task_thumbnail_icon_menu_text_collapsed_max_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_app_icon_collapsed_size"
        android:gravity="start|center_vertical"
        android:maxLines="1"
        android:ellipsize="end"
@@ -65,8 +61,8 @@

    <TextView
        android:id="@+id/icon_text_expanded"
        android:layout_width="@dimen/task_thumbnail_icon_menu_text_max_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_drawable_size"
        android:layout_width="@dimen/task_thumbnail_icon_menu_text_expanded_max_width"
        android:layout_height="@dimen/task_thumbnail_icon_menu_app_icon_collapsed_size"
        android:gravity="start|center_vertical"
        android:maxLines="1"
        android:ellipsize="end"
+25 −35
Original line number Diff line number Diff line
@@ -44,48 +44,38 @@
    <dimen name="overview_task_margin">16dp</dimen>
    <!--  The horizontal space between tasks  -->
    <dimen name="overview_page_spacing">16dp</dimen>
    <!--  The min width of the thumbnail icon menu for non-split tasks  -->
    <dimen name="task_thumbnail_icon_menu_min_width">156dp</dimen>
    <!--  The max width of the thumbnail icon menu  -->
    <dimen name="task_thumbnail_icon_menu_max_width">216dp</dimen>
    <!--  The width of the thumbnail icon menu background  -->
    <dimen name="task_thumbnail_icon_menu_background_min_width">120dp</dimen>
    <!--  The width of the icon menu text  -->
    <dimen name="task_thumbnail_icon_menu_text_width">86dp</dimen>
    <!--  The max width of the icon menu text  -->
    <dimen name="task_thumbnail_icon_menu_text_max_width">118dp</dimen>
    <!--  The collapsed max width of the icon menu text  -->
    <dimen name="task_thumbnail_icon_menu_text_collapsed_max_width">86dp</dimen>
    <!--  The expanded max width of the icon menu text  -->
    <dimen name="task_thumbnail_icon_menu_text_expanded_max_width">118dp</dimen>
    <!--  The size of the icon menu text  -->
    <dimen name="task_thumbnail_icon_menu_text_size">14sp</dimen>
    <!--  The max width of the thumbnail icon menu background  -->
    <dimen name="task_thumbnail_icon_menu_background_max_width">164dp</dimen>
    <!--  The height of the thumbnail icon menu  -->
    <dimen name="task_thumbnail_icon_menu_min_height">36dp</dimen>
    <!--  The corner radius of the thumbnail icon menu  -->
    <dimen name="task_thumbnail_icon_menu_corner_radius">28dp</dimen>
    <!--  The width of the thumbnail icon menu backgorund's corners when collapsed  -->
    <dimen name="task_thumbnail_icon_menu_corner_width">36dp</dimen>
    <!--  The max height of the thumbnail icon menu  -->
    <dimen name="task_thumbnail_icon_menu_max_height">52dp</dimen>
    <!--  The size of the icon menu arrow  -->
    <dimen name="task_thumbnail_icon_menu_arrow_size">24dp</dimen>
    <!--  The size of the icon menu arrow drawable  -->
    <dimen name="task_thumbnail_icon_menu_arrow_drawable_size">16dp</dimen>
    <!--  The margin at the start of the task icon menu  -->
    <dimen name="task_thumbnail_icon_menu_start_margin">12dp</dimen>
    <!--  The margin at the top of the task icon menu  -->
    <dimen name="task_thumbnail_icon_menu_top_margin">12dp</dimen>
    <!--  The width of the thumbnail icon menu when collapsed (for non-split tasks)  -->
    <dimen name="task_thumbnail_icon_menu_collapsed_width">156dp</dimen>
    <!--  The width of the thumbnail icon menu when expanded -->
    <dimen name="task_thumbnail_icon_menu_expanded_width">216dp</dimen>
    <!--  The height of the thumbnail icon menu when collapsed  -->
    <dimen name="task_thumbnail_icon_menu_collapsed_height">36dp</dimen>
    <!--  The height of the thumbnail icon menu when expanded -->
    <dimen name="task_thumbnail_icon_menu_expanded_height">52dp</dimen>
    <!--  The margin at the top/start of the task icon menu when expanded  -->
    <dimen name="task_thumbnail_icon_menu_expanded_top_start_margin">4dp</dimen>
    <!--  The margin at the start of the background when collapsed  -->
    <dimen name="task_thumbnail_icon_menu_background_margin_top_start">8dp</dimen>
    <!--  The margin between the app name + app icon and app name + arrow icon when collapsed  -->
    <dimen name="task_thumbnail_icon_menu_app_name_margin_horizontal_collapsed">8dp</dimen>
    <!--  The gap at the top of the task icon menu when expanded  -->
    <dimen name="task_thumbnail_icon_menu_expanded_gap">6dp</dimen>
    <dimen name="task_thumbnail_icon_menu_expanded_gap">2dp</dimen>
    <!--  The margin at the start of the task icon view in the icon menu  -->
    <dimen name="task_thumbnail_icon_view_start_margin">6dp</dimen>
    <!--  The space around the task icon arrow within the icon menu  -->
    <dimen name="task_thumbnail_icon_menu_arrow_margin">8dp</dimen>
    <!--  The max space around the task icon within the icon menu  -->
    <dimen name="task_thumbnail_icon_menu_touch_max_margin">8dp</dimen>
    <!--  The icon size for the icon menu  -->
    <dimen name="task_thumbnail_icon_menu_drawable_size">24dp</dimen>
    <!--  The icon size for the icon menu  -->
    <dimen name="task_thumbnail_icon_menu_drawable_max_size">32dp</dimen>
    <!--  The size for the icon menu arrow -->
    <dimen name="task_thumbnail_icon_menu_arrow_size">24dp</dimen>
    <!--  The collapsed size for the icon menu icon -->
    <dimen name="task_thumbnail_icon_menu_app_icon_collapsed_size">24dp</dimen>
    <!--  The expanded icon size for the icon menu -->
    <dimen name="task_thumbnail_icon_menu_app_icon_expanded_size">32dp</dimen>
    <!--  The size of the icon menu's icon touch target  -->
    <dimen name="task_thumbnail_icon_menu_drawable_touch_size">44dp</dimen>
    <dimen name="task_thumbnail_icon_menu_elevation">4dp</dimen>
+9 −15
Original line number Diff line number Diff line
@@ -274,21 +274,12 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler
    @Override
    public float getTaskMenuX(float x, View thumbnailView,
            DeviceProfile deviceProfile, float taskInsetMargin, View taskViewIcon) {
        if (enableOverviewIconMenu()) {
            return x + (taskInsetMargin / 2f);
        }
        return thumbnailView.getMeasuredWidth() + x - taskInsetMargin;
    }

    @Override
    public float getTaskMenuY(float y, View thumbnailView, int stagePosition,
            View taskMenuView, float taskInsetMargin, View taskViewIcon) {
        if (enableOverviewIconMenu()) {
            return y - (thumbnailView.getLayoutDirection() == LAYOUT_DIRECTION_RTL
                    ? taskMenuView.getMeasuredHeight() * 2 - (taskInsetMargin / 2f)
                    : taskMenuView.getMeasuredHeight());

        }
        BaseDragLayer.LayoutParams lp = (BaseDragLayer.LayoutParams) taskMenuView.getLayoutParams();
        int taskMenuWidth = lp.width;
        if (stagePosition == STAGE_POSITION_UNDEFINED) {
@@ -304,7 +295,7 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler
            @StagePosition int stagePosition) {
        if (enableOverviewIconMenu()) {
            return thumbnailView.getResources().getDimensionPixelSize(
                    R.dimen.task_thumbnail_icon_menu_max_width);
                    R.dimen.task_thumbnail_icon_menu_expanded_width);
        }
        if (stagePosition == SplitConfigurationOptions.STAGE_POSITION_UNDEFINED) {
            return thumbnailView.getMeasuredWidth();
@@ -582,11 +573,6 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler
    @Override
    public void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin,
            int taskIconHeight, int thumbnailTopMargin, boolean isRtl) {
        if (enableOverviewIconMenu()) {
            iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL;
            iconParams.topMargin = 0;
            return;
        }
        iconParams.gravity = (isRtl ? START : END) | CENTER_VERTICAL;
        iconParams.rightMargin = -taskIconHeight - taskIconMargin / 2;
        iconParams.leftMargin = 0;
@@ -594,6 +580,14 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler
        iconParams.bottomMargin = 0;
    }

    @Override
    public void setIconAppChipChildrenParams(FrameLayout.LayoutParams iconParams,
            int chipChildMarginStart) {
        iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL;
        iconParams.setMarginStart(chipChildMarginStart);
        iconParams.topMargin = 0;
    }

    @Override
    public void setIconAppChipMenuParams(IconAppChipView iconAppChipView,
            FrameLayout.LayoutParams iconMenuParams, int iconMenuMargin, int thumbnailTopMargin) {
+10 −17
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static android.view.Gravity.CENTER_HORIZONTAL;
import static android.view.Gravity.END;
import static android.view.Gravity.START;
import static android.view.Gravity.TOP;
import static android.view.View.LAYOUT_DIRECTION_RTL;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;

@@ -182,12 +181,7 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements
    @Override
    public float getTaskMenuX(float x, View thumbnailView,
            DeviceProfile deviceProfile, float taskInsetMargin, View taskViewIcon) {
        if (enableOverviewIconMenu()) {
            if (thumbnailView.getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
                return x + taskInsetMargin - taskViewIcon.getHeight() - (taskInsetMargin / 2f);
            }
            return x + taskInsetMargin;
        } else if (deviceProfile.isLandscape) {
        if (deviceProfile.isLandscape) {
            return x + taskInsetMargin
                    + (thumbnailView.getMeasuredWidth() - thumbnailView.getMeasuredHeight()) / 2f;
        } else {
@@ -198,9 +192,6 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements
    @Override
    public float getTaskMenuY(float y, View thumbnailView, int stagePosition,
            View taskMenuView, float taskInsetMargin, View taskViewIcon) {
        if (enableOverviewIconMenu()) {
            return y;
        }
        return y + taskInsetMargin;
    }

@@ -209,7 +200,7 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements
            @StagePosition int stagePosition) {
        if (enableOverviewIconMenu()) {
            return thumbnailView.getResources().getDimensionPixelSize(
                    R.dimen.task_thumbnail_icon_menu_max_width);
                    R.dimen.task_thumbnail_icon_menu_expanded_width);
        }
        int padding = thumbnailView.getResources()
                .getDimensionPixelSize(R.dimen.task_menu_edge_padding);
@@ -623,18 +614,20 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements
    @Override
    public void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin,
            int taskIconHeight, int thumbnailTopMargin, boolean isRtl) {
        if (enableOverviewIconMenu()) {
            iconParams.setMarginStart(taskIconMargin);
            iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL;
            iconParams.topMargin = 0;
            return;
        }
        iconParams.gravity = TOP | CENTER_HORIZONTAL;
        // Reset margins, since they may have been set on rotation
        iconParams.leftMargin = iconParams.rightMargin = 0;
        iconParams.topMargin = iconParams.bottomMargin = 0;
    }

    @Override
    public void setIconAppChipChildrenParams(FrameLayout.LayoutParams iconParams,
            int chipChildMarginStart) {
        iconParams.setMarginStart(chipChildMarginStart);
        iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL;
        iconParams.topMargin = 0;
    }

    @Override
    public void setIconAppChipMenuParams(IconAppChipView iconAppChipView,
            FrameLayout.LayoutParams iconMenuParams, int iconMenuMargin, int thumbnailTopMargin) {
+7 −0
Original line number Diff line number Diff line
@@ -146,9 +146,16 @@ public interface RecentsPagedOrientationHandler extends PagedOrientationHandler
            int parentWidth, int parentHeight);

    // Overview TaskMenuView methods
    /** Sets layout params on a task's app icon. Only use this when app chip is disabled. */
    void setTaskIconParams(FrameLayout.LayoutParams iconParams,
            int taskIconMargin, int taskIconHeight, int thumbnailTopMargin, boolean isRtl);

    /**
     * Sets layout params on the children of an app chip. Only use this when app chip is enabled.
     */
    void setIconAppChipChildrenParams(
            FrameLayout.LayoutParams iconParams, int chipChildMarginStart);

    void setIconAppChipMenuParams(IconAppChipView iconAppChipView,
            FrameLayout.LayoutParams iconMenuParams,
            int iconMenuMargin, int thumbnailTopMargin);
Loading