1 /*
2  * Copyright (C) 2022 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.qs.tiles
18 
19 import android.net.ConnectivityManager
20 import android.os.Handler
21 import android.testing.AndroidTestingRunner
22 import android.testing.TestableLooper
23 import androidx.test.filters.SmallTest
24 import com.android.internal.logging.MetricsLogger
25 import com.android.systemui.R
26 import com.android.systemui.SysuiTestCase
27 import com.android.systemui.broadcast.BroadcastDispatcher
28 import com.android.systemui.classifier.FalsingManagerFake
29 import com.android.systemui.plugins.ActivityStarter
30 import com.android.systemui.plugins.qs.QSTile
31 import com.android.systemui.plugins.statusbar.StatusBarStateController
32 import com.android.systemui.qs.QSHost
33 import com.android.systemui.qs.QsEventLogger
34 import com.android.systemui.qs.logging.QSLogger
35 import com.android.systemui.qs.tileimpl.QSTileImpl
36 import com.android.systemui.settings.UserTracker
37 import com.android.systemui.util.settings.GlobalSettings
38 import com.google.common.truth.Truth.assertThat
39 import dagger.Lazy
40 import org.junit.After
41 import org.junit.Before
42 import org.junit.Test
43 import org.junit.runner.RunWith
44 import org.mockito.Mock
45 import org.mockito.Mockito
46 import org.mockito.MockitoAnnotations
47 
48 @RunWith(AndroidTestingRunner::class)
49 @TestableLooper.RunWithLooper(setAsMainLooper = true)
50 @SmallTest
51 class AirplaneModeTileTest : SysuiTestCase() {
52     @Mock
53     private lateinit var mHost: QSHost
54     @Mock
55     private lateinit var mMetricsLogger: MetricsLogger
56     @Mock
57     private lateinit var mStatusBarStateController: StatusBarStateController
58     @Mock
59     private lateinit var mActivityStarter: ActivityStarter
60     @Mock
61     private lateinit var mQsLogger: QSLogger
62     @Mock
63     private lateinit var mBroadcastDispatcher: BroadcastDispatcher
64     @Mock
65     private lateinit var mConnectivityManager: Lazy<ConnectivityManager>
66     @Mock
67     private lateinit var mGlobalSettings: GlobalSettings
68     @Mock
69     private lateinit var mUserTracker: UserTracker
70     @Mock
71     private lateinit var mUiEventLogger: QsEventLogger
72     private lateinit var mTestableLooper: TestableLooper
73     private lateinit var mTile: AirplaneModeTile
74 
75     @Before
76     fun setUp() {
77         MockitoAnnotations.initMocks(this)
78         mTestableLooper = TestableLooper.get(this)
79         Mockito.`when`(mHost.context).thenReturn(mContext)
80         Mockito.`when`(mHost.userContext).thenReturn(mContext)
81 
82         mTile = AirplaneModeTile(
83             mHost,
84             mUiEventLogger,
85             mTestableLooper.looper,
86             Handler(mTestableLooper.looper),
87             FalsingManagerFake(),
88             mMetricsLogger,
89             mStatusBarStateController,
90             mActivityStarter,
91             mQsLogger,
92             mBroadcastDispatcher,
93             mConnectivityManager,
94             mGlobalSettings,
95             mUserTracker)
96     }
97 
98     @After
99     fun tearDown() {
100         mTile.destroy()
101         mTestableLooper.processAllMessages()
102     }
103 
104     @Test
105     fun testIcon_whenDisabled_showsOffState() {
106         val state = QSTile.BooleanState()
107 
108         mTile.handleUpdateState(state, 0)
109 
110         assertThat(state.icon)
111             .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_off))
112     }
113 
114     @Test
115     fun testIcon_whenEnabled_showsOnState() {
116         val state = QSTile.BooleanState()
117 
118         mTile.handleUpdateState(state, 1)
119 
120         assertThat(state.icon)
121             .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_on))
122     }
123 }
124