11031c974855ff4117a6d7866e664295786840319Chris Wren/* 21031c974855ff4117a6d7866e664295786840319Chris Wren * Copyright (C) 2014 The Android Open Source Project 31031c974855ff4117a6d7866e664295786840319Chris Wren * 41031c974855ff4117a6d7866e664295786840319Chris Wren * Licensed under the Apache License, Version 2.0 (the "License"); 51031c974855ff4117a6d7866e664295786840319Chris Wren * you may not use this file except in compliance with the License. 61031c974855ff4117a6d7866e664295786840319Chris Wren * You may obtain a copy of the License at 71031c974855ff4117a6d7866e664295786840319Chris Wren * 81031c974855ff4117a6d7866e664295786840319Chris Wren * http://www.apache.org/licenses/LICENSE-2.0 91031c974855ff4117a6d7866e664295786840319Chris Wren * 101031c974855ff4117a6d7866e664295786840319Chris Wren * Unless required by applicable law or agreed to in writing, software 111031c974855ff4117a6d7866e664295786840319Chris Wren * distributed under the License is distributed on an "AS IS" BASIS, 121031c974855ff4117a6d7866e664295786840319Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131031c974855ff4117a6d7866e664295786840319Chris Wren * See the License for the specific language governing permissions and 141031c974855ff4117a6d7866e664295786840319Chris Wren * limitations under the License. 151031c974855ff4117a6d7866e664295786840319Chris Wren */ 161031c974855ff4117a6d7866e664295786840319Chris Wrenpackage com.android.server.notification; 171031c974855ff4117a6d7866e664295786840319Chris Wren 185eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wrenimport org.mockito.Mock; 195eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wrenimport org.mockito.MockitoAnnotations; 205eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren 211031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.app.Notification; 221031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.os.UserHandle; 231031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.service.notification.StatusBarNotification; 241031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.test.AndroidTestCase; 251031c974855ff4117a6d7866e664295786840319Chris Wrenimport android.test.suitebuilder.annotation.SmallTest; 261031c974855ff4117a6d7866e664295786840319Chris Wren 271031c974855ff4117a6d7866e664295786840319Chris Wrenimport java.util.ArrayList; 281031c974855ff4117a6d7866e664295786840319Chris Wren 291031c974855ff4117a6d7866e664295786840319Chris Wrenpublic class RankingHelperTest extends AndroidTestCase { 305eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren @Mock NotificationUsageStats mUsageStats; 3151017d0e23ce9855fabcf786a2067ceb19121fbcChris Wren @Mock RankingHandler handler; 321031c974855ff4117a6d7866e664295786840319Chris Wren 331031c974855ff4117a6d7866e664295786840319Chris Wren private Notification mNotiGroupGSortA; 341031c974855ff4117a6d7866e664295786840319Chris Wren private Notification mNotiGroupGSortB; 351031c974855ff4117a6d7866e664295786840319Chris Wren private Notification mNotiNoGroup; 361031c974855ff4117a6d7866e664295786840319Chris Wren private Notification mNotiNoGroup2; 371031c974855ff4117a6d7866e664295786840319Chris Wren private Notification mNotiNoGroupSortA; 381031c974855ff4117a6d7866e664295786840319Chris Wren private NotificationRecord mRecordGroupGSortA; 391031c974855ff4117a6d7866e664295786840319Chris Wren private NotificationRecord mRecordGroupGSortB; 401031c974855ff4117a6d7866e664295786840319Chris Wren private NotificationRecord mRecordNoGroup; 411031c974855ff4117a6d7866e664295786840319Chris Wren private NotificationRecord mRecordNoGroup2; 421031c974855ff4117a6d7866e664295786840319Chris Wren private NotificationRecord mRecordNoGroupSortA; 431031c974855ff4117a6d7866e664295786840319Chris Wren private RankingHelper mHelper; 441031c974855ff4117a6d7866e664295786840319Chris Wren 451031c974855ff4117a6d7866e664295786840319Chris Wren @Override 461031c974855ff4117a6d7866e664295786840319Chris Wren public void setUp() { 475eab2b72afe5b20dc66c237b1cceedfc09de2d52Chris Wren MockitoAnnotations.initMocks(this); 481031c974855ff4117a6d7866e664295786840319Chris Wren UserHandle user = UserHandle.ALL; 491031c974855ff4117a6d7866e664295786840319Chris Wren 505d25ee7a006fda7150ba251cff92c27130611f88Julia Reynolds mHelper = new RankingHelper(getContext(), handler, mUsageStats, 51ef37f284364cc45c2ed91bfe04c489d2cedd32d2Julia Reynolds new String[] {ImportanceExtractor.class.getName()}); 521031c974855ff4117a6d7866e664295786840319Chris Wren 531031c974855ff4117a6d7866e664295786840319Chris Wren mNotiGroupGSortA = new Notification.Builder(getContext()) 541031c974855ff4117a6d7866e664295786840319Chris Wren .setContentTitle("A") 551031c974855ff4117a6d7866e664295786840319Chris Wren .setGroup("G") 561031c974855ff4117a6d7866e664295786840319Chris Wren .setSortKey("A") 571031c974855ff4117a6d7866e664295786840319Chris Wren .setWhen(1205) 581031c974855ff4117a6d7866e664295786840319Chris Wren .build(); 59bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren mRecordGroupGSortA = new NotificationRecord(getContext(), new StatusBarNotification( 60bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren "package", "package", 1, null, 0, 0, 0, mNotiGroupGSortA, user)); 611031c974855ff4117a6d7866e664295786840319Chris Wren 621031c974855ff4117a6d7866e664295786840319Chris Wren mNotiGroupGSortB = new Notification.Builder(getContext()) 631031c974855ff4117a6d7866e664295786840319Chris Wren .setContentTitle("B") 641031c974855ff4117a6d7866e664295786840319Chris Wren .setGroup("G") 651031c974855ff4117a6d7866e664295786840319Chris Wren .setSortKey("B") 661031c974855ff4117a6d7866e664295786840319Chris Wren .setWhen(1200) 671031c974855ff4117a6d7866e664295786840319Chris Wren .build(); 68bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren mRecordGroupGSortB = new NotificationRecord(getContext(), new StatusBarNotification( 69bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren "package", "package", 1, null, 0, 0, 0, mNotiGroupGSortB, user)); 701031c974855ff4117a6d7866e664295786840319Chris Wren 711031c974855ff4117a6d7866e664295786840319Chris Wren mNotiNoGroup = new Notification.Builder(getContext()) 721031c974855ff4117a6d7866e664295786840319Chris Wren .setContentTitle("C") 731031c974855ff4117a6d7866e664295786840319Chris Wren .setWhen(1201) 741031c974855ff4117a6d7866e664295786840319Chris Wren .build(); 75bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren mRecordNoGroup = new NotificationRecord(getContext(), new StatusBarNotification( 76bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren "package", "package", 1, null, 0, 0, 0, mNotiNoGroup, user)); 771031c974855ff4117a6d7866e664295786840319Chris Wren 781031c974855ff4117a6d7866e664295786840319Chris Wren mNotiNoGroup2 = new Notification.Builder(getContext()) 791031c974855ff4117a6d7866e664295786840319Chris Wren .setContentTitle("D") 801031c974855ff4117a6d7866e664295786840319Chris Wren .setWhen(1202) 811031c974855ff4117a6d7866e664295786840319Chris Wren .build(); 82bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren mRecordNoGroup2 = new NotificationRecord(getContext(), new StatusBarNotification( 83bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren "package", "package", 1, null, 0, 0, 0, mNotiNoGroup2, user)); 841031c974855ff4117a6d7866e664295786840319Chris Wren 851031c974855ff4117a6d7866e664295786840319Chris Wren mNotiNoGroupSortA = new Notification.Builder(getContext()) 861031c974855ff4117a6d7866e664295786840319Chris Wren .setContentTitle("E") 871031c974855ff4117a6d7866e664295786840319Chris Wren .setWhen(1201) 881031c974855ff4117a6d7866e664295786840319Chris Wren .setSortKey("A") 891031c974855ff4117a6d7866e664295786840319Chris Wren .build(); 90bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren mRecordNoGroupSortA = new NotificationRecord(getContext(), new StatusBarNotification( 91bdf3376616c276ed18a51185351b44fd16eeae29Chris Wren "package", "package", 1, null, 0, 0, 0, mNotiNoGroupSortA, user)); 921031c974855ff4117a6d7866e664295786840319Chris Wren } 931031c974855ff4117a6d7866e664295786840319Chris Wren 941031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 951031c974855ff4117a6d7866e664295786840319Chris Wren public void testFindAfterRankingWithASplitGroup() throws Exception { 961031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(3); 971031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordGroupGSortA); 981031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordGroupGSortB); 991031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroup); 1001031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroupSortA); 1011031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1021031c974855ff4117a6d7866e664295786840319Chris Wren assertTrue(mHelper.indexOf(notificationList, mRecordGroupGSortA) >= 0); 1031031c974855ff4117a6d7866e664295786840319Chris Wren assertTrue(mHelper.indexOf(notificationList, mRecordGroupGSortB) >= 0); 1041031c974855ff4117a6d7866e664295786840319Chris Wren assertTrue(mHelper.indexOf(notificationList, mRecordNoGroup) >= 0); 1051031c974855ff4117a6d7866e664295786840319Chris Wren assertTrue(mHelper.indexOf(notificationList, mRecordNoGroupSortA) >= 0); 1061031c974855ff4117a6d7866e664295786840319Chris Wren } 1071031c974855ff4117a6d7866e664295786840319Chris Wren 1081031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 1091031c974855ff4117a6d7866e664295786840319Chris Wren public void testSortShouldNotThrowWithPlainNotifications() throws Exception { 1101031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(2); 1111031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroup); 1121031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroup2); 1131031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1141031c974855ff4117a6d7866e664295786840319Chris Wren } 1151031c974855ff4117a6d7866e664295786840319Chris Wren 1161031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 1171031c974855ff4117a6d7866e664295786840319Chris Wren public void testSortShouldNotThrowOneSorted() throws Exception { 1181031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(2); 1191031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroup); 1201031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroupSortA); 1211031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1221031c974855ff4117a6d7866e664295786840319Chris Wren } 1231031c974855ff4117a6d7866e664295786840319Chris Wren 1241031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 1251031c974855ff4117a6d7866e664295786840319Chris Wren public void testSortShouldNotThrowOneNotification() throws Exception { 1261031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(1); 1271031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordNoGroup); 1281031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1291031c974855ff4117a6d7866e664295786840319Chris Wren } 1301031c974855ff4117a6d7866e664295786840319Chris Wren 1311031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 1321031c974855ff4117a6d7866e664295786840319Chris Wren public void testSortShouldNotThrowOneSortKey() throws Exception { 1331031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(1); 1341031c974855ff4117a6d7866e664295786840319Chris Wren notificationList.add(mRecordGroupGSortB); 1351031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1361031c974855ff4117a6d7866e664295786840319Chris Wren } 1371031c974855ff4117a6d7866e664295786840319Chris Wren 1381031c974855ff4117a6d7866e664295786840319Chris Wren @SmallTest 1391031c974855ff4117a6d7866e664295786840319Chris Wren public void testSortShouldNotThrowOnEmptyList() throws Exception { 1401031c974855ff4117a6d7866e664295786840319Chris Wren ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>(); 1411031c974855ff4117a6d7866e664295786840319Chris Wren mHelper.sort(notificationList); 1421031c974855ff4117a6d7866e664295786840319Chris Wren } 1431031c974855ff4117a6d7866e664295786840319Chris Wren} 144