diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 138930beb0d..e1b21388050 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -37,14 +37,11 @@ import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.service.notification.ConversationChannelWrapper; -import android.service.notification.NotifyingApp; import android.text.format.DateUtils; import android.util.IconDrawableFactory; import android.util.Log; @@ -522,17 +519,17 @@ public class NotificationBackend { } public Drawable getConversationDrawable(Context context, ShortcutInfo info, String pkg, - int uid) { + int uid, boolean important) { if (info == null) { return null; } ConversationIconFactory iconFactory = new ConversationIconFactory(context, context.getSystemService(LauncherApps.class), - context.getPackageManager(), IconDrawableFactory.newInstance(context), + context.getPackageManager(), + IconDrawableFactory.newInstance(context, false), context.getResources().getDimensionPixelSize( R.dimen.conversation_icon_size)); - return new BitmapDrawable(context.getResources(), - iconFactory.getConversationBitmap(info, pkg, uid)); + return iconFactory.getConversationDrawable(info, pkg, uid, important); } public void requestPinShortcut(Context context, ShortcutInfo shortcutInfo) { diff --git a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java index b36c2940240..32278db907a 100644 --- a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java +++ b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java @@ -127,7 +127,8 @@ public class AppConversationListPreferenceController extends NotificationPrefere conversation.getParentChannelLabel(), conversation.getGroupLabel()) : conversation.getParentChannelLabel()); if (si != null) { - pref.setIcon(mBackend.getConversationDrawable(mContext, si, mAppRow.pkg, mAppRow.uid)); + pref.setIcon(mBackend.getConversationDrawable(mContext, si, mAppRow.pkg, mAppRow.uid, + conversation.getNotificationChannel().isImportantConversation())); } pref.setKey(conversation.getNotificationChannel().getId()); diff --git a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java index 369f3af92e7..c74b032b4cb 100644 --- a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java @@ -86,6 +86,7 @@ public class ConversationHeaderPreferenceController extends NotificationPreferen .setHasAppInfoLink(true) .setRecyclerView(mFragment.getListView(), mFragment.getSettingsLifecycle()) .done(activity, mContext); + pref.findViewById(R.id.entity_header).setVisibility(View.VISIBLE); } } diff --git a/src/com/android/settings/notification/app/ConversationImportantPreferenceController.java b/src/com/android/settings/notification/app/ConversationImportantPreferenceController.java index 35e1f7d3a3f..0b1ee16e8a5 100644 --- a/src/com/android/settings/notification/app/ConversationImportantPreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationImportantPreferenceController.java @@ -74,8 +74,8 @@ public class ConversationImportantPreferenceController extends NotificationPrefe mChannel.setImportantConversation(value); if (value && bubbleImportantConversations()) { mChannel.setAllowBubbles(true); - mDependentFieldListener.onFieldValueChanged(); } + mDependentFieldListener.onFieldValueChanged(); saveChannel(); return true; diff --git a/src/com/android/settings/notification/app/ConversationListPreferenceController.java b/src/com/android/settings/notification/app/ConversationListPreferenceController.java index 79ed28cbdb8..0ca31dfa4d9 100644 --- a/src/com/android/settings/notification/app/ConversationListPreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationListPreferenceController.java @@ -88,7 +88,8 @@ public abstract class ConversationListPreferenceController extends AbstractPrefe pref.setTitle(getTitle(conversation)); pref.setSummary(getSummary(conversation)); pref.setIcon(mBackend.getConversationDrawable(mContext, conversation.getShortcutInfo(), - conversation.getPkg(), conversation.getUid())); + conversation.getPkg(), conversation.getUid(), + conversation.getNotificationChannel().isImportantConversation())); pref.setKey(conversation.getNotificationChannel().getId()); pref.setIntent(getIntent(conversation, pref.getTitle())); diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java index 9d5217829ef..af1d9c1e7f4 100644 --- a/src/com/android/settings/notification/app/NotificationSettings.java +++ b/src/com/android/settings/notification/app/NotificationSettings.java @@ -49,6 +49,7 @@ import com.android.settings.applications.AppInfoBase; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.notification.NotificationBackend; import com.android.settingslib.RestrictedLockUtilsInternal; +import com.android.settingslib.notification.ConversationIconFactory; import java.util.ArrayList; import java.util.List; @@ -204,7 +205,8 @@ abstract public class NotificationSettings extends DashboardFragment { mContext, mPkg, mUid, mChannel.getConversationId()); if (mConversationInfo != null) { mConversationDrawable = mBackend.getConversationDrawable( - mContext, mConversationInfo, mAppRow.pkg, mAppRow.uid); + mContext, mConversationInfo, mAppRow.pkg, mAppRow.uid, + mChannel.isImportantConversation()); } } @@ -329,6 +331,12 @@ abstract public class NotificationSettings extends DashboardFragment { protected class DependentFieldListener { protected void onFieldValueChanged() { + // Reload the conversation drawable, which shows some channel/conversation state + if (mConversationDrawable != null && mConversationDrawable + instanceof ConversationIconFactory.ConversationIconDrawable) { + ((ConversationIconFactory.ConversationIconDrawable) mConversationDrawable) + .setImportant(mChannel.isImportantConversation()); + } final PreferenceScreen screen = getPreferenceScreen(); for (NotificationPreferenceController controller : mControllers) { controller.displayPreference(screen); diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java index 440882f14d7..654d50b71e1 100644 --- a/src/com/android/settings/widget/EntityHeaderController.java +++ b/src/com/android/settings/widget/EntityHeaderController.java @@ -135,7 +135,8 @@ public class EntityHeaderController { */ public EntityHeaderController setIcon(Drawable icon) { if (icon != null) { - mIcon = icon.getConstantState().newDrawable(mAppContext.getResources()); + final Drawable.ConstantState state = icon.getConstantState(); + mIcon = state != null ? state.newDrawable(mAppContext.getResources()) : icon; } return this; } diff --git a/tests/robotests/src/com/android/settings/notification/app/ConversationImportantPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/ConversationImportantPreferenceControllerTest.java index 783b40f908e..42b785976bd 100644 --- a/tests/robotests/src/com/android/settings/notification/app/ConversationImportantPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/app/ConversationImportantPreferenceControllerTest.java @@ -26,7 +26,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -156,7 +155,7 @@ public class ConversationImportantPreferenceControllerTest { assertTrue(channel.isImportantConversation()); assertFalse(channel.canBubble()); verify(mBackend, times(1)).updateChannel(any(), anyInt(), any()); - verify(mDependentFieldListener, never()).onFieldValueChanged(); + verify(mDependentFieldListener, times(1)).onFieldValueChanged(); } @Test @@ -202,6 +201,6 @@ public class ConversationImportantPreferenceControllerTest { assertFalse(channel.isImportantConversation()); assertFalse(channel.canBubble()); verify(mBackend, times(1)).updateChannel(any(), anyInt(), any()); - verify(mDependentFieldListener, never()).onFieldValueChanged(); + verify(mDependentFieldListener, times(1)).onFieldValueChanged(); } }