/* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.android.customization.picker.grid.data.repository import android.graphics.drawable.Drawable import com.android.customization.model.grid.GridOptionModel import com.android.customization.model.grid.ShapeGridManager import com.android.wallpaper.picker.di.modules.BackgroundDispatcher import javax.inject.Inject import javax.inject.Singleton import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext @Singleton class GridRepository2 @Inject constructor( private val manager: ShapeGridManager, @BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher, ) { val gridOptions: Flow> = manager.gridOptions val selectedGridOption: Flow = gridOptions.map { gridOptions -> gridOptions.firstOrNull { it.isCurrent } } val isGridCustomizationAvailable = combine(manager.isCustomizationAvailable, gridOptions) { isCustomizationAvailable, _ -> // Call getGridOptions() instead of using gridOptions flow to avoid getting stale replay // value isCustomizationAvailable && manager.getGridOptions().size > 1 } suspend fun applyGridOption(gridKey: String) = withContext(bgDispatcher) { manager.applyGridOption(gridKey) } fun getGridOptionDrawable(iconId: Int): Drawable? { return manager.getGridOptionDrawable(iconId) } }