diff options
author | Santiago Etchebehere <santie@google.com> | 2022-04-28 04:00:18 -0700 |
---|---|---|
committer | Santiago Etchebehere <santie@google.com> | 2022-04-29 11:59:32 +0000 |
commit | 4c74f6f9fe81f1d8a1071e235c76c73b29ed3ff8 (patch) | |
tree | 613a0867587574054a92a5bf6a2c0ab0b5205d43 /src/com/android | |
parent | dd2fa83ceec988a457918669507f576d13f0cac9 (diff) | |
download | ThemePicker-4c74f6f9fe81f1d8a1071e235c76c73b29ed3ff8.tar.gz |
Make reloading color options thread safe
Use new lists for color options and copy them to avoid
concurrent modification if we get a colors changed
event from the wallpaper while traversing them
Bug: 229684864
Fixes: 229549608
Test: manual
Change-Id: Ida3074742861648c5f4da48c788a7ea8d1fdd6bc
(cherry picked from commit c30bc1f2c7dfd091d1c919f5ae0b7250a1960723)
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/customization/model/color/ColorSectionController.java | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/com/android/customization/model/color/ColorSectionController.java b/src/com/android/customization/model/color/ColorSectionController.java index 9241e8e1..80bc3c6e 100644 --- a/src/com/android/customization/model/color/ColorSectionController.java +++ b/src/com/android/customization/model/color/ColorSectionController.java @@ -83,9 +83,9 @@ public class ColorSectionController implements CustomizationSectionController<Co private final WallpaperColorsViewModel mWallpaperColorsViewModel; private final LifecycleOwner mLifecycleOwner; private final ColorSectionAdapter mColorSectionAdapter = new ColorSectionAdapter(); - private final List<ColorOption> mWallpaperColorOptions = new ArrayList<>(); - private final List<ColorOption> mPresetColorOptions = new ArrayList<>(); + private List<ColorOption> mWallpaperColorOptions = new ArrayList<>(); + private List<ColorOption> mPresetColorOptions = new ArrayList<>(); private ViewPager2 mColorSectionViewPager; private ColorOption mSelectedColor; private SeparatedTabLayout mTabLayout; @@ -207,16 +207,17 @@ public class ColorSectionController implements CustomizationSectionController<Co mColorManager.fetchOptions(new CustomizationManager.OptionsFetchedListener<ColorOption>() { @Override public void onOptionsLoaded(List<ColorOption> options) { - mWallpaperColorOptions.clear(); - mPresetColorOptions.clear(); - + List<ColorOption> wallpaperColorOptions = new ArrayList<>(); + List<ColorOption> presetColorOptions = new ArrayList<>(); for (ColorOption option : options) { if (option instanceof ColorSeedOption) { - mWallpaperColorOptions.add(option); + wallpaperColorOptions.add(option); } else if (option instanceof ColorBundle) { - mPresetColorOptions.add(option); + presetColorOptions.add(option); } } + mWallpaperColorOptions = wallpaperColorOptions; + mPresetColorOptions = presetColorOptions; mSelectedColor = findActiveColorOption(mWallpaperColorOptions, mPresetColorOptions); mTabLayout.post(()-> setUpColorViewPager()); |