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

Commit 8408e8c0 authored by Fengjiang Li's avatar Fengjiang Li
Browse files

[3/n] Pass grid name to preview grid

Test: disable FLAG_NAME_GRID_APPLY_BUTTON and change grid size still works, enable the flag and change grid size will preview grid in faster way (exiting picker will not change grid on launcher)
Bug: 294866224
Change-Id: Iab300137de8530b796bec9621f59478b9c35bcc7
parent 999a8492
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ public class GridOption implements CustomizationOption<GridOption>, Parcelable {
    };

    private final String mTitle;
    private final boolean mIsCurrent;
    private final String mIconShapePath;
    private final GridTileDrawable mTileDrawable;
    public final String name;
@@ -57,6 +56,7 @@ public class GridOption implements CustomizationOption<GridOption>, Parcelable {
    public final int cols;
    public final Uri previewImageUri;
    public final int previewPagesCount;
    private boolean mIsCurrent;

    public GridOption(String title, String name, boolean isCurrent, int rows, int cols,
            Uri previewImageUri, int previewPagesCount, String iconShapePath) {
@@ -71,6 +71,10 @@ public class GridOption implements CustomizationOption<GridOption>, Parcelable {
        this.previewPagesCount = previewPagesCount;
    }

    public void setIsCurrent(boolean isCurrent) {
        mIsCurrent = isCurrent;
    }

    protected GridOption(Parcel in) {
        mTitle = in.readString();
        mIsCurrent = in.readByte() != 0;
+14 −5
Original line number Diff line number Diff line
@@ -17,14 +17,12 @@

package com.android.customization.model.grid.data.repository

import android.content.Context
import androidx.lifecycle.asFlow
import com.android.customization.model.CustomizationManager
import com.android.customization.model.grid.GridOption
import com.android.customization.model.grid.GridOptionsManager
import com.android.customization.model.grid.shared.model.GridOptionItemModel
import com.android.customization.model.grid.shared.model.GridOptionItemsModel
import com.android.wallpaper.config.BaseFlags
import kotlin.coroutines.resume
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -40,13 +38,14 @@ interface GridRepository {
    suspend fun isAvailable(): Boolean
    fun getOptionChanges(): Flow<Unit>
    suspend fun getOptions(): GridOptionItemsModel
    fun getSelectedOption(): GridOption?
}

class GridRepositoryImpl(
    private val context: Context,
    private val applicationScope: CoroutineScope,
    private val manager: GridOptionsManager,
    private val backgroundDispatcher: CoroutineDispatcher,
    private val isGridApplyButtonEnabled: Boolean,
) : GridRepository {

    override suspend fun isAvailable(): Boolean {
@@ -58,6 +57,8 @@ class GridRepositoryImpl(

    private val selectedOption = MutableStateFlow<GridOption?>(null)

    override fun getSelectedOption() = selectedOption.value

    override suspend fun getOptions(): GridOptionItemsModel {
        return withContext(backgroundDispatcher) {
            suspendCancellableCoroutine { continuation ->
@@ -65,7 +66,11 @@ class GridRepositoryImpl(
                    object : CustomizationManager.OptionsFetchedListener<GridOption> {
                        override fun onOptionsLoaded(options: MutableList<GridOption>?) {
                            val optionsOrEmpty = options ?: emptyList()
                            // After Apply Button is added, we will rely on onSelected() method
                            // to update selectedOption.
                            if (!isGridApplyButtonEnabled || selectedOption.value == null) {
                                selectedOption.value = optionsOrEmpty.find { it.isActive(manager) }
                            }
                            continuation.resume(
                                GridOptionItemsModel.Loaded(
                                    optionsOrEmpty.map { option -> toModel(option) }
@@ -108,8 +113,12 @@ class GridRepositoryImpl(
    private suspend fun onSelected(option: GridOption) {
        withContext(backgroundDispatcher) {
            suspendCancellableCoroutine { continuation ->
                if (BaseFlags.get().isGridApplyButtonEnabled(context)) {
                if (isGridApplyButtonEnabled) {
                    selectedOption.value?.setIsCurrent(false)
                    selectedOption.value = option
                    selectedOption.value?.setIsCurrent(true)
                    manager.preview(option)
                    continuation.resume(true)
                } else {
                    manager.apply(
                        option,
+2 −0
Original line number Diff line number Diff line
@@ -95,4 +95,6 @@ class GridInteractor(
            model
        }
    }

    fun getSelectedOptionName(): String? = repository.getSelectedOption()?.name
}
+11 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider
import androidx.transition.Transition
import androidx.transition.doOnStart
import com.android.customization.model.grid.domain.interactor.GridInteractor
import com.android.customization.model.grid.ui.binder.GridScreenBinder
import com.android.customization.model.grid.ui.viewmodel.GridScreenViewModel
import com.android.customization.module.ThemePickerInjector
@@ -65,7 +66,8 @@ class GridFragment2 : AppbarFragment() {
            bindScreenPreview(
                view,
                wallpaperInfoFactory,
                injector.getWallpaperInteractor(requireContext())
                injector.getWallpaperInteractor(requireContext()),
                injector.getGridInteractor(requireContext())
            )

        val viewModelFactory = injector.getGridScreenViewModelFactory(requireContext())
@@ -84,7 +86,8 @@ class GridFragment2 : AppbarFragment() {
                    bindScreenPreview(
                        view,
                        wallpaperInfoFactory,
                        injector.getWallpaperInteractor(requireContext())
                        injector.getWallpaperInteractor(requireContext()),
                        injector.getGridInteractor(requireContext())
                    )
            }
        )
@@ -112,6 +115,7 @@ class GridFragment2 : AppbarFragment() {
        view: View,
        wallpaperInfoFactory: CurrentWallpaperInfoFactory,
        wallpaperInteractor: WallpaperInteractor,
        gridInteractor: GridInteractor
    ): ScreenPreviewBinder.Binding {
        return ScreenPreviewBinder.bind(
            activity = requireActivity(),
@@ -127,6 +131,11 @@ class GridFragment2 : AppbarFragment() {
                                        R.string.grid_control_metadata_name,
                                    ),
                        ),
                    initialExtrasProvider = {
                        val bundle = Bundle()
                        bundle.putString("name", gridInteractor.getSelectedOptionName())
                        bundle
                    },
                    wallpaperInfoProvider = {
                        suspendCancellableCoroutine { continuation ->
                            wallpaperInfoFactory.createCurrentWallpaperInfos(
+4 −2
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQui
import com.android.systemui.shared.clocks.ClockRegistry
import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.dispatchers.BackgroundDispatcher
import com.android.wallpaper.dispatchers.MainDispatcher
import com.android.wallpaper.model.LiveWallpaperInfo
@@ -571,7 +572,7 @@ internal constructor(
                .also { gridScreenViewModelFactory = it }
    }

    private fun getGridInteractor(
    fun getGridInteractor(
        context: Context,
    ): GridInteractor {
        val appContext = context.applicationContext
@@ -580,10 +581,11 @@ internal constructor(
                    applicationScope = getApplicationCoroutineScope(),
                    repository =
                        GridRepositoryImpl(
                            context = appContext,
                            applicationScope = getApplicationCoroutineScope(),
                            manager = GridOptionsManager.getInstance(context),
                            backgroundDispatcher = bgDispatcher,
                            isGridApplyButtonEnabled =
                                BaseFlags.get().isGridApplyButtonEnabled(appContext),
                        ),
                    snapshotRestorer = { getGridSnapshotRestorer(appContext) },
                )
Loading