summaryrefslogtreecommitdiff
path: root/src/com/android/customization/picker
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/customization/picker')
-rw-r--r--src/com/android/customization/picker/grid/GridFragment.java98
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();