Merge changes I57fb542a,If2a13daf into sc-dev
* changes: Fix the vertical positioning of the text in collapsed notifications. Increase the notification height to 88dp
This commit is contained in:
@@ -5013,6 +5013,7 @@ public class Notification implements Parcelable
|
||||
bindNotificationHeader(contentView, p);
|
||||
bindLargeIconAndApplyMargin(contentView, p, result);
|
||||
boolean showProgress = handleProgressBar(contentView, ex, p);
|
||||
boolean hasSecondLine = showProgress;
|
||||
if (p.hasTitle()) {
|
||||
contentView.setViewVisibility(R.id.title, View.VISIBLE);
|
||||
contentView.setTextViewText(R.id.title, processTextSpans(p.title));
|
||||
@@ -5028,11 +5029,27 @@ public class Notification implements Parcelable
|
||||
contentView.setTextViewText(textId, processTextSpans(p.text));
|
||||
setTextViewColorSecondary(contentView, textId, p);
|
||||
contentView.setViewVisibility(textId, View.VISIBLE);
|
||||
hasSecondLine = true;
|
||||
}
|
||||
setHeaderlessVerticalMargins(contentView, p, hasSecondLine);
|
||||
|
||||
return contentView;
|
||||
}
|
||||
|
||||
private static void setHeaderlessVerticalMargins(RemoteViews contentView,
|
||||
StandardTemplateParams p, boolean hasSecondLine) {
|
||||
if (!p.mHeaderless) {
|
||||
return;
|
||||
}
|
||||
int marginDimen = hasSecondLine
|
||||
? R.dimen.notification_headerless_margin_twoline
|
||||
: R.dimen.notification_headerless_margin_oneline;
|
||||
contentView.setViewLayoutMarginDimen(R.id.notification_headerless_view_column,
|
||||
RemoteViews.MARGIN_TOP, marginDimen);
|
||||
contentView.setViewLayoutMarginDimen(R.id.notification_headerless_view_column,
|
||||
RemoteViews.MARGIN_BOTTOM, marginDimen);
|
||||
}
|
||||
|
||||
private CharSequence processTextSpans(CharSequence text) {
|
||||
if (hasForegroundColor() || mInNightMode) {
|
||||
return ContrastColorUtil.clearColorSpans(text);
|
||||
@@ -6851,26 +6868,13 @@ public class Notification implements Parcelable
|
||||
if (decorationType <= DevFlags.DECORATION_PARTIAL) {
|
||||
template.removeFromParent(R.id.notification_top_line);
|
||||
}
|
||||
if (decorationType != DevFlags.DECORATION_FULL_COMPATIBLE) {
|
||||
// Change the max content size from 60dp (the compatible size) to 48dp
|
||||
// (the constrained size). This is done by increasing the minimum margin
|
||||
// (implemented as top/bottom margins) and decreasing the extra margin
|
||||
// (implemented as the height of shrinkable top/bottom views in the column).
|
||||
template.setViewLayoutMarginDimen(
|
||||
R.id.notification_headerless_view_column,
|
||||
RemoteViews.MARGIN_TOP,
|
||||
R.dimen.notification_headerless_margin_constrained_minimum);
|
||||
template.setViewLayoutMarginDimen(
|
||||
R.id.notification_headerless_view_column,
|
||||
RemoteViews.MARGIN_BOTTOM,
|
||||
R.dimen.notification_headerless_margin_constrained_minimum);
|
||||
template.setViewLayoutHeightDimen(
|
||||
R.id.notification_headerless_margin_extra_top,
|
||||
R.dimen.notification_headerless_margin_constrained_extra);
|
||||
template.setViewLayoutHeightDimen(
|
||||
R.id.notification_headerless_margin_extra_bottom,
|
||||
R.dimen.notification_headerless_margin_constrained_extra);
|
||||
}
|
||||
// The vertical margins are bigger in the "two-line" scenario than the "one-line"
|
||||
// scenario, but the 'compatible' decoration state is intended to have 3 lines,
|
||||
// (1 for the top line views and 2 for the custom views), so in that one case we
|
||||
// use the smaller 1-line margins. This gives the compatible case 88-16*2=56 dp of
|
||||
// height, 24dp of which goes to the top line, leaving 32dp for the custom view.
|
||||
boolean hasSecondLine = decorationType != DevFlags.DECORATION_FULL_COMPATIBLE;
|
||||
Builder.setHeaderlessVerticalMargins(template, p, hasSecondLine);
|
||||
} else {
|
||||
// also update the end margin to account for the large icon or expander
|
||||
Resources resources = context.getResources();
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
/**
|
||||
* This view will measure itself as having 0 size if all of its children are {@link #GONE}.
|
||||
* Otherwise it acts like a normal {@link FrameLayout}.
|
||||
*/
|
||||
@RemoteViews.RemoteView
|
||||
public class NotificationVanishingFrameLayout extends FrameLayout {
|
||||
public NotificationVanishingFrameLayout(Context context) {
|
||||
this(context, null, 0, 0);
|
||||
}
|
||||
|
||||
public NotificationVanishingFrameLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0, 0);
|
||||
}
|
||||
|
||||
public NotificationVanishingFrameLayout(Context context, @Nullable AttributeSet attrs,
|
||||
int defStyleAttr) {
|
||||
this(context, attrs, defStyleAttr, 0);
|
||||
}
|
||||
|
||||
public NotificationVanishingFrameLayout(Context context, AttributeSet attrs, int defStyleAttr,
|
||||
int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
if (allChildrenGone()) {
|
||||
int zeroSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY);
|
||||
super.onMeasure(zeroSpec, zeroSpec);
|
||||
} else {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean allChildrenGone() {
|
||||
final int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child != null && child.getVisibility() != GONE) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -91,26 +91,11 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginBottom="@dimen/notification_headerless_margin_minimum"
|
||||
android:layout_marginTop="@dimen/notification_headerless_margin_minimum"
|
||||
android:layout_marginBottom="@dimen/notification_headerless_margin_twoline"
|
||||
android:layout_marginTop="@dimen/notification_headerless_margin_twoline"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
|
||||
<!--
|
||||
This invisible FrameLayout is here as a collapsible padding. Having a layout_weight=1 is
|
||||
what causes this view (and it's counterpart at the opposite end) to collapse before the
|
||||
actual content views do.
|
||||
This pair of 10dp collapsible paddings (plus the 16dp fixed margins) allow us to support
|
||||
headerless notifications of 1-3 lines (where each line is 20dp tall) where the 1-line
|
||||
variant is 56dp and the 2- and 3-line variants are both 76dp.
|
||||
-->
|
||||
<FrameLayout
|
||||
android:id="@+id/notification_headerless_margin_extra_top"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/notification_headerless_margin_extra"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
|
||||
<!-- extends ViewGroup -->
|
||||
<NotificationTopLineView
|
||||
android:id="@+id/notification_top_line"
|
||||
@@ -153,12 +138,20 @@
|
||||
android:orientation="vertical"
|
||||
>
|
||||
|
||||
<include
|
||||
layout="@layout/notification_template_text"
|
||||
<com.android.internal.widget.NotificationVanishingFrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/notification_headerless_line_height"
|
||||
android:layout_marginTop="0dp"
|
||||
/>
|
||||
>
|
||||
<!-- This is the simplest way to keep this text vertically centered without using
|
||||
gravity="center_vertical" which causes jumpiness in expansion animations. -->
|
||||
<include
|
||||
layout="@layout/notification_template_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/notification_text_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="0dp"
|
||||
/>
|
||||
</com.android.internal.widget.NotificationVanishingFrameLayout>
|
||||
|
||||
<include
|
||||
layout="@layout/notification_template_progress"
|
||||
@@ -168,21 +161,6 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!--
|
||||
This invisible FrameLayout is here as a collapsible padding. Having a layout_weight=1 is
|
||||
what causes this view (and it's counterpart at the opposite end) to collapse before the
|
||||
actual content views do.
|
||||
This pair of 10dp collapsible paddings (plus the 16dp fixed margins) allow us to support
|
||||
headerless notifications of 1-3 lines (where each line is 20dp tall) where the 1-line
|
||||
variant is 56dp and the 2- and 3-line variants are both 76dp.
|
||||
-->
|
||||
<FrameLayout
|
||||
android:id="@+id/notification_headerless_margin_extra_bottom"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/notification_headerless_margin_extra"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.android.internal.widget.NotificationMaxHeightFrameLayout>
|
||||
|
||||
@@ -319,26 +319,22 @@
|
||||
<!-- The top padding for the notification expand button. -->
|
||||
<dimen name="notification_expand_button_padding_top">1dp</dimen>
|
||||
|
||||
<!-- minimum vertical margin for the headerless notification content, when cap = 60dp -->
|
||||
<dimen name="notification_headerless_margin_minimum">8dp</dimen>
|
||||
<!-- Vertical margin for the headerless notification content, when content has 1 line -->
|
||||
<!-- 16 * 2 (margins) + 24 (1 line) = 56 (notification) -->
|
||||
<dimen name="notification_headerless_margin_oneline">16dp</dimen>
|
||||
|
||||
<!-- extra vertical margin for the headerless notification content, when cap = 60dp -->
|
||||
<dimen name="notification_headerless_margin_extra">10dp</dimen>
|
||||
|
||||
<!-- minimum vertical margin for the headerless notification content, when cap = 48dp -->
|
||||
<dimen name="notification_headerless_margin_constrained_minimum">14dp</dimen>
|
||||
|
||||
<!-- extra vertical margin for the headerless notification content, when cap = 48dp -->
|
||||
<dimen name="notification_headerless_margin_constrained_extra">4dp</dimen>
|
||||
<!-- Vertical margin for the headerless notification content, when content has 2 lines -->
|
||||
<!-- 20 * 2 (margins) + 24 * 2 (2 lines) = 88 (notification) -->
|
||||
<dimen name="notification_headerless_margin_twoline">20dp</dimen>
|
||||
|
||||
<!-- The height of each of the 1 or 2 lines in the headerless notification template -->
|
||||
<dimen name="notification_headerless_line_height">20sp</dimen>
|
||||
<dimen name="notification_headerless_line_height">24dp</dimen>
|
||||
|
||||
<!-- vertical margin for the headerless notification content -->
|
||||
<dimen name="notification_headerless_min_height">56dp</dimen>
|
||||
|
||||
<!-- Height of a small notification in the status bar -->
|
||||
<dimen name="notification_min_height">76dp</dimen>
|
||||
<dimen name="notification_min_height">88dp</dimen>
|
||||
|
||||
<!-- The width of the big icons in notifications. -->
|
||||
<dimen name="notification_large_icon_width">64dp</dimen>
|
||||
@@ -738,10 +734,11 @@
|
||||
<!-- The maximum width of a image in a media notification. The images will be reduced to that width in case they are bigger.-->
|
||||
<dimen name="notification_media_image_max_width">280dp</dimen>
|
||||
<!-- The size of the right icon -->
|
||||
<dimen name="notification_right_icon_size">52dp</dimen>
|
||||
<dimen name="notification_right_icon_size">48dp</dimen>
|
||||
<!-- The top and bottom margin of the right icon in the normal notification states -->
|
||||
<dimen name="notification_right_icon_headerless_margin">12dp</dimen>
|
||||
<dimen name="notification_right_icon_headerless_margin">20dp</dimen>
|
||||
<!-- The top margin of the right icon in the "big" notification states -->
|
||||
<!-- TODO(b/181048615): Move the large icon below the expander in big states -->
|
||||
<dimen name="notification_right_icon_big_margin_top">16dp</dimen>
|
||||
<!-- The size of the left icon -->
|
||||
<dimen name="notification_left_icon_size">@dimen/notification_icon_circle_size</dimen>
|
||||
|
||||
@@ -2895,8 +2895,6 @@
|
||||
<java-symbol type="id" name="alternate_expand_target" />
|
||||
<java-symbol type="id" name="notification_header" />
|
||||
<java-symbol type="id" name="notification_top_line" />
|
||||
<java-symbol type="id" name="notification_headerless_margin_extra_top" />
|
||||
<java-symbol type="id" name="notification_headerless_margin_extra_bottom" />
|
||||
<java-symbol type="id" name="time_divider" />
|
||||
<java-symbol type="id" name="header_text_divider" />
|
||||
<java-symbol type="id" name="header_text_secondary_divider" />
|
||||
@@ -2918,8 +2916,8 @@
|
||||
<java-symbol type="dimen" name="notification_header_icon_size" />
|
||||
<java-symbol type="dimen" name="notification_header_app_name_margin_start" />
|
||||
<java-symbol type="dimen" name="notification_header_separating_margin" />
|
||||
<java-symbol type="dimen" name="notification_headerless_margin_constrained_minimum" />
|
||||
<java-symbol type="dimen" name="notification_headerless_margin_constrained_extra" />
|
||||
<java-symbol type="dimen" name="notification_headerless_margin_oneline" />
|
||||
<java-symbol type="dimen" name="notification_headerless_margin_twoline" />
|
||||
<java-symbol type="string" name="default_notification_channel_label" />
|
||||
<java-symbol type="string" name="importance_from_user" />
|
||||
<java-symbol type="string" name="importance_from_person" />
|
||||
|
||||
Reference in New Issue
Block a user