Merge "Creates an interface, implementation, and fake for UiModeManager" into main
diff --git a/res/layout/color_option_overflow_no_background.xml b/res/layout/color_option_overflow_no_background.xml
index abb9c6b..7a37536 100644
--- a/res/layout/color_option_overflow_no_background.xml
+++ b/res/layout/color_option_overflow_no_background.xml
@@ -24,7 +24,10 @@
     android:layout_gravity="center"
     android:clipChildren="false"
     android:gravity="center"
-    android:padding="@dimen/option_tile_grid_tile_padding_min"
+    android:paddingStart="@dimen/option_tile_grid_tile_padding_min"
+    android:paddingEnd="@dimen/option_tile_grid_tile_padding_min"
+    android:paddingTop="@dimen/option_tile_grid_icon_padding_min"
+    android:paddingBottom="@dimen/option_tile_grid_icon_padding_min"
     android:layout_weight="1"
     app:layout_constraintDimensionRatio="1:1"
     app:layout_constraintWidth_max="@dimen/component_color_chip_small_diameter_default">
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index e838ca6..71be3a7 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -38,7 +38,7 @@
     <string name="clock_color_teal" msgid="7499223425741344251">"Hijau Kebiruan"</string>
     <string name="clock_size" msgid="5028923902364418263">"Ukuran"</string>
     <string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamis"</string>
-    <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Ukuran jam berubah sesuai dengan konten layar kunci"</string>
+    <string name="clock_size_dynamic_description" msgid="2776620745774561662">"Ukuran jam berubah menurut konten layar kunci"</string>
     <string name="clock_size_large" msgid="3143248715744138979">"Besar"</string>
     <string name="clock_size_small" msgid="2280449912094164133">"Kecil"</string>
     <string name="clock_size_small_description" msgid="4089511196955732480">"Jam kecil ditampilkan di sudut layar Anda"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 01fd0ff..c0d6fd5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -38,7 +38,7 @@
     <string name="clock_color_teal" msgid="7499223425741344251">"蓝绿色"</string>
     <string name="clock_size" msgid="5028923902364418263">"大小"</string>
     <string name="clock_size_dynamic" msgid="1023930312455061642">"动态"</string>
-    <string name="clock_size_dynamic_description" msgid="2776620745774561662">"时钟大小会依据锁定屏幕上的内容而变化"</string>
+    <string name="clock_size_dynamic_description" msgid="2776620745774561662">"时钟大小会随锁屏内容而变化"</string>
     <string name="clock_size_large" msgid="3143248715744138979">"大"</string>
     <string name="clock_size_small" msgid="2280449912094164133">"小"</string>
     <string name="clock_size_small_description" msgid="4089511196955732480">"一个小型时钟显示在界面一角"</string>
diff --git a/src/com/android/customization/model/color/ColorProvider.kt b/src/com/android/customization/model/color/ColorProvider.kt
index eb8d8df..2d7037e 100644
--- a/src/com/android/customization/model/color/ColorProvider.kt
+++ b/src/com/android/customization/model/color/ColorProvider.kt
@@ -42,6 +42,7 @@
 import com.android.wallpaper.module.InjectorProvider
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
 import kotlinx.coroutines.SupervisorJob
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
@@ -62,6 +63,7 @@
         private const val ALPHA_MASK = 0xFF
     }
 
+    private var loaderJob: Job? = null
     private val monetEnabled = ColorUtils.isMonetEnabled(context)
     // TODO(b/202145216): Use style method to fetch the list of style.
     private var styleList =
@@ -105,19 +107,21 @@
             this.homeWallpaperColors = homeWallpaperColors
             this.lockWallpaperColors = lockWallpaperColors
         }
-        if (presetColorBundles == null || reload) {
-            scope.launch {
+
+        scope.launch {
+            loaderJob?.join()
+            if (presetColorBundles == null || reload) {
                 try {
-                    loadPreset()
+                    loaderJob = launch { loadPreset() }
                 } catch (e: Throwable) {
                     colorsAvailable = false
                     callback?.onError(e)
                     return@launch
                 }
                 callback?.onOptionsLoaded(buildFinalList())
+            } else {
+                callback?.onOptionsLoaded(buildFinalList())
             }
-        } else {
-            callback?.onOptionsLoaded(buildFinalList())
         }
     }
 
@@ -367,6 +371,7 @@
             }
 
             presetColorBundles = bundles
+            loaderJob = null
         }
 
     private fun buildPreset(