blob: 538d4f8c359dc6a98c76d5941c4be20249501333 [file] [log] [blame]
package com.android.customization.model;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.ColorInt;
public abstract class ResourcesApkProvider {
private static final String TAG = "ResourcesApkProvider";
protected final Context mContext;
protected final String mStubPackageName;
protected final Resources mStubApkResources;
public ResourcesApkProvider(Context context, String stubPackageName) {
mContext = context;
mStubPackageName = stubPackageName;
if (TextUtils.isEmpty(mStubPackageName)) {
mStubApkResources = null;
} else {
Resources apkResources = null;
try {
PackageManager pm = mContext.getPackageManager();
ApplicationInfo stubAppInfo = pm.getApplicationInfo(mStubPackageName,
PackageManager.GET_META_DATA | PackageManager.MATCH_SYSTEM_ONLY);
if (stubAppInfo != null) {
apkResources = pm.getResourcesForApplication(stubAppInfo);
}
} catch (NameNotFoundException e) {
Log.w(TAG, String.format("Stub APK for %s not found.", mStubPackageName));
} finally {
mStubApkResources = apkResources;
}
}
}
protected String[] getItemsFromStub(String arrayName) {
int themesListResId = mStubApkResources.getIdentifier(arrayName, "array", mStubPackageName);
return mStubApkResources.getStringArray(themesListResId);
}
protected String getItemStringFromStub(String prefix, String itemName) {
int resourceId = mStubApkResources.getIdentifier(String.format("%s%s", prefix, itemName),
"string", mStubPackageName);
return mStubApkResources.getString(resourceId);
}
protected Drawable getItemDrawableFromStub(String prefix, String itemName) {
int resourceId = mStubApkResources.getIdentifier(String.format("%s%s", prefix, itemName),
"drawable", mStubPackageName);
return mStubApkResources.getDrawable(resourceId, null);
}
@ColorInt
protected int getItemColorFromStub(String prefix, String itemName) {
int resourceId = mStubApkResources.getIdentifier(String.format("%s%s", prefix, itemName),
"color", mStubPackageName);
return mStubApkResources.getColor(resourceId, null);
}
public boolean isAvailable() {
return mStubApkResources != null;
}
}