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

Commit 2056196e authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

Merge "Move the metric unit together with the label (in expanded view)" into main

parents f5846cc3 3d6ade0b
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -11824,18 +11824,34 @@ public class Notification implements Parcelable
                    final Metric.MetricValue metricValue = metric.getValue();
                    final Metric.MetricValue.ValueString valueString = metricValue.toValueString(
                            mBuilder.mContext);
                    final String metricLabel;
                    if (isExpandedView) {
                        if (Flags.metricStyleUnitInLabel()
                                && !TextUtils.isEmpty(valueString.subtext())) {
                            metricLabel = mBuilder.mContext.getString(
                                    R.string.notification_metric_label_unit,
                                    metric.getLabel(), valueString.subtext());
                        } else {
                            metricLabel = metric.getLabel();
                        }
                    } else {
                        // No unit shown in collapsed view.
                        metricLabel = mBuilder.mContext.getString(
                                com.android.internal.R.string.notification_metric_label_template,
                                R.string.notification_metric_label_separator,
                                metric.getLabel());
                    }
                    contentView.setTextViewText(metricView.labelId(), metricLabel);
                    if (Flags.metricStyleUnitInLabel()) {
                        contentView.setViewVisibility(metricView.unitId(), View.GONE);
                    } else if (isExpandedView) {
                        contentView.setViewVisibility(metricView.unitId(),
                            TextUtils.isEmpty(valueString.subtext()) ? View.GONE : View.VISIBLE);
                                TextUtils.isEmpty(valueString.subtext())
                                        ? View.GONE
                                        : View.VISIBLE);
                        contentView.setTextViewText(metricView.unitId(), valueString.subtext());
                    }
                    if (metricValue instanceof Metric.TimeDifference timeDifference
                            && timeDifference.getPausedDuration() == null) {
+10 −0
Original line number Diff line number Diff line
@@ -52,6 +52,16 @@ flag {
  bug: "415827681"
}

flag {
  name: "metric_style_unit_in_label"
  namespace: "notifications"
  description: "In MetricStyle, concatenate the unit of the MetricValue to the label, instead of displaying it next to the value. This flag is only for prototyping; either the flag-on or flag-off path will be inlined once the behavior is decided."
  bug: "434910979"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "modes_ui_dnd_tile"
  namespace: "systemui"
+6 −2
Original line number Diff line number Diff line
@@ -5661,8 +5661,12 @@
    <!-- Tempalate for Notification.MessagingStyle to join a conversation name with the name of the sender of a message, to make a notification title [CHAR LIMIT=NONE] -->
    <string name="notification_messaging_title_template"><xliff:g id="conversation_title" example="Tasty Treat Team">%1$s</xliff:g>: <xliff:g id="sender_name" example="Adrian Baker">%2$s</xliff:g></string>
    <!-- Template for Notification.MetricStyle to join Metric label with a separator e.g.: `:` -->
    <string name="notification_metric_label_template"><xliff:g id="metric_label" example="Steps">%1$s</xliff:g>:</string>
    <!-- Template for Notification.MetricStyle to join Metric label with its unit, e.g. "Speed (km/h)". -->
    <string name="notification_metric_label_unit"><xliff:g id="metric_label" example="Speed">%1$s</xliff:g> (<xliff:g id="metric_unit" example="km/h">%2$s</xliff:g>)</string>
    <!-- Template for Notification.MetricStyle to join Metric label with its unit and a separator, e.g. "Speed (km/h):". -->
    <string name="notification_metric_label_unit_separator"><xliff:g id="metric_label" example="Speed">%1$s</xliff:g> (<xliff:g id="metric_unit" example="km/h">%2$s</xliff:g>):</string>
    <!-- Template for Notification.MetricStyle to join Metric label with a separator e.g.: "Speed:". -->
    <string name="notification_metric_label_separator"><xliff:g id="metric_label" example="Steps">%1$s</xliff:g>:</string>
    <!-- Action text to be displayed for the "answer" action of an incoming call [CHAR LIMIT=13] -->
    <string name="call_notification_answer_action">Answer</string>
+3 −1
Original line number Diff line number Diff line
@@ -3579,7 +3579,9 @@
  <java-symbol type="string" name="notification_messaging_title_template" />

  <!-- Notifications: MetricStyle -->
  <java-symbol type="string" name="notification_metric_label_template" />
  <java-symbol type="string" name="notification_metric_label_unit" />
  <java-symbol type="string" name="notification_metric_label_unit_separator" />
  <java-symbol type="string" name="notification_metric_label_separator" />

  <!-- Notifications: CallStyle -->
  <java-symbol type="layout" name="notification_template_material_call" />
+111 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.app;

import static android.app.Notification.EXTRA_METRICS;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;

import static com.google.common.truth.Truth.assertThat;

@@ -37,14 +39,21 @@ import android.content.ContentResolver;
import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RemoteViews;
import android.widget.TextView;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.internal.R;

import com.google.common.truth.Expect;

import org.junit.After;
@@ -568,6 +577,108 @@ public class NotificationMetricStyleTest {
        assertThat(noUnit.toValueString(mContext)).isEqualTo(new ValueString("Boring", null));
    }

    @Test
    @DisableFlags(Flags.FLAG_METRIC_STYLE_UNIT_IN_LABEL)
    public void makeContentView_displaysLabelButNoUnit() {
        Notification.Builder n = new Notification.Builder(mContext, "channel")
                .setStyle(new MetricStyle()
                        .addMetric(new Metric(new FixedInt(42), "Answer"))
                        .addMetric(new Metric(new FixedInt(273, "°K"), "Temp")));

        RemoteViews remoteViews = n.getStyle().makeContentView();
        FrameLayout container = new FrameLayout(mContext);
        container.addView(remoteViews.apply(mContext, container));

        assertThat(((TextView) container.findViewById(R.id.metric_label_0)).getText().toString())
                .isEqualTo("Answer:");
        assertThat(((TextView) container.findViewById(R.id.metric_value_0)).getText().toString())
                .isEqualTo("42");
        assertThat((View) container.findViewById(R.id.metric_unit_0)).isNull();

        assertThat(((TextView) container.findViewById(R.id.metric_label_1)).getText().toString())
                .isEqualTo("Temp:");
        assertThat(((TextView) container.findViewById(R.id.metric_value_1)).getText().toString())
                .isEqualTo("273");
        assertThat((View) container.findViewById(R.id.metric_unit_1)).isNull();
    }

    @Test
    @EnableFlags(Flags.FLAG_METRIC_STYLE_UNIT_IN_LABEL)
    public void makeContentView_displaysLabelButNoUnit_evenWithUnitInLabelFlag() {
        Notification.Builder n = new Notification.Builder(mContext, "channel")
                .setStyle(new MetricStyle()
                        .addMetric(new Metric(new FixedInt(42), "Answer"))
                        .addMetric(new Metric(new FixedInt(273, "°K"), "Temp")));

        RemoteViews remoteViews = n.getStyle().makeContentView();
        FrameLayout container = new FrameLayout(mContext);
        container.addView(remoteViews.apply(mContext, container));

        assertThat(((TextView) container.findViewById(R.id.metric_label_0)).getText().toString())
                .isEqualTo("Answer:");
        assertThat(((TextView) container.findViewById(R.id.metric_value_0)).getText().toString())
                .isEqualTo("42");
        assertThat((View) container.findViewById(R.id.metric_unit_0)).isNull();

        assertThat(((TextView) container.findViewById(R.id.metric_label_1)).getText().toString())
                .isEqualTo("Temp:");
        assertThat(((TextView) container.findViewById(R.id.metric_value_1)).getText().toString())
                .isEqualTo("273");
        assertThat((View) container.findViewById(R.id.metric_unit_1)).isNull();
    }

    @Test
    @DisableFlags(Flags.FLAG_METRIC_STYLE_UNIT_IN_LABEL)
    public void makeExpandedContentView_displaysLabelAndUnit() {
        Notification.Builder n = new Notification.Builder(mContext, "channel")
                .setStyle(new MetricStyle()
                        .addMetric(new Metric(new FixedInt(42), "Answer"))
                        .addMetric(new Metric(new FixedInt(273, "°K"), "Temp")));

        RemoteViews remoteViews = n.getStyle().makeExpandedContentView();
        FrameLayout container = new FrameLayout(mContext);
        container.addView(remoteViews.apply(mContext, container));

        assertThat(((TextView) container.findViewById(R.id.metric_label_0)).getText().toString())
                .isEqualTo("Answer");
        assertThat(((TextView) container.findViewById(R.id.metric_value_0)).getText().toString())
                .isEqualTo("42");
        assertThat(container.findViewById(R.id.metric_unit_0).getVisibility()).isEqualTo(GONE);

        assertThat(((TextView) container.findViewById(R.id.metric_label_1)).getText().toString())
                .isEqualTo("Temp");
        assertThat(((TextView) container.findViewById(R.id.metric_value_1)).getText().toString())
                .isEqualTo("273");
        assertThat(container.findViewById(R.id.metric_unit_1).getVisibility()).isEqualTo(VISIBLE);
        assertThat(((TextView) container.findViewById(R.id.metric_unit_1)).getText().toString())
                .isEqualTo("°K");
    }

    @Test
    @EnableFlags(Flags.FLAG_METRIC_STYLE_UNIT_IN_LABEL)
    public void makeExpandedContentView_concatenatesLabelAndUnit() {
        Notification.Builder n = new Notification.Builder(mContext, "channel")
                .setStyle(new MetricStyle()
                        .addMetric(new Metric(new FixedInt(42), "Answer"))
                        .addMetric(new Metric(new FixedInt(273, "°K"), "Temp")));

        RemoteViews remoteViews = n.getStyle().makeExpandedContentView();
        FrameLayout container = new FrameLayout(mContext);
        container.addView(remoteViews.apply(mContext, container));

        assertThat(((TextView) container.findViewById(R.id.metric_label_0)).getText().toString())
                .isEqualTo("Answer");
        assertThat(((TextView) container.findViewById(R.id.metric_value_0)).getText().toString())
                .isEqualTo("42");
        assertThat(container.findViewById(R.id.metric_unit_0).getVisibility()).isEqualTo(GONE);

        assertThat(((TextView) container.findViewById(R.id.metric_label_1)).getText().toString())
                .isEqualTo("Temp (°K)");
        assertThat(((TextView) container.findViewById(R.id.metric_value_1)).getText().toString())
                .isEqualTo("273");
        assertThat(container.findViewById(R.id.metric_unit_1).getVisibility()).isEqualTo(GONE);
    }

    private void withLocale(Locale locale, Runnable r) {
        Locale previous = Locale.getDefault();
        try {