Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cd5cb73 authored by Jeff DeCew's avatar Jeff DeCew Committed by Android (Google) Code Review
Browse files

Merge changes I57fb542a,If2a13daf into sc-dev

* changes:
  Fix the vertical positioning of the text in collapsed notifications.
  Increase the notification height to 88dp
parents be0734de 19864ec9
Loading
Loading
Loading
Loading
+24 −20
Original line number Diff line number Diff line
@@ -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();
+70 −0
Original line number Diff line number Diff line
/*
 * 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;
    }
}
+14 −36
Original line number Diff line number Diff line
@@ -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"
            >

            <com.android.internal.widget.NotificationVanishingFrameLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/notification_headerless_line_height"
                >
                <!-- 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_headerless_line_height"
                    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>
+11 −14
Original line number Diff line number Diff line
@@ -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>
+2 −4
Original line number Diff line number Diff line
@@ -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" />