From 4109042c18346110e61cfc162b38c3e2e2143e3d Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Thu, 22 Dec 2022 09:56:48 -0500 Subject: [PATCH 1/5] [Sb refactor] Move WifiRepositoryImpl to prod/ package Note that this CL modifies the ktfmt_includes so we can keep the WifiRepositoryImplTest rename from running ktfmt, which would break the blame history. Test: existing tests Bug: 238425913 Change-Id: I9c6b9ba3905728c31859cac1d6703be4d77f3db0 --- packages/SystemUI/ktfmt_includes.txt | 2 +- .../statusbar/pipeline/dagger/StatusBarPipelineModule.kt | 2 +- .../pipeline/wifi/data/repository/WifiRepositorySwitcher.kt | 2 ++ .../wifi/data/repository/demo/DemoWifiRepository.kt | 2 +- .../wifi/data/repository/{ => prod}/WifiRepository.kt | 2 +- .../pipeline/wifi/domain/interactor/WifiInteractor.kt | 2 +- .../pipeline/wifi/data/repository/FakeWifiRepository.kt | 3 ++- .../wifi/data/repository/WifiRepositorySwitcherTest.kt | 2 ++ .../data/repository/{ => prod}/WifiRepositoryImplTest.kt | 6 +++--- 9 files changed, 14 insertions(+), 9 deletions(-) rename packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/{ => prod}/WifiRepository.kt (99%) rename packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/{ => prod}/WifiRepositoryImplTest.kt (99%) diff --git a/packages/SystemUI/ktfmt_includes.txt b/packages/SystemUI/ktfmt_includes.txt index b75c5c722403a..d40495565ec1a 100644 --- a/packages/SystemUI/ktfmt_includes.txt +++ b/packages/SystemUI/ktfmt_includes.txt @@ -752,7 +752,7 @@ -packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/panelstate/ShadeExpansionStateManagerTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerOldImplTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt --packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryImplTest.kt +-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 0d01715715c07..7f2430097f973 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -35,8 +35,8 @@ import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import dagger.Binds diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt index 73bcdfd2b78e9..ac79223d57e79 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt @@ -25,6 +25,8 @@ import com.android.systemui.demomode.DemoModeController import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt index 7890074cf8a26..54e41a305bff8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt @@ -20,8 +20,8 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.toWifiDataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt similarity index 99% rename from packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt rename to packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt index 5ccd6f45770d8..9946253e37e4e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.pipeline.wifi.data.repository +package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod import android.annotation.SuppressLint import android.content.IntentFilter diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt index 93041ceb42008..a55fccb9fd88c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt @@ -22,7 +22,7 @@ import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlo import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt index 4e15b4a503d73..00bae2a782ad6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt @@ -18,7 +18,8 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt index b935442fd73a3..73fb5499c3481 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt @@ -27,6 +27,8 @@ import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoModeWifiDataSource import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.kotlinArgumentCaptor import com.android.systemui.util.mockito.whenever diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt similarity index 99% rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryImplTest.kt rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt index 5d0d87b13d200..befb2901d4d5f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.pipeline.wifi.data.repository +package com.android.systemui.statusbar.pipeline.wifi.data.repository.prod import android.net.ConnectivityManager import android.net.Network @@ -33,8 +33,8 @@ import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.WIFI_NETWORK_DEFAULT import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argumentCaptor From c65a11a4fbd03aa98d1acd1f72e4545fad622574 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Wed, 21 Dec 2022 16:57:33 -0500 Subject: [PATCH 2/5] [Sb refactor] Pull the WifiRepository interface out of the impl file (1/2) In order to keep the git commit history cleaner, this commit duplicates the file WifiRepository.kt, and moves the interface definition from one to the other. The follow-up to this renames the Impl's file Test: existing tests Bug: 238425913 Change-Id: I40a6d5aa7e1c5e82954c35a233ca23e8942ac6f3 --- .../dagger/StatusBarPipelineModule.kt | 2 +- .../wifi/data/repository/WifiRepository.kt | 36 +++++++++++++++++++ .../data/repository/WifiRepositorySwitcher.kt | 1 - .../repository/demo/DemoWifiRepository.kt | 2 +- .../data/repository/prod/WifiRepository.kt | 16 +-------- .../wifi/domain/interactor/WifiInteractor.kt | 2 +- .../data/repository/FakeWifiRepository.kt | 1 - .../repository/WifiRepositorySwitcherTest.kt | 1 - 8 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index 7f2430097f973..0d01715715c07 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -35,8 +35,8 @@ import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl +import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositorySwitcher -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import dagger.Binds diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt new file mode 100644 index 0000000000000..53525f254e1d4 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 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.wifi.data.repository + +import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel +import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel +import kotlinx.coroutines.flow.StateFlow + +/** Provides data related to the wifi state. */ +interface WifiRepository { + /** Observable for the current wifi enabled status. */ + val isWifiEnabled: StateFlow + + /** Observable for the current wifi default status. */ + val isWifiDefault: StateFlow + + /** Observable for the current wifi network. */ + val wifiNetwork: StateFlow + + /** Observable for the current wifi network activity. */ + val wifiActivity: StateFlow +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt index ac79223d57e79..be86620e01f33 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcher.kt @@ -25,7 +25,6 @@ import com.android.systemui.demomode.DemoModeController import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl import javax.inject.Inject import kotlinx.coroutines.CoroutineScope diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt index 54e41a305bff8..7890074cf8a26 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/demo/DemoWifiRepository.kt @@ -20,8 +20,8 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.toWifiDataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel +import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt index 9946253e37e4e..c8c94e1029996 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt @@ -45,6 +45,7 @@ import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.model.toWifiDataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel +import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import java.util.concurrent.Executor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -62,21 +63,6 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.stateIn -/** Provides data related to the wifi state. */ -interface WifiRepository { - /** Observable for the current wifi enabled status. */ - val isWifiEnabled: StateFlow - - /** Observable for the current wifi default status. */ - val isWifiDefault: StateFlow - - /** Observable for the current wifi network. */ - val wifiNetwork: StateFlow - - /** Observable for the current wifi network activity. */ - val wifiActivity: StateFlow -} - /** Real implementation of [WifiRepository]. */ @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @OptIn(ExperimentalCoroutinesApi::class) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt index a55fccb9fd88c..93041ceb42008 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt @@ -22,7 +22,7 @@ import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlo import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt index 00bae2a782ad6..f5837d698c511 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl.Companion.ACTIVITY_DEFAULT import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt index 73fb5499c3481..1085c2b1a5d58 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt @@ -27,7 +27,6 @@ import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoModeWifiDataSource import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.kotlinArgumentCaptor From 47c9c93e4a7076019e095b0ff99d64982f90548b Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Thu, 22 Dec 2022 10:00:29 -0500 Subject: [PATCH 3/5] [Sb refactor] Pull the WifiRepository interface out of the impl file (2/2) Rename WifiRepository.kt -> WifiRepositoryImpl.kt for the impl's definition. Also update the ktfmt_includes to ignore this file. Test: WifiRepositoryImplTest Bug: 238425913 Change-Id: I21f3259e9f86390da1a78d36f38c545199254e11 --- packages/SystemUI/ktfmt_includes.txt | 2 +- .../prod/{WifiRepository.kt => WifiRepositoryImpl.kt} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/{WifiRepository.kt => WifiRepositoryImpl.kt} (100%) diff --git a/packages/SystemUI/ktfmt_includes.txt b/packages/SystemUI/ktfmt_includes.txt index d40495565ec1a..434f227d89c8f 100644 --- a/packages/SystemUI/ktfmt_includes.txt +++ b/packages/SystemUI/ktfmt_includes.txt @@ -460,7 +460,7 @@ -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/model/WifiActivityModel.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/model/WifiNetworkModel.kt --packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepository.kt +-packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractor.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/shared/WifiConstants.kt -packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt similarity index 100% rename from packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepository.kt rename to packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt From cf01bebb3f1e67de1707ab9859be7de46fe803e3 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Mon, 19 Dec 2022 17:57:07 -0500 Subject: [PATCH 4/5] [Sb refactor] Add Utils.isInService to mobile pipeline This CL just adds the backend to track the Utils.isInService bit that the old pipeline was also tracking. It is tracked in exactly the same way as before, but with a TODO to clarify our usage in the future. Test: MobileConnectionRepositoryTest Bug: 238425913 Bug: 263167683 Change-Id: I9541a9148d8cb44a5e9ebeee1c824c2402f63b5a --- .../data/model/MobileConnectionModel.kt | 16 ++++++ .../demo/DemoMobileConnectionsRepository.kt | 1 + .../prod/MobileConnectionRepositoryImpl.kt | 2 + .../prod/MobileConnectionRepositoryTest.kt | 55 ++++++++++++++++++- 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/model/MobileConnectionModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/model/MobileConnectionModel.kt index 1aa954ff48cf5..012b9ec09e7a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/model/MobileConnectionModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/model/MobileConnectionModel.kt @@ -51,6 +51,16 @@ data class MobileConnectionModel( */ val operatorAlphaShort: String? = null, + /** + * TODO (b/263167683): Clarify this field + * + * This check comes from [com.android.settingslib.Utils.isInService]. It is intended to be a + * mapping from a ServiceState to a notion of connectivity. Notably, it will consider a + * connection to be in-service if either the voice registration state is IN_SERVICE or the data + * registration state is IN_SERVICE and NOT IWLAN. + */ + val isInService: Boolean = false, + /** Fields below from [SignalStrengthsListener.onSignalStrengthsChanged] */ val isGsm: Boolean = false, @IntRange(from = 0, to = 4) @@ -99,6 +109,10 @@ data class MobileConnectionModel( row.logChange(COL_OPERATOR, operatorAlphaShort) } + if (prevVal.isInService != isInService) { + row.logChange(COL_IS_IN_SERVICE, isInService) + } + if (prevVal.isGsm != isGsm) { row.logChange(COL_IS_GSM, isGsm) } @@ -129,6 +143,7 @@ data class MobileConnectionModel( row.logChange(COL_EMERGENCY, isEmergencyOnly) row.logChange(COL_ROAMING, isRoaming) row.logChange(COL_OPERATOR, operatorAlphaShort) + row.logChange(COL_IS_IN_SERVICE, isInService) row.logChange(COL_IS_GSM, isGsm) row.logChange(COL_CDMA_LEVEL, cdmaLevel) row.logChange(COL_PRIMARY_LEVEL, primaryLevel) @@ -141,6 +156,7 @@ data class MobileConnectionModel( const val COL_EMERGENCY = "EmergencyOnly" const val COL_ROAMING = "Roaming" const val COL_OPERATOR = "OperatorName" + const val COL_IS_IN_SERVICE = "IsInService" const val COL_IS_GSM = "IsGsm" const val COL_CDMA_LEVEL = "CdmaLevel" const val COL_PRIMARY_LEVEL = "PrimaryLevel" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt index b252de8dd3890..0b5f9d5ae59e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt @@ -247,6 +247,7 @@ constructor( return MobileConnectionModel( isEmergencyOnly = false, // TODO(b/261029387): not yet supported isRoaming = roaming, + isInService = (level ?: 0) > 0, isGsm = false, // TODO(b/261029387): not yet supported cdmaLevel = level ?: 0, primaryLevel = level ?: 0, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt index 0b9e1583898e5..5cfff82253c5a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt @@ -32,6 +32,7 @@ import android.telephony.TelephonyManager import android.telephony.TelephonyManager.ERI_OFF import android.telephony.TelephonyManager.EXTRA_SUBSCRIPTION_ID import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN +import com.android.settingslib.Utils import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.qualifiers.Application @@ -117,6 +118,7 @@ class MobileConnectionRepositoryImpl( isEmergencyOnly = serviceState.isEmergencyOnly, isRoaming = serviceState.roaming, operatorAlphaShort = serviceState.operatorAlphaShort, + isInService = Utils.isInService(serviceState), ) trySend(state) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt index 7970443f69b1b..c63dd2a2318c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt @@ -20,7 +20,10 @@ import android.content.Intent import android.os.UserHandle import android.provider.Settings import android.telephony.CellSignalStrengthCdma +import android.telephony.NetworkRegistrationInfo import android.telephony.ServiceState +import android.telephony.ServiceState.STATE_IN_SERVICE +import android.telephony.ServiceState.STATE_OUT_OF_SERVICE import android.telephony.SignalStrength import android.telephony.SubscriptionInfo import android.telephony.TelephonyCallback @@ -47,7 +50,6 @@ import android.telephony.TelephonyManager.EXTRA_SHOW_SPN import android.telephony.TelephonyManager.EXTRA_SPN import android.telephony.TelephonyManager.EXTRA_SUBSCRIPTION_ID import android.telephony.TelephonyManager.NETWORK_TYPE_LTE -import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.log.table.TableLogBuffer @@ -302,7 +304,6 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { var latest: MobileConnectionModel? = null val job = underTest.connectionInfo.onEach { latest = it }.launchIn(this) - val type = NETWORK_TYPE_UNKNOWN val expected = UnknownNetworkType assertThat(latest?.resolvedNetworkType).isEqualTo(expected) @@ -590,6 +591,56 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { job.cancel() } + @Test + fun `connection model - isInService - not iwlan`() = + runBlocking(IMMEDIATE) { + var latest: Boolean? = null + val job = underTest.connectionInfo.onEach { latest = it.isInService }.launchIn(this) + + val serviceState = ServiceState() + serviceState.voiceRegState = STATE_IN_SERVICE + serviceState.dataRegState = STATE_IN_SERVICE + + getTelephonyCallbackForType().onServiceStateChanged(serviceState) + + assertThat(latest).isTrue() + + serviceState.voiceRegState = STATE_OUT_OF_SERVICE + getTelephonyCallbackForType().onServiceStateChanged(serviceState) + assertThat(latest).isTrue() + + serviceState.dataRegState = STATE_OUT_OF_SERVICE + getTelephonyCallbackForType().onServiceStateChanged(serviceState) + assertThat(latest).isFalse() + + job.cancel() + } + + @Test + fun `connection model - isInService - is iwlan - voice out of service - data in service`() = + runBlocking(IMMEDIATE) { + var latest: Boolean? = null + val job = underTest.connectionInfo.onEach { latest = it.isInService }.launchIn(this) + + // Mock the service state here so we can make it specifically IWLAN + val serviceState: ServiceState = mock() + whenever(serviceState.state).thenReturn(STATE_OUT_OF_SERVICE) + whenever(serviceState.dataRegistrationState).thenReturn(STATE_IN_SERVICE) + + // See [com.android.settingslib.Utils.isInService] for more info. This is one way to + // make the network look like IWLAN + val networkRegWlan: NetworkRegistrationInfo = mock() + whenever(serviceState.getNetworkRegistrationInfo(any(), any())) + .thenReturn(networkRegWlan) + whenever(networkRegWlan.registrationState) + .thenReturn(NetworkRegistrationInfo.REGISTRATION_STATE_HOME) + + getTelephonyCallbackForType().onServiceStateChanged(serviceState) + assertThat(latest).isFalse() + + job.cancel() + } + private fun getTelephonyCallbacks(): List { val callbackCaptor = argumentCaptor() Mockito.verify(telephonyManager).registerTelephonyCallback(any(), callbackCaptor.capture()) From eadd94c59c3b08deb5f787c7aa54ea21c8c62433 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Tue, 20 Dec 2022 16:27:12 -0500 Subject: [PATCH 5/5] [Sb refactor] Consume isInService in mobile view model This implementation matches what was in MobileSignalController. If isInService() reports false, then we show the empty mobile icon. Otherwise use the regular icon id logic Test: MobileIconViewModelTest Test: MobileIconInteractorTest Bug: 263167683 Bug: 238425913 Change-Id: Ie0da01439e79267a6842e096ec6924b3ccebce7d --- .../domain/interactor/MobileIconInteractor.kt | 8 ++++++ .../ui/viewmodel/MobileIconViewModel.kt | 16 ++++++++---- .../interactor/FakeMobileIconInteractor.kt | 2 ++ .../interactor/MobileIconInteractorTest.kt | 17 ++++++++++++ .../ui/viewmodel/MobileIconViewModelTest.kt | 26 +++++++++++++++++++ 5 files changed, 64 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt index e6686dce7bbc7..675760533d97b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractor.kt @@ -48,6 +48,9 @@ interface MobileIconInteractor { /** True when telephony tells us that the data state is CONNECTED */ val isDataConnected: StateFlow + /** True if we consider this connection to be in service, i.e. can make calls */ + val isInService: StateFlow + // TODO(b/256839546): clarify naming of default vs active /** True if we want to consider the data connection enabled */ val isDefaultDataEnabled: StateFlow @@ -175,4 +178,9 @@ class MobileIconInteractorImpl( connectionInfo .mapLatest { connection -> connection.dataConnectionState == Connected } .stateIn(scope, SharingStarted.WhileSubscribed(), false) + + override val isInService = + connectionRepository.connectionInfo + .mapLatest { it.isInService } + .stateIn(scope, SharingStarted.WhileSubscribed(), false) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt index 2d6ac4efd5128..a2117c7df188e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt @@ -80,11 +80,17 @@ constructor( override val iconId: Flow = run { val initial = SignalDrawable.getEmptyState(iconInteractor.numberOfLevels.value) - combine(iconInteractor.level, iconInteractor.numberOfLevels, showExclamationMark) { - level, - numberOfLevels, - showExclamationMark -> - SignalDrawable.getState(level, numberOfLevels, showExclamationMark) + combine( + iconInteractor.level, + iconInteractor.numberOfLevels, + showExclamationMark, + iconInteractor.isInService, + ) { level, numberOfLevels, showExclamationMark, isInService -> + if (!isInService) { + SignalDrawable.getEmptyState(numberOfLevels) + } else { + SignalDrawable.getState(level, numberOfLevels, showExclamationMark) + } } .distinctUntilChanged() .logDiffsForTable( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconInteractor.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconInteractor.kt index c49458909c78b..5889ec885e1f5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconInteractor.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconInteractor.kt @@ -52,6 +52,8 @@ class FakeMobileIconInteractor( override val isDataConnected = MutableStateFlow(true) + override val isInService = MutableStateFlow(true) + private val _isDataEnabled = MutableStateFlow(true) override val isDataEnabled = _isDataEnabled diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt index 83c5055a6edae..cb2ee9940c38f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt @@ -299,6 +299,23 @@ class MobileIconInteractorTest : SysuiTestCase() { job.cancel() } + @Test + fun `isInService - uses repository value`() = + runBlocking(IMMEDIATE) { + var latest: Boolean? = null + val job = underTest.isInService.onEach { latest = it }.launchIn(this) + + connectionRepository.setConnectionInfo(MobileConnectionModel(isInService = true)) + + assertThat(latest).isTrue() + + connectionRepository.setConnectionInfo(MobileConnectionModel(isInService = false)) + + assertThat(latest).isFalse() + + job.cancel() + } + @Test fun `roaming - is gsm - uses connection model`() = runBlocking(IMMEDIATE) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt index 50221bc97badb..2a8d42ff69975 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt @@ -97,6 +97,30 @@ class MobileIconViewModelTest : SysuiTestCase() { job.cancel() } + @Test + fun `icon - uses empty state - when not in service`() = + testScope.runTest { + var latest: Int? = null + val job = underTest.iconId.onEach { latest = it }.launchIn(this) + + interactor.isInService.value = false + + var expected = emptySignal() + + assertThat(latest).isEqualTo(expected) + + // Changing the level doesn't overwrite the disabled state + interactor.level.value = 2 + assertThat(latest).isEqualTo(expected) + + // Once back in service, the regular icon appears + interactor.isInService.value = true + expected = defaultSignal(level = 2) + assertThat(latest).isEqualTo(expected) + + job.cancel() + } + @Test fun networkType_dataEnabled_groupIsRepresented() = testScope.runTest { @@ -375,5 +399,7 @@ class MobileIconViewModelTest : SysuiTestCase() { ): Int { return SignalDrawable.getState(level, /* numLevels */ 4, !connected) } + + fun emptySignal(): Int = SignalDrawable.getEmptyState(4) } }