summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Laird <evanlaird@google.com> 2023-08-11 10:41:26 -0400
committer Evan Laird <evanlaird@google.com> 2023-08-24 11:37:47 -0400
commit33ae20c8477d66649bb2adb66d3c96c6fd1de7d0 (patch)
tree06d98a0cb2a442c9b700ef968aeb8197da801caa
parent4a55272401ccbd5c433616da5af387f9a46bb4c5 (diff)
[Sb refactor] EthernetInteractor to support QS tiles
Add a simple ethernet interactor class which calculates the correct ethernet icon appropriate for status bar or quick settings. Test: EthernetInteractorTest Bug: 291321279 Change-Id: Ifbf08df2354bee2e7bbf5198b0990c12a10ef81d
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt62
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt94
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt12
3 files changed, 168 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt
new file mode 100644
index 000000000000..3709e4c06009
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractor.kt
@@ -0,0 +1,62 @@
+/*
+ * 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.statusbar.pipeline.ethernet.domain
+
+import com.android.settingslib.AccessibilityContentDescriptions
+import com.android.systemui.R
+import com.android.systemui.common.shared.model.ContentDescription
+import com.android.systemui.common.shared.model.Icon
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+
+/**
+ * Currently we don't do much to interact with ethernet. We simply need a place to map between the
+ * connectivity state of a default ethernet connection, and an icon representing that connection.
+ */
+@SysUISingleton
+class EthernetInteractor
+@Inject
+constructor(
+ connectivityRepository: ConnectivityRepository,
+) {
+ /** Icon representing the current connectivity status of the ethernet connection */
+ val icon: Flow<Icon.Resource?> =
+ connectivityRepository.defaultConnections.map {
+ if (it.ethernet.isDefault) {
+ if (it.isValidated) {
+ Icon.Resource(
+ R.drawable.stat_sys_ethernet_fully,
+ ContentDescription.Resource(
+ AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES[1]
+ )
+ )
+ } else {
+ Icon.Resource(
+ R.drawable.stat_sys_ethernet,
+ ContentDescription.Resource(
+ AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES[0]
+ )
+ )
+ }
+ } else {
+ null
+ }
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt
new file mode 100644
index 000000000000..5784be34ce25
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ethernet/domain/EthernetInteractorTest.kt
@@ -0,0 +1,94 @@
+/*
+ * 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.statusbar.pipeline.ethernet.domain
+
+import androidx.test.filters.SmallTest
+import com.android.settingslib.AccessibilityContentDescriptions
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.common.shared.model.ContentDescription
+import com.android.systemui.common.shared.model.Icon
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+
+@SmallTest
+class EthernetInteractorTest : SysuiTestCase() {
+ private val connectivityRepository = FakeConnectivityRepository()
+ private val underTest = EthernetInteractor(connectivityRepository)
+
+ private val testScope = TestScope()
+
+ @Test
+ fun icon_default_validated() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.icon)
+
+ connectivityRepository.setEthernetConnected(default = true, validated = true)
+
+ val expected =
+ Icon.Resource(
+ R.drawable.stat_sys_ethernet_fully,
+ ContentDescription.Resource(
+ AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES[1]
+ )
+ )
+
+ assertThat(latest).isEqualTo(expected)
+ }
+
+ @Test
+ fun icon_default_notValidated() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.icon)
+
+ connectivityRepository.setEthernetConnected(default = true, validated = false)
+
+ val expected =
+ Icon.Resource(
+ R.drawable.stat_sys_ethernet,
+ ContentDescription.Resource(
+ AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES[0]
+ )
+ )
+
+ assertThat(latest).isEqualTo(expected)
+ }
+
+ @Test
+ fun icon_notDefault_validated() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.icon)
+
+ connectivityRepository.setEthernetConnected(default = false, validated = true)
+
+ assertThat(latest).isNull()
+ }
+
+ @Test
+ fun icon_notDefault_notValidated() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.icon)
+
+ connectivityRepository.setEthernetConnected(default = false, validated = false)
+
+ assertThat(latest).isNull()
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
index fc319c386695..d21eb945fbbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/data/repository/FakeConnectivityRepository.kt
@@ -51,4 +51,16 @@ class FakeConnectivityRepository : ConnectivityRepository {
isValidated = validated,
)
}
+
+ /** Similar convenience method for ethernet */
+ fun setEthernetConnected(
+ default: Boolean = true,
+ validated: Boolean = true,
+ ) {
+ defaultConnections.value =
+ DefaultConnectionModel(
+ ethernet = DefaultConnectionModel.Ethernet(default),
+ isValidated = validated
+ )
+ }
}