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