Fix recyclerview items setup wrong description
- Adjust the recyclerview setLayoutManager() timing, since we set it twice when using gird layout, it will mis-trigger our setContentDescription() method randomly and make some options setup wrong content description
video: https://drive.google.com/file/d/1xGjw9zacgeQsPtQA7DkWo3d-TvzPUYIi/view?usp=sharing
Fixes: 160761967
Test: manually
Change-Id: I52eec0f40e5c65c5e520abe32a08611959ce5d13
diff --git a/src/com/android/customization/widget/OptionSelectorController.java b/src/com/android/customization/widget/OptionSelectorController.java
index 49dfb82..db09aa6 100644
--- a/src/com/android/customization/widget/OptionSelectorController.java
+++ b/src/com/android/customization/widget/OptionSelectorController.java
@@ -228,9 +228,14 @@
}
};
- mContainer.setLayoutManager(new LinearLayoutManager(mContainer.getContext(),
- LinearLayoutManager.HORIZONTAL, false));
Resources res = mContainer.getContext().getResources();
+ if (mUseGrid) {
+ mContainer.setLayoutManager(new GridLayoutManager(mContainer.getContext(),
+ res.getInteger(R.integer.options_grid_num_columns)));
+ } else {
+ mContainer.setLayoutManager(new LinearLayoutManager(mContainer.getContext(),
+ LinearLayoutManager.HORIZONTAL, false));
+ }
mContainer.setAdapter(mAdapter);
@@ -250,14 +255,18 @@
if (mUseGrid) {
int numColumns = res.getInteger(R.integer.options_grid_num_columns);
- int widthPerItem = totalWidth / mAdapter.getItemCount();
+ int widthPerItem = res.getDimensionPixelOffset(R.dimen.option_tile_width);
int extraSpace = availableWidth - widthPerItem * numColumns;
while (extraSpace < 0) {
numColumns -= 1;
extraSpace = availableWidth - widthPerItem * numColumns;
}
- int containerSidePadding = extraSpace / (numColumns + 1);
- mContainer.setLayoutManager(new GridLayoutManager(mContainer.getContext(), numColumns));
+
+ if (mContainer.getLayoutManager() != null) {
+ ((GridLayoutManager) mContainer.getLayoutManager()).setSpanCount(numColumns);
+ }
+
+ int containerSidePadding = (extraSpace / (numColumns + 1)) / 2;
mContainer.setPaddingRelative(containerSidePadding, 0, containerSidePadding, 0);
mContainer.setOverScrollMode(View.OVER_SCROLL_NEVER);
return;