18a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds/* 28a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * Copyright (C) 2017 The Android Open Source Project 38a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * 48a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * Licensed under the Apache License, Version 2.0 (the "License"); 58a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * you may not use this file except in compliance with the License. 68a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * You may obtain a copy of the License at 78a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * 88a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * http://www.apache.org/licenses/LICENSE-2.0 98a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * 108a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * Unless required by applicable law or agreed to in writing, software 118a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * distributed under the License is distributed on an "AS IS" BASIS, 128a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * See the License for the specific language governing permissions and 148a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds * limitations under the License 158a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds */ 168a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 178a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldspackage com.android.server.notification; 188a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 198a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static junit.framework.Assert.assertEquals; 208a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static junit.framework.Assert.assertNotNull; 218a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static junit.framework.Assert.assertNull; 228a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 237217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport static org.junit.Assert.assertFalse; 248a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static org.junit.Assert.assertTrue; 257217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport static org.mockito.Mockito.mock; 268a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static org.mockito.Mockito.spy; 278a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport static org.mockito.Mockito.when; 2830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsenimport static org.mockito.Matchers.any; 2930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsenimport static org.mockito.Matchers.anyInt; 308a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 318a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.app.ActivityManager; 328a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.app.Notification; 339acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinekimport android.app.Person; 347217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.app.PendingIntent; 357217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.app.RemoteInput; 368a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.content.Context; 378a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.content.pm.ApplicationInfo; 3830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsenimport android.content.pm.PackageManager; 3930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsenimport android.content.res.Resources; 407217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.graphics.Bitmap; 418a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.graphics.Color; 42a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynoldsimport android.graphics.Typeface; 437217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.graphics.drawable.Icon; 447217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.net.Uri; 458a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.os.Build; 468a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.support.test.filters.SmallTest; 478a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport android.support.test.runner.AndroidJUnit4; 48a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynoldsimport android.text.SpannableStringBuilder; 49a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynoldsimport android.text.Spanned; 50a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynoldsimport android.text.style.StyleSpan; 517217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynoldsimport android.widget.RemoteViews; 528a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 5374f5e36f49b32baef90bf31bbbaf487c18002944Jason Monkimport com.android.server.UiServiceTestCase; 5474f5e36f49b32baef90bf31bbbaf487c18002944Jason Monk 558a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport org.junit.Before; 568a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport org.junit.Test; 578a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport org.junit.runner.RunWith; 588a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport org.mockito.Mock; 598a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynoldsimport org.mockito.MockitoAnnotations; 608a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 618a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds@RunWith(AndroidJUnit4.class) 628a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds@SmallTest 6374f5e36f49b32baef90bf31bbbaf487c18002944Jason Monkpublic class NotificationTest extends UiServiceTestCase { 648a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 658a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds @Mock 668a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds ActivityManager mAm; 678a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 6830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen @Mock 6930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Resources mResources; 7030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 718a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds @Before 728a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds public void setUp() { 738a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds MockitoAnnotations.initMocks(this); 748a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds } 758a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 768a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds @Test 7730f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen public void testStripsExtendersInLowRamModeNoWhitelistNoTv() { 788a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds Notification.Builder nb = new Notification.Builder(mContext, "channel"); 798a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.CarExtender().setColor(Color.RED)); 808a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.TvExtender().setChannelId("different channel")); 818a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.WearableExtender().setDismissalId("dismiss")); 828a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds Notification before = nb.build(); 838a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 8430f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen // No whitelist 8530f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Context context = spy(getContext()); 8630f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen when(context.getResources()).thenReturn(mResources); 8730f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen when(mResources.getStringArray(anyInt())).thenReturn(new String[0]); 8830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 8930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true, 9030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen context); 918a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 928a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals("different channel", new Notification.TvExtender(before).getChannelId()); 938a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNull(new Notification.TvExtender(after).getChannelId()); 948a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 958a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals(Color.RED, new Notification.CarExtender(before).getColor()); 968a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals(Notification.COLOR_DEFAULT, new Notification.CarExtender(after).getColor()); 978a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 988a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId()); 998a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNull(new Notification.WearableExtender(after).getDismissalId()); 1008a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds } 1018a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 1028a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds @Test 10330f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen public void testStripsExtendersInLowRamModeHasWhitelist() { 10430f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification.Builder nb = new Notification.Builder(mContext, "channel"); 10530f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen nb.extend(new Notification.CarExtender().setColor(Color.RED)); 10630f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen nb.extend(new Notification.TvExtender().setChannelId("different channel")); 10730f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen nb.extend(new Notification.WearableExtender().setDismissalId("dismiss")); 10830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification before = nb.build(); 10930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 11030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen // Has whitelist 11130f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Context context = spy(mContext); 11230f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen when(context.getResources()).thenReturn(mResources); 11330f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen when(mResources.getStringArray(anyInt())).thenReturn(new String[1]); 11430f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 11530f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true, 11630f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen context); 11730f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 11830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals("different channel", new Notification.TvExtender(before).getChannelId()); 11930f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals("different channel", new Notification.TvExtender(after).getChannelId()); 12030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 12130f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals(Color.RED, new Notification.CarExtender(before).getColor()); 12230f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals(Color.RED, new Notification.CarExtender(after).getColor()); 12330f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 12430f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId()); 12530f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen assertEquals("dismiss", new Notification.WearableExtender(after).getDismissalId()); 12630f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen } 12730f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen 12830f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen @Test 1298a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds public void testStripsRemoteViewsInLowRamMode() { 13030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Context context = spy(mContext); 1318a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds ApplicationInfo ai = new ApplicationInfo(); 1328a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds ai.targetSdkVersion = Build.VERSION_CODES.M; 1338a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds when(context.getApplicationInfo()).thenReturn(ai); 1348a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 1358a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds final Notification.BigTextStyle style = new Notification.BigTextStyle() 1368a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds .bigText("hello") 1378a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds .setSummaryText("And the summary"); 1388a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds Notification before = new Notification.Builder(context, "channel") 1398a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds .setContentText("hi") 1408a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds .setStyle(style) 1418a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds .build(); 1428a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 14330f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, true, 14430f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen mContext); 1458a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNotNull(before.contentView); 1468a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNotNull(before.bigContentView); 1478a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNotNull(before.headsUpContentView); 1488a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNull(after.contentView); 1498a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNull(after.bigContentView); 1508a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertNull(after.headsUpContentView); 1518a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds } 1528a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 1538a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds @Test 1548a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds public void testDoesNotStripsExtendersInNormalRamMode() { 1558a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds Notification.Builder nb = new Notification.Builder(mContext, "channel"); 1568a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.CarExtender().setColor(Color.RED)); 1578a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.TvExtender().setChannelId("different channel")); 1588a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds nb.extend(new Notification.WearableExtender().setDismissalId("dismiss")); 1598a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds Notification before = nb.build(); 16030f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen Notification after = Notification.Builder.maybeCloneStrippedForDelivery(before, false, 16130f59b26356f59a1e38b8b7b4879b19532ff085cKristian Monsen mContext); 1628a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 1638a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertTrue(before == after); 1648a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 1658a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals("different channel", new Notification.TvExtender(before).getChannelId()); 1668a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals(Color.RED, new Notification.CarExtender(before).getColor()); 1678a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId()); 1688a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds } 1697217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1707217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 1717217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testStyleChangeVisiblyDifferent_noStyles() { 1727217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test"); 1737217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test"); 1747217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1757217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertFalse(Notification.areStyledNotificationsVisiblyDifferent(n1, n2)); 1767217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 1777217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1787217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 1797217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testStyleChangeVisiblyDifferent_noStyleToStyle() { 1807217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test"); 1817217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test") 1827217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.BigTextStyle()); 1837217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1847217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(n1, n2)); 1857217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 1867217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1877217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 1887217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testStyleChangeVisiblyDifferent_styleToNoStyle() { 1897217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test"); 1907217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test") 1917217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.BigTextStyle()); 1927217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1937217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(n1, n2)); 1947217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 1957217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 1967217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 1977217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testStyleChangeVisiblyDifferent_changeStyle() { 1987217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test") 1997217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.InboxStyle()); 2007217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test") 2017217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.BigTextStyle()); 2027217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2037217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(n1, n2)); 2047217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2057217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2067217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2077217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testInboxTextChange() { 2087217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nInbox1 = new Notification.Builder(mContext, "test") 2097217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.InboxStyle().addLine("a").addLine("b")); 2107217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nInbox2 = new Notification.Builder(mContext, "test") 2117217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.InboxStyle().addLine("b").addLine("c")); 2127217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2137217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nInbox1, nInbox2)); 2147217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2157217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2167217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2177217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testBigTextTextChange() { 2187217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nBigText1 = new Notification.Builder(mContext, "test") 2197217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.BigTextStyle().bigText("something")); 2207217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nBigText2 = new Notification.Builder(mContext, "test") 2217217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.BigTextStyle().bigText("else")); 2227217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2237217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nBigText1, nBigText2)); 2247217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2257217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2267217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2277217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testBigPictureChange() { 2287d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler Bitmap bitA = mock(Bitmap.class); 2297d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler when(bitA.getGenerationId()).thenReturn(100); 2307d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler Bitmap bitB = mock(Bitmap.class); 2317d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler when(bitB.getGenerationId()).thenReturn(200); 2327d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler 2337217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nBigPic1 = new Notification.Builder(mContext, "test") 2347d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler .setStyle(new Notification.BigPictureStyle().bigPicture(bitA)); 2357217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nBigPic2 = new Notification.Builder(mContext, "test") 2367d67bd4fd7fb6810edebd1c61a96530077c74edaDan Sandler .setStyle(new Notification.BigPictureStyle().bigPicture(bitB)); 2377217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2387217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nBigPic1, nBigPic2)); 2397217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2407217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2417217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2427217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testMessagingChange_text() { 2437217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM1 = new Notification.Builder(mContext, "test") 2447217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2457217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 2469acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinek "a", 100, mock(Person.class)))); 2477217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM2 = new Notification.Builder(mContext, "test") 2487217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2497217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 2509acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinek "a", 100, mock(Person.class))) 2517217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 2529acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinek "b", 100, mock(Person.class))) 2537217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds ); 2547217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2557217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nM1, nM2)); 2567217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2577217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2587217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2597217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testMessagingChange_data() { 2607217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM1 = new Notification.Builder(mContext, "test") 2617217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2627217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 2637217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds "a", 100, mock(Person.class)) 2647217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setData("text", mock(Uri.class)))); 2657217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM2 = new Notification.Builder(mContext, "test") 2667217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2677217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 2687217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds "a", 100, mock(Person.class)))); 2697217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2707217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nM1, nM2)); 2717217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2727217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2737217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2747217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testMessagingChange_sender() { 2757217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Person a = mock(Person.class); 2767217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds when(a.getName()).thenReturn("A"); 2777217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Person b = mock(Person.class); 2787217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds when(b.getName()).thenReturn("b"); 2797217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM1 = new Notification.Builder(mContext, "test") 2807217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2817217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message("a", 100, b))); 2827217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM2 = new Notification.Builder(mContext, "test") 2837217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2847217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message("a", 100, a))); 2857217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2867217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nM1, nM2)); 2877217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 2887217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 2897217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 2907217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testMessagingChange_key() { 2917217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Person a = mock(Person.class); 2927217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds when(a.getKey()).thenReturn("A"); 2937217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Person b = mock(Person.class); 2947217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds when(b.getKey()).thenReturn("b"); 2957217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM1 = new Notification.Builder(mContext, "test") 2967217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 2977217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message("a", 100, a))); 2987217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM2 = new Notification.Builder(mContext, "test") 2997217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 3007217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message("a", 100, b))); 3017217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3027217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areStyledNotificationsVisiblyDifferent(nM1, nM2)); 3037217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 3047217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3057217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 3067217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testMessagingChange_ignoreTimeChange() { 3077217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM1 = new Notification.Builder(mContext, "test") 3087217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 3097217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 3109acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinek "a", 100, mock(Person.class)))); 3117217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder nM2 = new Notification.Builder(mContext, "test") 3127217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setStyle(new Notification.MessagingStyle("") 3137217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addMessage(new Notification.MessagingStyle.Message( 3149acd673c0deb2652a55c52b9b80515d84b1945dcSelim Cinek "a", 1000, mock(Person.class))) 3157217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds ); 3167217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3177217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertFalse(Notification.areStyledNotificationsVisiblyDifferent(nM1, nM2)); 3187217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 3197217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3207217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 3217217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testRemoteViews_nullChange() { 3227217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test") 3237217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setContent(mock(RemoteViews.class)); 3247217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test"); 3257217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 3267217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3277217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n1 = new Notification.Builder(mContext, "test"); 3287217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n2 = new Notification.Builder(mContext, "test") 3297217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setContent(mock(RemoteViews.class)); 3307217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 3317217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3327217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n1 = new Notification.Builder(mContext, "test") 3337217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setCustomBigContentView(mock(RemoteViews.class)); 3347217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n2 = new Notification.Builder(mContext, "test"); 3357217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 3367217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3377217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n1 = new Notification.Builder(mContext, "test"); 3387217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n2 = new Notification.Builder(mContext, "test") 3397217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setCustomBigContentView(mock(RemoteViews.class)); 3407217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 3417217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3427217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n1 = new Notification.Builder(mContext, "test"); 3437217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds n2 = new Notification.Builder(mContext, "test"); 3447217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 3457217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 3467217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 3477217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 348e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds public void testRemoteViews_layoutChange() { 349e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews a = mock(RemoteViews.class); 350e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getLayoutId()).thenReturn(234); 351e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews b = mock(RemoteViews.class); 352e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getLayoutId()).thenReturn(189); 353e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 354e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test").setContent(a); 355e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test").setContent(b); 356e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 357e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 358e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomBigContentView(a); 359e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomBigContentView(b); 360e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 361e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 362e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(a); 363e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(b); 364e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 365e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds } 366e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 367e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds @Test 368e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds public void testRemoteViews_layoutSame() { 369e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews a = mock(RemoteViews.class); 370e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getLayoutId()).thenReturn(234); 371e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews b = mock(RemoteViews.class); 372e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getLayoutId()).thenReturn(234); 373e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 374e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test").setContent(a); 375e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test").setContent(b); 376e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 377e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 378e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomBigContentView(a); 379e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomBigContentView(b); 380e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 381e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 382e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(a); 383e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(b); 384e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 385e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds } 386e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 387e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds @Test 388e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds public void testRemoteViews_sequenceChange() { 389e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews a = mock(RemoteViews.class); 390e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getLayoutId()).thenReturn(234); 391e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getSequenceNumber()).thenReturn(1); 392e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews b = mock(RemoteViews.class); 393e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getLayoutId()).thenReturn(234); 394e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getSequenceNumber()).thenReturn(2); 395e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 396e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test").setContent(a); 397e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test").setContent(b); 398e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 399e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 400e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomBigContentView(a); 401e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomBigContentView(b); 402e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 403e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 404e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(a); 405e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(b); 406e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertTrue(Notification.areRemoteViewsChanged(n1, n2)); 407e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds } 408e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 409e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds @Test 410e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds public void testRemoteViews_sequenceSame() { 411e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews a = mock(RemoteViews.class); 412e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getLayoutId()).thenReturn(234); 413e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(a.getSequenceNumber()).thenReturn(1); 414e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds RemoteViews b = mock(RemoteViews.class); 415e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getLayoutId()).thenReturn(234); 416e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds when(b.getSequenceNumber()).thenReturn(1); 417e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 418e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n1 = new Notification.Builder(mContext, "test").setContent(a); 419e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds Notification.Builder n2 = new Notification.Builder(mContext, "test").setContent(b); 420e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 421e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 422e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomBigContentView(a); 423e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomBigContentView(b); 424e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 425e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 426e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n1 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(a); 427e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds n2 = new Notification.Builder(mContext, "test").setCustomHeadsUpContentView(b); 428e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds assertFalse(Notification.areRemoteViewsChanged(n1, n2)); 429e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds } 430e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds 431e5c6045070adcac613f4581c9ac010d4313423beJulia Reynolds @Test 4327217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testActionsDifferent_null() { 4337217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 4347217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4357217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 4367217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4377217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4387217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertFalse(Notification.areActionsVisiblyDifferent(n1, n2)); 4397217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 4407217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4417217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 4427217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testActionsDifferentSame() { 4437217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds PendingIntent intent = mock(PendingIntent.class); 4447217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Icon icon = mock(Icon.class); 4457217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4467217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 4477217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent).build()) 4487217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4497217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 4507217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent).build()) 4517217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4527217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4537217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertFalse(Notification.areActionsVisiblyDifferent(n1, n2)); 4547217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 4557217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4567217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 4577217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds public void testActionsDifferentText() { 4587217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds PendingIntent intent = mock(PendingIntent.class); 4597217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Icon icon = mock(Icon.class); 4607217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4617217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 4627217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent).build()) 4637217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4647217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 4657217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 2", intent).build()) 4667217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4677217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4687217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds assertTrue(Notification.areActionsVisiblyDifferent(n1, n2)); 4697217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 4707217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4717217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 472a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds public void testActionsDifferentSpannables() { 4737217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds PendingIntent intent = mock(PendingIntent.class); 4747217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Icon icon = mock(Icon.class); 4757217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4767217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 477a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds .addAction(new Notification.Action.Builder(icon, 478a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds new SpannableStringBuilder().append("test1", 479a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds new StyleSpan(Typeface.BOLD), 480a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds Spanned.SPAN_EXCLUSIVE_EXCLUSIVE), 481a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds intent).build()) 4827217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4837217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 484a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds .addAction(new Notification.Action.Builder(icon, "test1", intent).build()) 4857217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4867217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 487a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds assertFalse(Notification.areActionsVisiblyDifferent(n1, n2)); 4887217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 4897217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4907217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 491a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds public void testActionsDifferentNumber() { 492a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds PendingIntent intent = mock(PendingIntent.class); 4937217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Icon icon = mock(Icon.class); 4947217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 4957217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 496a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent).build()) 4977217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 4987217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 499a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent).build()) 500a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 2", intent).build()) 5017217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 5027217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 503a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds assertTrue(Notification.areActionsVisiblyDifferent(n1, n2)); 5047217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 5057217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 5067217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds @Test 507a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds public void testActionsDifferentIntent() { 5085a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds PendingIntent intent1 = mock(PendingIntent.class); 5095a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds PendingIntent intent2 = mock(PendingIntent.class); 5105a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds Icon icon = mock(Icon.class); 5115a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds 5125a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 5135a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent1).build()) 5145a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds .build(); 5155a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 5165a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent2).build()) 5175a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds .build(); 5185a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds 519a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds assertFalse(Notification.areActionsVisiblyDifferent(n1, n2)); 5205a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds } 5215a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds 5225a366fbd819e17b420f8eb61f8b96434b71b8bb7Julia Reynolds @Test 523a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds public void testActionsIgnoresRemoteInputs() { 5247217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds PendingIntent intent = mock(PendingIntent.class); 5257217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Icon icon = mock(Icon.class); 5267217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 5277217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n1 = new Notification.Builder(mContext, "test") 5287217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent) 5297217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addRemoteInput(new RemoteInput.Builder("a") 5307217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setChoices(new CharSequence[] {"i", "m"}) 5317217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build()) 5327217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build()) 5337217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 5347217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds Notification n2 = new Notification.Builder(mContext, "test") 5357217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addAction(new Notification.Action.Builder(icon, "TEXT 1", intent) 5367217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .addRemoteInput(new RemoteInput.Builder("a") 5377217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .setChoices(new CharSequence[] {"t", "m"}) 5387217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build()) 5397217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build()) 5407217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds .build(); 5417217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds 542a4fb9da87950bd60d725c9a8777fd4accd723fd2Julia Reynolds assertFalse(Notification.areActionsVisiblyDifferent(n1, n2)); 5437217dc9f769ccb6e4351011ea9887871c2a4ffb4Julia Reynolds } 5448a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds} 5458a3b45976542d8a52f8135875186f7bc9e8534cbJulia Reynolds 546