1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.wallpaper.model 17 18 import android.app.WallpaperColors 19 import androidx.lifecycle.LiveData 20 import androidx.lifecycle.MutableLiveData 21 import kotlinx.coroutines.flow.MutableStateFlow 22 import kotlinx.coroutines.flow.StateFlow 23 import kotlinx.coroutines.flow.asStateFlow 24 25 /** 26 * ViewModel class to keep track of WallpaperColors for the current wallpaper 27 * 28 * TODO (b/269451870): Rename to WallpaperColorsRepository 29 */ 30 class WallpaperColorsViewModel { 31 32 /** 33 * WallpaperColors exposed as live data to allow Java integration 34 * 35 * TODO (b/262924584): Remove after ColorSectionController2 & ColorCustomizationManager refactor 36 */ <lambda>null37 private val _homeWallpaperColorsLiveData: MutableLiveData<WallpaperColors> by lazy { 38 MutableLiveData<WallpaperColors>() 39 } 40 val homeWallpaperColorsLiveData: LiveData<WallpaperColors> = _homeWallpaperColorsLiveData <lambda>null41 private val _lockWallpaperColorsLiveData: MutableLiveData<WallpaperColors> by lazy { 42 MutableLiveData<WallpaperColors>() 43 } 44 val lockWallpaperColorsLiveData: LiveData<WallpaperColors> = _lockWallpaperColorsLiveData 45 46 private val _homeWallpaperColors = MutableStateFlow<WallpaperColors?>(null) 47 /** WallpaperColors for the currently set home wallpaper */ 48 val homeWallpaperColors: StateFlow<WallpaperColors?> = _homeWallpaperColors.asStateFlow() 49 50 private val _lockWallpaperColors = MutableStateFlow<WallpaperColors?>(null) 51 /** WallpaperColors for the currently set lock wallpaper */ 52 val lockWallpaperColors: StateFlow<WallpaperColors?> = _lockWallpaperColors.asStateFlow() 53 setHomeWallpaperColorsnull54 fun setHomeWallpaperColors(colors: WallpaperColors?) { 55 _homeWallpaperColors.value = colors 56 if (colors != _homeWallpaperColorsLiveData.value) { 57 _homeWallpaperColorsLiveData.value = colors 58 } 59 } 60 setLockWallpaperColorsnull61 fun setLockWallpaperColors(colors: WallpaperColors?) { 62 _lockWallpaperColors.value = colors 63 if (colors != _lockWallpaperColorsLiveData.value) { 64 _lockWallpaperColorsLiveData.value = colors 65 } 66 } 67 } 68