From 967745a2ea50fcfbb5ace6e08dcd90af29d67506 Mon Sep 17 00:00:00 2001 From: conradchen Date: Mon, 17 May 2021 13:30:47 -0700 Subject: [PATCH] [Catalog preference] Fix catalog preference state restoring issue PiperOrigin-RevId: 374268183 --- .../CatalogPreferencesDialogFragment.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/catalog/java/io/material/catalog/preferences/CatalogPreferencesDialogFragment.java b/catalog/java/io/material/catalog/preferences/CatalogPreferencesDialogFragment.java index 99d893c00..5824ef71a 100644 --- a/catalog/java/io/material/catalog/preferences/CatalogPreferencesDialogFragment.java +++ b/catalog/java/io/material/catalog/preferences/CatalogPreferencesDialogFragment.java @@ -18,9 +18,10 @@ package io.material.catalog.preferences; import io.material.catalog.R; -import android.app.Dialog; import android.content.Context; import android.os.Bundle; +import androidx.core.view.ViewCompat; +import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -48,6 +49,8 @@ public class CatalogPreferencesDialogFragment extends BottomSheetDialogFragment @Inject DispatchingAndroidInjector childFragmentInjector; + private final SparseIntArray buttonIdToOptionId = new SparseIntArray(); + @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); @@ -59,13 +62,6 @@ public class CatalogPreferencesDialogFragment extends BottomSheetDialogFragment return childFragmentInjector; } - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - // Do not restore states. All buttons will be checked according to preference settings. - return super.onCreateDialog(null); - } - @Nullable @Override public View onCreateView( @@ -92,18 +88,19 @@ public class CatalogPreferencesDialogFragment extends BottomSheetDialogFragment description.setEnabled(isEnabled); description.setText(preference.description); MaterialButtonToggleGroup buttonToggleGroup = view.findViewById(R.id.preference_options); + int selectedOptionId = preference.getSelectedOption(view.getContext()).id; for (Option option : preference.getOptions()) { MaterialButton button = createOptionButton(layoutInflater, buttonToggleGroup, option); button.setEnabled(isEnabled); buttonToggleGroup.addView(button); + button.setChecked(selectedOptionId == option.id); } - buttonToggleGroup.check(preference.getSelectedOption(view.getContext()).id); buttonToggleGroup.setEnabled(isEnabled); if (isEnabled) { buttonToggleGroup.addOnButtonCheckedListener( (group, checkedId, isChecked) -> { if (isChecked) { - preference.setSelectedOption(group.getContext(), checkedId); + preference.setSelectedOption(group.getContext(), buttonIdToOptionId.get(checkedId)); } }); } @@ -117,7 +114,9 @@ public class CatalogPreferencesDialogFragment extends BottomSheetDialogFragment MaterialButton button = (MaterialButton) layoutInflater.inflate( R.layout.mtrl_preferences_dialog_option_button, rootView, false); - button.setId(option.id); + int buttonId = ViewCompat.generateViewId(); + buttonIdToOptionId.append(buttonId, option.id); + button.setId(buttonId); button.setIconResource(option.icon); button.setText(option.description); return button;