/* * Copyright (C) 2017 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.content.Context; import androidx.annotation.IntDef; /** * Interface for objects which initialize daily wallpaper rotations. */ public interface WallpaperRotationInitializer { /** * OK to download on both metered (i.e., cellular) and unmetered (i.e., wifi) networks. */ int NETWORK_PREFERENCE_CELLULAR_OK = 0; /** * Only download wallpapers on unmetered (i.e., wifi) networks. */ int NETWORK_PREFERENCE_WIFI_ONLY = 1; int ROTATION_NOT_INITIALIZED = 0; int ROTATION_HOME_ONLY = 1; int ROTATION_HOME_AND_LOCK = 2; /** * Starts a daily wallpaper rotation. * * @param appContext The application's context. * @return Whether rotation started successfully. */ boolean startRotation(Context appContext); /** * Sets the first wallpaper in a daily rotation to the device. Must be called before a call to * {@code startRotation(appContext)}. * * @param appContext The application's context. * @param networkPreference The user's network preference for downloading wallpapers in rotation. * @param listener Called when the first wallpaper in rotation has been downloaded and set to the * device. */ void setFirstWallpaperInRotation(Context appContext, @NetworkPreference int networkPreference, Listener listener); /** * Gets the current state of the possible wallpaper rotation represented by this object. */ void fetchRotationInitializationState(Context context, RotationStateListener listener); /** * Checks and returns the last-known rotation intialization state without doing a full refresh, * which would perform some disk I/O. Therefore, this method can be called safely from the main * thread but the data returned here could be stale. */ @RotationInitializationState int getRotationInitializationStateDirty(Context context); /** * Possible network preferences for downloading wallpapers in rotation. */ @IntDef({ NETWORK_PREFERENCE_CELLULAR_OK, NETWORK_PREFERENCE_WIFI_ONLY}) @interface NetworkPreference { } /** * Possible states of rotation initialization. */ @IntDef({ ROTATION_NOT_INITIALIZED, ROTATION_HOME_ONLY, ROTATION_HOME_AND_LOCK}) @interface RotationInitializationState { } /** * Listener interface for clients to asynchronously receive the rotation initialization state of * this rotation initializer. */ interface RotationStateListener { void onRotationStateReceived(@RotationInitializationState int rotationInitializationState); } /** * Listener interface which can be implemented to listen for the initialization status of a * wallpaper rotation. */ interface Listener { void onFirstWallpaperInRotationSet(); void onError(); } }