package org.bbs.apklauncher;
import org.bbs.apkparser.PackageInfoX.ActivityInfoX;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
public class TargetClassLoaderCreator {
private static Factory sFactory;
public static ClassLoader createTargetClassLoader(Context hostBaseContext, Intent intent) {
if (null != sFactory){
ClassLoader c = sFactory.onCreateTargetClassLoader(hostBaseContext, intent);
if (null != c){
return c;
}
}
String targetActivityClassName = intent.getStringExtra(ApkLauncher.EXTRA_TARGET_COMPONENT_CLASS_NAME);
ActivityInfoX actInfo = ApkPackageManager.getInstance()
.getActivityInfo(targetActivityClassName);
return ApkPackageManager.getInstance()
.createClassLoader(hostBaseContext,
actInfo.applicationInfo.publicSourceDir,
actInfo.mPackageInfo.applicationInfo.nativeLibraryDir,
actInfo.packageName);
}
public static Resources createTargetResources(Context hostBaseContext, Intent intent) {
if (null != sFactory){
Resources res = sFactory.onCreateTargetResources(hostBaseContext, intent);
if (null != res){
return res;
}
}
String targetActivityClassName = intent.getStringExtra(ApkLauncher.EXTRA_TARGET_COMPONENT_CLASS_NAME);
ActivityInfoX actInfo = ApkPackageManager.getInstance()
.getActivityInfo(targetActivityClassName);
String apkPath = actInfo.applicationInfo.publicSourceDir;
return ApkPackageManager.getTargetResource(apkPath, hostBaseContext);
}
public static void setFactory(Factory callback) {
sFactory = callback;
}
public static interface Factory {
public ClassLoader onCreateTargetClassLoader(Context hostBaseContext, Intent intent);
public Resources onCreateTargetResources(Context hostBaseContext, Intent intent);
}
}