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

Commit 00ac9202 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Simplifying app icon popup

> Using a single linearLayout instead of multiple nested views
> Using clipToOutline for rounded corners instead of using canvas.saveLayer
> Removing nested view elevations and overdraw
> Using LayoutTransition for animating layout changes, instead of manually creating animators

Change-Id: I8e57092f52ca5a032a2756594fdd39788acc5a0d
parent ea529083
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -13,34 +13,16 @@
     See the License for the specific language governing permissions and
     limitations under the License.
-->


<com.android.launcher3.notification.NotificationFooterLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:elevation="@dimen/notification_elevation"
    android:clipChildren="false"
    android:layout_gravity="center_vertical"
    android:background="?attr/popupColorPrimary">

    <LinearLayout
        android:id="@+id/icon_row"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="end|center_vertical"
        android:padding="@dimen/notification_footer_icon_row_padding"
        android:clipToPadding="false"
        android:clipChildren="false"/>

    <View
        android:id="@+id/overflow"
        android:layout_width="@dimen/horizontal_ellipsis_size"
        android:layout_height="@dimen/horizontal_ellipsis_size"
        android:background="@drawable/horizontal_ellipsis"
        android:layout_marginStart="@dimen/horizontal_ellipsis_offset"
        android:layout_gravity="start|center_vertical" />

</com.android.launcher3.notification.NotificationFooterLayout>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="?attr/popupColorTertiary" />

    <item android:height="3dp" android:top="0dp">
        <shape>
            <gradient
                android:angle="270"
                android:endColor="@android:color/transparent"
                android:startColor="#33000000"
                android:type="linear" />
        </shape>
    </item>
</layer-list>

res/layout/notification.xml

deleted100644 → 0
+0 −97
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<com.android.launcher3.notification.NotificationItemView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/notification_view"
    android:layout_width="@dimen/bg_popup_item_width"
    android:layout_height="wrap_content"
    android:theme="@style/PopupItem"
    android:elevation="@dimen/deep_shortcuts_elevation">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:clipChildren="false">

        <View
            android:id="@+id/gutter_top"
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:theme="@style/PopupGutter"
            android:visibility="gone" />

        <FrameLayout
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="@dimen/notification_header_height"
            android:paddingStart="@dimen/notification_padding_start"
            android:paddingEnd="@dimen/notification_padding_end"
            android:background="?attr/popupColorPrimary"
            android:elevation="@dimen/notification_elevation"
            android:layout_below="@id/gutter_top" >
            <TextView
                android:id="@+id/notification_text"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:gravity="center_vertical"
                android:text="@string/notifications_header"
                android:textSize="@dimen/notification_header_text_size"
                android:textColor="?android:attr/textColorPrimary" />
            <TextView
                android:id="@+id/notification_count"
                android:layout_width="@dimen/notification_icon_size"
                android:layout_height="match_parent"
                android:layout_gravity="end"
                android:gravity="center"
                android:textSize="@dimen/notification_header_count_text_size"
                android:fontFamily="sans-serif-medium"
                android:textColor="?android:attr/textColorPrimary" />
        </FrameLayout>

        <include layout="@layout/notification_main"
            android:id="@+id/main_view"
            android:layout_width="match_parent"
            android:layout_height="@dimen/notification_main_height"
            android:layout_below="@id/header" />

        <View
            android:id="@+id/divider"
            android:layout_width="match_parent"
            android:layout_height="@dimen/popup_item_divider_height"
            android:background="?attr/popupColorTertiary"
            android:layout_below="@id/main_view"
            android:visibility="gone" />

        <include layout="@layout/notification_footer"
            android:id="@+id/footer"
            android:layout_width="match_parent"
            android:layout_height="@dimen/notification_footer_height"
            android:layout_below="@id/divider" />

        <View
            android:id="@+id/gutter_bottom"
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:theme="@style/PopupGutter"
            android:visibility="gone"
            android:layout_below="@id/footer" />

    </RelativeLayout>

</com.android.launcher3.notification.NotificationItemView>
+134 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- header -->
    <FrameLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="@dimen/notification_header_height"
        android:paddingEnd="@dimen/notification_padding_end"
        android:paddingStart="@dimen/notification_padding_start">
        <TextView
            android:id="@+id/notification_text"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:gravity="center_vertical"
            android:text="@string/notifications_header"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="@dimen/notification_header_text_size" />
        <TextView
            android:id="@+id/notification_count"
            android:layout_width="@dimen/notification_icon_size"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:fontFamily="sans-serif-medium"
            android:gravity="center"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="@dimen/notification_header_count_text_size" />
    </FrameLayout>

    <!-- Main view -->
    <com.android.launcher3.notification.NotificationMainView
        android:id="@+id/main_view"
        android:layout_width="match_parent"
        android:layout_height="@dimen/notification_main_height"
        android:background="@drawable/bg_notification_content"
        android:focusable="true" >

        <LinearLayout
            android:id="@+id/text_and_background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="?attr/popupColorPrimary"
            android:gravity="center_vertical"
            android:orientation="vertical"
            android:paddingBottom="14dp"
            android:paddingEnd="@dimen/notification_main_text_padding_end"
            android:paddingStart="@dimen/notification_padding_start">
            <TextView
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:fontFamily="sans-serif"
                android:lines="1"
                android:textAlignment="viewStart"
                android:textColor="?android:attr/textColorPrimary"
                android:textSize="@dimen/notification_main_title_size" />

            <TextView
                android:id="@+id/text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:fontFamily="sans-serif"
                android:lines="1"
                android:textColor="?android:attr/textColorSecondary"
                android:textSize="@dimen/notification_main_text_size" />
        </LinearLayout>

        <View
            android:id="@+id/popup_item_icon"
            android:layout_width="@dimen/notification_icon_size"
            android:layout_height="@dimen/notification_icon_size"
            android:layout_gravity="center_vertical|end"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="@dimen/notification_padding_end" />

    </com.android.launcher3.notification.NotificationMainView>

    <!-- Divider -->
    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="@dimen/popup_item_divider_height"
        android:layout_below="@id/main_view"
        android:background="?attr/popupColorTertiary" />

    <!-- Footer -->
    <com.android.launcher3.notification.NotificationFooterLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="@dimen/notification_footer_height"
        android:layout_gravity="center_vertical"
        android:clipChildren="false">

        <LinearLayout
            android:id="@+id/icon_row"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipChildren="false"
            android:clipToPadding="false"
            android:gravity="end|center_vertical"
            android:orientation="horizontal"
            android:padding="@dimen/notification_footer_icon_row_padding"/>

        <View
            android:id="@+id/overflow"
            android:layout_width="@dimen/horizontal_ellipsis_size"
            android:layout_height="@dimen/horizontal_ellipsis_size"
            android:layout_gravity="start|center_vertical"
            android:layout_marginStart="@dimen/horizontal_ellipsis_offset"
            android:background="@drawable/horizontal_ellipsis" />

    </com.android.launcher3.notification.NotificationFooterLayout>
</merge>
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
@@ -13,27 +13,9 @@
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<com.android.launcher3.shortcuts.ShortcutsItemView
<View
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/shortcuts_view"
    android:layout_width="@dimen/bg_popup_item_width"
    android:layout_height="wrap_content"
    android:elevation="@dimen/deep_shortcuts_elevation">

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- The shortcuts header is added at runtime when necessary. -->

        <LinearLayout
            android:id="@+id/shortcuts"
    android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" />
    </LinearLayout>

</com.android.launcher3.shortcuts.ShortcutsItemView>
    android:layout_height="4dp"
    android:layout_marginTop="4dp"
    android:background="@drawable/bg_notification_content" />
 No newline at end of file

res/layout/notification_main.xml

deleted100644 → 0
+0 −66
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->


<com.android.launcher3.notification.NotificationMainView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:elevation="@dimen/notification_elevation" >

    <LinearLayout
        android:id="@+id/text_and_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_vertical"
        android:background="?attr/popupColorPrimary"
        android:paddingStart="@dimen/notification_padding_start"
        android:paddingEnd="@dimen/notification_main_text_padding_end"
        android:paddingBottom="14dp">
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAlignment="viewStart"
            android:fontFamily="sans-serif"
            android:textSize="@dimen/notification_main_title_size"
            android:textColor="?android:attr/textColorPrimary"
            android:lines="1"
            android:ellipsize="end" />

        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif"
            android:textSize="@dimen/notification_main_text_size"
            android:textColor="?android:attr/textColorSecondary"
            android:lines="1"
            android:ellipsize="end" />
    </LinearLayout>

    <View
        android:id="@+id/popup_item_icon"
        android:layout_width="@dimen/notification_icon_size"
        android:layout_height="@dimen/notification_icon_size"
        android:layout_marginEnd="@dimen/notification_padding_end"
        android:layout_marginBottom="7dp"
        android:layout_gravity="center_vertical|end" />

</com.android.launcher3.notification.NotificationMainView>
Loading