1 /*
2  * Copyright (C) 2017 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.Activity;
19 import android.content.Context;
20 import android.graphics.drawable.Drawable;
21 import android.net.Uri;
22 import android.os.Parcelable;
23 
24 import androidx.annotation.DrawableRes;
25 import androidx.annotation.IntDef;
26 import androidx.annotation.StringRes;
27 
28 import com.android.wallpaper.R;
29 import com.android.wallpaper.asset.Asset;
30 
31 import java.util.List;
32 
33 /**
34  * Interface for wallpaper info model.
35  */
36 public abstract class WallpaperInfo implements Parcelable {
37 
38     @DrawableRes
getDefaultActionIcon()39     public static int getDefaultActionIcon() {
40         return R.drawable.ic_explore_24px;
41     }
42 
43     @StringRes
getDefaultActionLabel()44     public static int getDefaultActionLabel() {
45         return R.string.explore;
46     }
47 
48     public static final int BACKUP_NOT_ALLOWED = 0;
49     public static final int BACKUP_ALLOWED = 1;
50 
51     /**
52      * @param context
53      * @return The title for this wallpaper, if applicable (as in a wallpaper "app" or live
54      * wallpaper), or null if not applicable.
55      */
getTitle(Context context)56     public String getTitle(Context context) {
57         return null;
58     }
59 
60     /**
61      * @return The available attributions for this wallpaper, as a list of strings. These represent
62      * the author / website or any other attribution required to be displayed for this wallpaper
63      * regarding authorship, ownership, etc.
64      */
getAttributions(Context context)65     public abstract List<String> getAttributions(Context context);
66 
67     /**
68      * Returns the base (remote) image URL for this wallpaper, or null if none exists.
69      */
getBaseImageUrl()70     public String getBaseImageUrl() {
71         return null;
72     }
73 
74     /**
75      * Returns the action or "explore" URL for the wallpaper, or null if none exists.
76      */
getActionUrl(Context unused)77     public String getActionUrl(Context unused) {
78         return null;
79     }
80 
81     /** Returns the URI corresponding to the wallpaper, or null if none exists. */
getUri()82     public Uri getUri() {
83         return null;
84     }
85 
86     /**
87      * Returns the icon to use to represent the action link corresponding to
88      * {@link #getActionUrl(Context)}
89      */
90     @DrawableRes
getActionIconRes(Context context)91     public int getActionIconRes(Context context) {
92         return getDefaultActionIcon();
93     }
94 
95     /**
96      * Returns the label to use for the action link corresponding to
97      * {@link #getActionUrl(Context)}
98      */
99     @StringRes
getActionLabelRes(Context context)100     public int getActionLabelRes(Context context) {
101         return getDefaultActionLabel();
102     }
103 
104     /**
105      * @param context
106      * @return An overlay icon to be used instead of a thumbnail, if appropriate, or null if not
107      * applicable.
108      */
getOverlayIcon(Context context)109     public Drawable getOverlayIcon(Context context) {
110         return null;
111     }
112 
113     ;
114 
115     @Override
describeContents()116     public int describeContents() {
117         return 0;
118     }
119 
120     /**
121      * @param context The client application's context.
122      * @return The {@link Asset} representing the wallpaper image.
123      */
getAsset(Context context)124     public abstract Asset getAsset(Context context);
125 
126     /**
127      * @param context The client application's context.
128      * @return The {@link Asset} representing the wallpaper's thumbnail.
129      */
getThumbAsset(Context context)130     public abstract Asset getThumbAsset(Context context);
131 
132     /**
133      * @param context The client application's context.
134      * @return An {@link Asset} that is appropriately sized to be directly set to the desktop. By
135      * default, this just the full wallpaper image asset (#getAsset) but subclasses may provide an
136      * Asset sized exactly for the device's primary display (i.e., cropped prior to providing a
137      * bitmap or input stream).
138      */
getDesktopAsset(Context context)139     public Asset getDesktopAsset(Context context) {
140         return getAsset(context);
141     }
142 
143     /**
144      * @return the {@link android.app.WallpaperInfo} associated with this wallpaper, which is
145      * generally present for live wallpapers, or null if there is none.
146      */
getWallpaperComponent()147     public android.app.WallpaperInfo getWallpaperComponent() {
148         return null;
149     }
150 
151     /**
152      * Returns the ID of the collection this image is associated with, if any.
153      */
getCollectionId(Context context)154     public abstract String getCollectionId(Context context);
155 
156     /**
157      * Returns the ID of this wallpaper or null if there is no ID.
158      */
getWallpaperId()159     public String getWallpaperId() {
160         return null;
161     }
162 
163     /**
164      * Returns whether backup is allowed for this wallpaper.
165      */
166     @BackupPermission
getBackupPermission()167     public int getBackupPermission() {
168         return BACKUP_ALLOWED;
169     }
170 
171     /**
172      * Shows the appropriate preview activity for this WallpaperInfo.
173      *
174      * @param srcActivity
175      * @param factory     A factory for showing the inline preview activity for within this app.
176      *                    Only used for certain WallpaperInfo implementations that require an inline preview
177      *                    (as opposed to some external preview activity).
178      * @param requestCode Request code to pass in when starting the inline preview activity.
179      */
showPreview(Activity srcActivity, InlinePreviewIntentFactory factory, int requestCode)180     public abstract void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory,
181                                      int requestCode);
182 
183     /**
184      * Whether backup is allowed for this type of wallpaper.
185      */
186     @IntDef({
187             BACKUP_NOT_ALLOWED,
188             BACKUP_ALLOWED
189     })
190     public @interface BackupPermission {
191     }
192 }
193