Change visuals for expanded QS
* Moved status icons to the left * Moved carriers to top right of QS * Moved edit button to left of QSFooter * Moved PageIndicator to always be in Footer * Added build number to footer. Test: manual using landscape and RTL Bug: 124464727 Bug: 124466547 Bug: 126759381 Change-Id: I5e5b5bf559d75a8520e772e96b8c4e77ffb72d84
This commit is contained in:
@@ -65,8 +65,8 @@
|
||||
android:layout_gravity="center_vertical">
|
||||
<com.android.systemui.statusbar.AnimatedImageView
|
||||
android:id="@+id/mobile_signal"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/qs_header_mobile_icon_size"
|
||||
android:layout_width="@dimen/qs_header_mobile_icon_size"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<ImageView
|
||||
|
||||
@@ -17,33 +17,30 @@
|
||||
<com.android.systemui.qs.QSCarrier
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/linear_carrier"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|start"
|
||||
android:background="@android:color/transparent"
|
||||
android:clickable="false"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:paddingStart="16dp" >
|
||||
android:clipToPadding="false" >
|
||||
|
||||
<include
|
||||
layout="@layout/mobile_signal_group"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginEnd="@dimen/qs_carrier_margin_width"
|
||||
android:visibility="gone" />
|
||||
|
||||
<view class="com.android.systemui.qs.QSCarrier$QSCarrierText"
|
||||
android:id="@+id/qs_carrier_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="marquee"
|
||||
android:textAppearance="@style/TextAppearance.QS.CarrierInfo"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status"
|
||||
android:textDirection="locale"
|
||||
android:singleLine="true" />
|
||||
android:singleLine="true"
|
||||
android:maxEms="7"/>
|
||||
|
||||
</com.android.systemui.qs.QSCarrier>
|
||||
@@ -21,40 +21,38 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|start"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginEnd="32dp">
|
||||
android:gravity="end|center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
<include
|
||||
layout="@layout/qs_carrier"
|
||||
android:id="@+id/carrier1" />
|
||||
android:id="@+id/carrier1"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/qs_carrier_divider1"
|
||||
android:layout_width="2dp"
|
||||
android:layout_width="@dimen/qs_header_carrier_separator_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:background="?android:attr/dividerVertical"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
layout="@layout/qs_carrier"
|
||||
android:id="@+id/carrier2"
|
||||
android:layout_weight="1"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/qs_carrier_divider2"
|
||||
android:layout_width="2dp"
|
||||
android:layout_width="@dimen/qs_header_carrier_separator_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:background="?android:attr/dividerVertical"
|
||||
android:layout_weight="1"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
layout="@layout/qs_carrier"
|
||||
android:id="@+id/carrier3"
|
||||
android:layout_weight="1"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</com.android.systemui.qs.QSCarrierGroup>
|
||||
@@ -21,6 +21,8 @@
|
||||
android:id="@+id/qs_footer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/qs_footer_height"
|
||||
android:layout_marginStart="@dimen/qs_footer_margin"
|
||||
android:layout_marginEnd="@dimen/qs_footer_margin"
|
||||
android:elevation="4dp"
|
||||
android:background="@android:color/transparent"
|
||||
android:baselineAligned="false"
|
||||
@@ -41,8 +43,35 @@
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="end" >
|
||||
|
||||
<include layout="@layout/qs_carrier_group"
|
||||
android:id="@+id/carrier_group"/>
|
||||
<com.android.keyguard.AlphaOptimizedLinearLayout
|
||||
android:id="@+id/qs_footer_actions_edit_container"
|
||||
android:layout_width="@integer/qs_footer_actions_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="@integer/qs_footer_actions_weight"
|
||||
android:gravity="center_vertical|start" >
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
android:id="@android:id/edit"
|
||||
android:layout_width="@dimen/qs_footer_action_button_size"
|
||||
android:layout_height="@dimen/qs_footer_action_button_size"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:clickable="true"
|
||||
android:clipToPadding="false"
|
||||
android:contentDescription="@string/accessibility_quick_settings_edit"
|
||||
android:focusable="true"
|
||||
android:padding="@dimen/qs_footer_icon_padding"
|
||||
android:src="@*android:drawable/ic_mode_edit"
|
||||
android:tint="?android:attr/colorForeground"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/build"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:focusable="true"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status"
|
||||
android:visibility="gone"/>
|
||||
</com.android.keyguard.AlphaOptimizedLinearLayout>
|
||||
|
||||
<com.android.systemui.qs.PageIndicator
|
||||
android:id="@+id/footer_page_indicator"
|
||||
@@ -59,8 +88,8 @@
|
||||
android:gravity="center_vertical|end" >
|
||||
<com.android.systemui.statusbar.phone.MultiUserSwitch
|
||||
android:id="@+id/multi_user_switch"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_width="@dimen/qs_footer_action_button_size"
|
||||
android:layout_height="@dimen/qs_footer_action_button_size"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:background="@drawable/ripple_drawable"
|
||||
android:focusable="true">
|
||||
@@ -70,26 +99,14 @@
|
||||
android:layout_width="@dimen/multi_user_avatar_expanded_size"
|
||||
android:layout_height="@dimen/multi_user_avatar_expanded_size"
|
||||
android:layout_gravity="center"
|
||||
android:tint="?android:attr/colorAccent"
|
||||
android:scaleType="centerInside"/>
|
||||
</com.android.systemui.statusbar.phone.MultiUserSwitch>
|
||||
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
android:id="@android:id/edit"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:clickable="true"
|
||||
android:clipToPadding="false"
|
||||
android:contentDescription="@string/accessibility_quick_settings_edit"
|
||||
android:focusable="true"
|
||||
android:padding="15dp"
|
||||
android:src="@*android:drawable/ic_mode_edit"
|
||||
android:tint="?android:attr/colorForeground"/>
|
||||
|
||||
<com.android.systemui.statusbar.AlphaOptimizedFrameLayout
|
||||
android:id="@+id/settings_button_container"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_width="@dimen/qs_footer_action_button_size"
|
||||
android:layout_height="@dimen/qs_footer_action_button_size"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false">
|
||||
|
||||
@@ -98,10 +115,12 @@
|
||||
style="@android:style/Widget.Material.Button.Borderless"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:padding="@dimen/qs_footer_icon_padding"
|
||||
android:background="@drawable/ripple_drawable"
|
||||
android:contentDescription="@string/accessibility_quick_settings_settings"
|
||||
android:padding="15dp"
|
||||
android:src="@drawable/ic_settings_16dp"
|
||||
android:src="@drawable/ic_settings"
|
||||
android:scaleType="centerInside"
|
||||
android:tint="?android:attr/colorForeground"/>
|
||||
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
@@ -117,7 +136,6 @@
|
||||
</com.android.systemui.statusbar.AlphaOptimizedFrameLayout>
|
||||
</com.android.keyguard.AlphaOptimizedLinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/qs_drag_handle_view"
|
||||
android:layout_width="24dp"
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
android:elevation="4dp"
|
||||
android:background="@android:color/transparent"
|
||||
android:focusable="true"
|
||||
android:accessibilityTraversalBefore="@id/qs_carrier_text"
|
||||
android:accessibilityTraversalBefore="@android:id/edit"
|
||||
/>
|
||||
|
||||
<include layout="@layout/quick_status_bar_expanded_header" />
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
android:id="@+id/long_press_tooltip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
android:layout_gravity="start|bottom"
|
||||
android:alpha="0"
|
||||
android:text="@string/quick_settings_header_onboarding_text"
|
||||
android:textAppearance="@style/TextAppearance.QS.TileLabel"
|
||||
@@ -33,54 +33,69 @@
|
||||
android:visibility="invisible" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/status_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
android:gravity="center_vertical"
|
||||
android:alpha="0">
|
||||
android:layout_gravity="start|bottom"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/next_alarm_icon"
|
||||
android:layout_width="@dimen/qs_header_alarm_icon_size"
|
||||
android:layout_height="@dimen/qs_header_alarm_icon_size"
|
||||
android:src="@drawable/stat_sys_alarm"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/next_alarm_text"
|
||||
<LinearLayout
|
||||
android:id="@+id/status_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start"
|
||||
android:textAppearance="@style/TextAppearance.QS.TileLabel"
|
||||
android:visibility="gone"/>
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical"
|
||||
android:alpha="0">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/next_alarm_icon"
|
||||
android:layout_width="@dimen/qs_header_alarm_icon_size"
|
||||
android:layout_height="@dimen/qs_header_alarm_icon_size"
|
||||
android:src="@drawable/stat_sys_alarm"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/next_alarm_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/status_separator"
|
||||
android:layout_width="@dimen/qs_header_separator_width"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ringer_mode_icon"
|
||||
android:layout_width="@dimen/qs_header_alarm_icon_size"
|
||||
android:layout_height="@dimen/qs_header_alarm_icon_size"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ringer_mode_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status"
|
||||
android:visibility="gone"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/status_separator"
|
||||
android:layout_width="1dp"
|
||||
android:minWidth="@dimen/qs_status_separator"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:background="@android:color/white"
|
||||
android:backgroundTint="?android:attr/textColorPrimary"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ringer_mode_icon"
|
||||
android:layout_width="@dimen/qs_header_alarm_icon_size"
|
||||
android:layout_height="@dimen/qs_header_alarm_icon_size"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ringer_mode_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start"
|
||||
android:textAppearance="@style/TextAppearance.QS.TileLabel"
|
||||
android:visibility="gone"/>
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<include layout="@layout/qs_carrier_group"
|
||||
android:id="@+id/carrier_group"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android_layout_gravity="center vertical|end"/>
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2018 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
|
||||
-->
|
||||
<resources>
|
||||
<!-- Action footer width is set to 0 to allow it to stretch (through a weight of 1) and center
|
||||
the page indicator in between the footer and the carrier text.-->
|
||||
<integer name="qs_footer_actions_width">0</integer>
|
||||
<integer name="qs_footer_actions_weight">1</integer>
|
||||
</resources>
|
||||
@@ -274,7 +274,16 @@
|
||||
|
||||
<!-- The height of the quick settings footer that holds the user switcher, settings icon,
|
||||
etc. -->
|
||||
<dimen name="qs_footer_height">56dp</dimen>
|
||||
<dimen name="qs_footer_height">48dp</dimen>
|
||||
|
||||
<!-- The size of each of the icon buttons in the QS footer -->
|
||||
<dimen name="qs_footer_action_button_size">@dimen/qs_footer_height</dimen>
|
||||
|
||||
<!-- Margins on each side of QS Footer -->
|
||||
<dimen name="qs_footer_margin">2dp</dimen>
|
||||
|
||||
<!-- Padding on each QS Footer Icon to make the icons 20dpx20dp -->
|
||||
<dimen name="qs_footer_icon_padding">14dp</dimen>
|
||||
|
||||
<!-- The padding between the notifications and the quick settings container -->
|
||||
<dimen name="qs_notification_padding">@dimen/notification_side_paddings</dimen>
|
||||
@@ -415,11 +424,16 @@
|
||||
<dimen name="qs_detail_item_icon_marginEnd">20dp</dimen>
|
||||
<dimen name="qs_header_tooltip_height">18dp</dimen>
|
||||
<dimen name="qs_header_alarm_icon_size">18dp</dimen>
|
||||
<dimen name="qs_header_mobile_icon_size">18dp</dimen>
|
||||
<dimen name="qs_header_alarm_text_margin_start">6dp</dimen>
|
||||
<dimen name="qs_header_separator_width">8dp</dimen>
|
||||
<dimen name="qs_header_carrier_separator_width">6dp</dimen>
|
||||
<dimen name="qs_status_separator">32dp</dimen>
|
||||
<dimen name="qs_carrier_margin_width">4dp</dimen>
|
||||
<dimen name="qs_footer_padding_start">16dp</dimen>
|
||||
<dimen name="qs_footer_padding_end">16dp</dimen>
|
||||
<dimen name="qs_footer_icon_size">16dp</dimen>
|
||||
<dimen name="qs_paged_tile_layout_padding_bottom">24dp</dimen>
|
||||
<dimen name="qs_paged_tile_layout_padding_bottom">16dp</dimen>
|
||||
|
||||
<dimen name="qs_notif_collapsed_space">64dp</dimen>
|
||||
|
||||
@@ -592,7 +606,7 @@
|
||||
<dimen name="multi_user_avatar_keyguard_size">22dp</dimen>
|
||||
|
||||
<!-- The width of user avatar when expanded -->
|
||||
<dimen name="multi_user_avatar_expanded_size">18dp</dimen>
|
||||
<dimen name="multi_user_avatar_expanded_size">20dp</dimen>
|
||||
|
||||
<!-- The font size of the time when collapsed in QS -->
|
||||
<dimen name="qs_time_collapsed_size">14sp</dimen>
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
|
||||
<!-- Action footer width used for layout_width to indicate WRAP_CONTENT (along with a weight of
|
||||
0) as we can allow the carrier text to stretch as far as needed in the QS footer. -->
|
||||
<integer name="qs_footer_actions_width">-2</integer>
|
||||
<integer name="qs_footer_actions_weight">0</integer>
|
||||
<integer name="qs_footer_actions_width">0</integer>
|
||||
<integer name="qs_footer_actions_weight">1</integer>
|
||||
|
||||
<!-- Maximum number of bubbles to render and animate at one time. While the animations used are
|
||||
lightweight translation animations, this number can be reduced on lower end devices if any
|
||||
|
||||
@@ -227,6 +227,8 @@
|
||||
<item name="android:textSize">@dimen/qs_carrier_info_text_size</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.QS.Status" parent="TextAppearance.QS.TileLabel.Secondary" />
|
||||
|
||||
<style name="TextAppearance.AppOpsDialog" />
|
||||
|
||||
<style name="TextAppearance.AppOpsDialog.Title">
|
||||
|
||||
@@ -261,11 +261,9 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
// Fade in the tiles/labels as we reach the final position.
|
||||
mFirstPageDelayedAnimator = new TouchAnimator.Builder()
|
||||
.setStartDelay(EXPANDED_TILE_DELAY)
|
||||
.addFloat(mQsPanel.getPageIndicator(), "alpha", 0, 1)
|
||||
.addFloat(tileLayout, "alpha", 0, 1)
|
||||
.addFloat(mQsPanel.getDivider(), "alpha", 0, 1)
|
||||
.addFloat(mQsPanel.getFooter().getView(), "alpha", 0, 1).build();
|
||||
mAllViews.add(mQsPanel.getPageIndicator());
|
||||
mAllViews.add(mQsPanel.getDivider());
|
||||
mAllViews.add(mQsPanel.getFooter().getView());
|
||||
float px = 0;
|
||||
@@ -283,7 +281,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
}
|
||||
mNonfirstPageAnimator = new TouchAnimator.Builder()
|
||||
.addFloat(mQuickQsPanel, "alpha", 1, 0)
|
||||
.addFloat(mQsPanel.getPageIndicator(), "alpha", 0, 1)
|
||||
.addFloat(mQsPanel.getDivider(), "alpha", 0, 1)
|
||||
.setListener(mNonFirstPageListener)
|
||||
.setEndDelay(.5f)
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.android.systemui.R;
|
||||
public class QSCarrier extends LinearLayout {
|
||||
|
||||
private View mMobileGroup;
|
||||
private TextView mCarrierText;
|
||||
private QSCarrierText mCarrierText;
|
||||
private ImageView mMobileSignal;
|
||||
private ImageView mMobileRoaming;
|
||||
private ColorStateList mColorForegroundStateList;
|
||||
@@ -107,6 +107,7 @@ public class QSCarrier extends LinearLayout {
|
||||
* TextView that changes its ellipsize value with its visibility.
|
||||
*/
|
||||
public static class QSCarrierText extends TextView {
|
||||
|
||||
public QSCarrierText(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ public class QSCarrierGroup extends LinearLayout implements
|
||||
for (int i = 0; i < SIM_SLOTS; i++) {
|
||||
mCarrierGroups[i].updateState(mInfos[i]);
|
||||
}
|
||||
|
||||
mCarrierDividers[0].setVisibility(
|
||||
mInfos[0].visible && mInfos[1].visible ? View.VISIBLE : View.GONE);
|
||||
// This tackles the case of slots 2 being available as well as at least one other.
|
||||
|
||||
@@ -24,18 +24,24 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.database.ContentObserver;
|
||||
import android.graphics.PorterDuff.Mode;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.RippleDrawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -45,6 +51,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.settingslib.development.DevelopmentSettingsEnabler;
|
||||
import com.android.settingslib.drawable.UserIconDrawable;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
@@ -80,7 +87,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
|
||||
private boolean mListening;
|
||||
|
||||
private QSCarrierGroup mCarrierGroup;
|
||||
private View mDivider;
|
||||
protected MultiUserSwitch mMultiUserSwitch;
|
||||
private ImageView mMultiUserAvatar;
|
||||
@@ -89,6 +95,7 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
private float mExpansionAmount;
|
||||
|
||||
protected View mEdit;
|
||||
protected View mEditContainer;
|
||||
private TouchAnimator mSettingsCogAnimator;
|
||||
|
||||
private View mActionsContainer;
|
||||
@@ -96,6 +103,15 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
|
||||
private OnClickListener mExpandClickListener;
|
||||
|
||||
private final ContentObserver mDeveloperSettingsObserver = new ContentObserver(
|
||||
new Handler(mContext.getMainLooper())) {
|
||||
@Override
|
||||
public void onChange(boolean selfChange, Uri uri) {
|
||||
super.onChange(selfChange, uri);
|
||||
setBuildText();
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public QSFooterImpl(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
|
||||
ActivityStarter activityStarter, UserInfoController userInfoController,
|
||||
@@ -129,13 +145,12 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
mSettingsContainer = findViewById(R.id.settings_button_container);
|
||||
mSettingsButton.setOnClickListener(this);
|
||||
|
||||
mCarrierGroup = findViewById(R.id.carrier_group);
|
||||
|
||||
mMultiUserSwitch = findViewById(R.id.multi_user_switch);
|
||||
mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
|
||||
|
||||
mDragHandle = findViewById(R.id.qs_drag_handle_view);
|
||||
mActionsContainer = findViewById(R.id.qs_footer_actions_container);
|
||||
mEditContainer = findViewById(R.id.qs_footer_actions_edit_container);
|
||||
|
||||
// RenderThread is doing more harm than good when touching the header (to expand quick
|
||||
// settings), so disable it for this view
|
||||
@@ -147,6 +162,21 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
oldBottom) -> updateAnimator(right - left));
|
||||
setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
|
||||
updateEverything();
|
||||
setBuildText();
|
||||
}
|
||||
|
||||
private void setBuildText() {
|
||||
TextView v = findViewById(R.id.build);
|
||||
if (v == null) return;
|
||||
if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(mContext)) {
|
||||
v.setText(mContext.getString(
|
||||
com.android.internal.R.string.bugreport_status,
|
||||
Build.VERSION.RELEASE,
|
||||
Build.ID));
|
||||
v.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
v.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAnimator(int width) {
|
||||
@@ -179,14 +209,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
|
||||
private void updateResources() {
|
||||
updateFooterAnimator();
|
||||
|
||||
// Update the width and weight of the actions container as the page indicator can sometimes
|
||||
// show and the layout needs to center it between the carrier text and actions container.
|
||||
LinearLayout.LayoutParams params =
|
||||
(LinearLayout.LayoutParams) mActionsContainer.getLayoutParams();
|
||||
params.width = mContext.getResources().getInteger(R.integer.qs_footer_actions_width);
|
||||
params.weight = mContext.getResources().getInteger(R.integer.qs_footer_actions_weight);
|
||||
mActionsContainer.setLayoutParams(params);
|
||||
}
|
||||
|
||||
private void updateFooterAnimator() {
|
||||
@@ -197,8 +219,8 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
private TouchAnimator createFooterAnimator() {
|
||||
return new TouchAnimator.Builder()
|
||||
.addFloat(mDivider, "alpha", 0, 1)
|
||||
.addFloat(mCarrierGroup, "alpha", 0, 0, 1)
|
||||
.addFloat(mActionsContainer, "alpha", 0, 1)
|
||||
.addFloat(mEditContainer, "alpha", 0, 1)
|
||||
.addFloat(mDragHandle, "alpha", 1, 0, 0)
|
||||
.addFloat(mPageIndicator, "alpha", 0, 1)
|
||||
.setStartDelay(0.15f)
|
||||
@@ -232,10 +254,19 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED), false,
|
||||
mDeveloperSettingsObserver, UserHandle.USER_ALL);
|
||||
}
|
||||
|
||||
@Override
|
||||
@VisibleForTesting
|
||||
public void onDetachedFromWindow() {
|
||||
setListening(false);
|
||||
mContext.getContentResolver().unregisterContentObserver(mDeveloperSettingsObserver);
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
@@ -293,7 +324,7 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
|
||||
final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
|
||||
mMultiUserSwitch.setVisibility(showUserSwitcher(isDemo) ? View.VISIBLE : View.INVISIBLE);
|
||||
mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
|
||||
mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
|
||||
mSettingsButton.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
|
||||
}
|
||||
|
||||
@@ -323,7 +354,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
|
||||
} else {
|
||||
mUserInfoController.removeCallback(this);
|
||||
}
|
||||
mCarrierGroup.setListening(mListening);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package com.android.systemui.qs;
|
||||
|
||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||
|
||||
import static com.android.systemui.qs.tileimpl.QSTileImpl.getColorForState;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
@@ -79,7 +77,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
protected QSTileHost mHost;
|
||||
|
||||
protected QSSecurityFooter mFooter;
|
||||
private PageIndicator mPanelPageIndicator;
|
||||
private PageIndicator mFooterPageIndicator;
|
||||
private boolean mGridContentVisible = true;
|
||||
|
||||
@@ -110,11 +107,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
mTileLayout.setListening(mListening);
|
||||
addView((View) mTileLayout);
|
||||
|
||||
mPanelPageIndicator = (PageIndicator) LayoutInflater.from(context).inflate(
|
||||
R.layout.qs_page_indicator, this, false);
|
||||
addView(mPanelPageIndicator);
|
||||
|
||||
((PagedTileLayout) mTileLayout).setPageIndicator(mPanelPageIndicator);
|
||||
mQsTileRevealController = new QSTileRevealController(mContext, this,
|
||||
(PagedTileLayout) mTileLayout);
|
||||
|
||||
@@ -141,10 +133,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
return mDivider;
|
||||
}
|
||||
|
||||
public View getPageIndicator() {
|
||||
return mPanelPageIndicator;
|
||||
}
|
||||
|
||||
public QSTileRevealController getQsTileRevealController() {
|
||||
return mQsTileRevealController;
|
||||
}
|
||||
@@ -265,21 +253,11 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
|
||||
private void updatePageIndicator() {
|
||||
if (mTileLayout instanceof PagedTileLayout) {
|
||||
// If we're in landscape, and we have the footer page indicator (which we should if the
|
||||
// footer has been initialized & linked), then we'll show the footer page indicator to
|
||||
// save space in the main QS tile area. Otherwise, we'll use the default one under the
|
||||
// tiles/above the footer.
|
||||
boolean shouldUseFooterPageIndicator =
|
||||
getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE
|
||||
&& mFooterPageIndicator != null;
|
||||
|
||||
mPanelPageIndicator.setVisibility(View.GONE);
|
||||
if (mFooterPageIndicator != null) {
|
||||
mFooterPageIndicator.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
((PagedTileLayout) mTileLayout).setPageIndicator(
|
||||
shouldUseFooterPageIndicator ? mFooterPageIndicator : mPanelPageIndicator);
|
||||
((PagedTileLayout) mTileLayout).setPageIndicator(mFooterPageIndicator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
|
||||
private boolean mListening;
|
||||
private boolean mQsDisabled;
|
||||
|
||||
private QSCarrierGroup mCarrierGroup;
|
||||
protected QuickQSPanel mHeaderQsPanel;
|
||||
protected QSTileHost mHost;
|
||||
private TintedIconManager mIconManager;
|
||||
@@ -217,6 +218,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
|
||||
mRingerModeTextView = findViewById(R.id.ringer_mode_text);
|
||||
mPrivacyChip = findViewById(R.id.privacy_chip);
|
||||
mPrivacyChip.setOnClickListener(this);
|
||||
mCarrierGroup = findViewById(R.id.carrier_group);
|
||||
|
||||
updateResources();
|
||||
|
||||
@@ -531,6 +533,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
|
||||
}
|
||||
mHeaderQsPanel.setListening(listening);
|
||||
mListening = listening;
|
||||
mCarrierGroup.setListening(mListening);
|
||||
|
||||
if (listening) {
|
||||
mZenController.addCallback(this);
|
||||
|
||||
Reference in New Issue
Block a user