Refactor ThemePickerCustomizationOptionBinder (1/2)

1. Strcitly require the views
2. Type all the view values

Test: Manually tested it's still wokring
Bug: 372281743
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: I90013bb347aa41053f20b88cde35c07c5f7c56f7
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 4c31618..60925bf 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -90,62 +90,56 @@
             navigateToColorContrastSettingsActivity,
         )
 
-        val optionClock =
+        val optionClock: View =
             lockScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerLockCustomizationOption.CLOCK }
-                ?.second
-        val optionClockIcon = optionClock?.findViewById<ImageView>(R.id.option_entry_clock_icon)
+                .first { it.first == ThemePickerLockCustomizationOption.CLOCK }
+                .second
+        val optionClockIcon: ImageView = optionClock.requireViewById(R.id.option_entry_clock_icon)
 
-        val optionShortcut =
+        val optionShortcut: View =
             lockScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerLockCustomizationOption.SHORTCUTS }
-                ?.second
-        val optionShortcutDescription =
-            optionShortcut?.findViewById<TextView>(
-                R.id.option_entry_keyguard_quick_affordance_description
-            )
-        val optionShortcutIcon1 =
-            optionShortcut?.findViewById<ImageView>(
-                R.id.option_entry_keyguard_quick_affordance_icon_1
-            )
-        val optionShortcutIcon2 =
-            optionShortcut?.findViewById<ImageView>(
-                R.id.option_entry_keyguard_quick_affordance_icon_2
-            )
+                .first { it.first == ThemePickerLockCustomizationOption.SHORTCUTS }
+                .second
+        val optionShortcutDescription: TextView =
+            optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_description)
+        val optionShortcutIcon1: ImageView =
+            optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_icon_1)
+        val optionShortcutIcon2: ImageView =
+            optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_icon_2)
 
-        val optionMoreLockScreenSettings =
+        val optionMoreLockScreenSettings: View =
             lockScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerLockCustomizationOption.MORE_LOCK_SCREEN_SETTINGS }
-                ?.second
-        optionMoreLockScreenSettings?.setOnClickListener {
+                .first { it.first == ThemePickerLockCustomizationOption.MORE_LOCK_SCREEN_SETTINGS }
+                .second
+        optionMoreLockScreenSettings.setOnClickListener {
             navigateToMoreLockScreenSettingsActivity.invoke()
         }
 
-        val optionColors =
+        val optionColors: View =
             homeScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerHomeCustomizationOption.COLORS }
-                ?.second
-        val optionColorsIcon =
-            optionColors?.findViewById<ColorOptionIconView2>(R.id.option_entry_colors_icon)
+                .first { it.first == ThemePickerHomeCustomizationOption.COLORS }
+                .second
+        val optionColorsIcon: ColorOptionIconView2 =
+            optionColors.requireViewById(R.id.option_entry_colors_icon)
 
-        val optionShapeGrid =
+        val optionShapeGrid: View =
             homeScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerHomeCustomizationOption.APP_SHAPE_GRID }
-                ?.second
-        val optionShapeGridDescription =
-            optionShapeGrid?.findViewById<TextView>(R.id.option_entry_app_shape_grid_description)
-        val optionShapeGridIcon =
-            optionShapeGrid?.findViewById<ImageView>(R.id.option_entry_app_shape_grid_icon)
+                .first { it.first == ThemePickerHomeCustomizationOption.APP_SHAPE_GRID }
+                .second
+        val optionShapeGridDescription: TextView =
+            optionShapeGrid.requireViewById(R.id.option_entry_app_shape_grid_description)
+        val optionShapeGridIcon: ImageView =
+            optionShapeGrid.requireViewById(R.id.option_entry_app_shape_grid_icon)
 
-        val optionColorContrast =
+        val optionColorContrast: View =
             homeScreenCustomizationOptionEntries
-                .find { it.first == ThemePickerHomeCustomizationOption.COLOR_CONTRAST }
-                ?.second
-        optionColorContrast?.setOnClickListener { navigateToColorContrastSettingsActivity.invoke() }
-        val optionColorContrastDescription: TextView? =
-            optionColorContrast?.findViewById(R.id.option_entry_color_contrast_description)
-        val optionColorContrastIcon: ImageView? =
-            optionColorContrast?.findViewById(R.id.option_entry_color_contrast_icon)
+                .first { it.first == ThemePickerHomeCustomizationOption.COLOR_CONTRAST }
+                .second
+        optionColorContrast.setOnClickListener { navigateToColorContrastSettingsActivity.invoke() }
+        val optionColorContrastDescription: TextView =
+            optionColorContrast.requireViewById(R.id.option_entry_color_contrast_description)
+        val optionColorContrastIcon: ImageView =
+            optionColorContrast.requireViewById(R.id.option_entry_color_contrast_icon)
 
         val optionsViewModel =
             viewModel.customizationOptionsViewModel as ThemePickerCustomizationOptionsViewModel
@@ -153,66 +147,67 @@
             lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
                 launch {
                     optionsViewModel.onCustomizeClockClicked.collect {
-                        optionClock?.setOnClickListener { _ -> it?.invoke() }
+                        optionClock.setOnClickListener { _ -> it?.invoke() }
                     }
                 }
 
                 launch {
                     optionsViewModel.clockPickerViewModel.selectedClock.collect {
-                        optionClockIcon?.setImageDrawable(it.thumbnail)
+                        optionClockIcon.setImageDrawable(it.thumbnail)
                     }
                 }
 
                 launch {
                     optionsViewModel.onCustomizeShortcutClicked.collect {
-                        optionShortcut?.setOnClickListener { _ -> it?.invoke() }
+                        optionShortcut.setOnClickListener { _ -> it?.invoke() }
                     }
                 }
 
                 launch {
                     optionsViewModel.keyguardQuickAffordancePickerViewModel2.summary.collect {
                         summary ->
-                        optionShortcutDescription?.let {
+                        optionShortcutDescription.let {
                             TextViewBinder.bind(view = it, viewModel = summary.description)
                         }
                         summary.icon1?.let { icon ->
-                            optionShortcutIcon1?.let {
+                            optionShortcutIcon1.let {
                                 IconViewBinder.bind(view = it, viewModel = icon)
                             }
                         }
-                        optionShortcutIcon1?.isVisible = summary.icon1 != null
+                        optionShortcutIcon1.isVisible = summary.icon1 != null
 
                         summary.icon2?.let { icon ->
-                            optionShortcutIcon2?.let {
+                            optionShortcutIcon2.let {
                                 IconViewBinder.bind(view = it, viewModel = icon)
                             }
                         }
-                        optionShortcutIcon2?.isVisible = summary.icon2 != null
+                        optionShortcutIcon2.isVisible = summary.icon2 != null
                     }
                 }
 
                 launch {
                     optionsViewModel.onCustomizeColorsClicked.collect {
-                        optionColors?.setOnClickListener { _ -> it?.invoke() }
+                        optionColors.setOnClickListener { _ -> it?.invoke() }
                     }
                 }
 
                 launch {
                     optionsViewModel.onCustomizeShapeGridClicked.collect {
-                        optionShapeGrid?.setOnClickListener { _ -> it?.invoke() }
+                        optionShapeGrid.setOnClickListener { _ -> it?.invoke() }
                     }
                 }
 
                 launch {
                     optionsViewModel.shapeGridPickerViewModel.selectedGridOption.collect {
                         gridOption ->
-                        optionShapeGridDescription?.let { TextViewBinder.bind(it, gridOption.text) }
+                        TextViewBinder.bind(optionShapeGridDescription, gridOption.text)
                         gridOption.payload?.let { gridIconViewModel ->
-                            optionShapeGridIcon?.let {
-                                GridIconViewBinder.bind(view = it, viewModel = gridIconViewModel)
-                            }
+                            GridIconViewBinder.bind(
+                                view = optionShapeGridIcon,
+                                viewModel = gridIconViewModel,
+                            )
                             // TODO(b/363018910): Use ColorUpdateBinder to update color
-                            optionShapeGridIcon?.setColorFilter(
+                            optionShapeGridIcon.setColorFilter(
                                 ContextCompat.getColor(
                                     view.context,
                                     com.android.wallpaper.R.color.system_on_surface_variant,
@@ -225,17 +220,14 @@
                 launch {
                     optionsViewModel.colorContrastSectionViewModel.summary.collectLatest { summary
                         ->
-                        optionColorContrastDescription?.let {
-                            TextViewBinder.bind(view = it, viewModel = summary.description)
+                        TextViewBinder.bind(
+                            view = optionColorContrastDescription,
+                            viewModel = summary.description,
+                        )
+                        summary.icon?.let {
+                            IconViewBinder.bind(view = optionColorContrastIcon, viewModel = it)
                         }
-
-                        if (summary.icon != null && optionColorContrastIcon != null) {
-                            IconViewBinder.bind(
-                                view = optionColorContrastIcon,
-                                viewModel = summary.icon,
-                            )
-                        }
-                        optionColorContrastIcon?.isVisible = summary.icon != null
+                        optionColorContrastIcon.isVisible = summary.icon != null
                     }
                 }
 
@@ -243,14 +235,11 @@
                     optionsViewModel.colorPickerViewModel2.selectedColorOption.collect { colorOption
                         ->
                         (colorOption as? ColorOptionImpl)?.let {
-                            optionColorsIcon?.let {
-                                ColorOptionIconBinder2.bind(
-                                    view = it,
-                                    viewModel =
-                                        ColorOptionIconViewModel.fromColorOption(colorOption),
-                                    darkTheme = view.resources.configuration.isNightModeActive,
-                                )
-                            }
+                            ColorOptionIconBinder2.bind(
+                                view = optionColorsIcon,
+                                viewModel = ColorOptionIconViewModel.fromColorOption(colorOption),
+                                darkTheme = view.resources.configuration.isNightModeActive,
+                            )
                         }
                     }
                 }