1eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds/*
2eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * Copyright (C) 2017 The Android Open Source Project
3eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds *
4eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * Licensed under the Apache License, Version 2.0 (the "License");
5eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * you may not use this file except in compliance with the License.
6eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * You may obtain a copy of the License at
7eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds *
8eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds *      http://www.apache.org/licenses/LICENSE-2.0
9eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds *
10eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * Unless required by applicable law or agreed to in writing, software
11eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * distributed under the License is distributed on an "AS IS" BASIS,
12eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * See the License for the specific language governing permissions and
14eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds * limitations under the License.
15eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds */
16eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
17eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldspackage com.android.server.notification;
18eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
19eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport static android.app.NotificationManager.IMPORTANCE_LOW;
20eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
21eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport static junit.framework.Assert.assertEquals;
22eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport static junit.framework.Assert.assertFalse;
23eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport static junit.framework.Assert.assertNull;
24eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport static junit.framework.Assert.assertTrue;
25eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
26eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.app.Notification;
27eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.app.NotificationChannel;
28eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.os.Bundle;
29eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.os.UserHandle;
30eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.service.notification.Adjustment;
31eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.service.notification.SnoozeCriterion;
32eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport android.service.notification.StatusBarNotification;
33eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
34eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport org.junit.Test;
35eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
36eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport java.util.ArrayList;
37eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldsimport java.util.Objects;
38eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
39eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynoldspublic class NotificationAdjustmentExtractorTest extends NotificationTestCase {
40eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
41eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    @Test
42eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    public void testExtractsAdjustment() {
43eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        NotificationAdjustmentExtractor extractor = new NotificationAdjustmentExtractor();
44eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
45eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        NotificationRecord r = generateRecord();
46eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
47eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Bundle signals = new Bundle();
48eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        signals.putString(Adjustment.KEY_GROUP_KEY, GroupHelper.AUTOGROUP_KEY);
49eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        ArrayList<SnoozeCriterion> snoozeCriteria = new ArrayList<>();
50eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        snoozeCriteria.add(new SnoozeCriterion("n", "n", "n"));
51eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        signals.putParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA, snoozeCriteria);
52eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        ArrayList<String> people = new ArrayList<>();
53eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        people.add("you");
54eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        signals.putStringArrayList(Adjustment.KEY_PEOPLE, people);
55eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Adjustment adjustment = new Adjustment("pkg", r.getKey(), signals, "", 0);
56eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        r.addAdjustment(adjustment);
57eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
58eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
59eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(Objects.equals(people, r.getPeopleOverride()));
60eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(Objects.equals(snoozeCriteria, r.getSnoozeCriteria()));
61eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
62eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertNull(extractor.process(r));
63eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
64eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertTrue(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
65eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertEquals(people, r.getPeopleOverride());
66eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertEquals(snoozeCriteria, r.getSnoozeCriteria());
67eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    }
68eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
69eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    @Test
70eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    public void testExtractsAdjustments() {
71eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        NotificationAdjustmentExtractor extractor = new NotificationAdjustmentExtractor();
72eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
73eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        NotificationRecord r = generateRecord();
74eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
75eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Bundle pSignals = new Bundle();
76eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        ArrayList<String> people = new ArrayList<>();
77eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        people.add("you");
78eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        pSignals.putStringArrayList(Adjustment.KEY_PEOPLE, people);
79eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Adjustment pAdjustment = new Adjustment("pkg", r.getKey(), pSignals, "", 0);
80eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        r.addAdjustment(pAdjustment);
81eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
82eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Bundle sSignals = new Bundle();
83eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        ArrayList<SnoozeCriterion> snoozeCriteria = new ArrayList<>();
84eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        snoozeCriteria.add(new SnoozeCriterion("n", "n", "n"));
85eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        sSignals.putParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA, snoozeCriteria);
86eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Adjustment sAdjustment = new Adjustment("pkg", r.getKey(), sSignals, "", 0);
87eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        r.addAdjustment(sAdjustment);
88eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
89eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Bundle gSignals = new Bundle();
90eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        gSignals.putString(Adjustment.KEY_GROUP_KEY, GroupHelper.AUTOGROUP_KEY);
91eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Adjustment gAdjustment = new Adjustment("pkg", r.getKey(), gSignals, "", 0);
92eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        r.addAdjustment(gAdjustment);
93eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
94eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
95eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(Objects.equals(people, r.getPeopleOverride()));
96eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertFalse(Objects.equals(snoozeCriteria, r.getSnoozeCriteria()));
97eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
98eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertNull(extractor.process(r));
99eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
100eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertTrue(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
101eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertEquals(people, r.getPeopleOverride());
102eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        assertEquals(snoozeCriteria, r.getSnoozeCriteria());
103eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    }
104eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds
105eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    private NotificationRecord generateRecord() {
106eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
107eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        final Notification.Builder builder = new Notification.Builder(getContext())
108eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds                .setContentTitle("foo")
109eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds                .setSmallIcon(android.R.drawable.sym_def_app_icon);
110eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        Notification n = builder.build();
111eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
112eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds                0, n, UserHandle.ALL, null, System.currentTimeMillis());
113eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds       return new NotificationRecord(getContext(), sbn, channel);
114eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds    }
115eb3dca71b5df7fdf6299a3e65eb5d6fe8cb7bcbcJulia Reynolds}
116