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

Commit 5bb652fa authored by George Lin's avatar George Lin
Browse files

Main surface should wait for the customization options data (2/3)

There is data, e.g. customizationOptionsData, that will decide the
initial view dimensions of the main surface. Thus we make a mechanism
to wait for the data to be ready to calculate the related dimensions.

Test: Manually tested. Unit test.
Bug: 393983228
Flag: EXEMPT bugfix
Change-Id: I39008fc4640ce706f659dbdbde475b9f45fd1446
parent 7a732a02
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
@@ -54,7 +55,8 @@ constructor(
    val selectedGridOption: Flow<GridOptionModel?> =
        gridOptions.map { gridOptions -> gridOptions?.firstOrNull { it.isCurrent } }

    val isGridCustomizationAvailable = gridOptions.filterNotNull().map { it.size > 1 }
    val isGridCustomizationAvailable =
        gridOptions.filterNotNull().map { it.size > 1 }.distinctUntilChanged()

    suspend fun applySelectedOption(gridKey: String) =
        withContext(bgDispatcher) {
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import javax.inject.Singleton
@Singleton
class GridInteractor2 @Inject constructor(private val repository: GridRepository2) {

    val isGridCustomizationAvailable = repository.isGridCustomizationAvailable

    val gridOptions = repository.gridOptions

    val selectedGridOption = repository.selectedGridOption
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ object ShapeGridFloatingSheetBinder {
        lifecycleOwner: LifecycleOwner,
        backgroundDispatcher: CoroutineDispatcher,
    ) {
        val viewModel = optionsViewModel.shapeGridPickerViewModel
        val viewModel = optionsViewModel.fridPickerViewModel
        val isFloatingSheetActive = { optionsViewModel.selectedOption.value == GRID }

        val floatingSheetContainer =
+1 −2
Original line number Diff line number Diff line
@@ -330,8 +330,7 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
                }

                launch {
                    optionsViewModel.shapeGridPickerViewModel.selectedGridOption.collect {
                        gridOption ->
                    optionsViewModel.fridPickerViewModel.selectedGridOption.collect { gridOption ->
                        TextViewBinder.bind(optionShapeGridDescription, gridOption.text)
                        gridOption.payload?.let { optionShapeGridIcon.setImageDrawable(it) }
                    }
+38 −19
Original line number Diff line number Diff line
@@ -27,11 +27,13 @@ import com.android.customization.picker.mode.shared.util.DarkModeLifecycleUtil
import com.android.themepicker.R
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.customization.ui.compose.ColorFloatingSheet
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsData
import com.android.wallpaper.model.Screen
import com.android.wallpaper.model.Screen.HOME_SCREEN
import com.android.wallpaper.model.Screen.LOCK_SCREEN
import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil
import com.android.wallpaper.picker.customization.ui.util.DefaultCustomizationOptionUtil
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.scopes.ActivityScoped
import javax.inject.Inject
@@ -63,14 +65,21 @@ constructor(
    }

    override fun getOptionEntries(
        customizationOptionsData: CustomizationOptionsData,
        screen: Screen,
        optionContainer: LinearLayout,
        layoutInflater: LayoutInflater,
    ): List<Pair<CustomizationOptionUtil.CustomizationOption, View>> {
        customizationOptionsData as ThemePickerCustomizationOptionsData
        val isKeyguardQuickAffordanceEnabled =
            BaseFlags.get().isKeyguardQuickAffordanceEnabled(optionContainer.context)
        val defaultOptionEntries =
            defaultCustomizationOptionUtil.getOptionEntries(screen, optionContainer, layoutInflater)
            defaultCustomizationOptionUtil.getOptionEntries(
                customizationOptionsData = customizationOptionsData,
                screen = screen,
                optionContainer = optionContainer,
                layoutInflater = layoutInflater,
            )
        return when (screen) {
            LOCK_SCREEN ->
                buildList {
@@ -157,6 +166,7 @@ constructor(
                                false,
                            )
                    )
                    if (customizationOptionsData.isGridCustomizationAvailable) {
                        add(
                            ThemePickerHomeCustomizationOption.GRID to
                                layoutInflater.inflate(
@@ -168,13 +178,20 @@ constructor(
                    }
                }
        }
    }

    override fun initFloatingSheet(
        customizationOptionsData: CustomizationOptionsData,
        bottomSheetContainer: FrameLayout,
        layoutInflater: LayoutInflater,
    ): Map<CustomizationOptionUtil.CustomizationOption, View> {
        customizationOptionsData as ThemePickerCustomizationOptionsData
        val map =
            defaultCustomizationOptionUtil.initFloatingSheet(bottomSheetContainer, layoutInflater)
            defaultCustomizationOptionUtil.initFloatingSheet(
                customizationOptionsData = customizationOptionsData,
                bottomSheetContainer = bottomSheetContainer,
                layoutInflater = layoutInflater,
            )
        val isComposeRefactorEnabled = BaseFlags.get().isComposeRefactorEnabled()
        val isKeyguardQuickAffordanceEnabled =
            BaseFlags.get().isKeyguardQuickAffordanceEnabled(bottomSheetContainer.context)
@@ -221,6 +238,7 @@ constructor(
                    layoutInflater,
                ),
            )
            if (customizationOptionsData.isGridCustomizationAvailable) {
                put(
                    ThemePickerHomeCustomizationOption.GRID,
                    inflateFloatingSheet(
@@ -232,6 +250,7 @@ constructor(
                )
            }
        }
    }

    override fun createClockPreviewAndAddToParent(
        parentView: ViewGroup,
Loading