Merge "Changed the appearance of phone call notifications" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e0a25acf08
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4769,8 +4755,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);
|
||||
}
|
||||
@@ -5077,7 +5063,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()
|
||||
@@ -5090,35 +5076,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)));
|
||||
@@ -5168,31 +5161,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;
|
||||
}
|
||||
@@ -5523,6 +5520,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();
|
||||
}
|
||||
|
||||
@@ -2999,6 +2999,21 @@ public class RemoteViews implements Parcelable, Filter {
|
||||
addAction(new ReflectionAction(viewId, methodName, ReflectionAction.INT, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
44
core/res/res/anim/flat_button_state_list_anim_material.xml
Normal file
44
core/res/res/anim/flat_button_state_list_anim_material.xml
Normal file
@@ -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>
|
||||
37
core/res/res/drawable/btn_notification_emphasized.xml
Normal file
37
core/res/res/drawable/btn_notification_emphasized.xml
Normal file
@@ -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>
|
||||
@@ -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"
|
||||
/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -2814,7 +2814,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" />
|
||||
@@ -2864,6 +2863,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" />
|
||||
@@ -2889,8 +2889,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 -->
|
||||
@@ -3225,6 +3223,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" />
|
||||
@@ -3271,7 +3272,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" />
|
||||
|
||||
@@ -239,7 +239,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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user