/* * Copyright (C) 2021 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.wallpaper.model; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import com.android.wallpaper.module.WallpaperPersister.Destination; import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback; /** * {@link ViewModel} class that keeps track of the status of the "Set wallpaper" operation. */ public class SetWallpaperViewModel extends ViewModel { private static final String TAG = "SetWallpaperViewModel"; public enum SetWallpaperStatus { UNKNOWN, PENDING, SUCCESS, ERROR } /** * @return a {@link SetWallpaperCallback} to set as listener for * {@link WallpaperSetter#setCurrentWallpaper} that will update the * {@link SetWallpaperViewModel} obtained from the given provider. */ public static SetWallpaperCallback getCallback(@NonNull ViewModelProvider provider) { SetWallpaperViewModel viewModel = provider.get(SetWallpaperViewModel.class); return new SetWallpaperCallback() { @Override public void onSuccess(WallpaperInfo wallpaperInfo, @Destination int destination) { Log.d(TAG, "SetWallpaperCallback success"); viewModel.mStatus.setValue(SetWallpaperStatus.SUCCESS); } @Override public void onError(@Nullable Throwable throwable) { Log.w(TAG, "SetWallpaperCallback error", throwable); viewModel.mStatus.setValue(SetWallpaperStatus.ERROR); } }; } private final MutableLiveData mStatus = new MutableLiveData<>(); @Destination private int mDestination; public SetWallpaperViewModel() { mStatus.setValue(SetWallpaperStatus.UNKNOWN); } public LiveData getStatus() { return mStatus; } public int getDestination() { return mDestination; } public void setDestination(int destination) { mDestination = destination; } }