1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.systemui.statusbar.notification; 18 19 import android.service.notification.StatusBarNotification; 20 import android.support.test.runner.AndroidJUnit4; 21 import android.test.suitebuilder.annotation.SmallTest; 22 23 import com.android.systemui.SysuiTestCase; 24 import com.android.systemui.statusbar.ExpandableNotificationRow; 25 import com.android.systemui.statusbar.NotificationData; 26 import com.android.systemui.statusbar.notification.VisibilityLocationProvider; 27 import com.android.systemui.statusbar.notification.VisualStabilityManager; 28 29 import org.junit.Before; 30 import org.junit.Test; 31 import org.junit.runner.RunWith; 32 33 import static junit.framework.Assert.assertEquals; 34 import static org.mockito.Matchers.anyObject; 35 import static org.mockito.Mockito.mock; 36 import static org.mockito.Mockito.verify; 37 import static org.mockito.Mockito.when; 38 39 @SmallTest 40 @RunWith(AndroidJUnit4.class) 41 public class VisualStabilityManagerTest extends SysuiTestCase { 42 43 private VisualStabilityManager mVisualStabilityManager = new VisualStabilityManager(); 44 private VisualStabilityManager.Callback mCallback = mock(VisualStabilityManager.Callback.class); 45 private VisibilityLocationProvider mLocationProvider = mock(VisibilityLocationProvider.class); 46 private ExpandableNotificationRow mRow = mock(ExpandableNotificationRow.class); 47 private NotificationData.Entry mEntry; 48 49 @Before 50 public void setUp() { 51 mVisualStabilityManager.setVisibilityLocationProvider(mLocationProvider); 52 mEntry = new NotificationData.Entry(mock(StatusBarNotification.class)); 53 mEntry.row = mRow; 54 } 55 56 @Test 57 public void testPanelExpansion() { 58 mVisualStabilityManager.setPanelExpanded(true); 59 mVisualStabilityManager.setScreenOn(true); 60 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), false); 61 mVisualStabilityManager.setPanelExpanded(false); 62 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), true); 63 } 64 65 @Test 66 public void testScreenOn() { 67 mVisualStabilityManager.setPanelExpanded(true); 68 mVisualStabilityManager.setScreenOn(true); 69 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), false); 70 mVisualStabilityManager.setScreenOn(false); 71 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), true); 72 } 73 74 @Test 75 public void testReorderingAllowedChangesScreenOn() { 76 mVisualStabilityManager.setPanelExpanded(true); 77 mVisualStabilityManager.setScreenOn(true); 78 assertEquals(mVisualStabilityManager.isReorderingAllowed(), false); 79 mVisualStabilityManager.setScreenOn(false); 80 assertEquals(mVisualStabilityManager.isReorderingAllowed(), true); 81 } 82 83 @Test 84 public void testReorderingAllowedChangesPanel() { 85 mVisualStabilityManager.setPanelExpanded(true); 86 mVisualStabilityManager.setScreenOn(true); 87 assertEquals(mVisualStabilityManager.isReorderingAllowed(), false); 88 mVisualStabilityManager.setPanelExpanded(false); 89 assertEquals(mVisualStabilityManager.isReorderingAllowed(), true); 90 } 91 92 @Test 93 public void testCallBackCalledScreenOn() { 94 mVisualStabilityManager.setPanelExpanded(true); 95 mVisualStabilityManager.setScreenOn(true); 96 mVisualStabilityManager.addReorderingAllowedCallback(mCallback); 97 mVisualStabilityManager.setScreenOn(false); 98 verify(mCallback).onReorderingAllowed(); 99 } 100 101 @Test 102 public void testCallBackCalledPanelExpanded() { 103 mVisualStabilityManager.setPanelExpanded(true); 104 mVisualStabilityManager.setScreenOn(true); 105 mVisualStabilityManager.addReorderingAllowedCallback(mCallback); 106 mVisualStabilityManager.setPanelExpanded(false); 107 verify(mCallback).onReorderingAllowed(); 108 } 109 110 @Test 111 public void testCallBackExactlyOnce() { 112 mVisualStabilityManager.setPanelExpanded(true); 113 mVisualStabilityManager.setScreenOn(true); 114 mVisualStabilityManager.addReorderingAllowedCallback(mCallback); 115 mVisualStabilityManager.setScreenOn(false); 116 mVisualStabilityManager.setScreenOn(true); 117 mVisualStabilityManager.setScreenOn(false); 118 verify(mCallback).onReorderingAllowed(); 119 } 120 121 @Test 122 public void testAddedCanReorder() { 123 mVisualStabilityManager.setPanelExpanded(true); 124 mVisualStabilityManager.setScreenOn(true); 125 mVisualStabilityManager.notifyViewAddition(mRow); 126 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), true); 127 } 128 129 @Test 130 public void testReorderingVisibleHeadsUpNotAllowed() { 131 mVisualStabilityManager.setPanelExpanded(true); 132 mVisualStabilityManager.setScreenOn(true); 133 when(mLocationProvider.isInVisibleLocation(anyObject())).thenReturn(true); 134 mVisualStabilityManager.onHeadsUpStateChanged(mEntry, true); 135 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), false); 136 } 137 138 @Test 139 public void testReorderingVisibleHeadsUpAllowed() { 140 mVisualStabilityManager.setPanelExpanded(true); 141 mVisualStabilityManager.setScreenOn(true); 142 when(mLocationProvider.isInVisibleLocation(anyObject())).thenReturn(false); 143 mVisualStabilityManager.onHeadsUpStateChanged(mEntry, true); 144 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), true); 145 } 146 147 @Test 148 public void testReorderingVisibleHeadsUpAllowedOnce() { 149 mVisualStabilityManager.setPanelExpanded(true); 150 mVisualStabilityManager.setScreenOn(true); 151 when(mLocationProvider.isInVisibleLocation(anyObject())).thenReturn(false); 152 mVisualStabilityManager.onHeadsUpStateChanged(mEntry, true); 153 mVisualStabilityManager.onReorderingFinished(); 154 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), false); 155 } 156 157 @Test 158 public void testPulsing() { 159 mVisualStabilityManager.setPulsing(true); 160 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), false); 161 mVisualStabilityManager.setPulsing(false); 162 assertEquals(mVisualStabilityManager.canReorderNotification(mRow), true); 163 } 164 165 @Test 166 public void testReorderingAllowedChanges_Pulsing() { 167 mVisualStabilityManager.setPulsing(true); 168 assertEquals(mVisualStabilityManager.isReorderingAllowed(), false); 169 mVisualStabilityManager.setPulsing(false); 170 assertEquals(mVisualStabilityManager.isReorderingAllowed(), true); 171 } 172 173 @Test 174 public void testCallBackCalled_Pulsing() { 175 mVisualStabilityManager.setPulsing(true); 176 mVisualStabilityManager.addReorderingAllowedCallback(mCallback); 177 mVisualStabilityManager.setPulsing(false); 178 verify(mCallback).onReorderingAllowed(); 179 } 180 } 181