diff options
5 files changed, 15 insertions, 161 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java index d880aa604849..765c5749cd4b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java @@ -50,7 +50,6 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QsEventLogger; import com.android.systemui.qs.logging.QSLogger; -import com.android.systemui.qs.tiles.dialog.CastDetailsViewModel; import com.android.systemui.shade.domain.interactor.FakeShadeDialogContextInteractor; import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor; import com.android.systemui.statusbar.connectivity.IconState; @@ -64,7 +63,6 @@ import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -106,8 +104,6 @@ public class CastTileTest extends SysuiTestCase { private DialogTransitionAnimator mDialogTransitionAnimator; @Mock private QsEventLogger mUiEventLogger; - @Mock - private CastDetailsViewModel.Factory mCastDetailsViewModelFactory; private final TileJavaAdapter mJavaAdapter = new TileJavaAdapter(); private final FakeConnectivityRepository mConnectivityRepository = @@ -521,29 +517,6 @@ public class CastTileTest extends SysuiTestCase { assertTrue(mCastTile.getState().forceExpandIcon); } - @Test - public void testDetailsViewUnavailableState_returnsNull() { - createAndStartTileNewImpl(); - mTestableLooper.processAllMessages(); - - assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); - mCastTile.getDetailsViewModel(Assert::assertNull); - } - - @Test - public void testDetailsViewAvailableState_returnsNotNull() { - createAndStartTileNewImpl(); - CastDevice device = createConnectedCastDevice(); - List<CastDevice> devices = new ArrayList<>(); - devices.add(device); - when(mController.getCastDevices()).thenReturn(devices); - mConnectivityRepository.setWifiConnected(true); - mTestableLooper.processAllMessages(); - - assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state); - mCastTile.getDetailsViewModel(Assert::assertNotNull); - } - /** * For simplicity, let this method still set the field even though that's kind of gross */ @@ -567,8 +540,7 @@ public class CastTileTest extends SysuiTestCase { mConnectivityRepository, mJavaAdapter, mFeatureFlags, - mShadeDialogContextInteractor, - mCastDetailsViewModelFactory + mShadeDialogContextInteractor ); mCastTile.initialize(); @@ -612,8 +584,7 @@ public class CastTileTest extends SysuiTestCase { mConnectivityRepository, mJavaAdapter, mFeatureFlags, - mShadeDialogContextInteractor, - mCastDetailsViewModelFactory + mShadeDialogContextInteractor ); mCastTile.initialize(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt index 4cd875594b43..d40ecc9565ae 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileDetails.kt @@ -43,8 +43,6 @@ import com.android.systemui.bluetooth.qsdialog.BluetoothDetailsViewModel import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.qs.flags.QsDetailedView import com.android.systemui.qs.panels.ui.viewmodel.DetailsViewModel -import com.android.systemui.qs.tiles.dialog.CastDetailsContent -import com.android.systemui.qs.tiles.dialog.CastDetailsViewModel import com.android.systemui.qs.tiles.dialog.InternetDetailsContent import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel import com.android.systemui.qs.tiles.dialog.ModesDetailsContent @@ -133,7 +131,6 @@ private fun MapTileDetailsContent(tileDetailsViewModel: TileDetailsViewModel) { is BluetoothDetailsViewModel -> BluetoothDetailsContent(tileDetailsViewModel.detailsContentViewModel) is ModesDetailsViewModel -> ModesDetailsContent(tileDetailsViewModel) - is CastDetailsViewModel -> CastDetailsContent() } } 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 349c771048dc..c60e3da9d833 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -48,13 +48,11 @@ import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QSTile.BooleanState; -import com.android.systemui.plugins.qs.TileDetailsViewModel; import com.android.systemui.plugins.statusbar.StatusBarStateController; 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.qs.tiles.dialog.CastDetailsViewModel; import com.android.systemui.res.R; import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor; import com.android.systemui.statusbar.connectivity.NetworkController; @@ -95,7 +93,6 @@ public class CastTile extends QSTileImpl<BooleanState> { private final ShadeDialogContextInteractor mShadeDialogContextInteractor; private boolean mCastTransportAllowed; private boolean mHotspotConnected; - private final CastDetailsViewModel.Factory mCastDetailsViewModelFactory; @Inject public CastTile( @@ -116,8 +113,7 @@ public class CastTile extends QSTileImpl<BooleanState> { ConnectivityRepository connectivityRepository, TileJavaAdapter javaAdapter, FeatureFlags featureFlags, - ShadeDialogContextInteractor shadeDialogContextInteractor, - CastDetailsViewModel.Factory castDetailsViewModelFactory + ShadeDialogContextInteractor shadeDialogContextInteractor ) { super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger); @@ -128,7 +124,6 @@ public class CastTile extends QSTileImpl<BooleanState> { mJavaAdapter = javaAdapter; mFeatureFlags = featureFlags; mShadeDialogContextInteractor = shadeDialogContextInteractor; - mCastDetailsViewModelFactory = castDetailsViewModelFactory; mController.observe(this, mCallback); mKeyguard.observe(this, mCallback); if (!mFeatureFlags.isEnabled(SIGNAL_CALLBACK_DEPRECATION)) { @@ -177,7 +172,12 @@ public class CastTile extends QSTileImpl<BooleanState> { @Override protected void handleClick(@Nullable Expandable expandable) { - handleClick(() -> { + if (getState().state == Tile.STATE_UNAVAILABLE) { + return; + } + + List<CastDevice> activeDevices = getActiveDevices(); + if (willPopDialog()) { if (!mKeyguard.isShowing()) { showDialog(expandable); } else { @@ -187,43 +187,16 @@ public class CastTile extends QSTileImpl<BooleanState> { showDialog(null /* view */); }); } - }); - } - - @Override - public boolean getDetailsViewModel(Consumer<TileDetailsViewModel> callback) { - CastDetailsViewModel viewModel = mCastDetailsViewModelFactory.create(); - handleClick(() -> { - if (!mKeyguard.isShowing()) { - callback.accept(viewModel); - } else { - mActivityStarter.dismissKeyguardThenExecute(() -> { - callback.accept(viewModel); - return false; - }, null /* cancelAction */, true/* afterKeyguardGone */); - } - }); - return true; - } - - private void handleClick(Runnable showPromptCallback) { - if (getState().state == Tile.STATE_UNAVAILABLE) { - return; - } - - List<CastDevice> activeDevices = getActiveDevices(); - if (willShowPrompt()) { - showPromptCallback.run(); } else { mController.stopCasting(activeDevices.get(0), StopReason.STOP_QS_TILE); } } - // We want to pop up the media route selection dialog (or show the cast details view) if we - // either have no active devices (neither routes nor projection), or if we have an active - // route. In other cases, we assume that a projection is active. This is messy, but this tile - // never correctly handled the case where multiple devices were active :-/. - private boolean willShowPrompt() { + // We want to pop up the media route selection dialog if we either have no active devices + // (neither routes nor projection), or if we have an active route. In other cases, we assume + // that a projection is active. This is messy, but this tile never correctly handled the + // case where multiple devices were active :-/. + private boolean willPopDialog() { List<CastDevice> activeDevices = getActiveDevices(); return activeDevices.isEmpty() || (activeDevices.get(0).getTag() instanceof RouteInfo); } @@ -330,7 +303,7 @@ public class CastTile extends QSTileImpl<BooleanState> { state.secondaryLabel = ""; } state.expandedAccessibilityClassName = Button.class.getName(); - state.forceExpandIcon = willShowPrompt(); + state.forceExpandIcon = willPopDialog(); } else { state.state = Tile.STATE_UNAVAILABLE; String noWifi = mContext.getString(R.string.quick_settings_cast_no_network); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt deleted file mode 100644 index e31108ea450b..000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsContent.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2025 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.qs.tiles.dialog - -import android.view.LayoutInflater -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.viewinterop.AndroidView -import com.android.internal.R - -@Composable -fun CastDetailsContent() { - // TODO(b/378514236): Finish implementing this function. - AndroidView( - modifier = Modifier.fillMaxWidth().fillMaxHeight(), - factory = { context -> - // Inflate with the existing dialog xml layout - LayoutInflater.from(context).inflate(R.layout.media_route_controller_dialog, null) - }, - ) -} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt deleted file mode 100644 index efe04a25244f..000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/CastDetailsViewModel.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2025 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.qs.tiles.dialog - -import android.content.Intent -import android.provider.Settings -import com.android.systemui.plugins.qs.TileDetailsViewModel -import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandler -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject - -/** The view model used for the screen record details view in the Quick Settings */ -class CastDetailsViewModel -@AssistedInject -constructor(private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler) : - TileDetailsViewModel { - @AssistedFactory - fun interface Factory { - fun create(): CastDetailsViewModel - } - - override fun clickOnSettingsButton() { - qsTileIntentUserActionHandler.handle( - /* expandable= */ null, - Intent(Settings.ACTION_CAST_SETTINGS), - ) - } - - // TODO(b/388321032): Replace this string with a string in a translatable xml file, - override val title: String - get() = "Cast screen to device" - - // TODO(b/388321032): Replace this string with a string in a translatable xml file, - override val subTitle: String - get() = "Searching for devices..." -} |