diff options
Diffstat (limited to 'src/com/android/customization/picker/grid/GridFragment.java')
-rw-r--r-- | src/com/android/customization/picker/grid/GridFragment.java | 98 |
1 files changed, 56 insertions, 42 deletions
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java index bb29d55a..cb04fc39 100644 --- a/src/com/android/customization/picker/grid/GridFragment.java +++ b/src/com/android/customization/picker/grid/GridFragment.java @@ -17,23 +17,27 @@ package com.android.customization.picker.grid; import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY_TEXT; +import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.widget.ContentLoadingProgressBar; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import com.android.customization.model.CustomizationManager.Callback; import com.android.customization.model.CustomizationManager.OptionsFetchedListener; import com.android.customization.model.CustomizationOption; import com.android.customization.model.grid.GridOption; +import com.android.customization.model.grid.GridOptionViewModel; import com.android.customization.model.grid.GridOptionsManager; import com.android.customization.module.ThemesUserEventLogger; import com.android.customization.picker.WallpaperPreviewer; @@ -57,27 +61,18 @@ import java.util.List; public class GridFragment extends AppbarFragment { private static final String TAG = "GridFragment"; - private static final String KEY_STATE_SELECTED_OPTION = "GridFragment.selectedOption"; - private static final String KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE = - "GridFragment.bottomActionBarVisible"; - - public static GridFragment newInstance(CharSequence title) { - GridFragment fragment = new GridFragment(); - fragment.setArguments(AppbarFragment.createArguments(title)); - return fragment; - } private WallpaperInfo mHomeWallpaper; private RecyclerView mOptionsContainer; private OptionSelectorController<GridOption> mOptionsController; private GridOptionsManager mGridManager; - private GridOption mSelectedOption; private ContentLoadingProgressBar mLoading; private View mContent; private View mError; private BottomActionBar mBottomActionBar; private ThemesUserEventLogger mEventLogger; private GridOptionPreviewer mGridOptionPreviewer; + private GridOptionViewModel mGridOptionViewModel; private final Callback mApplyGridCallback = new Callback() { @Override @@ -95,10 +90,18 @@ public class GridFragment extends AppbarFragment { // Since we disabled it when clicked apply button. mBottomActionBar.enableActions(); mBottomActionBar.hide(); + mGridOptionViewModel.setBottomActionBarVisible(false); //TODO(chihhangchuang): handle } }; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mGridOptionViewModel = new ViewModelProvider(requireActivity()).get( + GridOptionViewModel.class); + } + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @@ -108,6 +111,12 @@ public class GridFragment extends AppbarFragment { setUpToolbar(view); mContent = view.findViewById(R.id.content_section); mOptionsContainer = view.findViewById(R.id.options_container); + AccessibilityManager accessibilityManager = + (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); + if (accessibilityManager.isEnabled()) { + // Make Talkback focus won't reset when notifyDataSetChange + mOptionsContainer.setItemAnimator(null); + } mLoading = view.findViewById(R.id.loading_indicator); mError = view.findViewById(R.id.error_section); @@ -127,7 +136,7 @@ public class GridFragment extends AppbarFragment { mGridManager = GridOptionsManager.getInstance(getContext()); mEventLogger = (ThemesUserEventLogger) InjectorProvider.getInjector() .getUserEventLogger(getContext()); - setUpOptions(savedInstanceState); + setUpOptions(); SurfaceView wallpaperSurface = view.findViewById(R.id.wallpaper_preview_surface); WallpaperPreviewer wallpaperPreviewer = new WallpaperPreviewer(getLifecycle(), @@ -147,6 +156,13 @@ public class GridFragment extends AppbarFragment { } @Override + public boolean onBackPressed() { + mGridOptionViewModel.setSelectedOption(null); + mGridOptionViewModel.setBottomActionBarVisible(false); + return super.onBackPressed(); + } + + @Override public void onDestroy() { super.onDestroy(); if (mGridOptionPreviewer != null) { @@ -155,14 +171,8 @@ public class GridFragment extends AppbarFragment { } @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - if (mSelectedOption != null) { - outState.putParcelable(KEY_STATE_SELECTED_OPTION, mSelectedOption); - } - if (mBottomActionBar != null) { - outState.putBoolean(KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE, mBottomActionBar.isVisible()); - } + public CharSequence getDefaultTitle() { + return getString(R.string.grid_title); } @Override @@ -170,7 +180,8 @@ public class GridFragment extends AppbarFragment { super.onBottomActionBarReady(bottomActionBar); mBottomActionBar = bottomActionBar; mBottomActionBar.showActionsOnly(APPLY_TEXT); - mBottomActionBar.setActionClickListener(APPLY_TEXT, v -> applyGridOption(mSelectedOption)); + mBottomActionBar.setActionClickListener(APPLY_TEXT, + v -> applyGridOption(mGridOptionViewModel.getSelectedOption())); } private void applyGridOption(GridOption gridOption) { @@ -178,7 +189,7 @@ public class GridFragment extends AppbarFragment { mGridManager.apply(gridOption, mApplyGridCallback); } - private void setUpOptions(@Nullable Bundle savedInstanceState) { + private void setUpOptions() { hideError(); mLoading.show(); mGridManager.fetchOptions(new OptionsFetchedListener<GridOption>() { @@ -186,26 +197,31 @@ public class GridFragment extends AppbarFragment { public void onOptionsLoaded(List<GridOption> options) { mLoading.hide(); mOptionsController = new OptionSelectorController<>( - mOptionsContainer, options, /* useGrid= */ false, CheckmarkStyle.CENTER); + mOptionsContainer, options, /* useGrid= */ false, + CheckmarkStyle.CENTER_CHANGE_COLOR_WHEN_NOT_SELECTED); mOptionsController.initOptions(mGridManager); + GridOption previouslySelectedOption = findEquivalent(options, + mGridOptionViewModel.getSelectedOption()); + mGridOptionViewModel.setSelectedOption( + previouslySelectedOption != null + ? previouslySelectedOption + : getActiveOption(options)); - // Find the selected Grid option. - GridOption previouslySelectedOption = null; - if (savedInstanceState != null) { - previouslySelectedOption = findEquivalent( - options, savedInstanceState.getParcelable(KEY_STATE_SELECTED_OPTION)); - } - mSelectedOption = previouslySelectedOption != null - ? previouslySelectedOption - : getActiveOption(options); - - mOptionsController.setSelectedOption(mSelectedOption); - onOptionSelected(mSelectedOption); - restoreBottomActionBarVisibility(savedInstanceState); + mOptionsController.setSelectedOption(mGridOptionViewModel.getSelectedOption()); + onOptionSelected(mGridOptionViewModel.getSelectedOption()); + restoreBottomActionBarVisibility(); mOptionsController.addListener(selectedOption -> { + String title = selectedOption.getTitle(); + int stringId = R.string.option_previewed_description; + if (selectedOption.isActive(mGridManager)) { + stringId = R.string.option_applied_previewed_description; + } + CharSequence cd = getContext().getString(stringId, title); + mOptionsContainer.announceForAccessibility(cd); onOptionSelected(selectedOption); mBottomActionBar.show(); + mGridOptionViewModel.setBottomActionBarVisible(true); }); } @@ -247,15 +263,13 @@ public class GridFragment extends AppbarFragment { } private void onOptionSelected(CustomizationOption selectedOption) { - mSelectedOption = (GridOption) selectedOption; - mEventLogger.logGridSelected(mSelectedOption); - mGridOptionPreviewer.setGridOption(mSelectedOption); + mGridOptionViewModel.setSelectedOption((GridOption) selectedOption); + mEventLogger.logGridSelected(mGridOptionViewModel.getSelectedOption()); + mGridOptionPreviewer.setGridOption(mGridOptionViewModel.getSelectedOption()); } - private void restoreBottomActionBarVisibility(@Nullable Bundle savedInstanceState) { - boolean isBottomActionBarVisible = savedInstanceState != null - && savedInstanceState.getBoolean(KEY_STATE_BOTTOM_ACTION_BAR_VISIBLE); - if (isBottomActionBarVisible) { + private void restoreBottomActionBarVisibility() { + if (mGridOptionViewModel.getBottomActionBarVisible()) { mBottomActionBar.show(); } else { mBottomActionBar.hide(); |