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

Commit 5c291f7e authored by Anton Potapov's avatar Anton Potapov
Browse files

Add adapter to support new ViewModel

This adapter would proxy old QSTile interface to the new QSTileViewModel
one. It also misses some of the behaviour of QSTileImpl like logging,
analytics and policy restrictions. I plan to add it in future CLs
because those are improvements to the ViewModel and/or base stack and
are out of scope of this CL to keep its size manageable.

More tests autotests covering this adapter TBD

Test: atest QSTileHostTest CurrentTilesInteractorImplTest TileQueryHelperTest QSTileIntentUserActionHandlerTest QSTileViewModelInterfaceComplianceTest
Bug: 299908705
Change-Id: Ib38714b0fbfff456dd14316152ae1c7a8662fc39
parent f079ed18
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.systemui.qs.nano.QsTileState;
import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepository;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.qs.pipeline.shared.QSPipelineFlagsRepository;
import com.android.systemui.qs.tiles.di.NewQSTileFactory;
import com.android.systemui.settings.UserFileManager;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
@@ -56,6 +57,8 @@ import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
import com.android.systemui.util.settings.SecureSettings;

import dagger.Lazy;

import org.jetbrains.annotations.NotNull;

import java.io.PrintWriter;
@@ -121,6 +124,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P

    @Inject
    public QSTileHost(Context context,
            Lazy<NewQSTileFactory> newQsTileFactoryProvider,
            QSFactory defaultFactory,
            @Main Executor mainExecutor,
            PluginManager pluginManager,
@@ -147,6 +151,9 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P

        mShadeController = shadeController;

        if (featureFlags.getPipelineTilesEnabled()) {
            mQsFactories.add(newQsTileFactoryProvider.get());
        }
        mQsFactories.add(defaultFactory);
        pluginManager.addPluginListener(this, QSFactory.class, true);
        mUserTracker = userTracker;
@@ -326,7 +333,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, P
                try {
                    tile = createTile(tileSpec);
                    if (tile != null) {
                        tile.setTileSpec(tileSpec);
                        if (tile.isAvailable()) {
                            newTiles.put(tileSpec, tile);
                            mQSLogger.logTileAdded(tileSpec);
+0 −2
Original line number Diff line number Diff line
@@ -130,11 +130,9 @@ public class TileQueryHelper {
            if (tile == null) {
                continue;
            } else if (!tile.isAvailable()) {
                tile.setTileSpec(spec);
                tile.destroy();
                continue;
            }
            tile.setTileSpec(spec);
            tilesToAdd.add(tile);
        }

+10 −4
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.qs.ReduceBrightColorsController;
import com.android.systemui.qs.external.QSExternalModule;
import com.android.systemui.qs.pipeline.dagger.QSPipelineModule;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel;
import com.android.systemui.statusbar.phone.AutoTileManager;
import com.android.systemui.statusbar.phone.ManagedProfileController;
import com.android.systemui.statusbar.policy.CastController;
@@ -41,14 +42,14 @@ import com.android.systemui.statusbar.policy.SafetyController;
import com.android.systemui.statusbar.policy.WalletController;
import com.android.systemui.util.settings.SecureSettings;

import java.util.Map;

import javax.inject.Named;

import dagger.Module;
import dagger.Provides;
import dagger.multibindings.Multibinds;

import java.util.Map;

import javax.inject.Named;

/**
 * Module for QS dependencies
 */
@@ -68,6 +69,11 @@ public interface QSModule {
    @Multibinds
    Map<String, QSTileImpl<?>> tileMap();

    /** A map of internal QS tile ViewModels. Ensures that this can be injected even if
     * it is empty */
    @Multibinds
    Map<String, QSTileViewModel> tileViewModelMap();

    @Provides
    @SysUISingleton
    static AutoTileManager provideAutoTileManager(
+13 −3
Original line number Diff line number Diff line
@@ -40,10 +40,12 @@ import com.android.systemui.qs.pipeline.domain.model.TileModel
import com.android.systemui.qs.pipeline.shared.QSPipelineFlagsRepository
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.qs.pipeline.shared.logging.QSPipelineLogger
import com.android.systemui.qs.tiles.di.NewQSTileFactory
import com.android.systemui.qs.toProto
import com.android.systemui.settings.UserTracker
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.util.kotlin.pairwise
import dagger.Lazy
import java.io.PrintWriter
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -130,6 +132,7 @@ constructor(
    private val installedTilesComponentRepository: InstalledTilesComponentRepository,
    private val userRepository: UserRepository,
    private val customTileStatePersister: CustomTileStatePersister,
    private val newQSTileFactory: Lazy<NewQSTileFactory>,
    private val tileFactory: QSFactory,
    private val customTileAddedRepository: CustomTileAddedRepository,
    private val tileLifecycleManagerFactory: TileLifecycleManager.Factory,
@@ -138,7 +141,7 @@ constructor(
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @Application private val scope: CoroutineScope,
    private val logger: QSPipelineLogger,
    featureFlags: QSPipelineFlagsRepository,
    private val featureFlags: QSPipelineFlagsRepository,
) : CurrentTilesInteractor {

    private val _currentSpecsAndTiles: MutableStateFlow<List<TileModel>> =
@@ -331,12 +334,19 @@ constructor(
    }

    private suspend fun createTile(spec: TileSpec): QSTile? {
        val tile = withContext(mainDispatcher) { tileFactory.createTile(spec.spec) }
        val tile =
            withContext(mainDispatcher) {
                if (featureFlags.pipelineTilesEnabled) {
                    newQSTileFactory.get().createTile(spec.spec)
                } else {
                    null
                }
                    ?: tileFactory.createTile(spec.spec)
            }
        if (tile == null) {
            logger.logTileNotFoundInFactory(spec)
            return null
        } else {
            tile.tileSpec = spec.spec
            return if (!tile.isAvailable) {
                logger.logTileDestroyed(
                    spec,
+6 −2
Original line number Diff line number Diff line
package com.android.systemui.qs.pipeline.shared

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.flags.Flags
import javax.inject.Inject

@@ -10,7 +10,7 @@ import javax.inject.Inject
class QSPipelineFlagsRepository
@Inject
constructor(
    private val featureFlags: FeatureFlags,
    private val featureFlags: FeatureFlagsClassic,
) {

    /** @see Flags.QS_PIPELINE_NEW_HOST */
@@ -20,4 +20,8 @@ constructor(
    /** @see Flags.QS_PIPELINE_AUTO_ADD */
    val pipelineAutoAddEnabled: Boolean
        get() = pipelineHostEnabled && featureFlags.isEnabled(Flags.QS_PIPELINE_AUTO_ADD)

    /** @see Flags.QS_PIPELINE_NEW_TILES */
    val pipelineTilesEnabled: Boolean
        get() = featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_TILES)
}
Loading