diff options
Diffstat (limited to 'src/com/android/customization/model/grid/GridOptionsManager.java')
| -rw-r--r-- | src/com/android/customization/model/grid/GridOptionsManager.java | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java index 7f15d836..b7ee37fd 100644 --- a/src/com/android/customization/model/grid/GridOptionsManager.java +++ b/src/com/android/customization/model/grid/GridOptionsManager.java @@ -21,7 +21,9 @@ import android.os.Handler; import android.os.Looper; import android.util.Log; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.lifecycle.LiveData; import com.android.customization.model.CustomizationManager; import com.android.customization.module.CustomizationInjector; @@ -47,6 +49,7 @@ public class GridOptionsManager implements CustomizationManager<GridOption> { private final LauncherGridOptionsProvider mProvider; private final ThemesUserEventLogger mEventLogger; + private int mGridOptionSize = -1; /** Returns the {@link GridOptionsManager} instance. */ public static GridOptionsManager getInstance(Context context) { @@ -71,16 +74,17 @@ public class GridOptionsManager implements CustomizationManager<GridOption> { @Override public boolean isAvailable() { - int gridOptionSize = 0; - try { - gridOptionSize = sExecutorService.submit(() -> { - List<GridOption> gridOptions = mProvider.fetch(/* reload= */true); - return gridOptions == null ? 0 : gridOptions.size(); - }).get(); - } catch (InterruptedException | ExecutionException e) { - Log.w(TAG, "could not get gridOptionSize", e); + if (mGridOptionSize < 0) { + try { + mGridOptionSize = sExecutorService.submit(() -> { + List<GridOption> gridOptions = mProvider.fetch(/* reload= */true); + return gridOptions == null ? 0 : gridOptions.size(); + }).get(); + } catch (InterruptedException | ExecutionException e) { + Log.w(TAG, "could not get gridOptionSize", e); + } } - return gridOptionSize > 1 && mProvider.areGridsAvailable(); + return mGridOptionSize > 1 && mProvider.areGridsAvailable(); } @Override @@ -110,6 +114,13 @@ public class GridOptionsManager implements CustomizationManager<GridOption> { }); } + /** + * Returns an observable that receives a new value each time that the grid options are changed. + */ + public LiveData<Object> getOptionChangeObservable(@Nullable Handler handler) { + return mProvider.getOptionChangeObservable(handler); + } + /** Call through content provider API to render preview */ public void renderPreview(Bundle bundle, String gridName, PreviewUtils.WorkspacePreviewCallback callback) { |
