diff options
| author | 2023-10-10 11:08:48 -0400 | |
|---|---|---|
| committer | 2023-10-13 14:42:42 -0400 | |
| commit | 46073fc829e4b286190b92401d0edf7e244be9a5 (patch) | |
| tree | 12575a16f555856716b60f81647dbfd1d9174dc1 | |
| parent | 721668de97aee4ffbaf6ff6aa07cf49b5ed08fe8 (diff) | |
Add ethernet support in CastTile
This will only be added for the new connectivity pipeline.
Test: atest CastTileTest
Fixes: 233230825
Change-Id: Ifead904b301a0f83e4103ff9099076d5e9402e23
4 files changed, 65 insertions, 63 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index a2637d5e55c3..742b24ccd6b4 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -711,8 +711,8 @@ <!-- QuickSettings: Cast detail panel, default device description [CHAR LIMIT=NONE] --> <!-- QuickSettings: Cast detail panel, text when there are no items [CHAR LIMIT=NONE] --> <string name="quick_settings_cast_detail_empty_text">No devices available</string> - <!-- QuickSettings: Cast unavailable, text when not connected to WiFi [CHAR LIMIT=NONE] --> - <string name="quick_settings_cast_no_wifi">Wi\u2011Fi not connected</string> + <!-- QuickSettings: Cast unavailable, text when not connected to WiFi or ethernet[CHAR LIMIT=NONE] --> + <string name="quick_settings_cast_no_network">No Wi\u2011Fi or Ethernet connection</string> <!-- QuickSettings: Brightness dialog title [CHAR LIMIT=NONE] --> <string name="quick_settings_brightness_dialog_title">Brightness</string> <!-- QuickSettings: Label for the toggle that controls whether display inversion is enabled. [CHAR LIMIT=NONE] --> diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 5c6e9028545a..a69820868838 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -38,7 +38,6 @@ import com.android.internal.app.MediaRouteDialogPresenter; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.res.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; @@ -53,12 +52,13 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QsEventLogger; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.res.R; import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.systemui.statusbar.phone.SystemUIDialog; -import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor; -import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel; +import com.android.systemui.statusbar.pipeline.shared.data.model.DefaultConnectionModel; +import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; @@ -85,10 +85,9 @@ public class CastTile extends QSTileImpl<BooleanState> { private final NetworkController mNetworkController; private final DialogLaunchAnimator mDialogLaunchAnimator; private final Callback mCallback = new Callback(); - private final WifiInteractor mWifiInteractor; private final TileJavaAdapter mJavaAdapter; private final FeatureFlags mFeatureFlags; - private boolean mWifiConnected; + private boolean mCastTransportAllowed; private boolean mHotspotConnected; @Inject @@ -107,7 +106,7 @@ public class CastTile extends QSTileImpl<BooleanState> { NetworkController networkController, HotspotController hotspotController, DialogLaunchAnimator dialogLaunchAnimator, - WifiInteractor wifiInteractor, + ConnectivityRepository connectivityRepository, TileJavaAdapter javaAdapter, FeatureFlags featureFlags ) { @@ -117,7 +116,6 @@ public class CastTile extends QSTileImpl<BooleanState> { mKeyguard = keyguardStateController; mNetworkController = networkController; mDialogLaunchAnimator = dialogLaunchAnimator; - mWifiInteractor = wifiInteractor; mJavaAdapter = javaAdapter; mFeatureFlags = featureFlags; mController.observe(this, mCallback); @@ -125,7 +123,11 @@ public class CastTile extends QSTileImpl<BooleanState> { if (!mFeatureFlags.isEnabled(SIGNAL_CALLBACK_DEPRECATION)) { mNetworkController.observe(this, mSignalCallback); } else { - mJavaAdapter.bind(this, mWifiInteractor.getWifiNetwork(), mNetworkModelConsumer); + mJavaAdapter.bind( + this, + connectivityRepository.getDefaultConnections(), + mNetworkModelConsumer + ); } hotspotController.observe(this, mHotspotCallback); } @@ -282,7 +284,7 @@ public class CastTile extends QSTileImpl<BooleanState> { } state.icon = ResourceIcon.get(state.value ? R.drawable.ic_cast_connected : R.drawable.ic_cast); - if (canCastToWifi() || state.value) { + if (canCastToNetwork() || state.value) { state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; if (!state.value) { state.secondaryLabel = ""; @@ -291,7 +293,7 @@ public class CastTile extends QSTileImpl<BooleanState> { state.forceExpandIcon = willPopDialog(); } else { state.state = Tile.STATE_UNAVAILABLE; - String noWifi = mContext.getString(R.string.quick_settings_cast_no_wifi); + String noWifi = mContext.getString(R.string.quick_settings_cast_no_network); state.secondaryLabel = noWifi; state.forceExpandIcon = false; } @@ -308,13 +310,13 @@ public class CastTile extends QSTileImpl<BooleanState> { : mContext.getString(R.string.quick_settings_cast_device_default_name); } - private boolean canCastToWifi() { - return mWifiConnected || mHotspotConnected; + private boolean canCastToNetwork() { + return mCastTransportAllowed || mHotspotConnected; } - private void setWifiConnected(boolean connected) { - if (connected != mWifiConnected) { - mWifiConnected = connected; + private void setCastTransportAllowed(boolean connected) { + if (connected != mCastTransportAllowed) { + mCastTransportAllowed = connected; // Hotspot is not connected, so changes here should update if (!mHotspotConnected) { refreshState(); @@ -326,14 +328,17 @@ public class CastTile extends QSTileImpl<BooleanState> { if (connected != mHotspotConnected) { mHotspotConnected = connected; // Wifi is not connected, so changes here should update - if (!mWifiConnected) { + if (!mCastTransportAllowed) { refreshState(); } } } - private final Consumer<WifiNetworkModel> mNetworkModelConsumer = (model) -> { - setWifiConnected(model instanceof WifiNetworkModel.Active); + private final Consumer<DefaultConnectionModel> mNetworkModelConsumer = (model) -> { + boolean isWifiDefault = model.getWifi().isDefault(); + boolean isEthernetDefault = model.getEthernet().isDefault(); + boolean hasCellularTransport = model.getMobile().isDefault(); + setCastTransportAllowed((isWifiDefault || isEthernetDefault) && !hasCellularTransport); }; private final SignalCallback mSignalCallback = new SignalCallback() { @@ -342,7 +347,7 @@ public class CastTile extends QSTileImpl<BooleanState> { // statusIcon.visible has the connected status information boolean enabledAndConnected = indicators.enabled && (indicators.qsIcon != null && indicators.qsIcon.visible); - setWifiConnected(enabledAndConnected); + setCastTransportAllowed(enabledAndConnected); } }; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java index e537131bad01..4c5a2144941a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java @@ -54,11 +54,7 @@ import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository; -import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository; import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor; -import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl; -import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel; -import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel.Inactive; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; @@ -111,7 +107,8 @@ public class CastTileTest extends SysuiTestCase { private WifiInteractor mWifiInteractor; private final TileJavaAdapter mJavaAdapter = new TileJavaAdapter(); - private final FakeWifiRepository mWifiRepository = new FakeWifiRepository(); + private final FakeConnectivityRepository mConnectivityRepository = + new FakeConnectivityRepository(); private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags(); private final TestScope mTestScope = TestScopeProvider.getTestScope(); @@ -124,12 +121,6 @@ public class CastTileTest extends SysuiTestCase { mTestableLooper = TestableLooper.get(this); when(mHost.getContext()).thenReturn(mContext); - - mWifiInteractor = new WifiInteractorImpl( - new FakeConnectivityRepository(), - mWifiRepository, - mTestScope - ); } @After @@ -204,25 +195,41 @@ public class CastTileTest extends SysuiTestCase { // SIGNAL_CALLBACK_DEPRECATION flag set to true @Test - public void stateUnavailable_wifiDisabled_newPipeline() { + public void stateUnavailable_noDefaultNetworks_newPipeline() { createAndStartTileNewImpl(); - mWifiRepository.setIsWifiEnabled(false); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test - public void stateUnavailable_wifiEnabled_notConnected_newPipeline() { + public void stateUnavailable_mobileConnected_newPipeline() { createAndStartTileNewImpl(); - mWifiRepository.setIsWifiEnabled(true); - mWifiRepository.setWifiNetwork(Inactive.INSTANCE); + mConnectivityRepository.setMobileConnected(true); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); } @Test + public void stateInactive_wifiConnected_newPipeline() { + createAndStartTileNewImpl(); + mConnectivityRepository.setWifiConnected(true); + mTestableLooper.processAllMessages(); + + assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); + } + + @Test + public void stateInactive_ethernetConnected_newPipeline() { + createAndStartTileNewImpl(); + mConnectivityRepository.setEthernetConnected(true); + mTestableLooper.processAllMessages(); + + assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); + } + + @Test public void stateActive_wifiConnectedAndCasting_newPipeline() { createAndStartTileNewImpl(); CastController.CastDevice device = new CastController.CastDevice(); @@ -231,40 +238,27 @@ public class CastTileTest extends SysuiTestCase { devices.add(device); when(mController.getCastDevices()).thenReturn(devices); - mWifiRepository.setWifiNetwork( - new WifiNetworkModel.Active( - 1 /* networkId */, - true /* isValidated */, - 3 /* level */, - "test" /* ssid */, - WifiNetworkModel.HotspotDeviceType.NONE, - false /* isPasspointAccessPoint */, - false /* isOnlineSignUpforPasspointAccessPoint */, - null /* passpointProviderFriendlyName */ - )); + mConnectivityRepository.setWifiConnected(true); + mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state); } @Test - public void stateInactive_wifiConnectedNotCasting_newPipeline() { + public void stateActive_ethernetConnectedAndCasting_newPipeline() { createAndStartTileNewImpl(); + CastController.CastDevice device = new CastController.CastDevice(); + device.state = CastDevice.STATE_CONNECTED; + List<CastDevice> devices = new ArrayList<>(); + devices.add(device); + when(mController.getCastDevices()).thenReturn(devices); + + mConnectivityRepository.setEthernetConnected(true); - mWifiRepository.setWifiNetwork( - new WifiNetworkModel.Active( - 1 /* networkId */, - true /* isValidated */, - 3 /* level */, - "test" /* ssid */, - WifiNetworkModel.HotspotDeviceType.NONE, - false /* isPasspointAccessPoint */, - false /* isOnlineSignUpforPasspointAccessPoint */, - null /* passpointProviderFriendlyName */ - )); mTestableLooper.processAllMessages(); - assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state); + assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state); } // ------------------------------------------------- @@ -512,7 +506,7 @@ public class CastTileTest extends SysuiTestCase { mNetworkController, mHotspotController, mDialogLaunchAnimator, - mWifiInteractor, + mConnectivityRepository, mJavaAdapter, mFeatureFlags ); @@ -555,7 +549,7 @@ public class CastTileTest extends SysuiTestCase { mNetworkController, mHotspotController, mDialogLaunchAnimator, - mWifiInteractor, + mConnectivityRepository, mJavaAdapter, mFeatureFlags ); 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 e44ff8e21270..28d632d9fcea 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 @@ -41,6 +41,7 @@ class FakeConnectivityRepository : ConnectivityRepository { * setting mobile connected && validated, since the default state is disconnected && not * validated */ + @JvmOverloads fun setMobileConnected( default: Boolean = true, validated: Boolean = true, @@ -53,6 +54,7 @@ class FakeConnectivityRepository : ConnectivityRepository { } /** Similar convenience method for ethernet */ + @JvmOverloads fun setEthernetConnected( default: Boolean = true, validated: Boolean = true, @@ -64,6 +66,7 @@ class FakeConnectivityRepository : ConnectivityRepository { ) } + @JvmOverloads fun setWifiConnected( default: Boolean = true, validated: Boolean = true, |