Restore original importance when unblocking notif channel
Test: atest
Fixes: 62355992
Change-Id: I5d764d0ade68b2ce5708ae79e9ef488ab57bb141
(cherry picked from commit e2a8266328
)
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user