diff options
author | 2022-04-05 13:58:01 +0000 | |
---|---|---|
committer | 2022-04-05 13:58:01 +0000 | |
commit | fe1ba92a4ea0260011f13b7ca1597b8ca709b18a (patch) | |
tree | 586fe5230bf285cd56c22693b2d923b93319d5b6 /packages | |
parent | 9802f8e9f891a0637d8d4ce7f2a902fd2f02e664 (diff) | |
parent | ea53dd35d70662a27ba2eab0d28171e1179ce2ce (diff) |
Merge "Finish removing NEW_FOOTER flag" into tm-dev am: 28b4f74b80 am: 676f86c807 am: ea53dd35d7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17407522
Change-Id: I76a1c4d20953e844caa62f00de9a4d62ed1430e6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'packages')
33 files changed, 242 insertions, 935 deletions
diff --git a/packages/SystemUI/res-keyguard/layout/fgs_footer.xml b/packages/SystemUI/res-keyguard/layout/fgs_footer.xml index 9d801d2a0ecf..9ffafbc8cc09 100644 --- a/packages/SystemUI/res-keyguard/layout/fgs_footer.xml +++ b/packages/SystemUI/res-keyguard/layout/fgs_footer.xml @@ -16,8 +16,9 @@ --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" + android:layout_width="0dp" android:layout_height="@dimen/qs_security_footer_single_line_height" + android:layout_weight="1" android:gravity="center" android:clickable="true" android:visibility="gone"> @@ -26,7 +27,7 @@ android:id="@+id/fgs_text_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginEnd="@dimen/new_qs_footer_action_inset" + android:layout_marginEnd="@dimen/qs_footer_action_inset" android:background="@drawable/qs_security_footer_background" android:layout_gravity="end" android:gravity="center" @@ -86,7 +87,7 @@ android:layout_height="12dp" android:scaleType="fitCenter" android:layout_gravity="bottom|end" - android:src="@drawable/new_fgs_dot" + android:src="@drawable/fgs_dot" android:contentDescription="@string/fgs_dot_content_description" /> </FrameLayout> diff --git a/packages/SystemUI/res-keyguard/layout/footer_actions.xml b/packages/SystemUI/res-keyguard/layout/footer_actions.xml index fb401ee1d918..6a1d62d5c611 100644 --- a/packages/SystemUI/res-keyguard/layout/footer_actions.xml +++ b/packages/SystemUI/res-keyguard/layout/footer_actions.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** Copyright 2021, The Android Open Source Project +** Copyright 2022, 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. @@ -18,65 +18,80 @@ <!-- Action buttons for footer in QS/QQS, containing settings button, power off button etc --> <com.android.systemui.qs.FooterActionsView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" android:layout_width="match_parent" - android:layout_height="@dimen/qs_footer_height" + android:layout_height="@dimen/footer_actions_height" + android:elevation="@dimen/qs_panel_elevation" + android:paddingTop="8dp" + android:paddingBottom="4dp" + android:background="@drawable/qs_footer_actions_background" android:gravity="center_vertical" android:layout_gravity="bottom" > - <com.android.systemui.statusbar.phone.MultiUserSwitch - android:id="@+id/multi_user_switch" - android:layout_width="0dp" + <LinearLayout + android:id="@+id/security_footers_container" + android:orientation="horizontal" android:layout_height="@dimen/qs_footer_action_button_size" - android:layout_marginEnd="@dimen/qs_tile_margin_horizontal" + android:layout_width="0dp" android:layout_weight="1" - android:background="@drawable/qs_footer_action_chip_background" - android:focusable="true"> + /> - <ImageView - android:id="@+id/multi_user_avatar" - android:layout_width="@dimen/multi_user_avatar_expanded_size" - android:layout_height="@dimen/multi_user_avatar_expanded_size" - android:layout_gravity="center" - android:scaleType="centerInside" /> - </com.android.systemui.statusbar.phone.MultiUserSwitch> + <!-- Negative margin equal to --> + <LinearLayout + android:layout_height="match_parent" + android:layout_width="wrap_content" + android:layout_marginEnd="@dimen/qs_footer_action_inset_negative" + > - <com.android.systemui.statusbar.AlphaOptimizedImageView - android:id="@+id/pm_lite" - android:layout_width="0dp" - android:layout_height="@dimen/qs_footer_action_button_size" - android:layout_marginEnd="@dimen/qs_tile_margin_horizontal" - android:layout_weight="1" - android:background="@drawable/qs_footer_action_chip_background" - android:clickable="true" - android:clipToPadding="false" - android:focusable="true" - android:padding="@dimen/qs_footer_icon_padding" - android:src="@*android:drawable/ic_lock_power_off" - android:contentDescription="@string/accessibility_quick_settings_power_menu" - android:tint="?android:attr/textColorPrimary" /> + <com.android.systemui.statusbar.phone.MultiUserSwitch + android:id="@+id/multi_user_switch" + android:layout_width="@dimen/qs_footer_action_button_size" + android:layout_height="@dimen/qs_footer_action_button_size" + android:background="@drawable/qs_footer_action_circle" + android:focusable="true"> - <com.android.systemui.statusbar.AlphaOptimizedFrameLayout - android:id="@+id/settings_button_container" - android:layout_width="0dp" - android:layout_height="@dimen/qs_footer_action_button_size" - android:background="@drawable/qs_footer_action_chip_background" - android:layout_weight="1" - android:clipChildren="false" - android:clipToPadding="false"> + <ImageView + android:id="@+id/multi_user_avatar" + android:layout_width="@dimen/qs_footer_icon_size" + android:layout_height="@dimen/qs_footer_icon_size" + android:layout_gravity="center" + android:scaleType="centerInside" /> + </com.android.systemui.statusbar.phone.MultiUserSwitch> - <com.android.systemui.statusbar.phone.SettingsButton - android:id="@+id/settings_button" - android:layout_width="match_parent" + <com.android.systemui.statusbar.AlphaOptimizedFrameLayout + android:id="@+id/settings_button_container" + android:layout_width="@dimen/qs_footer_action_button_size" android:layout_height="@dimen/qs_footer_action_button_size" - android:layout_gravity="center" - android:contentDescription="@string/accessibility_quick_settings_settings" - android:background="@drawable/qs_footer_action_chip_background_borderless" - android:padding="@dimen/qs_footer_icon_padding" - android:scaleType="centerInside" - android:src="@drawable/ic_settings" - android:tint="?android:attr/textColorPrimary" /> + android:background="@drawable/qs_footer_action_circle" + android:clipChildren="false" + android:clipToPadding="false"> + + <com.android.systemui.statusbar.phone.SettingsButton + android:id="@+id/settings_button" + android:layout_width="@dimen/qs_footer_icon_size" + android:layout_height="@dimen/qs_footer_icon_size" + android:layout_gravity="center" + android:background="@android:color/transparent" + android:contentDescription="@string/accessibility_quick_settings_settings" + android:scaleType="centerInside" + android:src="@drawable/ic_settings" + android:tint="?android:attr/textColorPrimary" /> - </com.android.systemui.statusbar.AlphaOptimizedFrameLayout> + </com.android.systemui.statusbar.AlphaOptimizedFrameLayout> + + <com.android.systemui.statusbar.AlphaOptimizedImageView + android:id="@+id/pm_lite" + android:layout_width="@dimen/qs_footer_action_button_size" + android:layout_height="@dimen/qs_footer_action_button_size" + android:background="@drawable/qs_footer_action_circle_color" + android:clickable="true" + android:clipToPadding="false" + android:focusable="true" + android:padding="@dimen/qs_footer_icon_padding" + android:src="@*android:drawable/ic_lock_power_off" + android:contentDescription="@string/accessibility_quick_settings_power_menu" + android:tint="?androidprv:attr/textColorOnAccent" /> + </LinearLayout> </com.android.systemui.qs.FooterActionsView>
\ No newline at end of file diff --git a/packages/SystemUI/res-keyguard/layout/new_footer_actions.xml b/packages/SystemUI/res-keyguard/layout/new_footer_actions.xml deleted file mode 100644 index 59712c088f7a..000000000000 --- a/packages/SystemUI/res-keyguard/layout/new_footer_actions.xml +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -** Copyright 2022, 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. ---> - -<!-- Action buttons for footer in QS/QQS, containing settings button, power off button etc --> -<com.android.systemui.qs.FooterActionsView - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" - android:layout_width="match_parent" - android:layout_height="@dimen/new_footer_height" - android:elevation="@dimen/qs_panel_elevation" - android:paddingTop="8dp" - android:paddingBottom="4dp" - android:background="@drawable/qs_footer_actions_background" - android:gravity="center_vertical" - android:layout_gravity="bottom" -> - - <LinearLayout - android:id="@+id/security_footers_container" - android:orientation="horizontal" - android:layout_height="@dimen/qs_footer_action_button_size" - android:layout_width="0dp" - android:layout_weight="1" - /> - - <!-- Negative margin equal to --> - <LinearLayout - android:layout_height="match_parent" - android:layout_width="wrap_content" - android:layout_marginEnd="@dimen/new_qs_footer_action_inset_negative" - > - - <com.android.systemui.statusbar.phone.MultiUserSwitch - android:id="@+id/multi_user_switch" - android:layout_width="@dimen/qs_footer_action_button_size" - android:layout_height="@dimen/qs_footer_action_button_size" - android:background="@drawable/qs_footer_action_circle" - android:focusable="true"> - - <ImageView - android:id="@+id/multi_user_avatar" - android:layout_width="@dimen/qs_footer_icon_size" - android:layout_height="@dimen/qs_footer_icon_size" - android:layout_gravity="center" - android:scaleType="centerInside" /> - </com.android.systemui.statusbar.phone.MultiUserSwitch> - - <com.android.systemui.statusbar.AlphaOptimizedFrameLayout - android:id="@+id/settings_button_container" - android:layout_width="@dimen/qs_footer_action_button_size" - android:layout_height="@dimen/qs_footer_action_button_size" - android:background="@drawable/qs_footer_action_circle" - android:clipChildren="false" - android:clipToPadding="false"> - - <com.android.systemui.statusbar.phone.SettingsButton - android:id="@+id/settings_button" - android:layout_width="@dimen/qs_footer_icon_size" - android:layout_height="@dimen/qs_footer_icon_size" - android:layout_gravity="center" - android:background="@android:color/transparent" - android:contentDescription="@string/accessibility_quick_settings_settings" - android:scaleType="centerInside" - android:src="@drawable/ic_settings" - android:tint="?android:attr/textColorPrimary" /> - - </com.android.systemui.statusbar.AlphaOptimizedFrameLayout> - - <com.android.systemui.statusbar.AlphaOptimizedImageView - android:id="@+id/pm_lite" - android:layout_width="@dimen/qs_footer_action_button_size" - android:layout_height="@dimen/qs_footer_action_button_size" - android:background="@drawable/qs_footer_action_circle_color" - android:clickable="true" - android:clipToPadding="false" - android:focusable="true" - android:padding="@dimen/qs_footer_icon_padding" - android:src="@*android:drawable/ic_lock_power_off" - android:contentDescription="@string/accessibility_quick_settings_power_menu" - android:tint="?androidprv:attr/textColorOnAccent" /> - - </LinearLayout> -</com.android.systemui.qs.FooterActionsView>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/new_fgs_dot.xml b/packages/SystemUI/res/drawable/fgs_dot.xml index 3669e1d3c374..3669e1d3c374 100644 --- a/packages/SystemUI/res/drawable/new_fgs_dot.xml +++ b/packages/SystemUI/res/drawable/fgs_dot.xml diff --git a/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml b/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml deleted file mode 100644 index 9076da795e71..000000000000 --- a/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2021 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. - --> -<inset xmlns:android="http://schemas.android.com/apk/res/android" - android:insetTop="@dimen/qs_footer_action_inset" - android:insetBottom="@dimen/qs_footer_action_inset"> - <ripple - android:color="?android:attr/colorControlHighlight" - android:height="44dp"> - <item android:id="@android:id/mask"> - <shape android:shape="rectangle"> - <solid android:color="@android:color/white"/> - <corners android:radius="@dimen/qs_footer_action_corner_radius"/> - </shape> - </item> - <item> - <shape android:shape="rectangle"> - <solid android:color="?attr/underSurfaceColor"/> - <corners android:radius="@dimen/qs_footer_action_corner_radius"/> - </shape> - </item> - <item> - <shape android:shape="rectangle"> - <stroke android:width="1dp" android:color="?android:attr/colorBackground"/> - <corners android:radius="@dimen/qs_footer_action_corner_radius"/> - </shape> - </item> - </ripple> -</inset>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml b/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml deleted file mode 100644 index bbcfb15d9226..000000000000 --- a/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2021 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. - --> -<inset xmlns:android="http://schemas.android.com/apk/res/android" - android:insetTop="@dimen/qs_footer_action_inset" - android:insetBottom="@dimen/qs_footer_action_inset"> - <ripple - android:color="?android:attr/colorControlHighlight"> - <item android:id="@android:id/mask"> - <shape android:shape="rectangle"> - <solid android:color="@android:color/white"/> - <corners android:radius="@dimen/qs_footer_action_corner_radius"/> - </shape> - </item> - <item> - <shape android:shape="rectangle"> - <solid android:color="@android:color/transparent"/> - <corners android:radius="@dimen/qs_footer_action_corner_radius"/> - </shape> - </item> - </ripple> -</inset>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/qs_footer_action_circle.xml b/packages/SystemUI/res/drawable/qs_footer_action_circle.xml index 31a8c3bc2397..c8c36b0081c0 100644 --- a/packages/SystemUI/res/drawable/qs_footer_action_circle.xml +++ b/packages/SystemUI/res/drawable/qs_footer_action_circle.xml @@ -15,7 +15,7 @@ ~ limitations under the License. --> <inset xmlns:android="http://schemas.android.com/apk/res/android" - android:inset="@dimen/new_qs_footer_action_inset"> + android:inset="@dimen/qs_footer_action_inset"> <ripple android:color="?android:attr/colorControlHighlight"> <item android:id="@android:id/mask"> diff --git a/packages/SystemUI/res/drawable/qs_footer_action_circle_color.xml b/packages/SystemUI/res/drawable/qs_footer_action_circle_color.xml index 021a85f6a244..6a365000a21c 100644 --- a/packages/SystemUI/res/drawable/qs_footer_action_circle_color.xml +++ b/packages/SystemUI/res/drawable/qs_footer_action_circle_color.xml @@ -15,7 +15,7 @@ ~ limitations under the License. --> <inset xmlns:android="http://schemas.android.com/apk/res/android" - android:inset="@dimen/new_qs_footer_action_inset"> + android:inset="@dimen/qs_footer_action_inset"> <ripple android:color="?android:attr/colorControlHighlight"> <item android:id="@android:id/mask"> diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml index b6e34998a7cd..b1d3ed05333b 100644 --- a/packages/SystemUI/res/layout/qs_footer_impl.xml +++ b/packages/SystemUI/res/layout/qs_footer_impl.xml @@ -29,11 +29,6 @@ android:clipChildren="false" android:clipToPadding="false"> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/qs_footer_height" @@ -80,14 +75,4 @@ </LinearLayout> - <ViewStub - android:id="@+id/footer_stub" - android:inflatedId="@+id/qs_footer_actions" - android:layout="@layout/footer_actions" - android:layout_height="@dimen/qs_footer_height" - android:layout_width="match_parent" - /> - - </LinearLayout> - </com.android.systemui.qs.QSFooterView> diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 20400510a31a..1eb05bfd602d 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -47,11 +47,10 @@ <include layout="@layout/quick_status_bar_expanded_header" /> - <ViewStub - android:id="@+id/container_stub" - android:inflatedId="@+id/qs_footer_actions" - android:layout="@layout/new_footer_actions" - android:layout_height="@dimen/new_footer_height" + <include + layout="@layout/footer_actions" + android:id="@+id/qs_footer_actions" + android:layout_height="@dimen/footer_actions_height" android:layout_width="match_parent" android:layout_gravity="bottom" /> diff --git a/packages/SystemUI/res/layout/quick_settings_security_footer.xml b/packages/SystemUI/res/layout/quick_settings_security_footer.xml index 08bd71c12eb1..1b11816465ac 100644 --- a/packages/SystemUI/res/layout/quick_settings_security_footer.xml +++ b/packages/SystemUI/res/layout/quick_settings_security_footer.xml @@ -14,19 +14,18 @@ See the License for the specific language governing permissions and limitations under the License. --> -<com.android.systemui.util.DualHeightHorizontalLinearLayout +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:systemui="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="@dimen/qs_security_footer_height" + android:layout_width="0dp" + android:layout_height="@dimen/qs_security_footer_single_line_height" + android:layout_weight="1" android:clickable="true" - android:padding="@dimen/qs_footer_padding" + android:orientation="horizontal" + android:paddingHorizontal="@dimen/qs_footer_padding" android:gravity="center_vertical" android:layout_gravity="center_vertical|center_horizontal" - android:layout_marginBottom="@dimen/qs_footers_margin_bottom" + android:layout_marginEnd="@dimen/qs_footer_action_inset" android:background="@drawable/qs_security_footer_background" - systemui:singleLineHeight="@dimen/qs_security_footer_single_line_height" - systemui:textViewId="@id/footer_text" > <ImageView @@ -43,7 +42,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:maxLines="@integer/qs_security_footer_maxLines" + android:singleLine="true" android:ellipsize="end" android:textAppearance="@style/TextAppearance.QS.SecurityFooter" android:textColor="?android:attr/textColorSecondary"/> @@ -58,4 +57,4 @@ android:autoMirrored="true" android:tint="?android:attr/textColorSecondary" /> -</com.android.systemui.util.DualHeightHorizontalLinearLayout> +</LinearLayout> diff --git a/packages/SystemUI/res/layout/quick_status_bar_header_date_privacy.xml b/packages/SystemUI/res/layout/quick_status_bar_header_date_privacy.xml index b1e8c386fe21..60bc3732cde0 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_header_date_privacy.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_header_date_privacy.xml @@ -52,7 +52,6 @@ <!-- We want this to be centered (to align with notches). In order to do that, the following has to hold (in portrait): * date_container and privacy_container must have the same width and weight - * header_text_container must be gone --> <android.widget.Space android:id="@+id/space" @@ -61,17 +60,6 @@ android:layout_gravity="center_vertical|center_horizontal" android:visibility="gone" /> - <!-- Will hold security footer in landscape with media --> - <FrameLayout - android:id="@+id/header_text_container" - android:layout_height="match_parent" - android:layout_width="0dp" - android:layout_weight="1" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:gravity="center" - /> - <FrameLayout android:id="@+id/privacy_container" android:layout_width="0dp" diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 62903d5a7b35..3228c3c9d37f 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -188,12 +188,6 @@ <attr name="borderColor" format="color" /> </declare-styleable> - <declare-styleable name="DualHeightHorizontalLinearLayout"> - <attr name="singleLineHeight" format="dimension" /> - <attr name="singleLineVerticalPadding" format="dimension" /> - <attr name="textViewId" format="reference" /> - </declare-styleable> - <attr name="overlayButtonTextColor" format="color" /> <declare-styleable name="DreamOverlayDotImageView"> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 851c6ddc2f86..767225106f0d 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -327,23 +327,20 @@ car setting. --> <dimen name="car_qs_header_system_icons_area_height">54dp</dimen> - <!-- The height of the quick settings footer that holds the user switcher, settings icon, - etc. --> + <!-- The height of the quick settings footer that holds the pagination dots and edit button --> <dimen name="qs_footer_height">48dp</dimen> <!-- 40dp (circles) + 8dp (circle padding) + 8dp (top) + 4dp (bottom) --> - <dimen name="new_footer_height">60dp</dimen> + <dimen name="footer_actions_height">60dp</dimen> <!-- The size of each of the icon buttons in the QS footer --> <dimen name="qs_footer_action_button_size">48dp</dimen> <dimen name="qs_footer_action_corner_radius">20dp</dimen> - <!-- (48dp - 44dp) / 2 --> - <dimen name="qs_footer_action_inset">2dp</dimen> <!-- (48dp - 40dp) / 2 --> - <dimen name="new_qs_footer_action_inset">4dp</dimen> - <dimen name="new_qs_footer_action_inset_negative">-4dp</dimen> + <dimen name="qs_footer_action_inset">4dp</dimen> + <dimen name="qs_footer_action_inset_negative">-4dp</dimen> <!-- Margins on each side of QS Footer --> <dimen name="qs_footer_margin">2dp</dimen> @@ -495,7 +492,7 @@ <dimen name="qs_panel_padding">16dp</dimen> <dimen name="qs_dual_tile_padding_horizontal">6dp</dimen> <dimen name="qs_panel_elevation">4dp</dimen> - <dimen name="qs_panel_padding_bottom">@dimen/new_footer_height</dimen> + <dimen name="qs_panel_padding_bottom">@dimen/footer_actions_height</dimen> <dimen name="qs_panel_padding_top">48dp</dimen> <dimen name="qs_data_usage_text_size">14sp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.java b/packages/SystemUI/src/com/android/systemui/flags/Flags.java index 9356b16806f1..c9a61a8a09df 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.java +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.java @@ -112,6 +112,10 @@ public class Flags { public static final ResourceBooleanFlag QS_USER_DETAIL_SHORTCUT = new ResourceBooleanFlag(503, R.bool.flag_lockscreen_qs_user_detail_shortcut); + /** + * @deprecated Not needed anymore + */ + @Deprecated public static final BooleanFlag NEW_FOOTER = new BooleanFlag(504, true); public static final BooleanFlag NEW_HEADER = new BooleanFlag(505, false); diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt index 44ef2b658fe2..3f394e7b5309 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt @@ -23,7 +23,6 @@ import android.provider.Settings import android.provider.Settings.Global.USER_SWITCHER_ENABLED import android.view.View import android.view.ViewGroup -import android.widget.LinearLayout import androidx.annotation.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.MetricsLogger @@ -32,8 +31,6 @@ import com.android.internal.logging.nano.MetricsProto import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.R import com.android.systemui.animation.ActivityLaunchAnimator -import com.android.systemui.flags.FeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager @@ -45,7 +42,6 @@ import com.android.systemui.statusbar.phone.SettingsButton import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.UserInfoController import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener -import com.android.systemui.util.DualHeightHorizontalLinearLayout import com.android.systemui.util.ViewController import com.android.systemui.util.settings.GlobalSettings import javax.inject.Inject @@ -74,8 +70,7 @@ internal class FooterActionsController @Inject constructor( private val uiEventLogger: UiEventLogger, @Named(PM_LITE_ENABLED) private val showPMLiteButton: Boolean, private val globalSetting: GlobalSettings, - private val handler: Handler, - private val featureFlags: FeatureFlags + private val handler: Handler ) : ViewController<FooterActionsView>(view) { private var globalActionsDialog: GlobalActionsDialogLite? = null @@ -100,7 +95,9 @@ internal class FooterActionsController @Inject constructor( view.findViewById(R.id.security_footers_container) private val powerMenuLite: View = view.findViewById(R.id.pm_lite) private val multiUserSwitchController = multiUserSwitchControllerFactory.create(view) - private val securityFootersSeparator = View(context).apply { + + @VisibleForTesting + internal val securityFootersSeparator = View(context).apply { visibility = View.GONE } @@ -171,48 +168,30 @@ internal class FooterActionsController @Inject constructor( } settingsButton.setOnClickListener(onClickListener) multiUserSetting.isListening = true - if (featureFlags.isEnabled(Flags.NEW_FOOTER)) { - val securityFooter = securityFooterController.view as DualHeightHorizontalLinearLayout - securityFootersContainer?.addView(securityFooter) - val separatorWidth = resources.getDimensionPixelSize(R.dimen.new_qs_footer_action_inset) - securityFootersContainer?.addView(securityFootersSeparator, separatorWidth, 1) - reformatForNewFooter(securityFooter) - val fgsFooter = fgsManagerFooterController.view - securityFootersContainer?.addView(fgsFooter) - (fgsFooter.layoutParams as LinearLayout.LayoutParams).apply { - width = 0 - weight = 1f - } - val visibilityListener = - VisibilityChangedDispatcher.OnVisibilityChangedListener { visibility -> - if (visibility == View.GONE) { - securityFootersSeparator.visibility = View.GONE - } else if (securityFooter.visibility == View.VISIBLE && - fgsFooter.visibility == View.VISIBLE) { - securityFootersSeparator.visibility = View.VISIBLE - } else { - securityFootersSeparator.visibility = View.GONE - } - fgsManagerFooterController - .setCollapsed(securityFooter.visibility == View.VISIBLE) + val securityFooter = securityFooterController.view + securityFootersContainer?.addView(securityFooter) + val separatorWidth = resources.getDimensionPixelSize(R.dimen.qs_footer_action_inset) + securityFootersContainer?.addView(securityFootersSeparator, separatorWidth, 1) + + val fgsFooter = fgsManagerFooterController.view + securityFootersContainer?.addView(fgsFooter) + + val visibilityListener = + VisibilityChangedDispatcher.OnVisibilityChangedListener { visibility -> + if (securityFooter.visibility == View.VISIBLE && + fgsFooter.visibility == View.VISIBLE) { + securityFootersSeparator.visibility = View.VISIBLE + } else { + securityFootersSeparator.visibility = View.GONE } - securityFooterController.setOnVisibilityChangedListener(visibilityListener) - fgsManagerFooterController.setOnVisibilityChangedListener(visibilityListener) - } - updateView() - } + fgsManagerFooterController + .setCollapsed(securityFooter.visibility == View.VISIBLE) + } + securityFooterController.setOnVisibilityChangedListener(visibilityListener) + fgsManagerFooterController.setOnVisibilityChangedListener(visibilityListener) - private fun reformatForNewFooter(view: DualHeightHorizontalLinearLayout) { - // This is only necessary while things are flagged as the view could be attached in two - // different locations. - (view.layoutParams as LinearLayout.LayoutParams).apply { - bottomMargin = 0 - width = 0 - weight = 1f - marginEnd = resources.getDimensionPixelSize(R.dimen.new_qs_footer_action_inset) - } - view.alwaysSingleLine = true + updateView() } private fun updateView() { @@ -237,10 +216,9 @@ internal class FooterActionsController @Inject constructor( } else { userInfoController.removeCallback(onUserInfoChangedListener) } - if (featureFlags.isEnabled(Flags.NEW_FOOTER)) { - fgsManagerFooterController.setListening(listening) - securityFooterController.setListening(listening) - } + + fgsManagerFooterController.setListening(listening) + securityFooterController.setListening(listening) } fun disable(state2: Int) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index 4640205c82f5..56298fa155fa 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -81,8 +81,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha private final QSPanelController mQsPanelController; private final QuickQSPanelController mQuickQSPanelController; private final QuickStatusBarHeader mQuickStatusBarHeader; - private final QSFgsManagerFooter mFgsManagerFooter; - private final QSSecurityFooter mSecurityFooter; private final QS mQs; @Nullable @@ -105,7 +103,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha private TouchAnimator mNonfirstPageAlphaAnimator; // TranslatesY the QS Tile layout using QS.getHeightDiff() private TouchAnimator mQSTileLayoutTranslatorAnimator; - // This animates fading of SecurityFooter and media divider + // This animates fading of media player private TouchAnimator mAllPagesDelayedAnimator; // Animator for brightness slider(s) @Nullable @@ -146,7 +144,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha public QSAnimator(QS qs, QuickQSPanel quickPanel, QuickStatusBarHeader quickStatusBarHeader, QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController, QSTileHost qsTileHost, - QSFgsManagerFooter fgsManagerFooter, QSSecurityFooter securityFooter, @Main Executor executor, TunerService tunerService, QSExpansionPathInterpolator qsExpansionPathInterpolator) { mQs = qs; @@ -154,8 +151,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha mQsPanelController = qsPanelController; mQuickQSPanelController = quickQSPanelController; mQuickStatusBarHeader = quickStatusBarHeader; - mFgsManagerFooter = fgsManagerFooter; - mSecurityFooter = securityFooter; mHost = qsTileHost; mExecutor = executor; mTunerService = tunerService; @@ -472,10 +467,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha .setListener(this) .build(); - // Fade in the security footer and the divider as we reach the final position + // Fade in the media player as we reach the final position Builder builder = new Builder().setStartDelay(EXPANDED_TILE_DELAY); - builder.addFloat(mFgsManagerFooter.getView(), "alpha", 0, 1); - builder.addFloat(mSecurityFooter.getView(), "alpha", 0, 1); if (mQsPanelController.shouldUseHorizontalLayout() && mQsPanelController.mMediaHost.hostView != null) { builder.addFloat(mQsPanelController.mMediaHost.hostView, "alpha", 0, 1); @@ -484,8 +477,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha mQsPanelController.mMediaHost.hostView.setAlpha(1.0f); } mAllPagesDelayedAnimator = builder.build(); - mAllViews.add(mFgsManagerFooter.getView()); - mAllViews.add(mSecurityFooter.getView()); translationYBuilder.setInterpolator(mQSExpansionPathInterpolator.getYInterpolator()); qqsTranslationYBuilder.setInterpolator(mQSExpansionPathInterpolator.getYInterpolator()); translationXBuilder.setInterpolator(mQSExpansionPathInterpolator.getXInterpolator()); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 519ed5ceeab4..66584414e291 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -138,12 +138,8 @@ public class QSContainerImpl extends FrameLayout implements Dumpable { } void updateResources(QSPanelController qsPanelController, - QuickStatusBarHeaderController quickStatusBarHeaderController, - boolean newFooter) { - int bottomPadding = 0; - if (newFooter) { - bottomPadding = getResources().getDimensionPixelSize(R.dimen.qs_panel_padding_bottom); - } + QuickStatusBarHeaderController quickStatusBarHeaderController) { + int bottomPadding = getResources().getDimensionPixelSize(R.dimen.qs_panel_padding_bottom); mQSPanelContainer.setPaddingRelative( mQSPanelContainer.getPaddingStart(), QSUtils.getQsHeaderSystemIconsAreaHeight(mContext), diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java index 61da18224023..7d61991c910a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java @@ -18,8 +18,6 @@ package com.android.systemui.qs; import android.content.res.Configuration; -import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.flags.Flags; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.ViewController; @@ -32,26 +30,23 @@ public class QSContainerImplController extends ViewController<QSContainerImpl> { private final QSPanelController mQsPanelController; private final QuickStatusBarHeaderController mQuickStatusBarHeaderController; private final ConfigurationController mConfigurationController; - private final boolean mNewFooter; private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { @Override public void onConfigChanged(Configuration newConfig) { - mView.updateResources(mQsPanelController, mQuickStatusBarHeaderController, mNewFooter); + mView.updateResources(mQsPanelController, mQuickStatusBarHeaderController); } }; @Inject QSContainerImplController(QSContainerImpl view, QSPanelController qsPanelController, QuickStatusBarHeaderController quickStatusBarHeaderController, - ConfigurationController configurationController, - FeatureFlags featureFlags) { + ConfigurationController configurationController) { super(view); mQsPanelController = qsPanelController; mQuickStatusBarHeaderController = quickStatusBarHeaderController; mConfigurationController = configurationController; - mNewFooter = featureFlags.isEnabled(Flags.NEW_FOOTER); } @Override @@ -65,7 +60,7 @@ public class QSContainerImplController extends ViewController<QSContainerImpl> { @Override protected void onViewAttached() { - mView.updateResources(mQsPanelController, mQuickStatusBarHeaderController, mNewFooter); + mView.updateResources(mQsPanelController, mQuickStatusBarHeaderController); mConfigurationController.addCallback(mConfigurationListener); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 795a606fe7e8..4fa05c833f53 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -211,7 +211,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca } }); mHeader = view.findViewById(R.id.header); - mQSPanelController.setHeaderContainer(view.findViewById(R.id.header_text_container)); mFooter = qsFragmentComponent.getQSFooter(); mQSContainerImplController = qsFragmentComponent.getQSContainerImplController(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 8c4dedc577d1..9fbdd3c873e2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -75,7 +75,6 @@ public class QSPanel extends LinearLayout implements Tunable { @Nullable protected BrightnessSliderController mToggleSliderController; - private final H mHandler = new H(); /** Whether or not the QS media player feature is enabled. */ protected boolean mUsingMediaPlayer; @@ -87,16 +86,9 @@ public class QSPanel extends LinearLayout implements Tunable { new ArrayList<>(); @Nullable - protected View mFgsManagerFooter; - @Nullable - protected View mSecurityFooter; - - @Nullable protected View mFooter; @Nullable - private ViewGroup mHeaderContainer; - @Nullable private PageIndicator mFooterPageIndicator; private int mContentMarginStart; private int mContentMarginEnd; @@ -112,7 +104,6 @@ public class QSPanel extends LinearLayout implements Tunable { private float mSquishinessFraction = 1f; private final ArrayMap<View, Integer> mChildrenLayoutTop = new ArrayMap<>(); private final Rect mClippingRect = new Rect(); - private boolean mUseNewFooter = false; private ViewGroup mMediaHostView; private boolean mShouldMoveMediaOnExpansion = true; @@ -156,10 +147,6 @@ public class QSPanel extends LinearLayout implements Tunable { } } - void setUseNewFooter(boolean useNewFooter) { - mUseNewFooter = useNewFooter; - } - protected void setHorizontalContentContainerClipping() { mHorizontalContentContainer.setClipChildren(true); mHorizontalContentContainer.setClipToPadding(false); @@ -444,27 +431,6 @@ public class QSPanel extends LinearLayout implements Tunable { } } - /** Switch the security footer between top and bottom of QS depending on orientation. */ - public void switchSecurityFooter(boolean shouldUseSplitNotificationShade) { - if (mSecurityFooter == null) return; - - if (!shouldUseSplitNotificationShade - && mContext.getResources().getConfiguration().orientation - == Configuration.ORIENTATION_LANDSCAPE && mHeaderContainer != null) { - // Adding the security view to the header, that enables us to avoid scrolling - switchToParent(mSecurityFooter, mHeaderContainer, 0); - } else { - // Add after the footer - int index; - if (mFgsManagerFooter != null) { - index = indexOfChild(mFgsManagerFooter); - } else { - index = indexOfChild(mFooter); - } - switchToParent(mSecurityFooter, this, index + 1); - } - } - private void switchToParent(View child, ViewGroup parent, int index) { switchToParent(child, parent, index, getDumpableTag()); } @@ -609,38 +575,10 @@ public class QSPanel extends LinearLayout implements Tunable { } } - /** - * Set the header container of quick settings. - */ - public void setHeaderContainer(@NonNull ViewGroup headerContainer) { - mHeaderContainer = headerContainer; - } - public boolean isListening() { return mListening; } - /** - * Set the security footer view and switch it into the right place - * @param view the view in question - * @param shouldUseSplitNotificationShade if QS is in split shade mode - */ - public void setSecurityFooter(View view, boolean shouldUseSplitNotificationShade) { - mSecurityFooter = view; - switchSecurityFooter(shouldUseSplitNotificationShade); - } - - /** - * Set the fgs manager footer view and switch it into the right place - * @param view the view in question - */ - public void setFgsManagerFooter(View view) { - mFgsManagerFooter = view; - // Add after the footer - int index = indexOfChild(mFooter); - switchToParent(mFgsManagerFooter, this, index + 1); - } - protected void setPageMargin(int pageMargin) { if (mTileLayout instanceof PagedTileLayout) { ((PagedTileLayout) mTileLayout).setPageMargin(pageMargin); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index b46f9c374253..5670836566ab 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -21,18 +21,14 @@ import static com.android.systemui.media.dagger.MediaModule.QS_PANEL; import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS; import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_MEDIA_PLAYER; -import android.annotation.NonNull; import android.content.res.Configuration; import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.flags.Flags; import com.android.systemui.media.MediaHierarchyManager; import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHostState; @@ -56,8 +52,6 @@ import javax.inject.Named; @QSScope public class QSPanelController extends QSPanelControllerBase<QSPanel> { - private final QSFgsManagerFooter mQSFgsManagerFooter; - private final QSSecurityFooter mQsSecurityFooter; private final TunerService mTunerService; private final QSCustomizerController mQsCustomizerController; private final QSTileRevealController.Factory mQsTileRevealControllerFactory; @@ -65,7 +59,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { private final BrightnessController mBrightnessController; private final BrightnessSliderController mBrightnessSliderController; private final BrightnessMirrorHandler mBrightnessMirrorHandler; - private final FeatureFlags mFeatureFlags; private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private boolean mGridContentVisible = true; @@ -75,11 +68,9 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { @Override public void onConfigurationChange(Configuration newConfig) { mView.updateResources(); - mQsSecurityFooter.onConfigurationChanged(); if (mView.isListening()) { refreshAllTiles(); } - mView.switchSecurityFooter(mShouldUseSplitNotificationShade); } }; @@ -94,8 +85,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { }; @Inject - QSPanelController(QSPanel view, QSFgsManagerFooter qsFgsManagerFooter, - QSSecurityFooter qsSecurityFooter, TunerService tunerService, + QSPanelController(QSPanel view, TunerService tunerService, QSTileHost qstileHost, QSCustomizerController qsCustomizerController, @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, @Named(QS_PANEL) MediaHost mediaHost, @@ -103,12 +93,10 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory, BrightnessSliderController.Factory brightnessSliderFactory, - FalsingManager falsingManager, FeatureFlags featureFlags, + FalsingManager falsingManager, StatusBarKeyguardViewManager statusBarKeyguardViewManager) { super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, uiEventLogger, qsLogger, dumpManager); - mQSFgsManagerFooter = qsFgsManagerFooter; - mQsSecurityFooter = qsSecurityFooter; mTunerService = tunerService; mQsCustomizerController = qsCustomizerController; mQsTileRevealControllerFactory = qsTileRevealControllerFactory; @@ -119,9 +107,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController); mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController); - mFeatureFlags = featureFlags; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; - view.setUseNewFooter(featureFlags.isEnabled(Flags.NEW_FOOTER)); } @Override @@ -132,7 +118,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { mMediaHost.init(MediaHierarchyManager.LOCATION_QS); mQsCustomizerController.init(); mBrightnessSliderController.init(); - mQSFgsManagerFooter.init(); } @Override @@ -147,10 +132,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { refreshAllTiles(); } mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener); - if (!mFeatureFlags.isEnabled(Flags.NEW_FOOTER)) { - mView.setSecurityFooter(mQsSecurityFooter.getView(), mShouldUseSplitNotificationShade); - mView.setFgsManagerFooter(mQSFgsManagerFooter.getView()); - } switchTileLayout(true); mBrightnessMirrorHandler.onQsPanelAttached(); @@ -172,13 +153,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { super.onViewDetached(); } - /** - * Set the header container of quick settings. - */ - public void setHeaderContainer(@NonNull ViewGroup headerContainer) { - mView.setHeaderContainer(headerContainer); - } - /** */ public void setVisibility(int visibility) { mView.setVisibility(visibility); @@ -191,11 +165,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { refreshAllTiles(); } - if (!mFeatureFlags.isEnabled(Flags.NEW_FOOTER)) { - mQSFgsManagerFooter.setListening(listening); - mQsSecurityFooter.setListening(listening); - } - // Set the listening as soon as the QS fragment starts listening regardless of the //expansion, so it will update the current brightness before the slider is visible. if (listening) { @@ -224,8 +193,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { public void refreshAllTiles() { mBrightnessController.checkRestrictionAndSetEnabled(); super.refreshAllTiles(); - mQSFgsManagerFooter.refreshState(); - mQsSecurityFooter.refreshState(); } /** Start customizing the Quick Settings. */ diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java index c5ca285aa312..264edb1ec9e4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java @@ -70,7 +70,6 @@ public class QuickStatusBarHeader extends FrameLayout { private View mDateView; // DateView next to clock. Visible on QQS private VariableDateView mClockDateView; - private View mSecurityHeaderView; private View mStatusIconsView; private View mContainer; @@ -137,7 +136,6 @@ public class QuickStatusBarHeader extends FrameLayout { mPrivacyChip = findViewById(R.id.privacy_chip); mDateView = findViewById(R.id.date); mClockDateView = findViewById(R.id.date_clock); - mSecurityHeaderView = findViewById(R.id.header_text_container); mClockIconsSeparator = findViewById(R.id.separator); mRightLayout = findViewById(R.id.rightLayout); mDateContainer = findViewById(R.id.date_container); @@ -152,8 +150,6 @@ public class QuickStatusBarHeader extends FrameLayout { updateResources(); Configuration config = mContext.getResources().getConfiguration(); setDatePrivacyContainersWidth(config.orientation == Configuration.ORIENTATION_LANDSCAPE); - setSecurityHeaderContainerVisibility( - config.orientation == Configuration.ORIENTATION_LANDSCAPE); // QS will always show the estimate, and BatteryMeterView handles the case where // it's unavailable or charging @@ -207,8 +203,6 @@ public class QuickStatusBarHeader extends FrameLayout { super.onConfigurationChanged(newConfig); updateResources(); setDatePrivacyContainersWidth(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE); - setSecurityHeaderContainerVisibility( - newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE); } @Override @@ -229,10 +223,6 @@ public class QuickStatusBarHeader extends FrameLayout { mPrivacyContainer.setLayoutParams(lp); } - private void setSecurityHeaderContainerVisibility(boolean landscape) { - mSecurityHeaderView.setVisibility(landscape ? VISIBLE : GONE); - } - private void updateBatteryMode() { if (mConfigShowBatteryEstimate && !mHasCenterCutout) { mBatteryRemainingIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE); @@ -337,7 +327,6 @@ public class QuickStatusBarHeader extends FrameLayout { return; } TouchAnimator.Builder builder = new TouchAnimator.Builder() - .addFloat(mSecurityHeaderView, "alpha", 0, 1) // These views appear on expanding down .addFloat(mDateView, "alpha", 0, 0, 1) .addFloat(mClockDateView, "alpha", 1, 0, 0) diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java index 2780b163e5ca..aa505fb0b6bd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java @@ -22,13 +22,10 @@ import static com.android.systemui.util.Utils.useQsMediaPlayer; import android.content.Context; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewStub; import com.android.systemui.R; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.dagger.qualifiers.RootView; -import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.flags.Flags; import com.android.systemui.plugins.qs.QS; import com.android.systemui.privacy.OngoingPrivacyChip; import com.android.systemui.qs.FooterActionsView; @@ -128,15 +125,7 @@ public interface QSFragmentModule { * This will replace a ViewStub either in {@link QSFooterView} or in {@link QSContainerImpl}. */ @Provides - static FooterActionsView providesQSFooterActionsView(@RootView View view, - FeatureFlags featureFlags) { - ViewStub stub; - if (featureFlags.isEnabled(Flags.NEW_FOOTER)) { - stub = view.requireViewById(R.id.container_stub); - } else { - stub = view.requireViewById(R.id.footer_stub); - } - stub.inflate(); + static FooterActionsView providesQSFooterActionsView(@RootView View view) { return view.findViewById(R.id.qs_footer_actions); } @@ -161,9 +150,10 @@ public interface QSFragmentModule { @Named(QS_SECURITY_FOOTER_VIEW) static View providesQSSecurityFooterView( @QSThemedContext LayoutInflater layoutInflater, - QSPanel qsPanel + FooterActionsView footerActionsView ) { - return layoutInflater.inflate(R.layout.quick_settings_security_footer, qsPanel, false); + return layoutInflater.inflate(R.layout.quick_settings_security_footer, footerActionsView, + false); } /** */ @@ -200,8 +190,8 @@ public interface QSFragmentModule { @Named(QS_FGS_MANAGER_FOOTER_VIEW) static View providesQSFgsManagerFooterView( @QSThemedContext LayoutInflater layoutInflater, - QSPanel qsPanel + FooterActionsView footerActionsView ) { - return layoutInflater.inflate(R.layout.fgs_footer, qsPanel, false); + return layoutInflater.inflate(R.layout.fgs_footer, footerActionsView, false); } }
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt index 745228e72596..491e9fde5c9c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt @@ -168,14 +168,7 @@ class NotificationsQSContainerController @Inject constructor( private fun updateBottomSpacing() { val (containerPadding, notificationsMargin) = calculateBottomSpacing() var qsScrollPaddingBottom = 0 - val newFooter = featureFlags.isEnabled(Flags.NEW_FOOTER) - if (!newFooter && !(splitShadeEnabled || isQSCustomizing || isQSDetailShowing || - isGestureNavigation || taskbarVisible)) { - // no taskbar, portrait, navigation buttons enabled: - // padding is needed so QS can scroll up over bottom insets - to reach the point when - // the whole QS is above bottom insets - qsScrollPaddingBottom = bottomStableInsets - } else if (newFooter && !(isQSCustomizing || isQSDetailShowing)) { + if (!(isQSCustomizing || isQSDetailShowing)) { // With the new footer, we also want this padding in the bottom in these cases qsScrollPaddingBottom = if (splitShadeEnabled) { notificationsMargin - scrimShadeBottomMargin @@ -185,11 +178,7 @@ class NotificationsQSContainerController @Inject constructor( } mView.setPadding(0, 0, 0, containerPadding) mView.setNotificationsMarginBottom(notificationsMargin) - if (newFooter) { - mView.setQSContainerPaddingBottom(qsScrollPaddingBottom) - } else { - mView.setQSScrollPaddingBottom(qsScrollPaddingBottom) - } + mView.setQSContainerPaddingBottom(qsScrollPaddingBottom) } private fun calculateBottomSpacing(): Pair<Int, Int> { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java index 7caea06e6359..2446cf7ba412 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -103,16 +103,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout mStackScroller.setLayoutParams(params); } - public void setQSScrollPaddingBottom(int paddingBottom) { - if (mQSScrollView != null) { - mQSScrollView.setPaddingRelative( - mQSScrollView.getPaddingLeft(), - mQSScrollView.getPaddingTop(), - mQSScrollView.getPaddingRight(), - paddingBottom); - } - } - public void setQSContainerPaddingBottom(int paddingBottom) { if (mQSContainer != null) { mQSContainer.setPadding( diff --git a/packages/SystemUI/src/com/android/systemui/util/DualHeightHorizontalLinearLayout.kt b/packages/SystemUI/src/com/android/systemui/util/DualHeightHorizontalLinearLayout.kt deleted file mode 100644 index cfceefa2006c..000000000000 --- a/packages/SystemUI/src/com/android/systemui/util/DualHeightHorizontalLinearLayout.kt +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2021 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. - */ - -package com.android.systemui.util - -import android.content.Context -import android.content.res.Configuration -import android.util.AttributeSet -import android.util.DisplayMetrics -import android.util.TypedValue -import android.widget.LinearLayout -import android.widget.TextView -import com.android.systemui.R - -/** - * Horizontal [LinearLayout] to contain some text. - * - * The height of this container can alternate between two different heights, depending on whether - * the text takes one line or more. - * - * When the text takes multiple lines, it will use the values in the regular attributes (`padding`, - * `layout_height`). The single line behavior must be set in XML. - * - * XML attributes for single line behavior: - * * `systemui:textViewId`: set the id for the [TextView] that determines the height of the - * container - * * `systemui:singleLineHeight`: sets the height of the view when the text takes up only one line. - * By default, it will use [getMinimumHeight]. - * * `systemui:singleLineVerticalPadding`: sets the padding (top and bottom) when then text takes up - * only one line. By default, it is 0. - * - * All dimensions are updated when configuration changes. - */ -class DualHeightHorizontalLinearLayout @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttrs: Int = 0, - defStyleRes: Int = 0 -) : LinearLayout(context, attrs, defStyleAttrs, defStyleRes) { - - private val singleLineHeightValue: TypedValue? - private var singleLineHeightPx = 0 - - private val singleLineVerticalPaddingValue: TypedValue? - private var singleLineVerticalPaddingPx = 0 - - private val textViewId: Int - private var textView: TextView? = null - - private val displayMetrics: DisplayMetrics - get() = context.resources.displayMetrics - - private var initialPadding = mPaddingTop // All vertical padding is the same - - private var originalMaxLines = 1 - var alwaysSingleLine: Boolean = false - set(value) { - field = value - if (field) { - textView?.setSingleLine() - } else { - textView?.maxLines = originalMaxLines - } - } - - init { - if (orientation != HORIZONTAL) { - throw IllegalStateException("This view should always have horizontal orientation") - } - - val ta = context.obtainStyledAttributes( - attrs, - R.styleable.DualHeightHorizontalLinearLayout, defStyleAttrs, defStyleRes - ) - - val tempHeight = TypedValue() - singleLineHeightValue = if ( - ta.hasValue(R.styleable.DualHeightHorizontalLinearLayout_singleLineHeight) - ) { - ta.getValue(R.styleable.DualHeightHorizontalLinearLayout_singleLineHeight, tempHeight) - tempHeight - } else { - null - } - - val tempPadding = TypedValue() - singleLineVerticalPaddingValue = if ( - ta.hasValue(R.styleable.DualHeightHorizontalLinearLayout_singleLineVerticalPadding) - ) { - ta.getValue( - R.styleable.DualHeightHorizontalLinearLayout_singleLineVerticalPadding, - tempPadding - ) - tempPadding - } else { - null - } - - textViewId = ta.getResourceId(R.styleable.DualHeightHorizontalLinearLayout_textViewId, 0) - - ta.recycle() - } - - init { - updateResources() - } - - override fun setPadding(left: Int, top: Int, right: Int, bottom: Int) { - super.setPadding(left, top, right, bottom) - initialPadding = top - } - - override fun setPaddingRelative(start: Int, top: Int, end: Int, bottom: Int) { - super.setPaddingRelative(start, top, end, bottom) - initialPadding = top - } - - override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec) - textView?.let { tv -> - if (tv.lineCount < 2 || alwaysSingleLine) { - setMeasuredDimension(measuredWidth, singleLineHeightPx) - mPaddingBottom = 0 - mPaddingTop = 0 - } else { - mPaddingBottom = initialPadding - mPaddingTop = initialPadding - } - } - } - - override fun onFinishInflate() { - super.onFinishInflate() - textView = findViewById<TextView>(textViewId)?.also { - originalMaxLines = it.maxLines - } - } - - override fun onConfigurationChanged(newConfig: Configuration?) { - super.onConfigurationChanged(newConfig) - updateResources() - } - - override fun setOrientation(orientation: Int) { - if (orientation == VERTICAL) { - throw IllegalStateException("This view should always have horizontal orientation") - } - super.setOrientation(orientation) - } - - private fun updateResources() { - updateDimensionValue(singleLineHeightValue, minimumHeight, ::singleLineHeightPx::set) - updateDimensionValue(singleLineVerticalPaddingValue, 0, ::singleLineVerticalPaddingPx::set) - } - - private inline fun updateDimensionValue( - tv: TypedValue?, - defaultValue: Int, - propertySetter: (Int) -> Unit - ) { - val value = tv?.let { - if (it.resourceId != 0) { - context.resources.getDimensionPixelSize(it.resourceId) - } else { - it.getDimension(displayMetrics).toInt() - } - } ?: defaultValue - propertySetter(value) - } -}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt index 7b17c36aaf16..35d0024b3bf1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt @@ -8,20 +8,20 @@ import android.testing.TestableLooper import android.testing.ViewUtils import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger import com.android.internal.logging.UiEventLogger import com.android.internal.logging.testing.FakeMetricsLogger import com.android.systemui.R import com.android.systemui.classifier.FalsingManagerFake -import com.android.systemui.flags.FeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.MultiUserSwitchController import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.UserInfoController +import com.android.systemui.util.mockito.capture import com.android.systemui.util.settings.FakeSettings import com.android.systemui.utils.leaks.LeakCheckedTest import com.google.common.truth.Truth.assertThat @@ -29,10 +29,14 @@ import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyBoolean +import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito +import org.mockito.Mockito.atLeastOnce +import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.verify @@ -65,11 +69,12 @@ class FooterActionsControllerTest : LeakCheckedTest() { @Mock private lateinit var uiEventLogger: UiEventLogger @Mock - private lateinit var featureFlags: FeatureFlags - @Mock private lateinit var securityFooterController: QSSecurityFooter @Mock private lateinit var fgsManagerController: QSFgsManagerFooter + @Captor + private lateinit var visibilityChangedCaptor: + ArgumentCaptor<VisibilityChangedDispatcher.OnVisibilityChangedListener> private lateinit var controller: FooterActionsController @@ -78,6 +83,8 @@ class FooterActionsControllerTest : LeakCheckedTest() { private val falsingManager: FalsingManagerFake = FalsingManagerFake() private lateinit var testableLooper: TestableLooper private lateinit var fakeSettings: FakeSettings + private lateinit var securityFooter: View + private lateinit var fgsFooter: View @Before fun setUp() { @@ -87,9 +94,14 @@ class FooterActionsControllerTest : LeakCheckedTest() { whenever(multiUserSwitchControllerFactory.create(any())) .thenReturn(multiUserSwitchController) - whenever(featureFlags.isEnabled(Flags.NEW_FOOTER)).thenReturn(false) whenever(globalActionsDialogProvider.get()).thenReturn(globalActionsDialog) + securityFooter = View(mContext) + fgsFooter = View(mContext) + + whenever(securityFooterController.view).thenReturn(securityFooter) + whenever(fgsManagerController.view).thenReturn(fgsFooter) + view = inflateView() controller = constructFooterActionsController(view) @@ -107,6 +119,13 @@ class FooterActionsControllerTest : LeakCheckedTest() { } @Test + fun testInitializesControllers() { + verify(multiUserSwitchController).init() + verify(fgsManagerController).init() + verify(securityFooterController).init() + } + + @Test fun testLogPowerMenuClick() { controller.visible = true falsingManager.setFalseTap(false) @@ -182,6 +201,10 @@ class FooterActionsControllerTest : LeakCheckedTest() { @Test fun testCleanUpGAD() { reset(globalActionsDialogProvider) + // We are creating a new controller, so detach the views from it + (securityFooter.parent as ViewGroup).removeView(securityFooter) + (fgsFooter.parent as ViewGroup).removeView(fgsFooter) + whenever(globalActionsDialogProvider.get()).thenReturn(globalActionsDialog) val view = inflateView() controller = constructFooterActionsController(view) @@ -198,6 +221,80 @@ class FooterActionsControllerTest : LeakCheckedTest() { verify(globalActionsDialog).destroy() } + @Test + fun testSeparatorVisibility_noneVisible_gone() { + verify(securityFooterController) + .setOnVisibilityChangedListener(capture(visibilityChangedCaptor)) + val listener = visibilityChangedCaptor.value + val separator = controller.securityFootersSeparator + + setVisibilities(securityFooterVisible = false, fgsFooterVisible = false, listener) + assertThat(separator.visibility).isEqualTo(View.GONE) + } + + @Test + fun testSeparatorVisibility_onlySecurityFooterVisible_gone() { + verify(securityFooterController) + .setOnVisibilityChangedListener(capture(visibilityChangedCaptor)) + val listener = visibilityChangedCaptor.value + val separator = controller.securityFootersSeparator + + setVisibilities(securityFooterVisible = true, fgsFooterVisible = false, listener) + assertThat(separator.visibility).isEqualTo(View.GONE) + } + + @Test + fun testSeparatorVisibility_onlyFgsFooterVisible_gone() { + verify(securityFooterController) + .setOnVisibilityChangedListener(capture(visibilityChangedCaptor)) + val listener = visibilityChangedCaptor.value + val separator = controller.securityFootersSeparator + + setVisibilities(securityFooterVisible = false, fgsFooterVisible = true, listener) + assertThat(separator.visibility).isEqualTo(View.GONE) + } + + @Test + fun testSeparatorVisibility_bothVisible_visible() { + verify(securityFooterController) + .setOnVisibilityChangedListener(capture(visibilityChangedCaptor)) + val listener = visibilityChangedCaptor.value + val separator = controller.securityFootersSeparator + + setVisibilities(securityFooterVisible = true, fgsFooterVisible = true, listener) + assertThat(separator.visibility).isEqualTo(View.VISIBLE) + } + + @Test + fun testFgsFooterCollapsed() { + verify(securityFooterController) + .setOnVisibilityChangedListener(capture(visibilityChangedCaptor)) + val listener = visibilityChangedCaptor.value + + val booleanCaptor = ArgumentCaptor.forClass(Boolean::class.java) + + clearInvocations(fgsManagerController) + setVisibilities(securityFooterVisible = false, fgsFooterVisible = true, listener) + verify(fgsManagerController, atLeastOnce()).setCollapsed(capture(booleanCaptor)) + assertThat(booleanCaptor.allValues.last()).isFalse() + + clearInvocations(fgsManagerController) + setVisibilities(securityFooterVisible = true, fgsFooterVisible = true, listener) + verify(fgsManagerController, atLeastOnce()).setCollapsed(capture(booleanCaptor)) + assertThat(booleanCaptor.allValues.last()).isTrue() + } + + private fun setVisibilities( + securityFooterVisible: Boolean, + fgsFooterVisible: Boolean, + listener: VisibilityChangedDispatcher.OnVisibilityChangedListener + ) { + securityFooter.visibility = if (securityFooterVisible) View.VISIBLE else View.GONE + listener.onVisibilityChanged(securityFooter.visibility) + fgsFooter.visibility = if (fgsFooterVisible) View.VISIBLE else View.GONE + listener.onVisibilityChanged(fgsFooter.visibility) + } + private fun inflateView(): FooterActionsView { return LayoutInflater.from(context) .inflate(R.layout.footer_actions, null) as FooterActionsView @@ -208,6 +305,6 @@ class FooterActionsControllerTest : LeakCheckedTest() { activityStarter, userManager, userTracker, userInfoController, deviceProvisionedController, securityFooterController, fgsManagerController, falsingManager, metricsLogger, globalActionsDialogProvider, uiEventLogger, - showPMLiteButton = true, fakeSettings, Handler(testableLooper.looper), featureFlags) + showPMLiteButton = true, fakeSettings, Handler(testableLooper.looper)) } }
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt index bf82e90e88f6..489c8c86028e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSContainerImplTest.kt @@ -59,22 +59,14 @@ class QSContainerImplTest : SysuiTestCase() { fun testContainerBottomPadding() { qsContainer.updateResources( qsPanelController, - quickStatusBarHeaderController, - /* newFooter */ false - ) - verify(qsPanelContainer).setPaddingRelative(anyInt(), anyInt(), anyInt(), eq(0)) - - qsContainer.updateResources( - qsPanelController, - quickStatusBarHeaderController, - /* newFooter */ true + quickStatusBarHeaderController ) verify(qsPanelContainer) .setPaddingRelative( anyInt(), anyInt(), anyInt(), - eq(mContext.resources.getDimensionPixelSize(R.dimen.new_footer_height)) + eq(mContext.resources.getDimensionPixelSize(R.dimen.footer_actions_height)) ) } }
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt index 58a070db9a95..689de50d5b4a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.kt @@ -6,7 +6,6 @@ import com.android.internal.logging.MetricsLogger import com.android.internal.logging.UiEventLogger import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager -import com.android.systemui.flags.FeatureFlags import com.android.systemui.media.MediaHost import com.android.systemui.media.MediaHostState import com.android.systemui.plugins.FalsingManager @@ -35,8 +34,6 @@ import org.mockito.Mockito.`when` as whenever class QSPanelControllerTest : SysuiTestCase() { @Mock private lateinit var qsPanel: QSPanel - @Mock private lateinit var qsFgsManagerFooter: QSFgsManagerFooter - @Mock private lateinit var qsSecurityFooter: QSSecurityFooter @Mock private lateinit var tunerService: TunerService @Mock private lateinit var qsTileHost: QSTileHost @Mock private lateinit var qsCustomizerController: QSCustomizerController @@ -50,7 +47,6 @@ class QSPanelControllerTest : SysuiTestCase() { @Mock private lateinit var brightnessSlider: BrightnessSliderController @Mock private lateinit var brightnessSliderFactory: BrightnessSliderController.Factory @Mock private lateinit var falsingManager: FalsingManager - @Mock private lateinit var featureFlags: FeatureFlags @Mock private lateinit var mediaHost: MediaHost @Mock private lateinit var tile: QSTile @Mock private lateinit var otherTile: QSTile @@ -69,8 +65,6 @@ class QSPanelControllerTest : SysuiTestCase() { controller = QSPanelController( qsPanel, - qsFgsManagerFooter, - qsSecurityFooter, tunerService, qsTileHost, qsCustomizerController, @@ -84,7 +78,6 @@ class QSPanelControllerTest : SysuiTestCase() { brightnessControllerFactory, brightnessSliderFactory, falsingManager, - featureFlags, statusBarKeyguardViewManager ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt index ba02a828d337..e237a5ce03fe 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.kt @@ -13,9 +13,6 @@ */ package com.android.systemui.qs -import android.content.res.Configuration -import android.content.res.Configuration.ORIENTATION_LANDSCAPE -import android.content.res.Configuration.ORIENTATION_PORTRAIT import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.testing.TestableLooper.RunWithLooper @@ -59,8 +56,6 @@ class QSPanelTest : SysuiTestCase() { mFooter = LinearLayout(mContext).apply { id = R.id.qs_footer } mQsPanel.addView(mFooter) mQsPanel.onFinishInflate() - mQsPanel.setSecurityFooter(View(mContext), false) - mQsPanel.setHeaderContainer(LinearLayout(mContext)) // Provides a parent with non-zero size for QSPanel mParentView = FrameLayout(mContext).apply { addView(mQsPanel) @@ -69,49 +64,6 @@ class QSPanelTest : SysuiTestCase() { } @Test - fun testSecurityFooter_appearsOnBottomOnSplitShade() { - mQsPanel.onConfigurationChanged(getNewOrientationConfig(ORIENTATION_LANDSCAPE)) - mQsPanel.switchSecurityFooter(true) - - mTestableLooper.runWithLooper { - mQsPanel.isExpanded = true - } - - // After mFooter - assertThat(mQsPanel.indexOfChild(mQsPanel.mSecurityFooter)).isEqualTo( - mQsPanel.indexOfChild(mFooter) + 1 - ) - } - - @Test - fun testSecurityFooter_appearsOnBottomIfPortrait() { - mQsPanel.onConfigurationChanged(getNewOrientationConfig(ORIENTATION_PORTRAIT)) - mQsPanel.switchSecurityFooter(false) - - mTestableLooper.runWithLooper { - mQsPanel.isExpanded = true - } - - // After mFooter - assertThat(mQsPanel.indexOfChild(mQsPanel.mSecurityFooter)).isEqualTo( - mQsPanel.indexOfChild(mFooter) + 1 - ) - } - - @Test - fun testSecurityFooter_appearsOnTopIfSmallScreenAndLandscape() { - mQsPanel.onConfigurationChanged(getNewOrientationConfig(ORIENTATION_LANDSCAPE)) - mQsPanel.switchSecurityFooter(false) - - mTestableLooper.runWithLooper { - mQsPanel.isExpanded = true - } - - // -1 means that it is part of the mHeaderContainer - assertThat(mQsPanel.indexOfChild(mQsPanel.mSecurityFooter)).isEqualTo(-1) - } - - @Test fun testHasCollapseAccessibilityAction() { val info = AccessibilityNodeInfo(mQsPanel) mQsPanel.onInitializeAccessibilityNodeInfo(info) @@ -128,7 +80,4 @@ class QSPanelTest : SysuiTestCase() { mQsPanel.performAccessibilityAction(AccessibilityNodeInfo.ACTION_COLLAPSE, null) verify(mockRunnable).run() } - - private fun getNewOrientationConfig(@Configuration.Orientation newOrientation: Int) = - context.resources.configuration.apply { orientation = newOrientation } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelTest.kt index 60c2bde947a6..a6a584d2e622 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelTest.kt @@ -2,11 +2,9 @@ package com.android.systemui.qs import android.testing.AndroidTestingRunner import android.testing.TestableLooper -import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityNodeInfo import android.widget.FrameLayout -import android.widget.LinearLayout import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth @@ -37,8 +35,6 @@ class QuickQSPanelTest : SysuiTestCase() { quickQSPanel.initialize() quickQSPanel.onFinishInflate() - quickQSPanel.setSecurityFooter(View(mContext), false) - quickQSPanel.setHeaderContainer(LinearLayout(mContext)) // Provides a parent with non-zero size for QSPanel parentView = FrameLayout(mContext).apply { addView(quickQSPanel) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt index 05a21db310fc..e2fabbd1c270 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt @@ -13,7 +13,6 @@ import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags -import com.android.systemui.flags.Flags import com.android.systemui.navigationbar.NavigationModeController import com.android.systemui.navigationbar.NavigationModeController.ModeChangedListener import com.android.systemui.recents.OverviewProxyService @@ -114,25 +113,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { @Test fun testTaskbarVisibleInSplitShade() { enableSplitShade() - useNewFooter(false) - - given(taskbarVisible = true, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0, // taskbar should disappear when shade is expanded - expectedNotificationsMargin = NOTIFICATIONS_MARGIN) - - given(taskbarVisible = true, - navigationMode = BUTTONS_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = STABLE_INSET_BOTTOM, - expectedNotificationsMargin = NOTIFICATIONS_MARGIN) - } - - @Test - fun testTaskbarVisibleInSplitShade_newFooter() { - enableSplitShade() - useNewFooter(true) given(taskbarVisible = true, navigationMode = GESTURES_NAVIGATION, @@ -153,25 +133,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { fun testTaskbarNotVisibleInSplitShade() { // when taskbar is not visible, it means we're on the home screen enableSplitShade() - useNewFooter(false) - - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0) - - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0, // qs goes full height as it's not obscuring nav buttons - expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN) - } - - @Test - fun testTaskbarNotVisibleInSplitShade_newFooter() { - // when taskbar is not visible, it means we're on the home screen - enableSplitShade() - useNewFooter(true) given(taskbarVisible = false, navigationMode = GESTURES_NAVIGATION, @@ -190,24 +151,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { @Test fun testTaskbarNotVisibleInSplitShadeWithCutout() { enableSplitShade() - useNewFooter(false) - - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withCutout()) - then(expectedContainerPadding = CUTOUT_HEIGHT) - - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = windowInsets().withCutout().withStableBottom()) - then(expectedContainerPadding = 0, - expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN) - } - - @Test - fun testTaskbarNotVisibleInSplitShadeWithCutout_newFooter() { - enableSplitShade() - useNewFooter(true) given(taskbarVisible = false, navigationMode = GESTURES_NAVIGATION, @@ -226,23 +169,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { @Test fun testTaskbarVisibleInSinglePaneShade() { disableSplitShade() - useNewFooter(false) - - given(taskbarVisible = true, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0) - - given(taskbarVisible = true, - navigationMode = BUTTONS_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = STABLE_INSET_BOTTOM) - } - - @Test - fun testTaskbarVisibleInSinglePaneShade_newFooter() { - disableSplitShade() - useNewFooter(true) given(taskbarVisible = true, navigationMode = GESTURES_NAVIGATION, @@ -260,28 +186,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { @Test fun testTaskbarNotVisibleInSinglePaneShade() { disableSplitShade() - useNewFooter(false) - - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = emptyInsets()) - then(expectedContainerPadding = 0) - - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withCutout().withStableBottom()) - then(expectedContainerPadding = CUTOUT_HEIGHT) - - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0, expectedQsPadding = STABLE_INSET_BOTTOM) - } - - @Test - fun testTaskbarNotVisibleInSinglePaneShade_newFooter() { - disableSplitShade() - useNewFooter(true) given(taskbarVisible = false, navigationMode = GESTURES_NAVIGATION, @@ -303,27 +207,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { fun testCustomizingInSinglePaneShade() { disableSplitShade() controller.setCustomizerShowing(true) - useNewFooter(false) - - // always sets spacings to 0 - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0, - expectedNotificationsMargin = 0) - - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = emptyInsets()) - then(expectedContainerPadding = 0, - expectedNotificationsMargin = 0) - } - - @Test - fun testCustomizingInSinglePaneShade_newFooter() { - disableSplitShade() - controller.setCustomizerShowing(true) - useNewFooter(true) // always sets spacings to 0 given(taskbarVisible = false, @@ -343,27 +226,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { fun testDetailShowingInSinglePaneShade() { disableSplitShade() controller.setDetailShowing(true) - useNewFooter(false) - - // always sets spacings to 0 - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0, - expectedNotificationsMargin = 0) - - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = emptyInsets()) - then(expectedContainerPadding = 0, - expectedNotificationsMargin = 0) - } - - @Test - fun testDetailShowingInSinglePaneShade_newFooter() { - disableSplitShade() - controller.setDetailShowing(true) - useNewFooter(true) // always sets spacings to 0 given(taskbarVisible = false, @@ -383,25 +245,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { fun testDetailShowingInSplitShade() { enableSplitShade() controller.setDetailShowing(true) - useNewFooter(false) - - given(taskbarVisible = false, - navigationMode = GESTURES_NAVIGATION, - insets = windowInsets().withStableBottom()) - then(expectedContainerPadding = 0) - - // should not influence spacing - given(taskbarVisible = false, - navigationMode = BUTTONS_NAVIGATION, - insets = emptyInsets()) - then(expectedContainerPadding = 0) - } - - @Test - fun testDetailShowingInSplitShade_newFooter() { - enableSplitShade() - controller.setDetailShowing(true) - useNewFooter(true) given(taskbarVisible = false, navigationMode = GESTURES_NAVIGATION, @@ -531,7 +374,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { @Test fun testWindowInsetDebounce() { disableSplitShade() - useNewFooter(true) given(taskbarVisible = false, navigationMode = GESTURES_NAVIGATION, @@ -596,13 +438,8 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { verify(notificationsQSContainer) .setPadding(anyInt(), anyInt(), anyInt(), eq(expectedContainerPadding)) verify(notificationsQSContainer).setNotificationsMarginBottom(expectedNotificationsMargin) - val newFooter = featureFlags.isEnabled(Flags.NEW_FOOTER) - if (newFooter) { - verify(notificationsQSContainer) + verify(notificationsQSContainer) .setQSContainerPaddingBottom(expectedQsPadding) - } else { - verify(notificationsQSContainer).setQSScrollPaddingBottom(expectedQsPadding) - } Mockito.clearInvocations(notificationsQSContainer) } @@ -620,10 +457,6 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { return this } - private fun useNewFooter(useNewFooter: Boolean) { - whenever(featureFlags.isEnabled(Flags.NEW_FOOTER)).thenReturn(useNewFooter) - } - private fun getConstraintSetLayout(@IdRes id: Int): ConstraintSet.Layout { return constraintSetCaptor.value.getConstraint(id).layout } |