diff options
author | Jorim Jaggi <jjaggi@google.com> | 2014-08-29 03:47:31 +0200 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2014-09-01 17:26:51 +0200 |
commit | 17ee3ec0b85f1ca29920bc3bf26e613b82a0ecf8 (patch) | |
tree | c18fb4ebce10af627336e901257c24cb23f98b42 | |
parent | 6531ae2fcd24c9b9aa2821bb9fd0957666fa4b4f (diff) | |
download | frameworks_base-17ee3ec0b85f1ca29920bc3bf26e613b82a0ecf8.zip frameworks_base-17ee3ec0b85f1ca29920bc3bf26e613b82a0ecf8.tar.gz frameworks_base-17ee3ec0b85f1ca29920bc3bf26e613b82a0ecf8.tar.bz2 |
Media notification updates
- Make text white.
- Adjust padding & metrics to redlines.
- Use different narrow layout when 3 or less notifications with big
picture.
- Update action ripples.
- Fix progress bar size & fix color for indeterminate progress bar.
- Apply default background in SystemUI when no color is set, so we
don't end up with white text on white background.
Bug: 15437369
Bug: 16625746
Bug: 15147533
Change-Id: Ie8bd5ad0bbca972685adb50034fff88ea97456bd
15 files changed, 259 insertions, 278 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 966d2ce..abd706b 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -22,7 +22,6 @@ import android.annotation.SdkConstant.SdkConstantType; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.PorterDuff; @@ -2624,6 +2623,13 @@ public class Notification implements Parcelable } private RemoteViews applyStandardTemplate(int resId) { + return applyStandardTemplate(resId, true /* hasProgress */); + } + + /** + * @param hasProgress whether the progress bar should be shown and set + */ + private RemoteViews applyStandardTemplate(int resId, boolean hasProgress) { RemoteViews contentView = new BuilderRemoteViews(mContext.getPackageName(), mOriginatingUserId, resId); @@ -2683,7 +2689,7 @@ public class Notification implements Parcelable } } else { contentView.setViewVisibility(R.id.text2, View.GONE); - if (mProgressMax != 0 || mProgressIndeterminate) { + if (hasProgress && (mProgressMax != 0 || mProgressIndeterminate)) { contentView.setProgressBar( R.id.progress, mProgressMax, mProgress, mProgressIndeterminate); contentView.setViewVisibility(R.id.progress, View.VISIBLE); @@ -2698,7 +2704,7 @@ public class Notification implements Parcelable shrinkLine3Text(contentView); } - if (mWhen != 0 && mShowWhen) { + if (showsTimeOrChronometer()) { if (mUseChronometer) { contentView.setViewVisibility(R.id.chronometer, View.VISIBLE); contentView.setLong(R.id.chronometer, "setBase", @@ -2732,6 +2738,14 @@ public class Notification implements Parcelable } /** + * @return true if the built notification will show the time or the chronometer; false + * otherwise + */ + private boolean showsTimeOrChronometer() { + return mWhen != 0 && mShowWhen; + } + + /** * Logic to find out whether the notification is going to have three lines in the contracted * layout. This is used to adjust the top padding. * @@ -2740,13 +2754,14 @@ public class Notification implements Parcelable */ private boolean hasThreeLines() { boolean contentTextInLine2 = mSubText != null && mContentText != null; - + boolean hasProgress = mStyle == null || mStyle.hasProgress(); // If we have content text in line 2, badge goes into line 2, or line 3 otherwise boolean badgeInLine3 = getProfileBadgeDrawable() != null && !contentTextInLine2; boolean hasLine3 = mContentText != null || mContentInfo != null || mNumber > 0 || badgeInLine3; boolean hasLine2 = (mSubText != null && mContentText != null) || - (mSubText == null && (mProgressMax != 0 || mProgressIndeterminate)); + (hasProgress && mSubText == null + && (mProgressMax != 0 || mProgressIndeterminate)); return hasLine2 && hasLine3; } @@ -3488,6 +3503,15 @@ public class Notification implements Parcelable checkBuilder(); return mBuilder.build(); } + + /** + * @hide + * @return true if the style positions the progress bar on the second line; false if the + * style hides the progress bar + */ + protected boolean hasProgress() { + return true; + } } /** @@ -3885,7 +3909,7 @@ public class Notification implements Parcelable * @see Notification#bigContentView */ public static class MediaStyle extends Style { - static final int MAX_MEDIA_BUTTONS_IN_COMPACT = 2; + static final int MAX_MEDIA_BUTTONS_IN_COMPACT = 3; static final int MAX_MEDIA_BUTTONS = 5; private int[] mActionsToShowInCompact = null; @@ -3899,8 +3923,10 @@ public class Notification implements Parcelable } /** - * Request up to 2 actions (by index in the order of addition) to be shown in the compact + * Request up to 3 actions (by index in the order of addition) to be shown in the compact * notification view. + * + * @param actions the indices of the actions to show in the compact notification view */ public MediaStyle setShowActionsInCompactView(int...actions) { mActionsToShowInCompact = actions; @@ -3977,6 +4003,9 @@ public class Notification implements Parcelable RemoteViews button = new RemoteViews(mBuilder.mContext.getPackageName(), R.layout.notification_material_media_action); button.setImageViewResource(R.id.action0, action.icon); + button.setDrawableParameters(R.id.action0, false, -1, + 0xFFFFFFFF, + PorterDuff.Mode.SRC_ATOP, -1); if (!tombstone) { button.setOnClickPendingIntent(R.id.action0, action.actionIntent); } @@ -3986,14 +4015,14 @@ public class Notification implements Parcelable private RemoteViews makeMediaContentView() { RemoteViews view = mBuilder.applyStandardTemplate( - R.layout.notification_template_material_media); + R.layout.notification_template_material_media, false /* hasProgress */); final int numActions = mBuilder.mActions.size(); final int N = mActionsToShowInCompact == null ? 0 : Math.min(mActionsToShowInCompact.length, MAX_MEDIA_BUTTONS_IN_COMPACT); if (N > 0) { - view.removeAllViews(R.id.actions); + view.removeAllViews(com.android.internal.R.id.media_actions); for (int i = 0; i < N; i++) { if (i >= numActions) { throw new IllegalArgumentException(String.format( @@ -4003,26 +4032,73 @@ public class Notification implements Parcelable final Action action = mBuilder.mActions.get(mActionsToShowInCompact[i]); final RemoteViews button = generateMediaActionButton(action); - view.addView(R.id.actions, button); + view.addView(com.android.internal.R.id.media_actions, button); } } + styleText(view); + hideRightIcon(view); return view; } private RemoteViews makeMediaBigContentView() { - RemoteViews big = mBuilder.applyStandardTemplate( - R.layout.notification_template_material_big_media); + final int actionCount = Math.min(mBuilder.mActions.size(), MAX_MEDIA_BUTTONS); + RemoteViews big = mBuilder.applyStandardTemplate(getBigLayoutResource(actionCount), + false /* hasProgress */); - final int N = Math.min(mBuilder.mActions.size(), MAX_MEDIA_BUTTONS); - if (N > 0) { - big.removeAllViews(R.id.actions); - for (int i=0; i<N; i++) { + if (actionCount > 0) { + big.removeAllViews(com.android.internal.R.id.media_actions); + for (int i = 0; i < actionCount; i++) { final RemoteViews button = generateMediaActionButton(mBuilder.mActions.get(i)); - big.addView(R.id.actions, button); + big.addView(com.android.internal.R.id.media_actions, button); } } + styleText(big); + hideRightIcon(big); + applyTopPadding(big); + big.setViewVisibility(android.R.id.progress, View.GONE); return big; } + + private int getBigLayoutResource(int actionCount) { + if (actionCount <= 3) { + return R.layout.notification_template_material_big_media_narrow; + } else { + return R.layout.notification_template_material_big_media; + } + } + + private void hideRightIcon(RemoteViews contentView) { + contentView.setViewVisibility(R.id.right_icon, View.GONE); + } + + /** + * Applies the special text colors for media notifications to all text views. + */ + private void styleText(RemoteViews contentView) { + int primaryColor = mBuilder.mContext.getResources().getColor( + R.color.notification_media_primary_color); + int secondaryColor = mBuilder.mContext.getResources().getColor( + R.color.notification_media_secondary_color); + contentView.setTextColor(R.id.title, primaryColor); + if (mBuilder.showsTimeOrChronometer()) { + if (mBuilder.mUseChronometer) { + contentView.setTextColor(R.id.chronometer, secondaryColor); + } else { + contentView.setTextColor(R.id.time, secondaryColor); + } + } + contentView.setTextColor(R.id.text2, secondaryColor); + contentView.setTextColor(R.id.text, secondaryColor); + contentView.setTextColor(R.id.info, secondaryColor); + } + + /** + * @hide + */ + @Override + protected boolean hasProgress() { + return false; + } } // When adding a new Style subclass here, don't forget to update diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 05ff151..69d5f40 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -864,7 +864,7 @@ public class RemoteViews implements Parcelable, Filter { if (alpha != -1) { targetDrawable.setAlpha(alpha); } - if (colorFilter != -1 && filterMode != null) { + if (filterMode != null) { targetDrawable.setColorFilter(colorFilter, filterMode); } if (level != -1) { @@ -2189,8 +2189,8 @@ public class RemoteViews implements Parcelable, Filter { * @param alpha Specify an alpha value for the drawable, or -1 to leave * unchanged. * @param colorFilter Specify a color for a - * {@link android.graphics.ColorFilter} for this drawable, or -1 - * to leave unchanged. + * {@link android.graphics.ColorFilter} for this drawable. This will be ignored if + * {@code mode} is {@code null}. * @param mode Specify a PorterDuff mode for this drawable, or null to leave * unchanged. * @param level Specify the level for the drawable, or -1 to leave diff --git a/core/res/res/drawable/notification_material_action_background.xml b/core/res/res/drawable/notification_material_action_background.xml new file mode 100644 index 0000000..ff6f69d --- /dev/null +++ b/core/res/res/drawable/notification_material_action_background.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2014 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 + --> + +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="@color/ripple_material_light"> + <item android:id="@id/mask" + android:drawable="@drawable/btn_default_mtrl_shape" /> +</ripple> + diff --git a/core/res/res/drawable/notification_material_media_action_background.xml b/core/res/res/drawable/notification_material_media_action_background.xml new file mode 100644 index 0000000..8e559d5 --- /dev/null +++ b/core/res/res/drawable/notification_material_media_action_background.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2014 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 + --> + +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="@color/ripple_material_dark" /> diff --git a/core/res/res/drawable/notification_material_media_progress.xml b/core/res/res/drawable/notification_material_media_progress.xml deleted file mode 100644 index 74d871b..0000000 --- a/core/res/res/drawable/notification_material_media_progress.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2014 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. ---> - -<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:id="@id/background" android:drawable="@color/transparent"> - </item> - <item android:id="@id/secondaryProgress"> - <scale android:scaleWidth="100%" - android:drawable="@color/notification_media_progress" /> - </item> - <item android:id="@id/progress"> - <scale android:scaleWidth="100%" - android:drawable="@color/notification_media_progress" /> - </item> -</layer-list> diff --git a/core/res/res/layout/notification_material_action.xml b/core/res/res/layout/notification_material_action.xml index 637d941..da8b2e7 100644 --- a/core/res/res/layout/notification_material_action.xml +++ b/core/res/res/layout/notification_material_action.xml @@ -29,4 +29,5 @@ android:textSize="13sp" android:singleLine="true" android:ellipsize="end" + android:background="@drawable/notification_material_action_background" /> diff --git a/core/res/res/layout/notification_material_media_action.xml b/core/res/res/layout/notification_material_media_action.xml index 331ee57..1d52e54 100644 --- a/core/res/res/layout/notification_material_media_action.xml +++ b/core/res/res/layout/notification_material_media_action.xml @@ -16,10 +16,13 @@ --> <ImageButton xmlns:android="http://schemas.android.com/apk/res/android" - style="@android:style/Widget.Material.Light.Button.Borderless.Small" + style="@android:style/Widget.Material.Button.Borderless.Small" android:id="@+id/action0" - android:layout_width="60dp" + android:layout_width="48dp" android:layout_height="match_parent" + android:layout_marginLeft="2dp" + android:layout_marginRight="2dp" android:layout_weight="1" android:gravity="center" + android:background="@drawable/notification_material_media_action_background" /> diff --git a/core/res/res/layout/notification_template_material_big_media.xml b/core/res/res/layout/notification_template_material_big_media.xml index 3c44141..93acdbf 100644 --- a/core/res/res/layout/notification_template_material_big_media.xml +++ b/core/res/res/layout/notification_template_material_big_media.xml @@ -15,143 +15,43 @@ ~ limitations under the License --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:internal="http://schemas.android.com/apk/prv/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/status_bar_latest_event_content" android:layout_width="match_parent" - android:layout_height="wrap_content" - internal:layout_minHeight="65dp" - internal:layout_maxHeight="unbounded" + android:layout_height="128dp" + android:background="#00000000" > + <include layout="@layout/notification_template_icon_group" + android:layout_width="@dimen/notification_large_icon_width" + android:layout_height="@dimen/notification_large_icon_height" + /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="fill_vertical" + android:layout_marginStart="@dimen/notification_large_icon_width" android:minHeight="@dimen/notification_large_icon_height" android:orientation="vertical" - android:gravity="top" > - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="@dimen/notification_large_icon_width" - android:minHeight="@dimen/notification_large_icon_height" - android:paddingTop="2dp" - android:orientation="vertical" - > - <LinearLayout - android:id="@+id/line1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="6dp" - android:layout_marginEnd="8dp" - android:layout_marginStart="8dp" - android:orientation="horizontal" - > - <TextView android:id="@+id/title" - android:textAppearance="@style/TextAppearance.Material.Notification.Title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - android:layout_weight="1" - /> - <ViewStub android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="0" - android:visibility="gone" - android:layout="@layout/notification_template_part_time" - /> - <ViewStub android:id="@+id/chronometer" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="0" - android:visibility="gone" - android:layout="@layout/notification_template_part_chronometer" - /> - </LinearLayout> - <TextView android:id="@+id/text2" - android:textAppearance="@style/TextAppearance.Material.Notification.Line2" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="-2dp" - android:layout_marginBottom="-2dp" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:singleLine="true" - android:fadingEdge="horizontal" - android:ellipsize="marquee" - android:visibility="gone" - /> - <TextView android:id="@+id/big_text" - android:textAppearance="@style/TextAppearance.Material.Notification" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:singleLine="false" - android:visibility="gone" - /> - <LinearLayout - android:id="@+id/line3" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:orientation="horizontal" - android:gravity="center_vertical" - > - <TextView android:id="@+id/text" - android:textAppearance="@style/TextAppearance.Material.Notification" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - /> - <TextView android:id="@+id/info" - android:textAppearance="@style/TextAppearance.Material.Notification.Info" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_weight="0" - android:singleLine="true" - android:gravity="center" - android:paddingStart="8dp" - /> - </LinearLayout> - </LinearLayout> - <FrameLayout - android:layout_width="match_parent" - android:layout_height="60dp" - android:id="@+id/media_action_area" - android:background="@color/notification_media_action_bg" - > - <LinearLayout - android:id="@+id/actions" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="6dp" - android:orientation="horizontal" - > - <!-- media buttons will be added here --> - </LinearLayout> - <ProgressBar - android:id="@android:id/progress" - android:layout_width="match_parent" - android:layout_height="6dp" - android:layout_gravity="top" - android:visibility="gone" - style="@style/Widget.Material.Notification.ProgressBar.Media" - /> - </FrameLayout> + <include layout="@layout/notification_template_part_line1" /> + <include layout="@layout/notification_template_part_line2" /> + <include layout="@layout/notification_template_part_line3" /> </LinearLayout> - <include layout="@layout/notification_template_icon_group" - android:layout_width="@dimen/notification_large_icon_width" - android:layout_height="@dimen/notification_large_icon_height" - /> -</FrameLayout> + <LinearLayout + android:id="@+id/media_actions" + android:layout_width="match_parent" + android:layout_height="48dp" + android:layout_alignParentBottom="true" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" + android:orientation="horizontal" + android:layoutDirection="ltr" + > + <!-- media buttons will be added here --> + </LinearLayout> + <ImageView + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_above="@id/media_actions" + android:id="@+id/action_divider" + android:background="@drawable/notification_template_divider_media" /> +</RelativeLayout> diff --git a/core/res/res/layout/notification_template_material_big_media_narrow.xml b/core/res/res/layout/notification_template_material_big_media_narrow.xml new file mode 100644 index 0000000..21e5ff8 --- /dev/null +++ b/core/res/res/layout/notification_template_material_big_media_narrow.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2014 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 + --> + +<!-- Layout to be used with only max 3 actions. It has a much larger picture at the left side--> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/status_bar_latest_event_content" + android:layout_width="match_parent" + android:layout_height="128dp" + android:background="#00000000" + > + <ImageView android:id="@+id/icon" + android:layout_width="128dp" + android:layout_height="128dp" + android:scaleType="centerCrop" + /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="12dp" + android:layout_toEndOf="@id/icon" + android:minHeight="@dimen/notification_large_icon_height" + android:orientation="vertical" + > + <include layout="@layout/notification_template_part_line1" /> + <include layout="@layout/notification_template_part_line2" /> + <include layout="@layout/notification_template_part_line3" /> + </LinearLayout> + <LinearLayout + android:id="@+id/media_actions" + android:layout_width="match_parent" + android:layout_height="48dp" + android:layout_toEndOf="@id/icon" + android:layout_alignParentBottom="true" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" + android:orientation="horizontal" + android:layoutDirection="ltr" + > + <!-- media buttons will be added here --> + </LinearLayout> + <ImageView + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_toEndOf="@id/icon" + android:layout_above="@id/media_actions" + android:id="@+id/action_divider" + android:background="@drawable/notification_template_divider_media" /> +</RelativeLayout> diff --git a/core/res/res/layout/notification_template_material_media.xml b/core/res/res/layout/notification_template_material_media.xml index db24c1f..69020a4 100644 --- a/core/res/res/layout/notification_template_material_media.xml +++ b/core/res/res/layout/notification_template_material_media.xml @@ -21,6 +21,7 @@ android:layout_width="match_parent" android:layout_height="64dp" android:orientation="horizontal" + android:background="#00000000" internal:layout_minHeight="64dp" internal:layout_maxHeight="64dp" > @@ -36,99 +37,19 @@ android:layout_gravity="fill_vertical" android:minHeight="@dimen/notification_large_icon_height" android:orientation="vertical" - android:paddingEnd="8dp" - android:paddingTop="2dp" - android:paddingBottom="2dp" - android:gravity="top" > - <LinearLayout - android:id="@+id/line1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="6dp" - android:layout_marginStart="8dp" - android:orientation="horizontal" - > - <TextView android:id="@+id/title" - android:textAppearance="@style/TextAppearance.Material.Notification.Title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - android:layout_weight="1" - /> - <ViewStub android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="0" - android:visibility="gone" - android:layout="@layout/notification_template_part_time" - /> - <ViewStub android:id="@+id/chronometer" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="0" - android:visibility="gone" - android:layout="@layout/notification_template_part_chronometer" - /> - </LinearLayout> - <TextView android:id="@+id/text2" - android:textAppearance="@style/TextAppearance.Material.Notification.Line2" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="-2dp" - android:layout_marginBottom="-2dp" - android:layout_marginStart="8dp" - android:singleLine="true" - android:fadingEdge="horizontal" - android:ellipsize="marquee" - android:visibility="gone" - /> - <ProgressBar - android:id="@android:id/progress" - android:layout_width="match_parent" - android:layout_height="12dp" - android:layout_marginStart="8dp" - android:visibility="gone" - style="@style/Widget.Material.Notification.ProgressBar" - /> - <LinearLayout - android:id="@+id/line3" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:gravity="center_vertical" - android:layout_marginStart="8dp" - > - <TextView android:id="@+id/text" - android:textAppearance="@style/TextAppearance.Material.Notification" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - /> - <TextView android:id="@+id/info" - android:textAppearance="@style/TextAppearance.Material.Notification.Info" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_weight="0" - android:singleLine="true" - android:gravity="center" - android:paddingStart="8dp" - /> - </LinearLayout> + <include layout="@layout/notification_template_part_line1" /> + <include layout="@layout/notification_template_part_line2" /> + <include layout="@layout/notification_template_part_line3" /> </LinearLayout> <LinearLayout - android:id="@+id/actions" + android:id="@+id/media_actions" android:layout_width="wrap_content" android:layout_height="match_parent" + android:layout_marginEnd="6dp" android:layout_gravity="center_vertical|end" android:orientation="horizontal" + android:layoutDirection="ltr" > <!-- media buttons will be added here --> </LinearLayout> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 4470fc3..c42683b 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -128,12 +128,13 @@ <drawable name="notification_template_icon_bg">#3333B5E5</drawable> <drawable name="notification_template_icon_low_bg">#0cffffff</drawable> <drawable name="notification_template_divider">#29000000</drawable> + <drawable name="notification_template_divider_media">#29ffffff</drawable> <color name="notification_icon_bg_color">#ff9e9e9e</color> <color name="notification_action_color_filter">@color/secondary_text_material_light</color> - <color name="notification_media_action_bg">#00000000</color> - <color name="notification_media_progress">#FFFFFFFF</color> + <color name="notification_media_primary_color">@color/primary_text_material_dark</color> + <color name="notification_media_secondary_color">@color/secondary_text_material_dark</color> <!-- Keyguard colors --> <color name="keyguard_avatar_frame_color">#ffffffff</color> diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml index e783cd6..8b3cbaf 100644 --- a/core/res/res/values/styles_material.xml +++ b/core/res/res/values/styles_material.xml @@ -438,10 +438,6 @@ please see styles_device_defaults.xml. <style name="Widget.Material.Notification.ProgressBar" parent="Widget.Material.Light.ProgressBar.Horizontal" /> - <style name="Widget.Material.Notification.ProgressBar.Media"> - <item name="progressDrawable">@drawable/notification_material_media_progress</item> - </style> - <!-- Widget Styles --> <style name="Material"/> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 622a01a..0a274f8 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1716,16 +1716,16 @@ <java-symbol type="layout" name="notification_template_material_inbox" /> <java-symbol type="layout" name="notification_template_material_media" /> <java-symbol type="layout" name="notification_template_material_big_media" /> + <java-symbol type="layout" name="notification_template_material_big_media_narrow" /> <java-symbol type="layout" name="notification_template_material_big_text" /> <java-symbol type="layout" name="notification_template_icon_group" /> <java-symbol type="layout" name="notification_material_media_action" /> <java-symbol type="color" name="notification_action_color_filter" /> <java-symbol type="color" name="notification_icon_bg_color" /> <java-symbol type="drawable" name="notification_icon_legacy_bg" /> - <java-symbol type="drawable" name="notification_material_media_progress" /> - <java-symbol type="color" name="notification_media_action_bg" /> - <java-symbol type="color" name="notification_media_progress" /> - <java-symbol type="id" name="media_action_area" /> + <java-symbol type="color" name="notification_media_primary_color" /> + <java-symbol type="color" name="notification_media_secondary_color" /> + <java-symbol type="id" name="media_actions" /> <!-- From SystemUI --> <java-symbol type="anim" name="push_down_in" /> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 75ed81e..103d8b9 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -85,6 +85,10 @@ <!-- The color of the material notification background when low priority --> <color name="notification_material_background_low_priority_color">#ffe0e0e0</color> + <!-- The color of the material notification background for media notifications when no custom + color is specified --> + <color name="notification_material_background_media_default_color">#ff424242</color> + <!-- The color of the ripples on the untinted notifications --> <color name="notification_ripple_untinted_color">#20000000</color> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index f04c8c8..d1eb83b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -677,7 +677,10 @@ public abstract class BaseStatusBar extends SystemUI implements // Using platform templates final int color = sbn.getNotification().color; if (isMediaNotification(entry)) { - entry.row.setTintColor(color); + entry.row.setTintColor(color == Notification.COLOR_DEFAULT + ? mContext.getResources().getColor( + R.color.notification_material_background_media_default_color) + : color); } } @@ -693,7 +696,7 @@ public abstract class BaseStatusBar extends SystemUI implements public boolean isMediaNotification(NotificationData.Entry entry) { // TODO: confirm that there's a valid media key return entry.expandedBig != null && - entry.expandedBig.findViewById(com.android.internal.R.id.media_action_area) != null; + entry.expandedBig.findViewById(com.android.internal.R.id.media_actions) != null; } private void startAppNotificationSettingsActivity(String packageName, final int appUid) { |