diff options
4 files changed, 71 insertions, 10 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt new file mode 100644 index 000000000000..9b9e584a936e --- /dev/null +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 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.impl.modes.domain.interactor + +import android.platform.test.annotations.EnableFlags +import android.provider.Settings +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.qs.tiles.base.actions.FakeQSTileIntentUserInputHandler +import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandlerSubject +import com.android.systemui.qs.tiles.base.interactor.QSTileInputTestKtx +import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel +import com.google.common.truth.Truth +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidJUnit4::class) +@EnableFlags(android.app.Flags.FLAG_MODES_UI) +class ModesTileUserActionInteractorTest : SysuiTestCase() { + private val inputHandler = FakeQSTileIntentUserInputHandler() + + val underTest = ModesTileUserActionInteractor(inputHandler) + + @Test + fun handleLongClick() = runTest { + underTest.handleInput(QSTileInputTestKtx.longClick(ModesTileModel(false))) + + QSTileIntentUserInputHandlerSubject.assertThat(inputHandler).handledOneIntentInput { + Truth.assertThat(it.intent.action).isEqualTo(Settings.ACTION_ZEN_MODE_SETTINGS) + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt index 930a4434862e..b91891cf7be0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt @@ -36,6 +36,7 @@ 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.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.model.ModesTileModel import com.android.systemui.qs.tiles.impl.modes.ui.ModesTileMapper import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider @@ -59,6 +60,7 @@ constructor( qsTileConfigProvider: QSTileConfigProvider, dataInteractor: ModesTileDataInteractor, private val tileMapper: ModesTileMapper, + private val userActionInteractor: ModesTileUserActionInteractor, ) : QSTileImpl<BooleanState>( host, @@ -93,10 +95,7 @@ constructor( // TODO(b/346519570) open dialog } - override fun getLongClickIntent(): Intent? { - // TODO(b/346519570) open settings - return null - } + override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent override fun handleUpdateState(booleanState: BooleanState?, arg: Any?) { if (arg is ModesTileModel) { @@ -108,8 +107,6 @@ constructor( label = tileLabel secondaryLabel = tileState.secondaryLabel contentDescription = tileState.contentDescription - // TODO(b/346519570) open settings - handlesLongClick = false } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt index e2fea84eced4..fd1f3d8fb23a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt @@ -16,14 +16,22 @@ package com.android.systemui.qs.tiles.impl.modes.domain.interactor +import android.content.Intent +import android.provider.Settings +import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandler import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction import javax.inject.Inject -class ModesTileUserActionInteractor @Inject constructor() : - QSTileUserActionInteractor<ModesTileModel> { +class ModesTileUserActionInteractor +@Inject +constructor( + private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler, +) : QSTileUserActionInteractor<ModesTileModel> { + val longClickIntent = Intent(Settings.ACTION_ZEN_MODE_SETTINGS) + override suspend fun handleInput(input: QSTileInput<ModesTileModel>) { with(input) { when (action) { @@ -31,7 +39,7 @@ class ModesTileUserActionInteractor @Inject constructor() : // TODO(b/346519570) open dialog } is QSTileUserAction.LongClick -> { - // TODO(b/346519570) open settings + qsTileIntentUserActionHandler.handle(action.expandable, longClickIntent) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt index aa25628fb040..4c77fb84d8ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt @@ -33,7 +33,9 @@ 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.base.actions.FakeQSTileIntentUserInputHandler 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.ui.ModesTileMapper import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigTestBuilder @@ -77,6 +79,7 @@ class ModesTileTest : SysuiTestCase() { @Mock private lateinit var qsTileConfigProvider: QSTileConfigProvider + private val inputHandler = FakeQSTileIntentUserInputHandler() private val zenModeRepository = FakeZenModeRepository() private val tileDataInteractor = ModesTileDataInteractor(zenModeRepository) private val mapper = @@ -93,6 +96,7 @@ class ModesTileTest : SysuiTestCase() { private val testDispatcher = StandardTestDispatcher() private val testScope = TestScope(testDispatcher) + private lateinit var userActionInteractor: ModesTileUserActionInteractor private lateinit var secureSettings: SecureSettings private lateinit var testableLooper: TestableLooper private lateinit var underTest: ModesTile @@ -118,6 +122,8 @@ class ModesTileTest : SysuiTestCase() { } ) + userActionInteractor = ModesTileUserActionInteractor(inputHandler) + underTest = ModesTile( qsHost, @@ -131,7 +137,8 @@ class ModesTileTest : SysuiTestCase() { qsLogger, qsTileConfigProvider, tileDataInteractor, - mapper + mapper, + userActionInteractor, ) underTest.initialize() |