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

Commit e6ab634c authored by Jiaming Cheng's avatar Jiaming Cheng Committed by Android (Google) Code Review
Browse files

Merge "[QSDetailedView] Implements the details view/ViewModels for qs_new_tiles" into main

parents fcdf9153 74f3f8f7
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.statusbar.connectivity.AccessPointController
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.nullable
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -136,4 +137,13 @@ class InternetTileUserActionInteractorTest : SysuiTestCase() {

            verify(wifiStateWorker, times(1)).isWifiEnabled = eq(true)
        }

    @Test
    fun detailsViewModel() =
        kosmos.testScope.runTest {
            assertThat(underTest.detailsViewModel.getTitle())
                .isEqualTo("Internet")
            assertThat(underTest.detailsViewModel.getSubTitle())
                .isEqualTo("Tab a network to connect")
        }
}
+15 −0
Original line number Diff line number Diff line
@@ -173,6 +173,21 @@ class QSTileViewModelTest : SysuiTestCase() {
                .isEqualTo(FakeQSTileDataInteractor.AvailabilityRequest(USER))
        }

    @Test
    fun tileDetails() =
        testScope.runTest {
            assertThat(tileUserActionInteractor.detailsViewModel).isNotNull()
            assertThat(tileUserActionInteractor.detailsViewModel?.getTitle())
                .isEqualTo("FakeQSTileUserActionInteractor")
            assertThat(underTest.detailsViewModel).isNotNull()
            assertThat(underTest.detailsViewModel?.getTitle())
                .isEqualTo("FakeQSTileUserActionInteractor")

            tileUserActionInteractor.detailsViewModel = null
            assertThat(tileUserActionInteractor.detailsViewModel).isNull()
            assertThat(underTest.detailsViewModel).isNull()
        }

    private fun createViewModel(
        scope: TestScope,
        config: QSTileConfig = tileConfig,
+14 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.qs.tiles.base.interactor

import android.annotation.WorkerThread
import com.android.systemui.plugins.qs.TileDetailsViewModel

interface QSTileUserActionInteractor<DATA_TYPE> {
    /**
@@ -27,4 +28,17 @@ interface QSTileUserActionInteractor<DATA_TYPE> {
     * It's safe to run long running computations inside this function.
     */
    @WorkerThread suspend fun handleInput(input: QSTileInput<DATA_TYPE>)

    /**
     * Provides the [TileDetailsViewModel] for constructing the corresponding details view.
     *
     * This property is defined here to reuse the business logic. For example, reusing the user
     * long-click as the go-to-settings callback in the details view.
     * Subclasses can override this property to provide a specific [TileDetailsViewModel]
     * implementation.
     *
     * @return The [TileDetailsViewModel] instance, or null if not implemented.
     */
    val detailsViewModel: TileDetailsViewModel?
        get() = null
}
+4 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.os.UserHandle
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.Dumpable
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics
import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger
import com.android.systemui.qs.tiles.base.interactor.DisabledByPolicyInteractor
@@ -115,6 +116,9 @@ class QSTileViewModelImpl<DATA_TYPE>(
            .flowOn(backgroundDispatcher)
            .stateIn(tileScope, SharingStarted.WhileSubscribed(), true)

    override val detailsViewModel: TileDetailsViewModel?
        get() = userActionInteractor().detailsViewModel

    override fun forceUpdate() {
        tileScope.launch(context = backgroundDispatcher) { forceUpdates.emit(Unit) }
    }
+19 −4
Original line number Diff line number Diff line
@@ -18,15 +18,23 @@ package com.android.systemui.qs.tiles.impl.internet.domain.interactor

import android.content.Intent
import android.provider.Settings
import com.android.systemui.animation.Expandable
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.plugins.qs.TileDetailsViewModel
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.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
import com.android.systemui.qs.tiles.dialog.WifiStateWorker
import com.android.systemui.qs.tiles.impl.internet.domain.model.InternetTileModel
import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction
import com.android.systemui.statusbar.connectivity.AccessPointController
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.stateIn
import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.withContext
@@ -61,11 +69,18 @@ constructor(
                    wifiStateWorker.isWifiEnabled = !wifiStateWorker.isWifiEnabled
                }
                is QSTileUserAction.LongClick -> {
                    handleLongClick(action.expandable)
                }
            }
        }

    override val detailsViewModel: TileDetailsViewModel =
        InternetDetailsViewModel { handleLongClick(null) }

    private fun handleLongClick(expandable:Expandable?){
        qsTileIntentUserActionHandler.handle(
                        action.expandable,
            expandable,
            Intent(Settings.ACTION_WIFI_SETTINGS)
        )
    }
}
        }
}
Loading