/* * 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.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Parcel; import android.util.Log; import com.android.wallpaper.R; import com.android.wallpaper.asset.Asset; import com.android.wallpaper.asset.ResourceAsset; import com.android.wallpaper.module.InjectorProvider; import com.android.wallpaper.module.PartnerProvider; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Represents a wallpaper from the "partner customization" APK installed on the system. */ public class PartnerWallpaperInfo extends DefaultWallpaperInfo { public static final Creator CREATOR = new Creator() { @Override public PartnerWallpaperInfo createFromParcel(Parcel in) { return new PartnerWallpaperInfo(in); } @Override public PartnerWallpaperInfo[] newArray(int size) { return new PartnerWallpaperInfo[size]; } }; private int mThumbRes; private int mFullRes; private ResourceAsset mAsset; private ResourceAsset mThumbAsset; private Resources mPartnerResources; private boolean mFetchedPartnerResources; public PartnerWallpaperInfo(int thumbRes, int fullRes) { mThumbRes = thumbRes; mFullRes = fullRes; } private PartnerWallpaperInfo(Parcel in) { super(in); mThumbRes = in.readInt(); mFullRes = in.readInt(); } /** * @param ctx * @return All partner wallpapers found on the device. */ public static List getAll(Context ctx) { PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(ctx); List wallpaperInfos = new ArrayList<>(); final Resources partnerRes = partnerProvider.getResources(); final String packageName = partnerProvider.getPackageName(); if (partnerRes == null) { return wallpaperInfos; } final int resId = partnerRes.getIdentifier(PartnerProvider.LEGACY_WALLPAPER_RES_ID, "array", packageName); // Certain partner configurations don't have wallpapers provided, so need to check; return // early if they are missing. if (resId == 0) { return wallpaperInfos; } final String[] extras = partnerRes.getStringArray(resId); for (String extra : extras) { int wpResId = partnerRes.getIdentifier(extra, "drawable", packageName); if (wpResId != 0) { final int thumbRes = partnerRes.getIdentifier(extra + "_small", "drawable", packageName); if (thumbRes != 0) { final int fullRes = partnerRes.getIdentifier(extra, "drawable", packageName); WallpaperInfo wallpaperInfo = new PartnerWallpaperInfo(thumbRes, fullRes); wallpaperInfos.add(wallpaperInfo); } } else { Log.e("PartnerWallpaperInfo", "Couldn't find wallpaper " + extra); } } return wallpaperInfos; } private Resources getPartnerResources(Context context) { if (!mFetchedPartnerResources) { PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(context); mPartnerResources = partnerProvider.getResources(); mFetchedPartnerResources = true; } return mPartnerResources; } @Override public List getAttributions(Context context) { return Arrays.asList(context.getResources().getString(R.string.on_device_wallpaper_title)); } @Override public Asset getAsset(Context context) { if (mAsset == null) { Resources partnerRes = getPartnerResources(context); mAsset = new ResourceAsset(partnerRes, mFullRes); } return mAsset; } @Override public Asset getThumbAsset(Context context) { if (mThumbAsset == null) { Resources partnerRes = getPartnerResources(context); mThumbAsset = new ResourceAsset(partnerRes, mThumbRes); } return mThumbAsset; } @Override public String getCollectionId(Context context) { return context.getString(R.string.on_device_wallpaper_collection_id); } @Override public String getWallpaperId() { return "" + mFullRes; } @Override public void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory, int requestCode, boolean isAssetIdPresent) { srcActivity.startActivityForResult(factory.newIntent(srcActivity, this, isAssetIdPresent), requestCode); } @Override @BackupPermission public int getBackupPermission() { return BACKUP_NOT_ALLOWED; } @Override public void writeToParcel(Parcel parcel, int i) { super.writeToParcel(parcel, i); parcel.writeInt(mThumbRes); parcel.writeInt(mFullRes); } }