Restore original importance when unblocking notif channel

Test: atest
Fixes: 62355992
Change-Id: I5d764d0ade68b2ce5708ae79e9ef488ab57bb141
(cherry picked from commit e2a8266328)
This commit is contained in:
Julia Reynolds
2020-07-08 15:09:41 -04:00
parent ffda931026
commit 2700b83c48
3 changed files with 9 additions and 26 deletions

View File

@@ -106,8 +106,11 @@ public class BlockPreferenceController extends NotificationPreferenceController
// It's always safe to override the importance if it's meant to be blocked or if // It's always safe to override the importance if it's meant to be blocked or if
// it was blocked and we are unblocking it. // it was blocked and we are unblocking it.
if (blocked || originalImportance == IMPORTANCE_NONE) { if (blocked || originalImportance == IMPORTANCE_NONE) {
final int importance = blocked ? IMPORTANCE_NONE final int importance = blocked
: isDefaultChannel() ? IMPORTANCE_UNSPECIFIED : IMPORTANCE_DEFAULT; ? IMPORTANCE_NONE
: isDefaultChannel()
? IMPORTANCE_UNSPECIFIED
: mChannel.getOriginalImportance();
mChannel.setImportance(importance); mChannel.setImportance(importance);
saveChannel(); saveChannel();
} }

View File

@@ -207,17 +207,14 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
channelPref.setOnPreferenceChangeListener( channelPref.setOnPreferenceChangeListener(
(preference, o) -> { (preference, o) -> {
boolean value = (Boolean) o; boolean value = (Boolean) o;
int importance = value ? IMPORTANCE_LOW : IMPORTANCE_NONE; int importance = value ? channel.getOriginalImportance() : IMPORTANCE_NONE;
channel.setImportance(importance); channel.setImportance(importance);
channel.lockFields( channel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
NotificationChannel.USER_LOCKED_IMPORTANCE);
MasterSwitchPreference channelPref1 = (MasterSwitchPreference) preference; MasterSwitchPreference channelPref1 = (MasterSwitchPreference) preference;
channelPref1.setIcon(null); channelPref1.setIcon(null);
if (channel.getImportance() > IMPORTANCE_LOW) { if (channel.getImportance() > IMPORTANCE_LOW) {
channelPref1.setIcon(getAlertingIcon()); channelPref1.setIcon(getAlertingIcon());
} }
toggleBehaviorIconState(channelPref1.getIcon(),
importance != IMPORTANCE_NONE);
mBackend.updateChannel(mAppRow.pkg, mAppRow.uid, channel); mBackend.updateChannel(mAppRow.pkg, mAppRow.uid, channel);
return true; return true;
@@ -234,24 +231,6 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
return icon; return icon;
} }
private void toggleBehaviorIconState(Drawable icon, boolean enabled) {
if (icon == null) return;
LayerDrawable layerDrawable = (LayerDrawable) icon;
GradientDrawable background =
(GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.back);
if (background == null) return;
if (enabled) {
background.clearColorFilter();
} else {
background.setColorFilter(new BlendModeColorFilter(
mContext.getColor(R.color.material_grey_300),
BlendMode.SRC_IN));
}
}
protected void onGroupBlockStateChanged(NotificationChannelGroup group) { protected void onGroupBlockStateChanged(NotificationChannelGroup group) {
if (group == null) { if (group == null) {
return; return;

View File

@@ -368,6 +368,7 @@ public class BlockPreferenceControllerTest {
public void testOnSwitchChanged_channel_nonDefault() { public void testOnSwitchChanged_channel_nonDefault() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH); NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
channel.setOriginalImportance(IMPORTANCE_HIGH);
mController.onResume(appRow, channel, null, null, null, null); mController.onResume(appRow, channel, null, null, null, null);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -375,7 +376,7 @@ public class BlockPreferenceControllerTest {
assertEquals(IMPORTANCE_NONE, channel.getImportance()); assertEquals(IMPORTANCE_NONE, channel.getImportance());
mController.onSwitchChanged(null, true); mController.onSwitchChanged(null, true);
assertEquals(IMPORTANCE_DEFAULT, channel.getImportance()); assertEquals(IMPORTANCE_HIGH, channel.getImportance());
verify(mBackend, times(2)).updateChannel(any(), anyInt(), any()); verify(mBackend, times(2)).updateChannel(any(), anyInt(), any());
} }