Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.modesDialogViewModel import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.FakeSettings Loading Loading @@ -146,6 +147,7 @@ class ModesTileTest : SysuiTestCase() { tileDataInteractor, tileDataInteractor, mapper, mapper, userActionInteractor, userActionInteractor, kosmos.modesDialogViewModel, ) ) underTest.initialize() underTest.initialize() Loading packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt +11 −0 Original line number Original line Diff line number Diff line Loading @@ -35,12 +35,14 @@ import com.android.systemui.modes.shared.ModesUiIcons import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.qs.QSHost import com.android.systemui.qs.QSHost import com.android.systemui.qs.QsEventLogger import com.android.systemui.qs.QsEventLogger import com.android.systemui.qs.asQSTileIcon import com.android.systemui.qs.asQSTileIcon import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.tileimpl.QSTileImpl import com.android.systemui.qs.tileimpl.QSTileImpl import com.android.systemui.qs.tiles.dialog.ModesDetailsViewModel import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileDataInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileDataInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileUserActionInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileUserActionInteractor import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel Loading @@ -48,6 +50,7 @@ import com.android.systemui.qs.tiles.impl.modes.ui.ModesTileMapper import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.res.R import com.android.systemui.res.R import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.ModesDialogViewModel import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking Loading @@ -67,6 +70,7 @@ constructor( private val dataInteractor: ModesTileDataInteractor, private val dataInteractor: ModesTileDataInteractor, private val tileMapper: ModesTileMapper, private val tileMapper: ModesTileMapper, private val userActionInteractor: ModesTileUserActionInteractor, private val userActionInteractor: ModesTileUserActionInteractor, private val modesDialogViewModel: ModesDialogViewModel, ) : ) : QSTileImpl<QSTile.State>( QSTileImpl<QSTile.State>( host, host, Loading Loading @@ -114,6 +118,13 @@ constructor( userActionInteractor.handleToggleClick(model) userActionInteractor.handleToggleClick(model) } } override fun getDetailsViewModel(): TileDetailsViewModel { return ModesDetailsViewModel( onSettingsClick = { userActionInteractor.handleLongClick(null) }, viewModel = modesDialogViewModel, ) } override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent @VisibleForTesting @VisibleForTesting Loading packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ModesDetailsViewModel.kt 0 → 100644 +48 −0 Original line number Original line Diff line number Diff line /* * 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 androidx.compose.runtime.Composable import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.statusbar.policy.ui.dialog.composable.ModeTileGrid import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.ModesDialogViewModel /** The view model used for the modes details view in the Quick Settings */ class ModesDetailsViewModel( private val onSettingsClick: () -> Unit, private val viewModel: ModesDialogViewModel, ) : TileDetailsViewModel() { @Composable override fun GetContentView() { // TODO(b/378513940): Finish implementing this function. ModeTileGrid(viewModel = viewModel) } override fun clickOnSettingsButton() { onSettingsClick() } override fun getTitle(): String { // TODO(b/388321032): Replace this string with a string in a translatable xml file. return "Modes" } override fun getSubTitle(): String { // TODO(b/388321032): Replace this string with a string in a translatable xml file. return "Silences interruptions from people and apps in different circumstances" } } packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt +5 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,7 @@ constructor( handleToggleClick(input.data) handleToggleClick(input.data) } } is QSTileUserAction.LongClick -> { is QSTileUserAction.LongClick -> { qsTileIntentUserInputHandler.handle(action.expandable, longClickIntent) handleLongClick(action.expandable) } } } } } } Loading Loading @@ -95,6 +95,10 @@ constructor( } } } } fun handleLongClick(expandable: Expandable?) { qsTileIntentUserInputHandler.handle(expandable, longClickIntent) } companion object { companion object { const val TAG = "ModesTileUserActionInteractor" const val TAG = "ModesTileUserActionInteractor" } } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.modesDialogViewModel import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.FakeSettings Loading Loading @@ -146,6 +147,7 @@ class ModesTileTest : SysuiTestCase() { tileDataInteractor, tileDataInteractor, mapper, mapper, userActionInteractor, userActionInteractor, kosmos.modesDialogViewModel, ) ) underTest.initialize() underTest.initialize() Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt +11 −0 Original line number Original line Diff line number Diff line Loading @@ -35,12 +35,14 @@ import com.android.systemui.modes.shared.ModesUiIcons import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.qs.QSHost import com.android.systemui.qs.QSHost import com.android.systemui.qs.QsEventLogger import com.android.systemui.qs.QsEventLogger import com.android.systemui.qs.asQSTileIcon import com.android.systemui.qs.asQSTileIcon import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.tileimpl.QSTileImpl import com.android.systemui.qs.tileimpl.QSTileImpl import com.android.systemui.qs.tiles.dialog.ModesDetailsViewModel import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileDataInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileDataInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileUserActionInteractor import com.android.systemui.qs.tiles.impl.modes.domain.interactor.ModesTileUserActionInteractor import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel Loading @@ -48,6 +50,7 @@ import com.android.systemui.qs.tiles.impl.modes.ui.ModesTileMapper import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.res.R import com.android.systemui.res.R import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.ModesDialogViewModel import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking Loading @@ -67,6 +70,7 @@ constructor( private val dataInteractor: ModesTileDataInteractor, private val dataInteractor: ModesTileDataInteractor, private val tileMapper: ModesTileMapper, private val tileMapper: ModesTileMapper, private val userActionInteractor: ModesTileUserActionInteractor, private val userActionInteractor: ModesTileUserActionInteractor, private val modesDialogViewModel: ModesDialogViewModel, ) : ) : QSTileImpl<QSTile.State>( QSTileImpl<QSTile.State>( host, host, Loading Loading @@ -114,6 +118,13 @@ constructor( userActionInteractor.handleToggleClick(model) userActionInteractor.handleToggleClick(model) } } override fun getDetailsViewModel(): TileDetailsViewModel { return ModesDetailsViewModel( onSettingsClick = { userActionInteractor.handleLongClick(null) }, viewModel = modesDialogViewModel, ) } override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent @VisibleForTesting @VisibleForTesting Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ModesDetailsViewModel.kt 0 → 100644 +48 −0 Original line number Original line Diff line number Diff line /* * 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 androidx.compose.runtime.Composable import com.android.systemui.plugins.qs.TileDetailsViewModel import com.android.systemui.statusbar.policy.ui.dialog.composable.ModeTileGrid import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.ModesDialogViewModel /** The view model used for the modes details view in the Quick Settings */ class ModesDetailsViewModel( private val onSettingsClick: () -> Unit, private val viewModel: ModesDialogViewModel, ) : TileDetailsViewModel() { @Composable override fun GetContentView() { // TODO(b/378513940): Finish implementing this function. ModeTileGrid(viewModel = viewModel) } override fun clickOnSettingsButton() { onSettingsClick() } override fun getTitle(): String { // TODO(b/388321032): Replace this string with a string in a translatable xml file. return "Modes" } override fun getSubTitle(): String { // TODO(b/388321032): Replace this string with a string in a translatable xml file. return "Silences interruptions from people and apps in different circumstances" } }
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt +5 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,7 @@ constructor( handleToggleClick(input.data) handleToggleClick(input.data) } } is QSTileUserAction.LongClick -> { is QSTileUserAction.LongClick -> { qsTileIntentUserInputHandler.handle(action.expandable, longClickIntent) handleLongClick(action.expandable) } } } } } } Loading Loading @@ -95,6 +95,10 @@ constructor( } } } } fun handleLongClick(expandable: Expandable?) { qsTileIntentUserInputHandler.handle(expandable, longClickIntent) } companion object { companion object { const val TAG = "ModesTileUserActionInteractor" const val TAG = "ModesTileUserActionInteractor" } } Loading