Bind Toolbar colors (2/2)

Includes back/cancel button, toolbar title and apply button.

Flag: com.android.systemui.shared.new_customization_picker_ui
Test: manually verified
Bug: 363018910
Change-Id: I1875d8867b1ba017ca3807885ce2ade7aedfcb65
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt
index 5ea757e..c17775a 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt
@@ -22,16 +22,18 @@
 import android.widget.FrameLayout
 import android.widget.Toolbar
 import androidx.core.graphics.ColorUtils
+import androidx.core.graphics.drawable.DrawableCompat
 import androidx.core.view.isInvisible
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
-import com.android.wallpaper.R
 import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsViewModel
 import com.android.wallpaper.customization.ui.viewmodel.ToolbarHeightsViewModel
+import com.android.wallpaper.picker.customization.ui.binder.ColorUpdateBinder
 import com.android.wallpaper.picker.customization.ui.binder.DefaultToolbarBinder
 import com.android.wallpaper.picker.customization.ui.binder.ToolbarBinder
+import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
 import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel
 import javax.inject.Inject
 import javax.inject.Singleton
@@ -39,6 +41,7 @@
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.filterNotNull
+import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
 
 @Singleton
@@ -54,6 +57,7 @@
         toolbar: Toolbar,
         applyButton: Button,
         viewModel: CustomizationOptionsViewModel,
+        colorUpdateViewModel: ColorUpdateViewModel,
         lifecycleOwner: LifecycleOwner,
         onNavBack: () -> Unit,
     ) {
@@ -62,6 +66,7 @@
             toolbar,
             applyButton,
             viewModel,
+            colorUpdateViewModel,
             lifecycleOwner,
             onNavBack,
         )
@@ -111,13 +116,14 @@
             }
         )
 
-        val applyButtonTextColorEnabled =
-            applyButton.resources.getColor(R.color.system_on_primary, null)
-        val applyButtonTextColorDisabled =
-            ColorUtils.setAlphaComponent(
-                applyButton.resources.getColor(R.color.system_on_surface, null),
-                97,
-            ) // 97 for 38% transparent
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                DrawableCompat.setTint(DrawableCompat.wrap(applyButton.background), color)
+            },
+            color = colorUpdateViewModel.colorPrimary,
+            shouldAnimate = { true },
+            lifecycleOwner = lifecycleOwner,
+        )
 
         lifecycleOwner.lifecycleScope.launch {
             lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -133,9 +139,22 @@
                     viewModel.isApplyButtonEnabled.collect {
                         applyButton.isEnabled = it
                         applyButton.background.alpha =
-                            if (it) 255 else 31 // 255 for 100%, 31 for 12% transparent,
-                        applyButton.setTextColor(
-                            if (it) applyButtonTextColorEnabled else applyButtonTextColorDisabled
+                            if (it) 255 else 31 // 255 for 100%, 31 for 12% transparent
+                        ColorUpdateBinder.bind(
+                            setColor = { color -> applyButton.setTextColor(color) },
+                            color =
+                                if (it) {
+                                    colorUpdateViewModel.colorOnPrimary
+                                } else {
+                                    colorUpdateViewModel.colorOnSurface.map { color: Int ->
+                                        ColorUtils.setAlphaComponent(
+                                            color,
+                                            97,
+                                        ) // 97 for 38% transparent
+                                    }
+                                },
+                            shouldAnimate = { true },
+                            lifecycleOwner = lifecycleOwner,
                         )
                     }
                 }