package com.fruit.launcher.theme;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.util.Log;
public final class ShareResourceLoader {
private static final String TAG = "ShareResourceLoader";
public static final int INVALID_INT = -999999;
public static enum BoolVal {
BTRUE, BFALSE, BINVALID
}
private Context mContext;
private Resources mResources;
private String mResPkgName;
// private static ShareResourceLoader sInstance;
public ShareResourceLoader(Context context, String packageName)
throws NameNotFoundException {
this.mContext = context.createPackageContext(packageName,
Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
if (mContext != null) {
this.mResources = mContext.getResources();
this.mResPkgName = packageName;
} else {
Log.w(TAG, "ShareResourceLoader create fail! packageName="
+ packageName);
}
}
// public static ShareResourceLoader getInstance(Context context, String
// packageName) {
// if (sInstance == null) {
// try {
// sInstance = new ShareResourceLoader(context, packageName);
// } catch (NameNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// return sInstance;
// }
public String getResourcePkgName() {
return mResPkgName;
}
public final String loadString(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "string", mResPkgName);
if (resId > 0) {
return res.getString(resId);
} else {
Log.w(TAG, "loadString fail! resName=" + resName);
}
}
return null;
}
public final Drawable loadDrawable(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "drawable", mResPkgName);
if (resId > 0) {
return mResources.getDrawable(resId);
} else {
Log.w(TAG, "loadDrawable fail! resName=" + resName);
}
}
return null;
}
public final Bitmap loadBitmap(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
Bitmap bitmap = null;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "drawable", mResPkgName);
if (resId > 0) {
BitmapFactory.Options option = new BitmapFactory.Options();
option.inDither = false;
option.inPreferredConfig = Bitmap.Config.ARGB_8888;
//option.inSampleSize = 4;
try {
bitmap = BitmapFactory.decodeResource(res, resId, option);
} catch (OutOfMemoryError e) {
e.printStackTrace();
bitmap = null;
Log.w(TAG, "loadDrawable fail! OutOfMemoryError");
}
} else {
Log.w(TAG, "loadDrawable fail! resName=" + resName);
}
}
return bitmap;
}
public final String[] loadStringArray(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
String[] array = null;
if (res != null && pkgName != null) {
int listId = res.getIdentifier(resName, "array", pkgName);
if (listId > 0) {
array = res.getStringArray(listId);
} else {
Log.w(TAG, "loadStringArray fail! resName=" + resName);
}
}
return array;
}
public final int loadColor(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "color", mResPkgName);
if (resId > 0) {
return res.getColor(resId);
} else {
Log.w(TAG, "loadColor fail! resName=" + resName);
}
}
return INVALID_INT;
}
public final XmlResourceParser loadXml(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "xml", mResPkgName);
if (resId > 0) {
return mResources.getXml(resId);
} else {
Log.w(TAG, "loadXml fail! resName=" + resName);
}
}
return null;
}
public final int loadAttrID(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "attr", mResPkgName);
if (resId > 0) {
return resId;
} else {
Log.w(TAG, "loadAttrID fail! resName=" + resName);
}
}
return INVALID_INT;
}
public final int[] loadAttrIDArray(String[] attrsName) {
int length = attrsName.length;
int[] value = new int[length];
for (int i = 0; i < length; i++) {
value[i] = loadAttrID(attrsName[i]);
}
return value;
}
public final int loadIntegerConfig(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "integer", pkgName);
if (resId > 0) {
return res.getInteger(resId);
} else {
Log.w(TAG, "loadIntegerConfig fail! resName=" + resName);
}
}
return INVALID_INT;
}
public final String loadStringConfig(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "string", pkgName);
if (resId > 0) {
return res.getString(resId);
} else {
Log.w(TAG, "loadStringConfig fail! resName=" + resName);
}
}
return null;
}
public final BoolVal loadBoolConfig(String name) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(name, "bool", pkgName);
if (resId > 0) {
boolean value = res.getBoolean(resId);
if (value) {
return BoolVal.BTRUE;
} else {
return BoolVal.BFALSE;
}
} else {
Log.w(TAG, "loadBoolConfig fail! name=" + name);
}
}
return BoolVal.BINVALID;
}
public final int loadDimensPixel(String resName) {
final Resources res = mResources;
final String pkgName = mResPkgName;
if (res != null && pkgName != null) {
int resId = res.getIdentifier(resName, "dimen", pkgName);
if (resId > 0) {
return res.getDimensionPixelSize(resId);
} else {
Log.w(TAG, "loadDimensPixel fail! resName=" + resName);
}
}
return INVALID_INT;
}
}