Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0af99f5f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Change sort order of modes list" into main

parents 950eda79 d7a8e9bc
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -53,9 +53,11 @@ import androidx.annotation.Nullable;
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 @@ public class ZenMode implements Parcelable {
                    .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,
+1 −5
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import com.android.settingslib.R;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

@@ -92,10 +91,7 @@ public class ZenModesBackend {
            }
        }

        // Manual DND first, then alphabetically.
        modes.sort(Comparator.comparing(ZenMode::isManualDnd).reversed()
                .thenComparing(ZenMode::getName));

        modes.sort(ZenMode.PRIORITIZING_COMPARATOR);
        return modes;
    }

+32 −1
Original line number Diff line number Diff line
@@ -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.Test;
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 @@ public class ZenModeTest {
    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();
@@ -225,6 +234,28 @@ public class ZenModeTest {
        assertThat(zenMode.getRule().getZenPolicy()).isEqualTo(ZEN_POLICY);
    }

    @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",