summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Selim Cinek <cinek@google.com> 2018-04-10 17:46:46 -0700
committer Selim Cinek <cinek@google.com> 2018-04-12 11:09:23 -0700
commit396cacaaa8c41e19a835e1a64f76314cd2db49f5 (patch)
tree988b59cd1aedd1f438ca2ba813bd075d806b7e18
parentb172d5b4375ecb1895d3d7bed3d94e4fac3551a2 (diff)
Changed the appearance of phone call notifications
The old design didn't work at all because of various paddings. The new design adds more paddings and a new button style Fixes: 72814598 Test: runtest systemui Change-Id: I4b4ac0790afe45db97f912740446c6da09620be3
-rw-r--r--core/java/android/app/Notification.java89
-rw-r--r--core/java/android/widget/RemoteViews.java15
-rw-r--r--core/java/com/android/internal/util/NotificationColorUtil.java7
-rw-r--r--core/java/com/android/internal/widget/EmphasizedNotificationButton.java83
-rw-r--r--core/java/com/android/internal/widget/NotificationActionListLayout.java70
-rw-r--r--core/res/res/anim/flat_button_state_list_anim_material.xml44
-rw-r--r--core/res/res/drawable/btn_notification_emphasized.xml37
-rw-r--r--core/res/res/layout/notification_material_action_emphasized.xml25
-rw-r--r--core/res/res/values/colors.xml1
-rw-r--r--core/res/res/values/dimens.xml6
-rw-r--r--core/res/res/values/styles.xml6
-rw-r--r--core/res/res/values/symbols.xml8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java8
15 files changed, 332 insertions, 83 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 86fedb135f47..1017191c1c21 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -3115,7 +3115,6 @@ public class Notification implements Parcelable
private int mTextColorsAreForBackground = COLOR_INVALID;
private int mPrimaryTextColor = COLOR_INVALID;
private int mSecondaryTextColor = COLOR_INVALID;
- private int mActionBarColor = COLOR_INVALID;
private int mBackgroundColor = COLOR_INVALID;
private int mForegroundColor = COLOR_INVALID;
/**
@@ -4359,16 +4358,6 @@ public class Notification implements Parcelable
return mSecondaryTextColor;
}
- private int getActionBarColor() {
- ensureColors();
- return mActionBarColor;
- }
-
- private int getActionBarColorDeEmphasized() {
- int backgroundColor = getBackgroundColor();
- return NotificationColorUtil.getShiftedColor(backgroundColor, 12);
- }
-
private void setTextViewColorSecondary(RemoteViews contentView, int id) {
ensureColors();
contentView.setTextColor(id, mSecondaryTextColor);
@@ -4378,7 +4367,6 @@ public class Notification implements Parcelable
int backgroundColor = getBackgroundColor();
if (mPrimaryTextColor == COLOR_INVALID
|| mSecondaryTextColor == COLOR_INVALID
- || mActionBarColor == COLOR_INVALID
|| mTextColorsAreForBackground != backgroundColor) {
mTextColorsAreForBackground = backgroundColor;
if (!hasForegroundColor() || !isColorized()) {
@@ -4451,8 +4439,6 @@ public class Notification implements Parcelable
}
}
}
- mActionBarColor = NotificationColorUtil.resolveActionBarColor(mContext,
- backgroundColor);
}
}
@@ -4761,8 +4747,8 @@ public class Notification implements Parcelable
validRemoteInput |= actionHasValidInput;
final RemoteViews button = generateActionButton(action, emphazisedMode,
- i % 2 != 0, p.ambient);
- if (actionHasValidInput) {
+ p.ambient);
+ if (actionHasValidInput && !emphazisedMode) {
// Clear the drawable
button.setInt(R.id.action0, "setBackgroundResource", 0);
}
@@ -5069,7 +5055,7 @@ public class Notification implements Parcelable
}
private RemoteViews generateActionButton(Action action, boolean emphazisedMode,
- boolean oddAction, boolean ambient) {
+ boolean ambient) {
final boolean tombstone = (action.actionIntent == null);
RemoteViews button = new BuilderRemoteViews(mContext.getApplicationInfo(),
emphazisedMode ? getEmphasizedActionLayoutResource()
@@ -5082,35 +5068,42 @@ public class Notification implements Parcelable
if (action.mRemoteInputs != null) {
button.setRemoteInputs(R.id.action0, action.mRemoteInputs);
}
- // TODO: handle emphasized mode / actions right
if (emphazisedMode) {
// change the background bgColor
- int bgColor;
- if (isColorized()) {
- bgColor = oddAction ? getActionBarColor() : getActionBarColorDeEmphasized();
- } else {
- bgColor = mContext.getColor(oddAction ? R.color.notification_action_list
- : R.color.notification_action_list_dark);
- }
- button.setDrawableTint(R.id.button_holder, true,
- bgColor, PorterDuff.Mode.SRC_ATOP);
CharSequence title = action.title;
ColorStateList[] outResultColor = null;
+ int background = resolveBackgroundColor();
if (isLegacy()) {
title = NotificationColorUtil.clearColorSpans(title);
} else {
outResultColor = new ColorStateList[1];
- title = ensureColorSpanContrast(title, bgColor, outResultColor);
+ title = ensureColorSpanContrast(title, background, outResultColor);
}
button.setTextViewText(R.id.action0, processTextSpans(title));
setTextViewColorPrimary(button, R.id.action0);
- if (outResultColor != null && outResultColor[0] != null) {
- // We need to set the text color as well since changing a text to uppercase
- // clears its spans.
- button.setTextColor(R.id.action0, outResultColor[0]);
+ int rippleColor;
+ boolean hasColorOverride = outResultColor != null && outResultColor[0] != null;
+ if (hasColorOverride) {
+ // There's a span spanning the full text, let's take it and use it as the
+ // background color
+ background = outResultColor[0].getDefaultColor();
+ int textColor = NotificationColorUtil.resolvePrimaryColor(mContext,
+ background);
+ button.setTextColor(R.id.action0, textColor);
+ rippleColor = textColor;
} else if (mN.color != COLOR_DEFAULT && !isColorized() && mTintActionButtons) {
- button.setTextColor(R.id.action0,resolveContrastColor());
+ rippleColor = resolveContrastColor();
+ button.setTextColor(R.id.action0, rippleColor);
+ } else {
+ rippleColor = getPrimaryTextColor();
}
+ // We only want about 20% alpha for the ripple
+ rippleColor = (rippleColor & 0x00ffffff) | 0x33000000;
+ button.setColorStateList(R.id.action0, "setRippleColor",
+ ColorStateList.valueOf(rippleColor));
+ button.setColorStateList(R.id.action0, "setButtonBackground",
+ ColorStateList.valueOf(background));
+ button.setBoolean(R.id.action0, "setHasStroke", !hasColorOverride);
} else {
button.setTextViewText(R.id.action0, processTextSpans(
processLegacyText(action.title)));
@@ -5160,31 +5153,35 @@ public class Notification implements Parcelable
}
textColor = new ColorStateList(textColor.getStates().clone(),
newColors);
+ if (fullLength) {
+ outResultColor[0] = textColor;
+ // Let's drop the color from the span
+ textColor = null;
+ }
resultSpan = new TextAppearanceSpan(
originalSpan.getFamily(),
originalSpan.getTextStyle(),
originalSpan.getTextSize(),
textColor,
originalSpan.getLinkTextColor());
- if (fullLength) {
- outResultColor[0] = new ColorStateList(
- textColor.getStates().clone(), newColors);
- }
}
} else if (resultSpan instanceof ForegroundColorSpan) {
ForegroundColorSpan originalSpan = (ForegroundColorSpan) resultSpan;
int foregroundColor = originalSpan.getForegroundColor();
foregroundColor = NotificationColorUtil.ensureLargeTextContrast(
foregroundColor, background, mInNightMode);
- resultSpan = new ForegroundColorSpan(foregroundColor);
if (fullLength) {
outResultColor[0] = ColorStateList.valueOf(foregroundColor);
+ resultSpan = null;
+ } else {
+ resultSpan = new ForegroundColorSpan(foregroundColor);
}
} else {
resultSpan = span;
}
-
- builder.setSpan(resultSpan, spanStart, spanEnd, ss.getSpanFlags(span));
+ if (resultSpan != null) {
+ builder.setSpan(resultSpan, spanStart, spanEnd, ss.getSpanFlags(span));
+ }
}
return builder;
}
@@ -5515,6 +5512,18 @@ public class Notification implements Parcelable
}
}
+ /**
+ * Same as getBackgroundColor but also resolved the default color to the background.
+ */
+ private int resolveBackgroundColor() {
+ int backgroundColor = getBackgroundColor();
+ if (backgroundColor == COLOR_DEFAULT) {
+ backgroundColor = mContext.getColor(
+ com.android.internal.R.color.notification_material_background_color);
+ }
+ return backgroundColor;
+ }
+
private boolean isColorized() {
return mN.isColorized();
}
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 08513aa8682e..a34bd093e655 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -3000,6 +3000,21 @@ public class RemoteViews implements Parcelable, Filter {
}
/**
+ * Call a method taking one ColorStateList on a view in the layout for this RemoteViews.
+ *
+ * @param viewId The id of the view on which to call the method.
+ * @param methodName The name of the method to call.
+ * @param value The value to pass to the method.
+ *
+ * @hide
+ */
+ public void setColorStateList(int viewId, String methodName, ColorStateList value) {
+ addAction(new ReflectionAction(viewId, methodName, ReflectionAction.COLOR_STATE_LIST,
+ value));
+ }
+
+
+ /**
* Call a method taking one long on a view in the layout for this RemoteViews.
*
* @param viewId The id of the view on which to call the method.
diff --git a/core/java/com/android/internal/util/NotificationColorUtil.java b/core/java/com/android/internal/util/NotificationColorUtil.java
index 577fa1758f5e..0f1307873f28 100644
--- a/core/java/com/android/internal/util/NotificationColorUtil.java
+++ b/core/java/com/android/internal/util/NotificationColorUtil.java
@@ -558,13 +558,6 @@ public class NotificationColorUtil {
}
}
- public static int resolveActionBarColor(Context context, int backgroundColor) {
- if (backgroundColor == Notification.COLOR_DEFAULT) {
- return context.getColor(com.android.internal.R.color.notification_action_list);
- }
- return getShiftedColor(backgroundColor, 7);
- }
-
/**
* Get a color that stays in the same tint, but darkens or lightens it by a certain
* amount.
diff --git a/core/java/com/android/internal/widget/EmphasizedNotificationButton.java b/core/java/com/android/internal/widget/EmphasizedNotificationButton.java
new file mode 100644
index 000000000000..5213746e5a12
--- /dev/null
+++ b/core/java/com/android/internal/widget/EmphasizedNotificationButton.java
@@ -0,0 +1,83 @@
+/*
+ * 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
+ */
+
+package com.android.internal.widget;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.drawable.DrawableWrapper;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.InsetDrawable;
+import android.graphics.drawable.RippleDrawable;
+import android.util.AttributeSet;
+import android.view.RemotableViewMethod;
+import android.widget.Button;
+import android.widget.RemoteViews;
+
+/**
+ * A button implementation for the emphasized notification style.
+ *
+ * @hide
+ */
+@RemoteViews.RemoteView
+public class EmphasizedNotificationButton extends Button {
+ private final RippleDrawable mRipple;
+ private final int mStrokeWidth;
+ private final int mStrokeColor;
+
+ public EmphasizedNotificationButton(Context context) {
+ this(context, null);
+ }
+
+ public EmphasizedNotificationButton(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public EmphasizedNotificationButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public EmphasizedNotificationButton(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ DrawableWrapper background = (DrawableWrapper) getBackground().mutate();
+ mRipple = (RippleDrawable) background.getDrawable();
+ mStrokeWidth = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.emphasized_button_stroke_width);
+ mStrokeColor = getContext().getColor(com.android.internal.R.color.material_grey_300);
+ mRipple.mutate();
+ }
+
+ @RemotableViewMethod
+ public void setRippleColor(ColorStateList color) {
+ mRipple.setColor(color);
+ invalidate();
+ }
+
+ @RemotableViewMethod
+ public void setButtonBackground(ColorStateList color) {
+ GradientDrawable inner = (GradientDrawable) mRipple.getDrawable(0);
+ inner.setColor(color);
+ invalidate();
+ }
+
+ @RemotableViewMethod
+ public void setHasStroke(boolean hasStroke) {
+ GradientDrawable inner = (GradientDrawable) mRipple.getDrawable(0);
+ inner.setStroke(hasStroke ? mStrokeWidth : 0, mStrokeColor);
+ invalidate();
+ }
+}
diff --git a/core/java/com/android/internal/widget/NotificationActionListLayout.java b/core/java/com/android/internal/widget/NotificationActionListLayout.java
index e013553ec046..0482f6cf596a 100644
--- a/core/java/com/android/internal/widget/NotificationActionListLayout.java
+++ b/core/java/com/android/internal/widget/NotificationActionListLayout.java
@@ -16,17 +16,15 @@
package com.android.internal.widget;
-import android.annotation.Nullable;
import android.content.Context;
-import android.content.res.Resources;
import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.Gravity;
import android.view.RemotableViewMethod;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.TextView;
@@ -45,9 +43,11 @@ public class NotificationActionListLayout extends LinearLayout {
private int mTotalWidth = 0;
private ArrayList<Pair<Integer, TextView>> mMeasureOrderTextViews = new ArrayList<>();
private ArrayList<View> mMeasureOrderOther = new ArrayList<>();
- private boolean mMeasureLinearly;
- private int mDefaultPaddingEnd;
- private Drawable mDefaultBackground;
+ private boolean mEmphasizedMode;
+ private int mDefaultPaddingBottom;
+ private int mDefaultPaddingTop;
+ private int mEmphasizedHeight;
+ private int mRegularHeight;
public NotificationActionListLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@@ -68,7 +68,7 @@ public class NotificationActionListLayout extends LinearLayout {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- if (mMeasureLinearly) {
+ if (mEmphasizedMode) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
return;
}
@@ -219,7 +219,7 @@ public class NotificationActionListLayout extends LinearLayout {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- if (mMeasureLinearly) {
+ if (mEmphasizedMode) {
super.onLayout(changed, left, top, right, bottom);
return;
}
@@ -280,8 +280,21 @@ public class NotificationActionListLayout extends LinearLayout {
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mDefaultPaddingEnd = getPaddingEnd();
- mDefaultBackground = getBackground();
+ mDefaultPaddingBottom = getPaddingBottom();
+ mDefaultPaddingTop = getPaddingTop();
+ updateHeights();
+ }
+
+ private void updateHeights() {
+ int paddingTop = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_content_margin);
+ // same padding on bottom and at end
+ int paddingBottom = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_content_margin_end);
+ mEmphasizedHeight = paddingBottom + paddingTop + getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_action_emphasized_height);
+ mRegularHeight = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_action_list_height);
}
/**
@@ -291,11 +304,38 @@ public class NotificationActionListLayout extends LinearLayout {
*/
@RemotableViewMethod
public void setEmphasizedMode(boolean emphasizedMode) {
- mMeasureLinearly = emphasizedMode;
- setPaddingRelative(getPaddingStart(), getPaddingTop(),
- emphasizedMode ? 0 : mDefaultPaddingEnd, getPaddingBottom());
- setBackground(emphasizedMode ? null : mDefaultBackground);
- requestLayout();
+ mEmphasizedMode = emphasizedMode;
+ int height;
+ if (emphasizedMode) {
+ int paddingTop = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_content_margin);
+ // same padding on bottom and at end
+ int paddingBottom = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_content_margin_end);
+ height = mEmphasizedHeight;
+ int buttonPaddingInternal = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.button_inset_vertical_material);
+ setPaddingRelative(getPaddingStart(),
+ paddingTop - buttonPaddingInternal,
+ getPaddingEnd(),
+ paddingBottom - buttonPaddingInternal);
+ } else {
+ setPaddingRelative(getPaddingStart(),
+ mDefaultPaddingTop,
+ getPaddingEnd(),
+ mDefaultPaddingBottom);
+ height = mRegularHeight;
+ }
+ ViewGroup.LayoutParams layoutParams = getLayoutParams();
+ layoutParams.height = height;
+ setLayoutParams(layoutParams);
+ }
+
+ public int getExtraMeasureHeight() {
+ if (mEmphasizedMode) {
+ return mEmphasizedHeight - mRegularHeight;
+ }
+ return 0;
}
public static final Comparator<Pair<Integer, TextView>> MEASURE_ORDER_COMPARATOR
diff --git a/core/res/res/anim/flat_button_state_list_anim_material.xml b/core/res/res/anim/flat_button_state_list_anim_material.xml
new file mode 100644
index 000000000000..266f14a1d420
--- /dev/null
+++ b/core/res/res/anim/flat_button_state_list_anim_material.xml
@@ -0,0 +1,44 @@
+<?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
+ -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true" android:state_enabled="true">
+ <set>
+ <objectAnimator android:propertyName="translationZ"
+ android:duration="@integer/button_pressed_animation_duration"
+ android:valueTo="1dp"
+ android:valueType="floatType"/>
+ </set>
+ </item>
+ <!-- base state -->
+ <item android:state_enabled="true">
+ <set>
+ <objectAnimator android:propertyName="translationZ"
+ android:duration="@integer/button_pressed_animation_duration"
+ android:valueTo="0"
+ android:startDelay="@integer/button_pressed_animation_delay"
+ android:valueType="floatType"/>
+ </set>
+ </item>
+ <item>
+ <set>
+ <objectAnimator android:propertyName="translationZ"
+ android:duration="0"
+ android:valueTo="0"
+ android:valueType="floatType"/>
+ </set>
+ </item>
+</selector> \ No newline at end of file
diff --git a/core/res/res/drawable/btn_notification_emphasized.xml b/core/res/res/drawable/btn_notification_emphasized.xml
new file mode 100644
index 000000000000..1a574fe39e6e
--- /dev/null
+++ b/core/res/res/drawable/btn_notification_emphasized.xml
@@ -0,0 +1,37 @@
+<?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
+ -->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="@dimen/button_inset_horizontal_material"
+ android:insetTop="@dimen/button_inset_vertical_material"
+ android:insetRight="@dimen/button_inset_horizontal_material"
+ android:insetBottom="@dimen/button_inset_vertical_material">
+ <ripple android:color="?attr/colorControlHighlight">
+ <item>
+ <shape android:shape="rectangle">
+ <corners android:radius="?attr/buttonCornerRadius" />
+ <padding android:left="@dimen/button_padding_horizontal_material"
+ android:top="@dimen/button_padding_vertical_material"
+ android:right="@dimen/button_padding_horizontal_material"
+ android:bottom="@dimen/button_padding_vertical_material" />
+ <solid android:color="@color/white" />
+ <stroke android:width="@dimen/emphasized_button_stroke_width"
+ android:color="@color/material_grey_300"/>
+ </shape>
+ </item>
+ </ripple>
+</inset>
diff --git a/core/res/res/layout/notification_material_action_emphasized.xml b/core/res/res/layout/notification_material_action_emphasized.xml
index 1e364cce3f4f..a6b7b380eaa4 100644
--- a/core/res/res/layout/notification_material_action_emphasized.xml
+++ b/core/res/res/layout/notification_material_action_emphasized.xml
@@ -14,21 +14,16 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/button_holder"
+<com.android.internal.widget.EmphasizedNotificationButton
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/NotificationEmphasizedAction"
+ android:id="@+id/action0"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:layout_marginStart="12dp"
android:layout_weight="1"
- android:background="#ff000000">
- <Button
- style="@android:style/Widget.Material.Light.Button.Borderless.Small"
- android:id="@+id/action0"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:textColor="@color/notification_default_color"
- android:singleLine="true"
- android:ellipsize="end"
- android:background="@drawable/notification_material_action_background"
- />
-</FrameLayout>
+ android:gravity="center"
+ android:textColor="@color/notification_default_color"
+ android:singleLine="true"
+ android:ellipsize="end"
+/>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index c63f31997bcb..9215f3f7611a 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -148,7 +148,6 @@
<color name="notification_progress_background_color">@color/secondary_text_material_light</color>
<color name="notification_action_list">#ffeeeeee</color>
- <color name="notification_action_list_dark">#ffe0e0e0</color>
<!-- Keyguard colors -->
<color name="keyguard_avatar_frame_color">#ffffffff</color>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 058185609a92..2aa40fdf9fd5 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -182,6 +182,12 @@
<!-- The height of the notification action list -->
<dimen name="notification_action_list_height">60dp</dimen>
+ <!-- The height of the notification action list -->
+ <dimen name="notification_action_emphasized_height">48dp</dimen>
+
+ <!-- Size of the stroke with for the emphasized notification button style -->
+ <dimen name="emphasized_button_stroke_width">1dp</dimen>
+
<!-- height of the content margin to accomodate for the header -->
<dimen name="notification_content_margin_top">46dp</dimen>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index e14aa149b1c7..984461b06624 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1510,4 +1510,10 @@ please see styles_device_defaults.xml.
<item name="gravity">top</item>
</style>
+ <!-- Colored bordered ink button -->
+ <style name="NotificationEmphasizedAction" parent="Widget.Material.Button">
+ <item name="background">@drawable/btn_notification_emphasized</item>
+ <item name="stateListAnimator">@anim/flat_button_state_list_anim_material</item>
+ </style>
+
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 5856648c78c8..5a0298730451 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2810,7 +2810,6 @@
<java-symbol type="color" name="notification_action_list" />
<java-symbol type="color" name="notification_material_background_color" />
- <java-symbol type="color" name="notification_action_list_dark" />
<!-- Resolver target actions -->
<java-symbol type="array" name="resolver_target_actions_pin" />
@@ -2860,6 +2859,7 @@
<java-symbol type="dimen" name="input_extract_action_button_height" />
<java-symbol type="dimen" name="notification_action_list_height" />
+ <java-symbol type="dimen" name="notification_action_emphasized_height" />
<!-- TV Remote Service package -->
<java-symbol type="string" name="config_tvRemoteServicePackage" />
@@ -2885,8 +2885,6 @@
<!-- Used internally for assistant to launch activity transitions -->
<java-symbol type="id" name="cross_task_transition" />
- <java-symbol type="id" name="button_holder" />
-
<java-symbol type="bool" name="config_useRoundIcon" />
<!-- For System navigation keys -->
@@ -3221,6 +3219,9 @@
<java-symbol type="drawable" name="stat_sys_vitals" />
<java-symbol type="color" name="text_color_primary" />
+ <java-symbol type="color" name="material_grey_300" />
+ <java-symbol type="dimen" name="emphasized_button_stroke_width" />
+ <java-symbol type="dimen" name="button_inset_vertical_material" />
<java-symbol type="array" name="config_batteryPackageTypeSystem" />
<java-symbol type="array" name="config_batteryPackageTypeService" />
@@ -3267,7 +3268,6 @@
<java-symbol type="id" name="remote_input_progress" />
<java-symbol type="id" name="remote_input_send" />
<java-symbol type="id" name="remote_input" />
- <java-symbol type="dimen" name="notification_content_margin" />
<java-symbol type="dimen" name="slice_shortcut_size" />
<java-symbol type="dimen" name="slice_icon_size" />
<java-symbol type="dimen" name="slice_padding" />
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index b81e9af4f692..b62fb4d7da83 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -232,7 +232,9 @@ public class NotificationContentView extends FrameLayout {
}
}
if (mHeadsUpChild != null) {
- int size = Math.min(maxSize, mHeadsUpHeight);
+ int maxHeight = mHeadsUpHeight;
+ maxHeight += mHeadsUpWrapper.getExtraMeasureHeight();
+ int size = Math.min(maxSize, maxHeight);
ViewGroup.LayoutParams layoutParams = mHeadsUpChild.getLayoutParams();
boolean useExactly = false;
if (layoutParams.height >= 0) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java
index 28beb21dba4b..5f7b638dc872 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java
@@ -25,6 +25,7 @@ import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
+import com.android.internal.widget.NotificationActionListLayout;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.TransformableView;
@@ -47,6 +48,7 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp
private int mContentHeight;
private int mMinHeightHint;
+ private NotificationActionListLayout mActions;
protected NotificationTemplateViewWrapper(Context ctx, View view,
ExpandableNotificationRow row) {
@@ -133,6 +135,7 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp
mProgressBar = null;
}
mActionsContainer = mView.findViewById(com.android.internal.R.id.actions_container);
+ mActions = mView.findViewById(com.android.internal.R.id.actions);
mReplyAction = mView.findViewById(com.android.internal.R.id.reply_icon_action);
}
@@ -284,4 +287,13 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp
- getHeaderTranslation());
}
}
+
+ @Override
+ public int getExtraMeasureHeight() {
+ int extra = 0;
+ if (mActions != null) {
+ extra = mActions.getExtraMeasureHeight();
+ }
+ return extra + super.getExtraMeasureHeight();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java
index 873f088f8431..b09df158072c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java
@@ -205,4 +205,12 @@ public abstract class NotificationViewWrapper implements TransformableView {
public void setHeaderVisibleAmount(float headerVisibleAmount) {
}
+
+ /**
+ * Get the extra height that needs to be added to this view, such that it can be measured
+ * normally.
+ */
+ public int getExtraMeasureHeight() {
+ return 0;
+ }
}