Merge "Change sort order of modes list" into main
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
index 69ef718..0d4ce5b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenMode.java
@@ -53,9 +53,11 @@
import com.android.settingslib.R;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Comparator;
import java.util.Objects;
/**
@@ -88,6 +90,33 @@
.allowPriorityChannels(false)
.build();
+ private static final Comparator<Integer> PRIORITIZED_TYPE_COMPARATOR = new Comparator<>() {
+
+ private static final ImmutableList</* @AutomaticZenRule.Type */ Integer>
+ PRIORITIZED_TYPES = ImmutableList.of(
+ AutomaticZenRule.TYPE_BEDTIME,
+ AutomaticZenRule.TYPE_DRIVING);
+
+ @Override
+ public int compare(Integer first, Integer second) {
+ if (PRIORITIZED_TYPES.contains(first) && PRIORITIZED_TYPES.contains(second)) {
+ return PRIORITIZED_TYPES.indexOf(first) - PRIORITIZED_TYPES.indexOf(second);
+ } else if (PRIORITIZED_TYPES.contains(first)) {
+ return -1;
+ } else if (PRIORITIZED_TYPES.contains(second)) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ };
+
+ // Manual DND first, Bedtime/Driving, then alphabetically.
+ static final Comparator<ZenMode> PRIORITIZING_COMPARATOR = Comparator
+ .comparing(ZenMode::isManualDnd).reversed()
+ .thenComparing(ZenMode::getType, PRIORITIZED_TYPE_COMPARATOR)
+ .thenComparing(ZenMode::getName);
+
public enum Status {
ENABLED,
ENABLED_AND_ACTIVE,
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
index 64e503b32..c8a12f4 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/ZenModesBackend.java
@@ -34,7 +34,6 @@
import java.time.Duration;
import java.util.ArrayList;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -92,10 +91,7 @@
}
}
- // Manual DND first, then alphabetically.
- modes.sort(Comparator.comparing(ZenMode::isManualDnd).reversed()
- .thenComparing(ZenMode::getName));
-
+ modes.sort(ZenMode.PRIORITIZING_COMPARATOR);
return modes;
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/modes/ZenModeTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/modes/ZenModeTest.java
index f464247..bab4bc3b 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/modes/ZenModeTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/modes/ZenModeTest.java
@@ -16,6 +16,12 @@
package com.android.settingslib.notification.modes;
+import static android.app.AutomaticZenRule.TYPE_BEDTIME;
+import static android.app.AutomaticZenRule.TYPE_DRIVING;
+import static android.app.AutomaticZenRule.TYPE_IMMERSIVE;
+import static android.app.AutomaticZenRule.TYPE_OTHER;
+import static android.app.AutomaticZenRule.TYPE_THEATER;
+import static android.app.AutomaticZenRule.TYPE_UNKNOWN;
import static android.app.NotificationManager.INTERRUPTION_FILTER_ALARMS;
import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE;
import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY;
@@ -38,6 +44,9 @@
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
+import java.util.ArrayList;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
public class ZenModeTest {
@@ -46,7 +55,7 @@
private static final AutomaticZenRule ZEN_RULE =
new AutomaticZenRule.Builder("Driving", Uri.parse("drive"))
.setPackage("com.some.driving.thing")
- .setType(AutomaticZenRule.TYPE_DRIVING)
+ .setType(TYPE_DRIVING)
.setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY)
.setZenPolicy(ZEN_POLICY)
.build();
@@ -226,6 +235,28 @@
}
@Test
+ public void comparator_prioritizes() {
+ ZenMode manualDnd = TestModeBuilder.MANUAL_DND_INACTIVE;
+ ZenMode driving1 = new TestModeBuilder().setName("b1").setType(TYPE_DRIVING).build();
+ ZenMode driving2 = new TestModeBuilder().setName("b2").setType(TYPE_DRIVING).build();
+ ZenMode bedtime1 = new TestModeBuilder().setName("c1").setType(TYPE_BEDTIME).build();
+ ZenMode bedtime2 = new TestModeBuilder().setName("c2").setType(TYPE_BEDTIME).build();
+ ZenMode other = new TestModeBuilder().setName("a1").setType(TYPE_OTHER).build();
+ ZenMode immersive = new TestModeBuilder().setName("a2").setType(TYPE_IMMERSIVE).build();
+ ZenMode unknown = new TestModeBuilder().setName("a3").setType(TYPE_UNKNOWN).build();
+ ZenMode theater = new TestModeBuilder().setName("a4").setType(TYPE_THEATER).build();
+
+ ArrayList<ZenMode> list = new ArrayList<>(List.of(other, theater, bedtime1, unknown,
+ driving2, manualDnd, driving1, bedtime2, immersive));
+ list.sort(ZenMode.PRIORITIZING_COMPARATOR);
+
+ assertThat(list)
+ .containsExactly(manualDnd, bedtime1, bedtime2, driving1, driving2, other,
+ immersive, unknown, theater)
+ .inOrder();
+ }
+
+ @Test
public void writeToParcel_equals() {
assertUnparceledIsEqualToOriginal("example",
new ZenMode("id", ZEN_RULE, zenConfigRuleFor(ZEN_RULE, false)));