Merge "Fix content description for the grid option (2/2)" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8fdc97e..f62a6ad 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -204,6 +204,9 @@
     <!--Title for a grid option, describing the number of columns and rows, eg: 4x4 [CHAR LIMIT=10] -->
     <string name="grid_title_pattern"><xliff:g name="num_cols" example="1">%1$d</xliff:g>x<xliff:g name="num_rows" example="1">%2$d</xliff:g></string>
 
+    <!--Copntent description for a grid option, describing the number of columns and rows, eg: 4 by 4 [CHAR LIMIT=10] -->
+    <string name="grid_content_description"><xliff:g name="num_cols" example="1">%1$d</xliff:g> by <xliff:g name="num_rows" example="1">%2$d</xliff:g></string>
+
     <!-- Label of what will happen when user tap on apply button to change grid. [CHAR LIMIT=50] -->
     <string name="apply_grid_btn_note">Changing grid size will reload workspace and may take a few seconds.</string>
 
diff --git a/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt b/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt
index 179127d..201b21f 100644
--- a/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt
+++ b/src/com/android/customization/picker/grid/ui/viewmodel/GridScreenViewModel.kt
@@ -26,6 +26,7 @@
 import com.android.customization.model.ResourceConstants
 import com.android.customization.picker.grid.domain.interactor.GridInteractor
 import com.android.customization.picker.grid.shared.model.GridOptionItemsModel
+import com.android.themepicker.R
 import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
 import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
 import kotlinx.coroutines.flow.Flow
@@ -34,10 +35,7 @@
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
 
-class GridScreenViewModel(
-    context: Context,
-    private val interactor: GridInteractor,
-) : ViewModel() {
+class GridScreenViewModel(context: Context, private val interactor: GridInteractor) : ViewModel() {
 
     @SuppressLint("StaticFieldLeak") // We're not leaking this context as it is the app context.
     private val applicationContext = context.applicationContext
@@ -46,7 +44,7 @@
         interactor.options.map { model -> toViewModel(model) }
 
     private fun toViewModel(
-        model: GridOptionItemsModel,
+        model: GridOptionItemsModel
     ): List<OptionItemViewModel<GridIconViewModel>> {
         val iconShapePath =
             applicationContext.resources.getString(
@@ -72,6 +70,14 @@
                                 path = iconShapePath,
                             ),
                         text = text,
+                        contentDescription =
+                            Text.Loaded(
+                                applicationContext.resources.getString(
+                                    R.string.grid_content_description,
+                                    option.cols,
+                                    option.rows,
+                                )
+                            ),
                         isSelected = option.isSelected,
                         onClicked =
                             option.isSelected.map { isSelected ->
@@ -87,20 +93,14 @@
         }
     }
 
-    class Factory(
-        context: Context,
-        private val interactor: GridInteractor,
-    ) : ViewModelProvider.Factory {
+    class Factory(context: Context, private val interactor: GridInteractor) :
+        ViewModelProvider.Factory {
 
         private val applicationContext = context.applicationContext
 
         @Suppress("UNCHECKED_CAST")
         override fun <T : ViewModel> create(modelClass: Class<T>): T {
-            return GridScreenViewModel(
-                context = applicationContext,
-                interactor = interactor,
-            )
-                as T
+            return GridScreenViewModel(context = applicationContext, interactor = interactor) as T
         }
     }
 }