Merge "Another guts redesign" into qt-dev
am: 69ca6f531e
Change-Id: I30e84a6b49953eaa2010459db3290aefc1c0a2d2
This commit is contained in:
@@ -20,6 +20,6 @@
|
||||
android:color="@color/notification_guts_selection_bg" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="?android:attr/colorAccent"/>
|
||||
android:color="@color/GM2_grey_300"/>
|
||||
<corners android:radius="@dimen/rect_button_radius" />
|
||||
</shape>
|
||||
@@ -103,7 +103,6 @@ asked for it -->
|
||||
android:id="@+id/channel_info"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/notification_guts_button_spacing"
|
||||
android:paddingEnd="@*android:dimen/notification_content_margin_end"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
@@ -127,6 +126,7 @@ asked for it -->
|
||||
android:id="@+id/blocking_helper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/notification_guts_button_spacing"
|
||||
android:layout_marginBottom="@dimen/notification_guts_button_spacing"
|
||||
android:paddingEnd="@*android:dimen/notification_content_margin_end"
|
||||
android:clipChildren="false"
|
||||
@@ -216,67 +216,107 @@ asked for it -->
|
||||
android:id="@+id/interruptiveness_settings"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttons"
|
||||
<RelativeLayout
|
||||
android:id="@+id/alert"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center">
|
||||
|
||||
<Button
|
||||
android:id="@+id/alert"
|
||||
android:minWidth="@dimen/notification_importance_button_width"
|
||||
android:padding="@dimen/notification_importance_button_padding"
|
||||
android:clickable="true"
|
||||
android:focusable="true">
|
||||
<ImageView
|
||||
android:id="@+id/alert_icon"
|
||||
android:src="@drawable/ic_notification_interruptive"
|
||||
android:background="@android:color/transparent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="@dimen/notification_importance_toggle_size"
|
||||
android:paddingStart="@dimen/notification_importance_button_horiz_padding"
|
||||
android:paddingEnd="@dimen/notification_importance_button_horiz_padding"
|
||||
android:drawablePadding="@dimen/notification_importance_drawable_padding"
|
||||
android:foreground="@drawable/button_ripple_radius"
|
||||
android:drawableLeft="@drawable/ic_notification_interruptive"
|
||||
android:text="@string/notification_alert_title" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/silence"
|
||||
android:minWidth="@dimen/notification_importance_button_width"
|
||||
android:layout_width="wrap_content"
|
||||
android:clickable="false"
|
||||
android:focusable="false"/>
|
||||
<TextView
|
||||
android:id="@+id/alert_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="@dimen/notification_importance_toggle_size"
|
||||
android:paddingStart="@dimen/notification_importance_button_horiz_padding"
|
||||
android:paddingEnd="@dimen/notification_importance_button_horiz_padding"
|
||||
android:drawablePadding="@dimen/notification_importance_drawable_padding"
|
||||
android:foreground="@drawable/button_ripple_radius"
|
||||
android:layout_marginStart="@dimen/notification_importance_button_separation"
|
||||
android:drawableLeft="@drawable/ic_notification_gentle"
|
||||
android:text="@string/notification_silence_title" />
|
||||
</LinearLayout>
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:layout_toEndOf="@id/alert_icon"
|
||||
android:layout_marginStart="@dimen/notification_importance_drawable_padding"
|
||||
android:textAppearance="@style/TextAppearance.NotificationImportanceButton.Unselected"
|
||||
android:text="@string/notification_alert_title"/>
|
||||
<TextView
|
||||
android:id="@+id/alert_summary"
|
||||
android:paddingTop="@dimen/notification_importance_button_padding"
|
||||
android:text="@string/notification_channel_summary_default"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:layout_below="@id/alert_icon"
|
||||
android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
<RelativeLayout
|
||||
android:id="@+id/silence"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notification_alert_title"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="@dimen/notification_importance_text_marginTop"
|
||||
android:paddingStart="@dimen/notification_importance_description_padding"
|
||||
android:paddingEnd="@dimen/notification_importance_description_padding"
|
||||
android:textAppearance="@style/TextAppearance.NotificationImportanceDetail" />
|
||||
android:padding="@dimen/notification_importance_button_padding"
|
||||
android:layout_marginTop="@dimen/notification_importance_button_separation"
|
||||
android:clickable="true"
|
||||
android:focusable="true">
|
||||
<ImageView
|
||||
android:id="@+id/silence_icon"
|
||||
android:src="@drawable/ic_notification_gentle"
|
||||
android:background="@android:color/transparent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:focusable="false"/>
|
||||
<TextView
|
||||
android:id="@+id/silence_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:layout_toEndOf="@id/silence_icon"
|
||||
android:layout_marginStart="@dimen/notification_importance_drawable_padding"
|
||||
android:textAppearance="@style/TextAppearance.NotificationImportanceButton.Unselected"
|
||||
android:text="@string/notification_silence_title"/>
|
||||
<TextView
|
||||
android:id="@+id/silence_summary"
|
||||
android:paddingTop="@dimen/notification_importance_button_padding"
|
||||
android:text="@string/notification_channel_summary_default"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:layout_below="@id/silence_icon"
|
||||
android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottom_buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/notification_guts_button_spacing" >
|
||||
android:layout_marginTop="@dimen/notification_guts_button_spacing" >
|
||||
<TextView
|
||||
android:id="@+id/turn_off_notifications"
|
||||
android:text="@string/inline_turn_off_notifications"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:minWidth="@dimen/notification_importance_toggle_size"
|
||||
android:minHeight="@dimen/notification_importance_toggle_size"
|
||||
android:maxWidth="200dp"
|
||||
@@ -286,11 +326,11 @@ asked for it -->
|
||||
android:text="@string/inline_ok_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:gravity="center_vertical|end"
|
||||
android:maxWidth="125dp"
|
||||
android:minWidth="@dimen/notification_importance_toggle_size"
|
||||
android:minHeight="@dimen/notification_importance_toggle_size"
|
||||
android:layout_alignParentEnd="true"
|
||||
style="@style/TextAppearance.NotificationInfo.Button"/>
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
<dimen name="notification_guts_option_horizontal_padding">15dp</dimen>
|
||||
|
||||
<!-- The vertical space between items in the alert selections in the inline settings -->
|
||||
<dimen name="notification_guts_option_vertical_padding">24dp</dimen>
|
||||
<dimen name="notification_guts_option_vertical_padding">20dp</dimen>
|
||||
|
||||
<!-- The vertical space between the alert selections in the inline settings -->
|
||||
<dimen name="notification_guts_option_vertical_margin">6dp</dimen>
|
||||
@@ -226,10 +226,12 @@
|
||||
<dimen name="notification_importance_button_horiz_padding">28dp</dimen>
|
||||
<dimen name="notification_importance_drawable_padding">8dp</dimen>
|
||||
<dimen name="notification_importance_description_padding">20dp</dimen>
|
||||
<dimen name="notification_importance_description_text">12sp</dimen>
|
||||
<dimen name="notification_importance_header_text">12sp</dimen>
|
||||
<dimen name="notification_importance_description_text">14sp</dimen>
|
||||
<dimen name="notification_importance_channel_text">16sp</dimen>
|
||||
<dimen name="notification_importance_channel_group_text">14sp</dimen>
|
||||
<dimen name="notification_importance_button_text">16sp</dimen>
|
||||
<dimen name="notification_importance_button_padding">14dp</dimen>
|
||||
<dimen name="rect_button_radius">8dp</dimen>
|
||||
|
||||
<!-- The minimum height for the snackbar shown after the snooze option has been chosen. -->
|
||||
|
||||
@@ -1659,19 +1659,19 @@
|
||||
<string name="notification_alert_title">Prioritized</string>
|
||||
|
||||
<!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
|
||||
<string name="notification_channel_summary_low">Always silent. Displays in pull-down shade.</string>
|
||||
<string name="notification_channel_summary_low">Helps you focus with notifications only in the pull-down shade. Always silent.</string>
|
||||
|
||||
<!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
|
||||
<string name="notification_channel_summary_low_status">Always silent. Displays in pull-down shade & status bar.</string>
|
||||
<string name="notification_channel_summary_low_status">Displays below priority notifications. Always silent.</string>
|
||||
|
||||
<!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
|
||||
<string name="notification_channel_summary_low_lock">Always silent. Displays in pull-down shade & on lock screen.</string>
|
||||
<string name="notification_channel_summary_low_lock">Displays below priority notifications. Always silent.</string>
|
||||
|
||||
<!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
|
||||
<string name="notification_channel_summary_low_status_lock">Always silent. Displays in pull-down shade, status bar & on lock screen.</string>
|
||||
<string name="notification_channel_summary_low_status_lock">Displays below priority notifications. Always silent.</string>
|
||||
|
||||
<!-- [CHAR LIMIT=150] Notification Importance title: normal importance level summary -->
|
||||
<string name="notification_channel_summary_default">Makes sound and displays in pull-down shade, status bar & on lock screen.</string>
|
||||
<string name="notification_channel_summary_default">Gets your attention with sound & a status bar icon. Shows on lock screen.</string>
|
||||
|
||||
<!-- Notification: Control panel: Label that displays when the app's notifications cannot be blocked. -->
|
||||
<string name="notification_unblockable_desc">These notifications can\'t be modified.</string>
|
||||
|
||||
@@ -473,7 +473,7 @@
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.NotificationImportanceHeader">
|
||||
<item name="android:textSize">@dimen/notification_importance_description_text</item>
|
||||
<item name="android:textSize">@dimen/notification_importance_header_text</item>
|
||||
<item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
|
||||
<item name="android:textColor">@color/notification_guts_header_text_color</item>
|
||||
</style>
|
||||
|
||||
@@ -40,8 +40,11 @@ import android.graphics.drawable.Drawable;
|
||||
import android.metrics.LogMaker;
|
||||
import android.os.Handler;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.text.TextUtils;
|
||||
import android.transition.AutoTransition;
|
||||
import android.transition.TransitionManager;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
@@ -88,6 +91,8 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
// standard controls
|
||||
private static final int ACTION_ALERT = 5;
|
||||
|
||||
private static final int BUTTON_ANIM_TIME_MS = 200;
|
||||
|
||||
private INotificationManager mINotificationManager;
|
||||
private PackageManager mPm;
|
||||
private MetricsLogger mMetricsLogger;
|
||||
@@ -102,6 +107,8 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
private boolean mWasShownHighPriority;
|
||||
private boolean mShowOnLockscreen;
|
||||
private boolean mShowInStatusBar;
|
||||
private boolean mPressedApply;
|
||||
|
||||
/**
|
||||
* The last importance level chosen by the user. Null if the user has not chosen an importance
|
||||
* level; non-null once the user takes an action which indicates an explicit preference.
|
||||
@@ -132,7 +139,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
private OnClickListener mOnAlert = v -> {
|
||||
mExitReason = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING;
|
||||
mChosenImportance = IMPORTANCE_DEFAULT;
|
||||
setImportanceSummary(ACTION_ALERT);
|
||||
setImportanceSummary(ACTION_ALERT, true);
|
||||
updateButtons(ACTION_ALERT);
|
||||
};
|
||||
|
||||
@@ -140,12 +147,13 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
private OnClickListener mOnSilent = v -> {
|
||||
mExitReason = NotificationCounters.BLOCKING_HELPER_DELIVER_SILENTLY;
|
||||
mChosenImportance = IMPORTANCE_LOW;
|
||||
setImportanceSummary(ACTION_TOGGLE_SILENT);
|
||||
setImportanceSummary(ACTION_TOGGLE_SILENT, true);
|
||||
updateButtons(ACTION_TOGGLE_SILENT);
|
||||
};
|
||||
|
||||
// used by standard ui
|
||||
private OnClickListener mOnDismissSettings = v -> {
|
||||
mPressedApply = true;
|
||||
closeControls(v);
|
||||
};
|
||||
|
||||
@@ -294,7 +302,8 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
|
||||
mShowInStatusBar = !mINotificationManager.shouldHideSilentStatusIcons(
|
||||
mContext.getPackageName());
|
||||
// TODO: b/128445911 use show on lockscreen setting
|
||||
mShowOnLockscreen = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||
Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, 0) == 1;
|
||||
|
||||
bindHeader();
|
||||
bindChannelDetails();
|
||||
@@ -334,6 +343,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
findViewById(R.id.non_configurable_multichannel_text).setVisibility(GONE);
|
||||
findViewById(R.id.interruptiveness_settings).setVisibility(GONE);
|
||||
((TextView) findViewById(R.id.done)).setText(R.string.inline_done_button);
|
||||
findViewById(R.id.turn_off_notifications).setVisibility(GONE);
|
||||
} else if (mNumUniqueChannelsInRow > 1) {
|
||||
findViewById(R.id.non_configurable_text).setVisibility(GONE);
|
||||
findViewById(R.id.interruptiveness_settings).setVisibility(GONE);
|
||||
@@ -360,10 +370,10 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
|
||||
if (mWasShownHighPriority) {
|
||||
updateButtons(ACTION_ALERT);
|
||||
setImportanceSummary(ACTION_ALERT);
|
||||
setImportanceSummary(ACTION_ALERT, false);
|
||||
} else {
|
||||
updateButtons(ACTION_TOGGLE_SILENT);
|
||||
setImportanceSummary(ACTION_TOGGLE_SILENT);
|
||||
setImportanceSummary(ACTION_TOGGLE_SILENT, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -484,14 +494,6 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasImportanceChanged() {
|
||||
return mSingleNotificationChannel != null
|
||||
&& mChosenImportance != null
|
||||
&& (mStartingChannelImportance == IMPORTANCE_UNSPECIFIED
|
||||
|| (mWasShownHighPriority && mChosenImportance < IMPORTANCE_DEFAULT)
|
||||
|| (!mWasShownHighPriority && mChosenImportance >= IMPORTANCE_DEFAULT));
|
||||
}
|
||||
|
||||
private void saveImportance() {
|
||||
if (!mIsNonblockable
|
||||
|| mExitReason != NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS) {
|
||||
@@ -526,8 +528,8 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
}
|
||||
|
||||
private void updateButtons(int blockState) {
|
||||
TextView silence = findViewById(R.id.silence);
|
||||
TextView alert = findViewById(R.id.alert);
|
||||
View silence = findViewById(R.id.silence);
|
||||
View alert = findViewById(R.id.alert);
|
||||
TextView done = findViewById(R.id.done);
|
||||
switch (blockState) {
|
||||
case ACTION_TOGGLE_SILENT:
|
||||
@@ -549,22 +551,28 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
}
|
||||
}
|
||||
|
||||
private void updateButtons(TextView selected, TextView unselected) {
|
||||
private void updateButtons(View selected, View unselected) {
|
||||
selected.setBackground(mSelectedBackground);
|
||||
selected.setSelected(true);
|
||||
selected.setTextAppearance(
|
||||
R.style.TextAppearance_NotificationImportanceButton_Selected);
|
||||
unselected.setBackground(mUnselectedBackground);
|
||||
unselected.setSelected(false);
|
||||
unselected.setTextAppearance(
|
||||
R.style.TextAppearance_NotificationImportanceButton_Unselected);
|
||||
}
|
||||
|
||||
void setImportanceSummary(int blockState) {
|
||||
TextView view = findViewById(R.id.description);
|
||||
void setImportanceSummary(int blockState, boolean userTriggered) {
|
||||
if (userTriggered) {
|
||||
AutoTransition transition = new AutoTransition();
|
||||
transition.setDuration(BUTTON_ANIM_TIME_MS);
|
||||
TransitionManager.beginDelayedTransition(this, transition);
|
||||
}
|
||||
if (blockState == ACTION_ALERT) {
|
||||
TextView view = findViewById(R.id.alert_summary);
|
||||
view.setVisibility(VISIBLE);
|
||||
findViewById(R.id.silence_summary).setVisibility(GONE);
|
||||
view.setText(R.string.notification_channel_summary_default);
|
||||
} else {
|
||||
TextView view = findViewById(R.id.silence_summary);
|
||||
view.setVisibility(VISIBLE);
|
||||
findViewById(R.id.alert_summary).setVisibility(GONE);
|
||||
if (mShowInStatusBar) {
|
||||
if (mShowOnLockscreen) {
|
||||
view.setText(R.string.notification_channel_summary_low_status_lock);
|
||||
@@ -742,12 +750,12 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
|
||||
|
||||
@Override
|
||||
public boolean willBeRemoved() {
|
||||
return hasImportanceChanged();
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldBeSaved() {
|
||||
return hasImportanceChanged();
|
||||
return mPressedApply;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -891,7 +891,31 @@ public class NotificationInfoTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWillBeRemovedReturnsFalseBeforeBind() throws Exception {
|
||||
public void testCloseControls_withoutHittingApply() throws Exception {
|
||||
mNotificationChannel.setImportance(IMPORTANCE_LOW);
|
||||
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
|
||||
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn,
|
||||
(Runnable saveImportance, StatusBarNotification sbn) -> {
|
||||
saveImportance.run();
|
||||
}, null, null, true, false, IMPORTANCE_LOW, false
|
||||
);
|
||||
|
||||
mNotificationInfo.findViewById(R.id.alert).performClick();
|
||||
|
||||
assertFalse(mNotificationInfo.shouldBeSaved());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWillBeRemovedReturnsFalse() throws Exception {
|
||||
assertFalse(mNotificationInfo.willBeRemoved());
|
||||
|
||||
mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
|
||||
TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn,
|
||||
(Runnable saveImportance, StatusBarNotification sbn) -> {
|
||||
saveImportance.run();
|
||||
}, null, null, true, false, IMPORTANCE_LOW, false
|
||||
);
|
||||
|
||||
assertFalse(mNotificationInfo.willBeRemoved());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user