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

Commit bd945c11 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "When a profile is stopped, remove pending snoozes" into tm-qpr-dev

parents 91a0bbdd 23be4d10
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1794,6 +1794,7 @@ public class NotificationManagerService extends SystemService {
                if (userHandle >= 0) {
                    cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, true, userHandle,
                            REASON_PROFILE_TURNED_OFF, null);
                    mSnoozeHelper.clearData(userHandle);
                }
            } else if (action.equals(Intent.ACTION_USER_PRESENT)) {
                // turn off LED when user passes through lock screen
+125 −265

File changed.

Preview size limit exceeded, changes collapsed.

+71 −20
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.notification.SnoozeHelper.EXTRA_KEY;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;

@@ -39,7 +40,6 @@ import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.SystemClock;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.test.suitebuilder.annotation.SmallTest;
@@ -50,7 +50,6 @@ import android.util.Xml;

import androidx.test.runner.AndroidJUnit4;

import com.android.internal.util.FastXmlSerializer;
import com.android.server.UiServiceTestCase;
import com.android.server.pm.PackageManagerService;

@@ -60,9 +59,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
@@ -197,18 +194,6 @@ public class SnoozeHelperTest extends UiServiceTestCase {
                        systemUser, "pkg", r.getKey()).longValue());
    }

    @Test
    public void testCleanupContextShouldRemovePersistedRecord() {
        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
        mSnoozeHelper.snooze(r, "context");
        mSnoozeHelper.cleanupPersistedContext(r.getSbn().getKey());
        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
                r.getUser().getIdentifier(),
                r.getSbn().getPackageName(),
                r.getSbn().getKey()
        ));
    }

    @Test
    public void testReadNoneSnoozedNotification() throws XmlPullParserException,
            IOException, InterruptedException {
@@ -219,8 +204,9 @@ public class SnoozeHelperTest extends UiServiceTestCase {
        assertEquals("should see a zero value for unsnoozed notification",
                0L,
                mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
                        UserHandle.SYSTEM.getIdentifier(),
                        "not_my_package", r.getKey()).longValue());
                        UserHandle.SYSTEM.getIdentifier(), "not_my_package",
                        getNotificationRecord("not_my_package", 1, "one",
                                UserHandle.SYSTEM).getKey()).longValue());
    }

    @Test
@@ -592,7 +578,7 @@ public class SnoozeHelperTest extends UiServiceTestCase {
    }

    @Test
    public void testClearData() {
    public void testClearData_userPackage() {
        // snooze 2 from same package
        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
        NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
@@ -615,17 +601,72 @@ public class SnoozeHelperTest extends UiServiceTestCase {
        verify(mAm, times(4)).cancel(any(PendingIntent.class));
    }

    @Test
    public void testClearData_user() {
        // snooze 2 from same package
        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
        NotificationRecord r2 = getNotificationRecord("pkg2", 2, "two", UserHandle.SYSTEM);
        NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
        NotificationRecord r4 = getNotificationRecord("pkg", 2, "two", UserHandle.ALL);
        mSnoozeHelper.snooze(r, 1000);
        mSnoozeHelper.snooze(r2, 1000);
        mSnoozeHelper.snooze(r3, "until");
        mSnoozeHelper.snooze(r4, "until");

        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r2.getSbn().getPackageName(), r2.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_ALL, r4.getSbn().getPackageName(), r4.getKey()));

        // clear data
        mSnoozeHelper.clearData(UserHandle.USER_SYSTEM);

        // nothing in USER_SYSTEM snoozed; alarms canceled
        assertFalse(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
        assertFalse(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r2.getSbn().getPackageName(), r2.getKey()));
        assertFalse(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r4.getSbn().getPackageName(), r4.getKey()));

        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
                r3.getUser().getIdentifier(), r3.getSbn().getPackageName(),
                r3.getSbn().getKey()));
        assertNotNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
                r4.getUser().getIdentifier(), r4.getSbn().getPackageName(),
                r4.getSbn().getKey()));
        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
                r.getUser().getIdentifier(), r.getSbn().getPackageName(),
                r.getSbn().getKey()).longValue());
        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
                r2.getUser().getIdentifier(), r2.getSbn().getPackageName(),
                r2.getSbn().getKey()).longValue());

        // 2 for initial timed-snoozes, once each for canceling the USER_SYSTEM snoozes
        verify(mAm, times(5)).cancel(any(PendingIntent.class));
    }

    @Test
    public void testClearData_otherRecordsUntouched() {
        // 2 packages, 2 users
        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
        NotificationRecord rb = getNotificationRecord("pkg", 1, "oneb", UserHandle.SYSTEM);
        NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.ALL);
        NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
        mSnoozeHelper.snooze(r, 1000);
        mSnoozeHelper.snooze(rb, "until");
        mSnoozeHelper.snooze(r2, 1000);
        mSnoozeHelper.snooze(r3, 1000);
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, rb.getSbn().getPackageName(), rb.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_ALL, r2.getSbn().getPackageName(), r2.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
@@ -636,12 +677,22 @@ public class SnoozeHelperTest extends UiServiceTestCase {

        assertFalse(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
        assertFalse(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, rb.getSbn().getPackageName(), rb.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_ALL, r2.getSbn().getPackageName(), r2.getKey()));
        assertTrue(mSnoozeHelper.isSnoozed(
                UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));

        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
                rb.getUser().getIdentifier(), rb.getSbn().getPackageName(),
                rb.getSbn().getKey()));
        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
                r.getUser().getIdentifier(), r.getSbn().getPackageName(),
                r.getSbn().getKey()).longValue());

        // once for each initial snooze, once for canceling one snooze
        verify(mAm, times(4)).cancel(any(PendingIntent.class));
        verify(mAm, times(5)).cancel(any(PendingIntent.class));
    }

    private NotificationRecord getNotificationRecord(String pkg, int id, String tag,