Merge "Remove "Always show icon when in vibrate mode"" into tm-qpr-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 42f8e4c..dfb9964 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9895,6 +9895,9 @@
     <!-- [CHAR LIMIT=NONE] Text appearing when channel group notifications are off -->
     <string name="channel_group_notifications_off_desc">At your request, Android is blocking this group of notifications from appearing on this device</string>
 
+    <!-- [CHAR LIMIT=NONE] Text appearing when app does not send notifications -->
+    <string name="app_notifications_not_send_desc">This app does not send notifications</string>
+
     <!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
     <string name="notification_channels">Categories</string>
 
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 150dbe0..68f5d08 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -126,6 +126,7 @@
             if (app.requestedPermissions == null || Arrays.stream(app.requestedPermissions)
                     .noneMatch(p -> p.equals(android.Manifest.permission.POST_NOTIFICATIONS))) {
                 row.lockedImportance = true;
+                row.permissionStateLocked = true;
             }
         }
     }
@@ -684,6 +685,9 @@
         public boolean systemApp;
         public boolean lockedImportance;
         public boolean showBadge;
+        // For apps target T but have not but has not requested the permission
+        // we cannot change the permission state
+        public boolean permissionStateLocked;
         public int bubblePreference = NotificationManager.BUBBLE_PREFERENCE_NONE;
         public int userId;
         public int blockedChannelCount;
diff --git a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
index 0c7cd23..04e3f0e 100644
--- a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
+++ b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
@@ -62,6 +62,8 @@
                 preference.setTitle(R.string.channel_notifications_off_desc);
             } else if (mChannelGroup != null) {
                 preference.setTitle(R.string.channel_group_notifications_off_desc);
+            } else if (mAppRow.permissionStateLocked) {
+                preference.setTitle(R.string.app_notifications_not_send_desc);
             } else {
                 preference.setTitle(R.string.app_notifications_off_desc);
             }
diff --git a/tests/robotests/src/com/android/settings/notification/app/NotificationsOffPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/NotificationsOffPreferenceControllerTest.java
index 34e94a0..2eebd3a 100644
--- a/tests/robotests/src/com/android/settings/notification/app/NotificationsOffPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/NotificationsOffPreferenceControllerTest.java
@@ -20,6 +20,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -32,6 +33,7 @@
 
 import androidx.preference.Preference;
 
+import com.android.settings.R;
 import com.android.settings.notification.NotificationBackend;
 
 import com.google.common.collect.ImmutableList;
@@ -157,4 +159,23 @@
         assertThat(pref.getTitle().toString()).contains("app");
         assertThat(pref.isSelectable()).isFalse();
     }
+
+    @Test
+    public void testUpdateState_whenToggleDisabled() {
+        // Given: the app does not request to post notifications
+        // and it's preference toggle is disabled
+        NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+        appRow.banned = true;
+        appRow.permissionStateLocked = true;
+        mController.onResume(appRow, null, null, null, null, null, null);
+        Preference pref = new Preference(RuntimeEnvironment.application);
+
+        // When: updateState(Preference preference) is called
+        mController.updateState(pref);
+
+        // Then: title of pref should be app_notifications_not_send_desc
+        assertEquals(
+                RuntimeEnvironment.application.getString(R.string.app_notifications_not_send_desc),
+                pref.getTitle().toString());
+    }
 }