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

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

Merge "[RONs] Fix over-restrictive requirement in promotion logic." into main

parents 81ff6088 721e5fcc
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -3257,7 +3257,7 @@ public class Notification implements Parcelable
     */
    @FlaggedApi(Flags.FLAG_UI_RICH_ONGOING)
    public boolean hasPromotableCharacteristics() {
        return isColorized()
        return isColorizedRequested()
                && hasTitle()
                && !containsCustomViews()
                && hasPromotableStyle();
@@ -4083,6 +4083,12 @@ public class Notification implements Parcelable
                flags &= ~FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
            }
        }
        if (Flags.apiRichOngoing()) {
            if ((flags & FLAG_PROMOTED_ONGOING) != 0) {
                flagStrings.add("PROMOTED_ONGOING");
                flags &= ~FLAG_PROMOTED_ONGOING;
            }
        }
        if (android.service.notification.Flags.notificationSilentFlag()) {
            if ((flags & FLAG_SILENT) != 0) {
@@ -7792,8 +7798,16 @@ public class Notification implements Parcelable
     * @hide
     */
    public boolean isColorized() {
        return extras.getBoolean(EXTRA_COLORIZED)
                && (hasColorizedPermission() || isFgsOrUij());
        return isColorizedRequested()
                && (hasColorizedPermission() || isFgsOrUij() || isPromotedOngoing());
    }
    /**
     * @return true if this notification has requested to be colorized, regardless of whether it
     * meets the requirements to be displayed that way.
     */
    private boolean isColorizedRequested() {
        return extras.getBoolean(EXTRA_COLORIZED);
    }
    /**
@@ -7806,6 +7820,19 @@ public class Notification implements Parcelable
        return (flags & Notification.FLAG_CAN_COLORIZE) != 0;
    }
    /**
     * Returns whether this notification is a promoted ongoing notification.
     *
     * This requires the Notification.FLAG_PROMOTED_ONGOING flag to be set
     * (which may be true once the api_rich_ongoing feature flag is enabled),
     * and requires that the ui_rich_ongoing feature flag is enabled.
     *
     * @hide
     */
    public boolean isPromotedOngoing() {
        return Flags.uiRichOngoing() && (flags & Notification.FLAG_PROMOTED_ONGOING) != 0;
    }
    /**
     * @return true if this is a media style notification with a media session
     *
+0 −14
Original line number Diff line number Diff line
@@ -17178,8 +17178,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @Test
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testSetCanBePromoted_granted() throws Exception {
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        // qualifying posted notification
        Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId())
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
@@ -17254,8 +17252,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @Test
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testSetCanBePromoted_granted_onlyNotifiesOnce() throws Exception {
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        // qualifying posted notification
        Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId())
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
@@ -17285,8 +17281,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @Test
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testSetCanBePromoted_revoked() throws Exception {
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        // start from true state
        mBinderService.setCanBePromoted(mPkg, mUid, true, true);
@@ -17350,8 +17344,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @Test
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testSetCanBePromoted_revoked_onlyNotifiesOnce() throws Exception {
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        // start from true state
        mBinderService.setCanBePromoted(mPkg, mUid, true, true);
@@ -17387,8 +17379,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    public void testPostPromotableNotification() throws Exception {
        mBinderService.setCanBePromoted(mPkg, mUid, true, true);
        assertThat(mBinderService.appCanBePromoted(mPkg, mUid)).isTrue();
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId())
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
@@ -17415,8 +17405,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @Test
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testPostPromotableNotification_noPermission() throws Exception {
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId())
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
                .setStyle(new Notification.BigTextStyle().setBigContentTitle("BIG"))
@@ -17444,8 +17432,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    @EnableFlags(android.app.Flags.FLAG_API_RICH_ONGOING)
    public void testPostPromotableNotification_unimportantNotification() throws Exception {
        mBinderService.setCanBePromoted(mPkg, mUid, true, true);
        mContext.getTestablePermissions().setPermission(
                android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, PERMISSION_GRANTED);
        Notification n = new Notification.Builder(mContext, mMinChannel.getId())
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
                .setStyle(new Notification.BigTextStyle().setBigContentTitle("BIG"))