Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78fbaef0 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

Modes tile: open settings on long press

Test: verified that long press works regardless of qs_new_tiles flag,
incl when device is locked
Flag: android.app.modes_ui
Bug: 346519570

Change-Id: I07beea6b3a0a5533b5490414122d7a78aab885ac
parent f35a4c57
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
/*
 * 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)
        }
    }
}
+3 −6
Original line number Diff line number Diff line
@@ -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
            }
        }
    }
+11 −3
Original line number Diff line number Diff line
@@ -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)
                }
            }
        }
+8 −1
Original line number Diff line number Diff line
@@ -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()