From 451bd654718e9f8afa7f86158f59f48cf628d877 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Mon, 28 Oct 2024 09:47:02 -0400 Subject: [PATCH] Fix incorrect Settings assumption Most apps will not have 4 bundle channels, even when the flag is on Test: BundleListPreferenceControllerTest Fixes: 375674236 Flag: android.service.notification.notification_classification Change-Id: Iab8e241881f9af71744b46fce356604cf9ed369c --- .../app/BundleListPreferenceController.java | 30 +++++++++---- .../BundleListPreferenceControllerTest.java | 44 +++++++++++++------ 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/com/android/settings/notification/app/BundleListPreferenceController.java b/src/com/android/settings/notification/app/BundleListPreferenceController.java index 82e910cea8f..9ada049ef87 100644 --- a/src/com/android/settings/notification/app/BundleListPreferenceController.java +++ b/src/com/android/settings/notification/app/BundleListPreferenceController.java @@ -91,14 +91,27 @@ public class BundleListPreferenceController extends NotificationPreferenceContro public void updateState(Preference preference) { PreferenceCategory category = (PreferenceCategory) preference; - createOrUpdatePrefForChannel(category, - mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)); - createOrUpdatePrefForChannel(category, - mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)); - createOrUpdatePrefForChannel(category, - mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)); - createOrUpdatePrefForChannel(category, - mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)); + NotificationChannel promos = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID); + if (promos != null) { + createOrUpdatePrefForChannel(category, promos); + } + NotificationChannel recs = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID); + if (recs != null) { + createOrUpdatePrefForChannel(category, recs); + } + NotificationChannel social = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID); + if (social != null) { + createOrUpdatePrefForChannel(category, social); + } + NotificationChannel news = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID); + if (news != null) { + createOrUpdatePrefForChannel(category, news); + } + + int preferenceCount = ((PreferenceGroup) preference).getPreferenceCount(); + if (preferenceCount == 0) { + preference.setVisible(false); + } } @NonNull @@ -167,5 +180,4 @@ public class BundleListPreferenceController extends NotificationPreferenceContro icon.setTintList(Utils.getColorAccent(mContext)); return icon; } - } diff --git a/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java index 8b8c77e9f30..a8de8ef533e 100644 --- a/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java @@ -89,15 +89,6 @@ public class BundleListPreferenceControllerTest { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mGroupList = new PreferenceCategory(mContext); mPreferenceScreen.addPreference(mGroupList); - - when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn( - new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2)); - when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn( - new NotificationChannel(NEWS_ID, NEWS_ID, 2)); - when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn( - new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2)); - when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn( - new NotificationChannel(RECS_ID, RECS_ID, 2)); } @Test @@ -132,6 +123,14 @@ public class BundleListPreferenceControllerTest { @Test public void updateState() { + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn( + new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn( + new NotificationChannel(NEWS_ID, NEWS_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn( + new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn( + new NotificationChannel(RECS_ID, RECS_ID, 2)); mController.updateState(mGroupList); assertThat(mGroupList.getPreferenceCount()).isEqualTo(4); assertThat(mGroupList.findPreference(PROMOTIONS_ID).getTitle()).isEqualTo(PROMOTIONS_ID); @@ -142,19 +141,38 @@ public class BundleListPreferenceControllerTest { } @Test - public void updateState_updateChildren() { + public void updateState_noBundles() { mController.updateState(mGroupList); - assertThat(mGroupList.getPreferenceCount()).isEqualTo(4); + assertThat(mGroupList.getPreferenceCount()).isEqualTo(0); + assertThat(mGroupList.isVisible()).isFalse(); + } + @Test + public void updateState_onlySomeBundlesUsed() { when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn( new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2)); + mController.updateState(mGroupList); + assertThat(mGroupList.getPreferenceCount()).isEqualTo(1); + assertThat(mGroupList.findPreference(PROMOTIONS_ID).getTitle()).isEqualTo(PROMOTIONS_ID); + } + + @Test + public void updateState_noDuplicateChannelsOnReload() { + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn( + new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn( + new NotificationChannel(NEWS_ID, NEWS_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn( + new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2)); + when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn( + new NotificationChannel(RECS_ID, RECS_ID, 2)); mController.updateState(mGroupList); assertThat(mGroupList.getPreferenceCount()).isEqualTo(4); + mController.updateState(mGroupList); + assertThat(mGroupList.getPreferenceCount()).isEqualTo(4); assertThat(((PrimarySwitchPreference) mGroupList.findPreference(NEWS_ID)).isChecked()) .isEqualTo(false); - assertThat(((PrimarySwitchPreference) mGroupList.findPreference(NEWS_ID)).isChecked()) - .isEqualTo(false); } }