[2/n] Let picker refresh preview when user selects a different grid
When user taps on a different grid, ask to refresh preview instead of asking launcher to change grid size
Resbumit of ag/24344634 which was reverted due to automerger failing to merge into main.
Test: disable FLAG_NAME_GRID_APPLY_BUTTON and change grid size still works, enable the flag and change grid size has not effect
Bug: 294866224
Change-Id: Id8e808f119f15e0e2431d6fab2a050d75cd4a1a4
diff --git a/src/com/android/customization/model/CustomizationManager.java b/src/com/android/customization/model/CustomizationManager.java
index 104cc83..e6d3872 100644
--- a/src/com/android/customization/model/CustomizationManager.java
+++ b/src/com/android/customization/model/CustomizationManager.java
@@ -72,6 +72,9 @@
*/
void apply(T option, Callback callback);
+ /** Preview the given option without committing the change. */
+ default void preview(T option) {}
+
/**
* Loads the available options for the type of Customization managed by this class, calling the
* given callback when done.
diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index b7ee37f..78dbb5b 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -99,6 +99,11 @@
}
@Override
+ public void preview(GridOption option) {
+ mProvider.updateView();
+ }
+
+ @Override
public void fetchOptions(OptionsFetchedListener<GridOption> callback, boolean reload) {
sExecutorService.submit(() -> {
List<GridOption> gridOptions = mProvider.fetch(reload);
diff --git a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
index 4e775c6..8f1860e 100644
--- a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
+++ b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
@@ -117,6 +117,10 @@
mPreviewUtils.renderPreview(bundle, callback);
}
+ void updateView() {
+ mLiveData.postValue(new Object());
+ }
+
int applyGrid(String name) {
ContentValues values = new ContentValues();
values.put("name", name);
diff --git a/src/com/android/customization/model/grid/data/repository/GridRepository.kt b/src/com/android/customization/model/grid/data/repository/GridRepository.kt
index 9a3be0c..4f534cc 100644
--- a/src/com/android/customization/model/grid/data/repository/GridRepository.kt
+++ b/src/com/android/customization/model/grid/data/repository/GridRepository.kt
@@ -17,12 +17,14 @@
package com.android.customization.model.grid.data.repository
+import android.content.Context
import androidx.lifecycle.asFlow
import com.android.customization.model.CustomizationManager
import com.android.customization.model.grid.GridOption
import com.android.customization.model.grid.GridOptionsManager
import com.android.customization.model.grid.shared.model.GridOptionItemModel
import com.android.customization.model.grid.shared.model.GridOptionItemsModel
+import com.android.wallpaper.config.BaseFlags
import kotlin.coroutines.resume
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -41,6 +43,7 @@
}
class GridRepositoryImpl(
+ private val context: Context,
private val applicationScope: CoroutineScope,
private val manager: GridOptionsManager,
private val backgroundDispatcher: CoroutineDispatcher,
@@ -105,18 +108,22 @@
private suspend fun onSelected(option: GridOption) {
withContext(backgroundDispatcher) {
suspendCancellableCoroutine { continuation ->
- manager.apply(
- option,
- object : CustomizationManager.Callback {
- override fun onSuccess() {
- continuation.resume(true)
- }
+ if (BaseFlags.get().isGridApplyButtonEnabled(context)) {
+ manager.preview(option)
+ } else {
+ manager.apply(
+ option,
+ object : CustomizationManager.Callback {
+ override fun onSuccess() {
+ continuation.resume(true)
+ }
- override fun onError(throwable: Throwable?) {
- continuation.resume(false)
- }
- },
- )
+ override fun onError(throwable: Throwable?) {
+ continuation.resume(false)
+ }
+ },
+ )
+ }
}
}
}
diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt
index 653c403..3dbbca0 100644
--- a/src/com/android/customization/module/ThemePickerInjector.kt
+++ b/src/com/android/customization/module/ThemePickerInjector.kt
@@ -580,6 +580,7 @@
applicationScope = getApplicationCoroutineScope(),
repository =
GridRepositoryImpl(
+ context = appContext,
applicationScope = getApplicationCoroutineScope(),
manager = GridOptionsManager.getInstance(context),
backgroundDispatcher = bgDispatcher,