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

Commit 72343fd7 authored by George Lin's avatar George Lin
Browse files

Fix crash when binding the customzation options (2/2)

There are cases that some customization option entries are never
initiated. We should not bind those views.

Test: Manually tested on tablet. See bug.
Bug: 409470879
Flag: EXEMPT bugfix
Change-Id: Ic770b9a60d689c95cf3d6e00fef00a96740962a5
parent 5c4e58cd
Loading
Loading
Loading
Loading
+31 −16
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.customization.ui.compose.ShortcutsFloatingSheet
import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption
import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsData
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsViewModel
import com.android.wallpaper.picker.common.icon.ui.viewbinder.IconViewBinder
import com.android.wallpaper.picker.common.text.ui.viewbinder.TextViewBinder
@@ -56,6 +57,7 @@ import com.android.wallpaper.picker.customization.ui.binder.CustomizationOptions
import com.android.wallpaper.picker.customization.ui.binder.DefaultCustomizationOptionsBinder
import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil.CustomizationOption
import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel2
import javax.inject.Inject
@@ -72,6 +74,7 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
    CustomizationOptionsBinder {

    override fun bind(
        customizationOptionsData: CustomizationOptionsData,
        view: View,
        lockScreenCustomizationOptionEntries: List<Pair<CustomizationOption, View>>,
        homeScreenCustomizationOptionEntries: List<Pair<CustomizationOption, View>>,
@@ -85,6 +88,7 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
        navigateToPackThemeActivity: (Intent) -> Unit,
    ) {
        defaultCustomizationOptionsBinder.bind(
            customizationOptionsData,
            view,
            lockScreenCustomizationOptionEntries,
            homeScreenCustomizationOptionEntries,
@@ -98,6 +102,8 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
            navigateToPackThemeActivity,
        )

        customizationOptionsData as ThemePickerCustomizationOptionsData

        val isComposeRefactorEnabled = BaseFlags.get().isComposeRefactorEnabled()

        val optionsViewModel =
@@ -217,13 +223,17 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
            optionAppIcons.requireViewById(R.id.option_entry_description)
        val optionAppIconsIcon: ImageView = optionAppIcons.requireViewById(R.id.option_entry_icon)

        val optionShapeGrid: View =
        var optionGrid: View? = null
        var optionGridDescription: TextView? = null
        var optionGridIcon: ImageView? = null
        if (customizationOptionsData.isGridCustomizationAvailable) {
            optionGrid =
                homeScreenCustomizationOptionEntries
                    .first { it.first == ThemePickerHomeCustomizationOption.GRID }
                    .second
        val optionShapeGridDescription: TextView =
            optionShapeGrid.requireViewById(R.id.option_entry_description)
        val optionShapeGridIcon: ImageView = optionShapeGrid.requireViewById(R.id.option_entry_icon)
            optionGridDescription = optionGrid.requireViewById(R.id.option_entry_description)
            optionGridIcon = optionGrid.requireViewById(R.id.option_entry_icon)
        }

        val optionColorContrast: View =
            homeScreenCustomizationOptionEntries
@@ -238,7 +248,9 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
                    optionShortcutIcon1?.setColorFilter(color)
                    optionShortcutIcon2?.setColorFilter(color)
                }
                optionShapeGridIcon.setColorFilter(color)
                if (customizationOptionsData.isGridCustomizationAvailable) {
                    optionGridIcon?.setColorFilter(color)
                }
                if (BaseFlags.get().isPackThemeEnabled()) {
                    optionPackThemeIconHome?.setColorFilter(color)
                    optionPackThemeIconLock?.setColorFilter(color)
@@ -325,16 +337,19 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO
                        }
                }

                if (customizationOptionsData.isGridCustomizationAvailable) {
                    launch {
                        optionsViewModel.onCustomizeShapeGridClicked.collect {
                        optionShapeGrid.setOnClickListener { _ -> it?.invoke() }
                            optionGrid?.setOnClickListener { _ -> it?.invoke() }
                        }
                    }

                    launch {
                    optionsViewModel.fridPickerViewModel.selectedGridOption.collect { gridOption ->
                        TextViewBinder.bind(optionShapeGridDescription, gridOption.text)
                        gridOption.payload?.let { optionShapeGridIcon.setImageDrawable(it) }
                        optionsViewModel.fridPickerViewModel.selectedGridOption.collect { gridOption
                            ->
                            optionGridDescription?.let { TextViewBinder.bind(it, gridOption.text) }
                            gridOption.payload?.let { optionGridIcon?.setImageDrawable(it) }
                        }
                    }
                }