diff options
| author | 2023-08-11 10:41:26 -0400 | |
|---|---|---|
| committer | 2023-08-24 11:37:47 -0400 | |
| commit | 33ae20c8477d66649bb2adb66d3c96c6fd1de7d0 (patch) | |
| tree | 06d98a0cb2a442c9b700ef968aeb8197da801caa | |
| parent | 4a55272401ccbd5c433616da5af387f9a46bb4c5 (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
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 + ) + } } |