Merge "Update initial isPowerButtonDown state" into main
diff --git a/packages/SystemUI/src/com/android/systemui/keyevent/data/repository/KeyEventRepository.kt b/packages/SystemUI/src/com/android/systemui/keyevent/data/repository/KeyEventRepository.kt
index 5bc5d0b..9da9a73 100644
--- a/packages/SystemUI/src/com/android/systemui/keyevent/data/repository/KeyEventRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyevent/data/repository/KeyEventRepository.kt
@@ -35,7 +35,7 @@
class KeyEventRepositoryImpl
@Inject
constructor(
- val commandQueue: CommandQueue,
+ private val commandQueue: CommandQueue,
) : KeyEventRepository {
override val isPowerButtonDown: Flow<Boolean> = conflatedCallbackFlow {
val callback =
@@ -46,6 +46,7 @@
}
}
}
+ trySendWithFailureLogging(false, TAG, "init isPowerButtonDown")
commandQueue.addCallback(callback)
awaitClose { commandQueue.removeCallback(callback) }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyEventRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyEventRepositoryTest.kt
new file mode 100644
index 0000000..bbe45c1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyEventRepositoryTest.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023 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.keyguard.data.repository
+
+import android.view.KeyEvent
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.keyevent.data.repository.KeyEventRepositoryImpl
+import com.android.systemui.statusbar.CommandQueue
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class KeyEventRepositoryTest : SysuiTestCase() {
+ private lateinit var underTest: KeyEventRepositoryImpl
+ @Mock private lateinit var commandQueue: CommandQueue
+ @Captor private lateinit var commandQueueCallbacks: ArgumentCaptor<CommandQueue.Callbacks>
+ private lateinit var testScope: TestScope
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ testScope = TestScope()
+ underTest = KeyEventRepositoryImpl(commandQueue)
+ }
+
+ @Test
+ fun isPowerButtonDown_initialValueFalse() =
+ testScope.runTest {
+ val isPowerButtonDown by collectLastValue(underTest.isPowerButtonDown)
+ runCurrent()
+ assertThat(isPowerButtonDown).isFalse()
+ }
+
+ @Test
+ fun isPowerButtonDown_onChange() =
+ testScope.runTest {
+ val isPowerButtonDown by collectLastValue(underTest.isPowerButtonDown)
+ runCurrent()
+ verify(commandQueue).addCallback(commandQueueCallbacks.capture())
+ commandQueueCallbacks.value.handleSystemKey(
+ KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POWER)
+ )
+ assertThat(isPowerButtonDown).isTrue()
+
+ commandQueueCallbacks.value.handleSystemKey(
+ KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_POWER)
+ )
+ assertThat(isPowerButtonDown).isFalse()
+ }
+}