| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.systemui.globalactions; |
| |
| import static junit.framework.Assert.assertEquals; |
| |
| import static org.mockito.Mockito.doReturn; |
| import static org.mockito.Mockito.spy; |
| import static org.mockito.Mockito.times; |
| import static org.mockito.Mockito.verify; |
| |
| import android.testing.AndroidTestingRunner; |
| import android.view.Gravity; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| |
| import androidx.test.filters.SmallTest; |
| |
| import com.android.systemui.R; |
| import com.android.systemui.SysuiTestCase; |
| import com.android.systemui.util.leak.RotationUtils; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| /** |
| * Tests for {@link ListGridLayout}. |
| */ |
| @SmallTest |
| @RunWith(AndroidTestingRunner.class) |
| public class GlobalActionsColumnLayoutTest extends SysuiTestCase { |
| |
| private GlobalActionsColumnLayout mColumnLayout; |
| |
| @Before |
| public void setUp() throws Exception { |
| mColumnLayout = spy((GlobalActionsColumnLayout) |
| LayoutInflater.from(mContext).inflate(R.layout.global_actions_column, null)); |
| } |
| |
| @Test |
| public void testShouldReverseListItems() { |
| doReturn(View.LAYOUT_DIRECTION_LTR).when(mColumnLayout).getCurrentLayoutDirection(); |
| |
| doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(false, mColumnLayout.shouldReverseListItems()); |
| |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(false, mColumnLayout.shouldReverseListItems()); |
| |
| doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(true, mColumnLayout.shouldReverseListItems()); |
| |
| doReturn(View.LAYOUT_DIRECTION_RTL).when(mColumnLayout).getCurrentLayoutDirection(); |
| |
| doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(true, mColumnLayout.shouldReverseListItems()); |
| |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(false, mColumnLayout.shouldReverseListItems()); |
| |
| doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(false, mColumnLayout.shouldReverseListItems()); |
| } |
| |
| @Test |
| public void testGetAnimationOffsetX() { |
| doReturn(50f).when(mColumnLayout).getAnimationDistance(); |
| |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(50f, mColumnLayout.getAnimationOffsetX(), .01); |
| |
| doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(0, mColumnLayout.getAnimationOffsetX(), .01); |
| |
| doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(0, mColumnLayout.getAnimationOffsetX(), .01); |
| } |
| |
| @Test |
| public void testGetAnimationOffsetY() { |
| doReturn(50f).when(mColumnLayout).getAnimationDistance(); |
| |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(0, mColumnLayout.getAnimationOffsetY(), .01); |
| |
| doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(-50f, mColumnLayout.getAnimationOffsetY(), .01); |
| |
| doReturn(RotationUtils.ROTATION_SEASCAPE).when(mColumnLayout).getCurrentRotation(); |
| assertEquals(50f, mColumnLayout.getAnimationOffsetY(), .01); |
| } |
| |
| @Test |
| public void testSnapToPowerButton_portrait() { |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| doReturn(50).when(mColumnLayout).getPowerButtonOffsetDistance(); |
| |
| mColumnLayout.snapToPowerButton(); |
| assertEquals(Gravity.TOP | Gravity.RIGHT, mColumnLayout.getGravity()); |
| assertEquals(50, mColumnLayout.getPaddingTop(), .01); |
| } |
| |
| @Test |
| public void testCenterAlongEdge_portrait() { |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| |
| mColumnLayout.centerAlongEdge(); |
| assertEquals(Gravity.CENTER_VERTICAL | Gravity.RIGHT, mColumnLayout.getGravity()); |
| assertEquals(0, mColumnLayout.getPaddingTop(), .01); |
| } |
| |
| @Test |
| public void testUpdateSnap_initialState() { |
| doReturn(false).when(mColumnLayout).shouldSnapToPowerButton(); |
| |
| mColumnLayout.updateSnap(); // should do nothing, since snap has not changed from init state |
| |
| verify(mColumnLayout, times(0)).snapToPowerButton(); |
| verify(mColumnLayout, times(0)).centerAlongEdge(); |
| } |
| |
| @Test |
| public void testUpdateSnap_snapThenSnap() { |
| doReturn(true).when(mColumnLayout).shouldSnapToPowerButton(); |
| |
| mColumnLayout.updateSnap(); // should snap to power button |
| |
| verify(mColumnLayout, times(1)).snapToPowerButton(); |
| verify(mColumnLayout, times(0)).centerAlongEdge(); |
| |
| mColumnLayout.updateSnap(); // should do nothing, since this is the same state as last time |
| |
| verify(mColumnLayout, times(1)).snapToPowerButton(); |
| verify(mColumnLayout, times(0)).centerAlongEdge(); |
| } |
| |
| @Test |
| public void testUpdateSnap_snapThenCenter() { |
| doReturn(true).when(mColumnLayout).shouldSnapToPowerButton(); |
| |
| mColumnLayout.updateSnap(); // should snap to power button |
| |
| verify(mColumnLayout, times(1)).snapToPowerButton(); |
| verify(mColumnLayout, times(0)).centerAlongEdge(); |
| |
| doReturn(false).when(mColumnLayout).shouldSnapToPowerButton(); |
| |
| mColumnLayout.updateSnap(); // should center to edge |
| |
| verify(mColumnLayout, times(1)).snapToPowerButton(); |
| verify(mColumnLayout, times(1)).centerAlongEdge(); |
| } |
| |
| @Test |
| public void testShouldSnapToPowerButton_vertical() { |
| doReturn(RotationUtils.ROTATION_NONE).when(mColumnLayout).getCurrentRotation(); |
| doReturn(300).when(mColumnLayout).getPowerButtonOffsetDistance(); |
| doReturn(1000).when(mColumnLayout).getMeasuredHeight(); |
| View wrapper = spy(new View(mContext, null)); |
| doReturn(wrapper).when(mColumnLayout).getWrapper(); |
| doReturn(500).when(wrapper).getMeasuredHeight(); |
| |
| assertEquals(true, mColumnLayout.shouldSnapToPowerButton()); |
| |
| doReturn(600).when(mColumnLayout).getMeasuredHeight(); |
| |
| assertEquals(false, mColumnLayout.shouldSnapToPowerButton()); |
| } |
| |
| @Test |
| public void testShouldSnapToPowerButton_horizontal() { |
| doReturn(RotationUtils.ROTATION_LANDSCAPE).when(mColumnLayout).getCurrentRotation(); |
| doReturn(300).when(mColumnLayout).getPowerButtonOffsetDistance(); |
| doReturn(1000).when(mColumnLayout).getMeasuredWidth(); |
| View wrapper = spy(new View(mContext, null)); |
| doReturn(wrapper).when(mColumnLayout).getWrapper(); |
| doReturn(500).when(wrapper).getMeasuredWidth(); |
| |
| assertEquals(true, mColumnLayout.shouldSnapToPowerButton()); |
| |
| doReturn(600).when(mColumnLayout).getMeasuredWidth(); |
| |
| assertEquals(false, mColumnLayout.shouldSnapToPowerButton()); |
| } |
| } |