blob: 63f93269fca8e3951c16934dfb16ab68de061389 [file] [log] [blame]
Jon Miranda16ea1b12017-12-12 14:52:48 -08001/*
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 */
16package com.android.wallpaper.model;
17
18import android.app.Activity;
19import android.content.Context;
20import android.content.res.Resources;
21import android.os.Parcel;
22import android.util.Log;
23
24import com.android.wallpaper.R;
25import com.android.wallpaper.asset.Asset;
26import com.android.wallpaper.asset.ResourceAsset;
27import com.android.wallpaper.module.InjectorProvider;
28import com.android.wallpaper.module.PartnerProvider;
29
30import java.util.ArrayList;
31import java.util.Arrays;
32import java.util.List;
33
34/**
35 * Represents a wallpaper from the "partner customization" APK installed on the system.
36 */
37public class PartnerWallpaperInfo extends WallpaperInfo {
38 public static final Creator<PartnerWallpaperInfo> CREATOR =
39 new Creator<PartnerWallpaperInfo>() {
40 @Override
41 public PartnerWallpaperInfo createFromParcel(Parcel in) {
42 return new PartnerWallpaperInfo(in);
43 }
44
45 @Override
46 public PartnerWallpaperInfo[] newArray(int size) {
47 return new PartnerWallpaperInfo[size];
48 }
49 };
50 private int mThumbRes;
51 private int mFullRes;
52 private ResourceAsset mAsset;
53 private ResourceAsset mThumbAsset;
54 private Resources mPartnerResources;
55 private boolean mFetchedPartnerResources;
56
57 public PartnerWallpaperInfo(int thumbRes, int fullRes) {
58 mThumbRes = thumbRes;
59 mFullRes = fullRes;
60 }
61
62 private PartnerWallpaperInfo(Parcel in) {
Santiago Etchebeherea5736dc2021-06-14 14:32:32 -070063 super(in);
Jon Miranda16ea1b12017-12-12 14:52:48 -080064 mThumbRes = in.readInt();
65 mFullRes = in.readInt();
66 }
67
68 /**
69 * @param ctx
70 * @return All partner wallpapers found on the device.
71 */
72 public static List<WallpaperInfo> getAll(Context ctx) {
73 PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(ctx);
74
75 List<WallpaperInfo> wallpaperInfos = new ArrayList<>();
76
77 final Resources partnerRes = partnerProvider.getResources();
78 final String packageName = partnerProvider.getPackageName();
79 if (partnerRes == null) {
80 return wallpaperInfos;
81 }
82
83 final int resId = partnerRes.getIdentifier(PartnerProvider.WALLPAPER_RES_ID, "array",
84 packageName);
85 // Certain partner configurations don't have wallpapers provided, so need to check; return
86 // early if they are missing.
87 if (resId == 0) {
88 return wallpaperInfos;
89 }
90
91 final String[] extras = partnerRes.getStringArray(resId);
92 for (String extra : extras) {
93 int wpResId = partnerRes.getIdentifier(extra, "drawable", packageName);
94 if (wpResId != 0) {
95 final int thumbRes = partnerRes.getIdentifier(extra + "_small", "drawable", packageName);
96
97 if (thumbRes != 0) {
98 final int fullRes = partnerRes.getIdentifier(extra, "drawable", packageName);
99 WallpaperInfo wallpaperInfo = new PartnerWallpaperInfo(thumbRes, fullRes);
100 wallpaperInfos.add(wallpaperInfo);
101 }
102 } else {
103 Log.e("PartnerWallpaperInfo", "Couldn't find wallpaper " + extra);
104 }
105 }
106
107 return wallpaperInfos;
108 }
109
110 private Resources getPartnerResources(Context context) {
111 if (!mFetchedPartnerResources) {
112 PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(context);
113 mPartnerResources = partnerProvider.getResources();
114 mFetchedPartnerResources = true;
115 }
116
117 return mPartnerResources;
118 }
119
120 @Override
121 public List<String> getAttributions(Context context) {
122 return Arrays.asList(context.getResources().getString(R.string.on_device_wallpaper_title));
123 }
124
125 @Override
126 public Asset getAsset(Context context) {
127 if (mAsset == null) {
128 Resources partnerRes = getPartnerResources(context);
129 mAsset = new ResourceAsset(partnerRes, mFullRes);
130 }
131 return mAsset;
132 }
133
134 @Override
135 public Asset getThumbAsset(Context context) {
136 if (mThumbAsset == null) {
137 Resources partnerRes = getPartnerResources(context);
138 mThumbAsset = new ResourceAsset(partnerRes, mThumbRes);
139 }
140 return mThumbAsset;
141 }
142
143 @Override
144 public String getCollectionId(Context context) {
145 return context.getString(R.string.on_device_wallpaper_collection_id);
146 }
147
148 @Override
149 public void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory,
150 int requestCode) {
151 srcActivity.startActivityForResult(factory.newIntent(srcActivity, this), requestCode);
152 }
153
154 @Override
155 @BackupPermission
156 public int getBackupPermission() {
157 return BACKUP_NOT_ALLOWED;
158 }
159
160 @Override
161 public void writeToParcel(Parcel parcel, int i) {
Santiago Etchebeherea5736dc2021-06-14 14:32:32 -0700162 super.writeToParcel(parcel, i);
Jon Miranda16ea1b12017-12-12 14:52:48 -0800163 parcel.writeInt(mThumbRes);
164 parcel.writeInt(mFullRes);
165 }
166
167}