1 /* 2 * Copyright (C) 2019 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.globalactions; 18 19 import static junit.framework.Assert.assertEquals; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.spy; 23 import static org.mockito.Mockito.times; 24 import static org.mockito.Mockito.verify; 25 26 import android.testing.AndroidTestingRunner; 27 import android.view.Gravity; 28 import android.view.LayoutInflater; 29 import android.view.View; 30 31 import androidx.test.filters.SmallTest; 32 33 import com.android.systemui.SysuiTestCase; 34 import com.android.systemui.res.R; 35 import com.android.systemui.util.leak.RotationUtils; 36 37 import org.junit.Before; 38 import org.junit.Test; 39 import org.junit.runner.RunWith; 40 41 /** 42 * Tests for {@link ListGridLayout}. 43 */ 44 @SmallTest 45 @RunWith(AndroidTestingRunner.class) 46 public class GlobalActionsColumnLayoutTest extends SysuiTestCase { 47 48 private GlobalActionsColumnLayout mColumnLayout; 49 50 @Before setUp()51 public void setUp() throws Exception { 52 mColumnLayout = spy((GlobalActionsColumnLayout) 53 LayoutInflater.from(mContext).inflate(R.layout.global_actions_column, null)); 54 } 55 56 @Test testShouldReverseListItems()57 public void testShouldReverseListItems() { 58 doReturn(View.LAYOUT_DIRECTION_LTR).when(mColumnLayout).getCurrentLayoutDirection(); 59 60 doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); 61 assertEquals(false, mColumnLayout.shouldReverseListItems()); 62 63 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 64 assertEquals(false, mColumnLayout.shouldReverseListItems()); 65 66 doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); 67 assertEquals(true, mColumnLayout.shouldReverseListItems()); 68 69 doReturn(View.LAYOUT_DIRECTION_RTL).when(mColumnLayout).getCurrentLayoutDirection(); 70 71 doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); 72 assertEquals(true, mColumnLayout.shouldReverseListItems()); 73 74 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 75 assertEquals(false, mColumnLayout.shouldReverseListItems()); 76 77 doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); 78 assertEquals(false, mColumnLayout.shouldReverseListItems()); 79 } 80 81 @Test testGetAnimationOffsetX()82 public void testGetAnimationOffsetX() { 83 doReturn(50f).when(mColumnLayout).getAnimationDistance(); 84 85 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 86 assertEquals(50f, mColumnLayout.getAnimationOffsetX(), .01); 87 88 doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); 89 assertEquals(0, mColumnLayout.getAnimationOffsetX(), .01); 90 91 doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); 92 assertEquals(0, mColumnLayout.getAnimationOffsetX(), .01); 93 } 94 95 @Test testGetAnimationOffsetY()96 public void testGetAnimationOffsetY() { 97 doReturn(50f).when(mColumnLayout).getAnimationDistance(); 98 99 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 100 assertEquals(0, mColumnLayout.getAnimationOffsetY(), .01); 101 102 doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); 103 assertEquals(-50f, mColumnLayout.getAnimationOffsetY(), .01); 104 105 doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); 106 assertEquals(50f, mColumnLayout.getAnimationOffsetY(), .01); 107 } 108 109 @Test testSnapToPowerButton_portrait()110 public void testSnapToPowerButton_portrait() { 111 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 112 doReturn(50).when(mColumnLayout).getPowerButtonOffsetDistance(); 113 114 mColumnLayout.snapToPowerButton(); 115 assertEquals(Gravity.TOP | Gravity.RIGHT, mColumnLayout.getGravity()); 116 assertEquals(50, mColumnLayout.getPaddingTop(), .01); 117 } 118 119 @Test testCenterAlongEdge_portrait()120 public void testCenterAlongEdge_portrait() { 121 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 122 123 mColumnLayout.centerAlongEdge(); 124 assertEquals(Gravity.CENTER_VERTICAL | Gravity.RIGHT, mColumnLayout.getGravity()); 125 assertEquals(0, mColumnLayout.getPaddingTop(), .01); 126 } 127 128 @Test testUpdateSnap_initialState()129 public void testUpdateSnap_initialState() { 130 doReturn(false).when(mColumnLayout).shouldSnapToPowerButton(); 131 132 mColumnLayout.updateSnap(); // should do nothing, since snap has not changed from init state 133 134 verify(mColumnLayout, times(0)).snapToPowerButton(); 135 verify(mColumnLayout, times(0)).centerAlongEdge(); 136 } 137 138 @Test testUpdateSnap_snapThenSnap()139 public void testUpdateSnap_snapThenSnap() { 140 doReturn(true).when(mColumnLayout).shouldSnapToPowerButton(); 141 142 mColumnLayout.updateSnap(); // should snap to power button 143 144 verify(mColumnLayout, times(1)).snapToPowerButton(); 145 verify(mColumnLayout, times(0)).centerAlongEdge(); 146 147 mColumnLayout.updateSnap(); // should do nothing, since this is the same state as last time 148 149 verify(mColumnLayout, times(1)).snapToPowerButton(); 150 verify(mColumnLayout, times(0)).centerAlongEdge(); 151 } 152 153 @Test testUpdateSnap_snapThenCenter()154 public void testUpdateSnap_snapThenCenter() { 155 doReturn(true).when(mColumnLayout).shouldSnapToPowerButton(); 156 157 mColumnLayout.updateSnap(); // should snap to power button 158 159 verify(mColumnLayout, times(1)).snapToPowerButton(); 160 verify(mColumnLayout, times(0)).centerAlongEdge(); 161 162 doReturn(false).when(mColumnLayout).shouldSnapToPowerButton(); 163 164 mColumnLayout.updateSnap(); // should center to edge 165 166 verify(mColumnLayout, times(1)).snapToPowerButton(); 167 verify(mColumnLayout, times(1)).centerAlongEdge(); 168 } 169 170 @Test testShouldSnapToPowerButton_vertical()171 public void testShouldSnapToPowerButton_vertical() { 172 doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); 173 doReturn(300).when(mColumnLayout).getPowerButtonOffsetDistance(); 174 doReturn(1000).when(mColumnLayout).getMeasuredHeight(); 175 View wrapper = spy(new View(mContext, null)); 176 doReturn(wrapper).when(mColumnLayout).getWrapper(); 177 doReturn(500).when(wrapper).getMeasuredHeight(); 178 179 assertEquals(true, mColumnLayout.shouldSnapToPowerButton()); 180 181 doReturn(600).when(mColumnLayout).getMeasuredHeight(); 182 183 assertEquals(false, mColumnLayout.shouldSnapToPowerButton()); 184 } 185 186 @Test testShouldSnapToPowerButton_horizontal()187 public void testShouldSnapToPowerButton_horizontal() { 188 doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); 189 doReturn(300).when(mColumnLayout).getPowerButtonOffsetDistance(); 190 doReturn(1000).when(mColumnLayout).getMeasuredWidth(); 191 View wrapper = spy(new View(mContext, null)); 192 doReturn(wrapper).when(mColumnLayout).getWrapper(); 193 doReturn(500).when(wrapper).getMeasuredWidth(); 194 195 assertEquals(true, mColumnLayout.shouldSnapToPowerButton()); 196 197 doReturn(600).when(mColumnLayout).getMeasuredWidth(); 198 199 assertEquals(false, mColumnLayout.shouldSnapToPowerButton()); 200 } 201 } 202