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

Commit b8e48270 authored by Catherine Liang's avatar Catherine Liang
Browse files

Fix other colors loading

Make sure colors are only returned after preset colors are loaded by
fixing usage of coroutine. Previously, the coroutine launch was wrapped
by a try catch block, but because the coroutine removes preset color
loading out of the try catch scope, the try catch finishes immediately,
and returns a list of colors without the presets. With fix, there is
slightly longer loading time for colors, but preset colors are returned
correctly.

Also simplify combine function syntax.

Flag: EXEMPT Bug fix
Bug: 384393408
Bug: 397250302
Bug: 392014907
Test: Manually verified with new picker flag on and off, see bugs
Change-Id: I3203cecc2708533e4233656094ddf3f98d1ddc0c
parent 02fc0faa
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -117,16 +117,19 @@ class ColorProvider(private val context: Context, stubPackageName: String) :
        }

        scope.launch {
            // Wait for the previous preset color loading job to finish before evaluating whether to
            // start a new one
            loaderJob?.join()
            if (presetColorBundles == null || reload) {
                loaderJob = launch {
                    try {
                    loaderJob = launch { loadPreset(isNewPickerUi) }
                        loadPreset(isNewPickerUi)
                        callback?.onOptionsLoaded(buildFinalList(isNewPickerUi))
                    } catch (e: Throwable) {
                        colorsAvailable = false
                        callback?.onError(e)
                    return@launch
                    }
                callback?.onOptionsLoaded(buildFinalList(isNewPickerUi))
                }
            } else {
                callback?.onOptionsLoaded(buildFinalList(isNewPickerUi))
            }
+46 −54
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.suspendCancellableCoroutine

// TODO (b/262924623): refactor to remove dependency on ColorCustomizationManager & ColorOption
@@ -58,9 +57,6 @@ constructor(

    override val colorOptions: Flow<Map<ColorType, List<ColorOptionModel>>> =
        combine(homeWallpaperColors, lockWallpaperColors) { homeColors, lockColors ->
                homeColors to lockColors
            }
            .map { (homeColors, lockColors) ->
            suspendCancellableCoroutine { continuation ->
                if (
                    homeColors is WallpaperColorsModel.Loading ||
@@ -78,17 +74,13 @@ constructor(
                }
                val homeColorsLoaded = homeColors as WallpaperColorsModel.Loaded
                val lockColorsLoaded = lockColors as WallpaperColorsModel.Loaded
                    colorManager.setWallpaperColors(
                        homeColorsLoaded.colors,
                        lockColorsLoaded.colors,
                    )
                colorManager.setWallpaperColors(homeColorsLoaded.colors, lockColorsLoaded.colors)
                colorManager.fetchOptions(
                    object : CustomizationManager.OptionsFetchedListener<ColorOption?> {
                        override fun onOptionsLoaded(options: MutableList<ColorOption?>?) {
                            val wallpaperColorOptions: MutableList<ColorOptionModel> =
                                mutableListOf()
                                val presetColorOptions: MutableList<ColorOptionModel> =
                                    mutableListOf()
                            val presetColorOptions: MutableList<ColorOptionModel> = mutableListOf()
                            options?.forEach { option ->
                                when ((option as ColorOptionImpl).type) {
                                    ColorType.WALLPAPER_COLOR ->
+1 −2
Original line number Diff line number Diff line
@@ -78,8 +78,7 @@ constructor(
            .map { (_, colors) -> colors }

    override val colorOptions: Flow<Map<ColorType, List<ColorOption>>> =
        combine(homeWallpaperColors, lockWallpaperColors, ::Pair)
            .map { (homeColors, lockColors) ->
        combine(homeWallpaperColors, lockWallpaperColors) { homeColors, lockColors ->
                suspendCancellableCoroutine { continuation ->
                    colorManager.setWallpaperColors(homeColors, lockColors)
                    colorManager.fetchOptions(