Visual changes in QS and made targets clickable

* Added clickable targets and intents to Next alarm, Ringer mode and
QSCarrier items. This includes making the tap targets 48dp high.
* Added contentDescription to alarm icon in QS Header info
* Changed icons to ones without inset so views are properly aligned
* Made text in QS header marquee
* Reduces vertical margin between tiles in landscape to fit 2 rows (when
not in VPN).
* Correctly align all children of QuickStatusBarHeader that should be
aligned

Test: visual
Test: manual, tap targets go to correct destination
Fixes: 129350749

Change-Id: I6cc984ec4d58bf1afc9eb6822ded786591f5c7b8
This commit is contained in:
Fabian Kozynski
2019-04-04 14:17:48 -04:00
parent 72cd84a979
commit b1aee81e0e
9 changed files with 108 additions and 56 deletions

View File

@@ -21,8 +21,6 @@
android:id="@+id/privacy_chip"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_marginLeft="@dimen/ongoing_appops_chip_margin"
android:layout_marginRight="@dimen/ongoing_appops_chip_margin"
android:layout_gravity="center_vertical|end"
android:gravity="center_vertical"
android:orientation="horizontal"

View File

@@ -19,6 +19,7 @@
android:id="@+id/linear_carrier"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="48dp"
android:orientation="horizontal"
android:gravity="center_vertical|start"
android:background="@android:color/transparent"

View File

@@ -21,8 +21,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/qs_header_top_margin"
android:layout_marginBottom="14dp"
android:layout_marginStart="@dimen/status_bar_padding_start"
android:layout_marginEnd="@dimen/status_bar_padding_end"
android:paddingStart="@dimen/status_bar_padding_start"
android:paddingEnd="@dimen/status_bar_padding_end"
android:layout_below="@id/quick_status_bar_system_icons"
android:clipChildren="false"
android:clipToPadding="false"

View File

@@ -19,7 +19,6 @@
android:layout_width="match_parent"
android:layout_height="@dimen/qs_header_tooltip_height"
android:layout_below="@id/quick_status_bar_system_icons"
android:layout_marginTop="@dimen/qs_header_top_margin"
android:paddingStart="@dimen/status_bar_padding_start"
android:paddingEnd="@dimen/status_bar_padding_end">
@@ -27,7 +26,7 @@
android:id="@+id/long_press_tooltip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom"
android:layout_gravity="start|center_vertical"
android:alpha="0"
android:text="@string/quick_settings_header_onboarding_text"
android:textAppearance="@style/TextAppearance.QS.TileLabel"
@@ -36,34 +35,48 @@
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom"
android:layout_height="match_parent"
android:layout_gravity="start|center_vertical"
android:gravity="center_vertical">
<LinearLayout
android:id="@+id/status_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start|center_vertical"
android:layout_weight="1"
android:gravity="center_vertical"
android:alpha="0">
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"
<LinearLayout
android:id = "@+id/alarm_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.Status"
android:visibility="gone"/>
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:focusable="true"
android:clickable="true">
<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/ic_alarm"
android:tint="?android:attr/textColorPrimary"
android:contentDescription="@string/accessibility_quick_settings_alarm_set"
android:visibility="gone"/>
<TextView
android:id="@+id/next_alarm_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
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"
@@ -71,20 +84,33 @@
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"
<LinearLayout
android:id = "@+id/ringer_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.Status"
android:visibility="gone"/>
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:focusable="true"
android:clickable="true">
<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:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start"
android:textAppearance="@style/TextAppearance.QS.Status"
android:visibility="gone"/>
</LinearLayout>
</LinearLayout>
<View
@@ -93,11 +119,13 @@
android:layout_height="match_parent"
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"/>
android:layout_height="match_parent"
android:layout_gravity="end|center_vertical"
android:focusable="false"/>
</LinearLayout>
</FrameLayout>

View File

@@ -24,8 +24,8 @@
<dimen name="brightness_mirror_height">40dp</dimen>
<dimen name="qs_tile_margin_top">2dp</dimen>
<dimen name="qs_header_tooltip_height">24dp</dimen>
<dimen name="qs_tile_margin_top">8dp</dimen>
<dimen name="qs_tile_margin_vertical">0dp</dimen>
<dimen name="battery_detail_graph_space_top">9dp</dimen>
<dimen name="battery_detail_graph_space_bottom">9dp</dimen>

View File

@@ -437,7 +437,7 @@
<dimen name="qs_tile_padding_bottom">16dp</dimen>
<dimen name="qs_tile_spacing">4dp</dimen>
<dimen name="qs_panel_padding_bottom">0dp</dimen>
<dimen name="qs_panel_padding_top">30dp</dimen>
<dimen name="qs_panel_padding_top">@dimen/qs_header_tooltip_height</dimen>
<dimen name="qs_detail_header_height">56dp</dimen>
<dimen name="qs_detail_header_padding">0dp</dimen>
<dimen name="qs_detail_image_width">56dp</dimen>
@@ -461,8 +461,8 @@
<dimen name="qs_detail_item_icon_width">32dp</dimen>
<dimen name="qs_detail_item_icon_marginStart">0dp</dimen>
<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_tooltip_height">48dp</dimen>
<dimen name="qs_header_alarm_icon_size">@dimen/status_bar_icon_drawing_size</dimen>
<dimen name="qs_header_mobile_icon_size">@dimen/status_bar_icon_drawing_size</dimen>
<dimen name="qs_header_alarm_text_margin_start">6dp</dimen>
<dimen name="qs_header_separator_width">8dp</dimen>
@@ -473,7 +473,7 @@
<dimen name="qs_footer_padding_end">16dp</dimen>
<dimen name="qs_footer_icon_size">16dp</dimen>
<dimen name="qs_paged_tile_layout_padding_bottom">0dp</dimen>
<dimen name="qs_header_top_margin">12dp</dimen>
<dimen name="qs_header_top_margin">15dp</dimen>
<dimen name="qs_notif_collapsed_space">64dp</dimen>
@@ -1031,8 +1031,6 @@
<dimen name="ongoing_appops_dialog_title_size">20sp</dimen>
<!-- Text size for Ongoing App Ops dialog items -->
<dimen name="ongoing_appops_dialog_item_size">16sp</dimen>
<!-- Side margins around the Ongoing App Ops chip-->
<dimen name="ongoing_appops_chip_margin">0dp</dimen>
<!-- Height of the Ongoing App Ops chip -->
<dimen name="ongoing_appops_chip_height">32dp</dimen>
<!-- Padding between background of Ongoing App Ops chip and content -->

View File

@@ -19,6 +19,8 @@ package com.android.systemui.qs;
import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.util.AttributeSet;
import android.util.Log;
@@ -30,6 +32,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.keyguard.CarrierTextController;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.policy.NetworkController;
import javax.inject.Inject;
@@ -40,7 +43,7 @@ import javax.inject.Named;
*/
public class QSCarrierGroup extends LinearLayout implements
CarrierTextController.CarrierTextCallback,
NetworkController.SignalCallback {
NetworkController.SignalCallback, View.OnClickListener {
private static final String TAG = "QSCarrierGroup";
/**
@@ -53,20 +56,29 @@ public class QSCarrierGroup extends LinearLayout implements
private QSCarrier[] mCarrierGroups = new QSCarrier[SIM_SLOTS];
private final CellSignalState[] mInfos = new CellSignalState[SIM_SLOTS];
private CarrierTextController mCarrierTextController;
private ActivityStarter mActivityStarter;
private boolean mListening;
@Inject
public QSCarrierGroup(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
NetworkController networkController) {
NetworkController networkController, ActivityStarter activityStarter) {
super(context, attrs);
mNetworkController = networkController;
mActivityStarter = activityStarter;
}
@VisibleForTesting
public QSCarrierGroup(Context context, AttributeSet attrs) {
this(context, attrs,
Dependency.get(NetworkController.class));
Dependency.get(NetworkController.class),
Dependency.get(ActivityStarter.class));
}
@Override
public void onClick(View v) {
mActivityStarter.postStartActivityDismissingKeyguard(new Intent(
Settings.ACTION_WIRELESS_SETTINGS), 0);
}
@Override
@@ -82,6 +94,7 @@ public class QSCarrierGroup extends LinearLayout implements
for (int i = 0; i < SIM_SLOTS; i++) {
mInfos[i] = new CellSignalState();
mCarrierGroups[i].setOnClickListener(this);
}
CharSequence separator = mContext.getString(

View File

@@ -300,6 +300,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mFooter.onConfigurationChanged();
updateResources();
updateBrightnessMirror();
}

View File

@@ -35,6 +35,7 @@ import android.media.AudioManager;
import android.os.Handler;
import android.os.Looper;
import android.provider.AlarmClock;
import android.provider.Settings;
import android.service.notification.ZenModeConfig;
import android.text.format.DateUtils;
import android.util.AttributeSet;
@@ -133,9 +134,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
private ImageView mNextAlarmIcon;
/** {@link TextView} containing the actual text indicating when the next alarm will go off. */
private TextView mNextAlarmTextView;
private View mNextAlarmContainer;
private View mStatusSeparator;
private ImageView mRingerModeIcon;
private TextView mRingerModeTextView;
private View mRingerContainer;
private Clock mClockView;
private DateView mDateView;
private OngoingPrivacyChip mPrivacyChip;
@@ -203,10 +206,14 @@ public class QuickStatusBarHeader extends RelativeLayout implements
mStatusSeparator = findViewById(R.id.status_separator);
mNextAlarmIcon = findViewById(R.id.next_alarm_icon);
mNextAlarmTextView = findViewById(R.id.next_alarm_text);
mNextAlarmContainer = findViewById(R.id.alarm_container);
mNextAlarmContainer.setOnClickListener(this::onClick);
mRingerModeIcon = findViewById(R.id.ringer_mode_icon);
mRingerModeTextView = findViewById(R.id.ringer_mode_text);
mRingerContainer = findViewById(R.id.ringer_container);
mRingerContainer.setOnClickListener(this::onClick);
mPrivacyChip = findViewById(R.id.privacy_chip);
mPrivacyChip.setOnClickListener(this);
mPrivacyChip.setOnClickListener(this::onClick);
mCarrierGroup = findViewById(R.id.carrier_group);
@@ -236,6 +243,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements
// QS will always show the estimate, and BatteryMeterView handles the case where
// it's unavailable or charging
mBatteryRemainingIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE);
mRingerModeTextView.setSelected(true);
mNextAlarmTextView.setSelected(true);
}
private List<String> getIgnoredIconSlots() {
@@ -285,11 +294,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
if (!ZenModeConfig.isZenOverridingRinger(mZenController.getZen(),
mZenController.getConsolidatedPolicy())) {
if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_vibrate);
mRingerModeIcon.setImageResource(R.drawable.ic_volume_ringer_vibrate);
mRingerModeTextView.setText(R.string.qs_status_phone_vibrate);
ringerVisible = true;
} else if (mRingerMode == AudioManager.RINGER_MODE_SILENT) {
mRingerModeIcon.setImageResource(R.drawable.stat_sys_ringer_silent);
mRingerModeIcon.setImageResource(R.drawable.ic_volume_ringer_mute);
mRingerModeTextView.setText(R.string.qs_status_phone_muted);
ringerVisible = true;
}
@@ -546,7 +555,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
@Override
public void onClick(View v) {
if (v == mClockView) {
if (v == mClockView || v == mNextAlarmContainer) {
mActivityStarter.postStartActivityDismissingKeyguard(new Intent(
AlarmClock.ACTION_SHOW_ALARMS),0);
} else if (v == mPrivacyChip) {
@@ -561,6 +570,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements
new Intent(Intent.ACTION_REVIEW_ONGOING_PERMISSION_USAGE), 0);
mHost.collapsePanels();
});
} else if (v == mRingerContainer) {
mActivityStarter.postStartActivityDismissingKeyguard(new Intent(
Settings.ACTION_SOUND_SETTINGS), 0);
}
}
@@ -573,7 +585,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements
@Override
public void onZenChanged(int zen) {
updateStatusText();
}
@Override
@@ -731,8 +742,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements
public void setMargins(int sideMargins) {
for (int i = 0; i < getChildCount(); i++) {
View v = getChildAt(i);
// Prevents these views from getting set a margin.
// The Icon views all have the same padding set in XML to be aligned.
if (v == mSystemIconsView || v == mQuickQsStatusIcons || v == mHeaderQsPanel
|| v == mPrivacyChip) {
|| v == mHeaderTextContainerView) {
continue;
}
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams();