package android.app;
import java.util.ArrayList;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.res.AssetManager;
/**
* pluginmanager的wrapper,隐藏实现
*
* @author zhaoxuyang
*
*/
public final class PluginManager {
/**
* 插件管理的实例
*/
private static PluginManager mInstance;
/**
* 插件管理的实现
*/
private static PluginManagerImpl mImpl;
/**
* 构造方法
*/
private PluginManager() {
mImpl = PluginManagerImpl.getInstance();
}
/**
* 获取单例
*
* @return 插件管理
*/
public static PluginManager getInstance() {
if (mInstance == null) {
mInstance = new PluginManager();
}
return mInstance;
}
/**
* 初始化
*
* @param context
* 上下文
* @param dop
* 插件dex的存放位置
*/
public void init(ContextWrapper context, String dop, String pluginRootDir) {
mImpl.init(context, dop, pluginRootDir);
}
/**
* 安装插件
*
* @param info
* 插件信息
* @param listener
* 安装回掉
*/
public void installPlugin(PluginInfo info, InstallPluginListener listener) {
mImpl.installPlugin(info, listener);
}
/**
* 扫描某个目录下的插件
*
* @param dir
* 目录
* @param listener
* 扫描回掉
*/
public void scanApks(ScanPluginListener listener) {
mImpl.scanApks(listener);
}
/**
* 启动插件
*
* @param info
* 插件信息
*/
public void startPlugin(PluginInfo info) {
mImpl.startPlugin(info);
}
/**
* 启动插件内的activity,外部调用一般用隐式启动的方式,
* 因为外部获取不到activity的class
* @param intent
*/
public void startPluginActivity(Intent intent) {
mImpl.startPluginActivity(intent);
}
/**
* 启动插件内的service,其他同上
* @param intent
* @return
*/
public ComponentName startPluginService(Intent intent) {
return mImpl.startPluginService(intent);
}
/**
* 停止插件内的service,其他同上
* @param intent
* @return
*/
public boolean stopPluginService(Intent intent) {
return mImpl.stopPluginService(intent);
}
/**
* 卸载插件
*
* @param activity
* 上下文
* @param name
* 插件的名称
*/
public void uninstallPlugin(Activity activity, String name) {
mImpl.uninstallPlugin(activity, name);
}
/**
* 插件内谈toast必须使用该方法
*
* @param context
* 上下文
* @param text
* 文案
* @param duration
* 时间
*/
public void showToast(Context context, String text, int duration) {
mImpl.showToast(context, text, duration);
}
/**
* 插件内谈toast必须使用该方法
*
* @param context
* 上下文
* @param resid
* 文案资源ID
* @param duration
* 时间
*/
public void showToast(Context context, int resid, int duration) {
mImpl.showToast(context, resid, duration);
}
/**
* 销毁
*/
public void destory() {
mImpl.destory();
}
/**
* @param apks
* @param asset
* @param listener
*/
public void copyApksFromAsset(final ArrayList<ApkFile> apks, final AssetManager asset, final CopyPluginListener listener){
mImpl.copyApksFromAsset(apks, asset, listener);
}
}