• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.launcher3.util
18 
19 import android.view.View
20 import android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
21 import android.view.Window
22 import androidx.test.ext.junit.runners.AndroidJUnit4
23 import androidx.test.filters.SmallTest
24 import com.android.launcher3.util.SystemUiController.FLAG_DARK_NAV
25 import com.android.launcher3.util.SystemUiController.FLAG_DARK_STATUS
26 import com.android.launcher3.util.SystemUiController.FLAG_LIGHT_NAV
27 import com.android.launcher3.util.SystemUiController.FLAG_LIGHT_STATUS
28 import com.android.launcher3.util.SystemUiController.UI_STATE_BASE_WINDOW
29 import com.android.launcher3.util.SystemUiController.UI_STATE_SCRIM_VIEW
30 import com.google.common.truth.Truth.assertThat
31 import org.junit.Before
32 import org.junit.Test
33 import org.junit.runner.RunWith
34 import org.mockito.ArgumentMatchers.anyInt
35 import org.mockito.ArgumentMatchers.eq
36 import org.mockito.Mock
37 import org.mockito.Mockito.never
38 import org.mockito.Mockito.verify
39 import org.mockito.Mockito.`when`
40 import org.mockito.MockitoAnnotations
41 
42 @SmallTest
43 @RunWith(AndroidJUnit4::class)
44 class SystemUiControllerTest {
45 
46     @Mock private lateinit var window: Window
47     @Mock private lateinit var decorView: View
48 
49     private lateinit var underTest: SystemUiController
50 
51     @Before
setupnull52     fun setup() {
53         MockitoAnnotations.initMocks(this)
54         `when`(window.decorView).thenReturn(decorView)
55         underTest = SystemUiController(window.decorView)
56     }
57 
58     @Test
test_default_statenull59     fun test_default_state() {
60         assertThat(underTest.toString()).isEqualTo("mStates=[0, 0, 0, 0, 0]")
61     }
62 
63     @Test
update_state_base_window_lightnull64     fun update_state_base_window_light() {
65         underTest.updateUiState(UI_STATE_BASE_WINDOW, /* isLight= */ true)
66 
67         val visibility =
68             View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
69         verify(decorView).systemUiVisibility = eq(visibility)
70         assertThat(underTest.baseSysuiVisibility).isEqualTo(visibility)
71         val flag = FLAG_LIGHT_NAV or FLAG_LIGHT_STATUS
72         assertThat(underTest.toString()).isEqualTo("mStates=[$flag, 0, 0, 0, 0]")
73     }
74 
75     @Test
update_state_scrim_view_lightnull76     fun update_state_scrim_view_light() {
77         underTest.updateUiState(UI_STATE_SCRIM_VIEW, /* isLight= */ true)
78 
79         verify(decorView).systemUiVisibility =
80             eq(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
81         assertThat(underTest.baseSysuiVisibility).isEqualTo(0)
82         val flag = FLAG_LIGHT_NAV or FLAG_LIGHT_STATUS
83         assertThat(underTest.toString()).isEqualTo("mStates=[0, $flag, 0, 0, 0]")
84     }
85 
86     @Test
update_state_base_window_darknull87     fun update_state_base_window_dark() {
88         underTest.updateUiState(UI_STATE_BASE_WINDOW, /* isLight= */ false)
89 
90         verify(decorView, never()).systemUiVisibility = anyInt()
91         assertThat(underTest.baseSysuiVisibility).isEqualTo(0)
92         val flag = FLAG_DARK_NAV or FLAG_DARK_STATUS
93         assertThat(underTest.toString()).isEqualTo("mStates=[$flag, 0, 0, 0, 0]")
94     }
95 
96     @Test
update_state_scrim_view_darknull97     fun update_state_scrim_view_dark() {
98         underTest.updateUiState(UI_STATE_SCRIM_VIEW, /* isLight= */ false)
99 
100         verify(decorView, never()).systemUiVisibility = anyInt()
101         assertThat(underTest.baseSysuiVisibility).isEqualTo(0)
102         val flag = FLAG_DARK_NAV or FLAG_DARK_STATUS
103         assertThat(underTest.toString()).isEqualTo("mStates=[0, $flag, 0, 0, 0]")
104     }
105 
106     @Test
get_base_sysui_visibilitynull107     fun get_base_sysui_visibility() {
108         `when`(decorView.systemUiVisibility).thenReturn(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
109 
110         assertThat(underTest.baseSysuiVisibility).isEqualTo(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
111     }
112 
113     @Test
update_state_base_window_light_with_existing_visibilitynull114     fun update_state_base_window_light_with_existing_visibility() {
115         `when`(decorView.systemUiVisibility).thenReturn(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
116 
117         underTest.updateUiState(UI_STATE_BASE_WINDOW, /* isLight= */ true)
118 
119         val visibility =
120             View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR or
121                 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or
122                 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
123         assertThat(underTest.baseSysuiVisibility).isEqualTo(visibility)
124         verify(decorView).systemUiVisibility = eq(visibility)
125     }
126 }
127