package com.ryg.dynamicload.internal;
import java.lang.reflect.Constructor;
import com.ryg.dynamicload.DLServicePlugin;
import com.ryg.utils.DLConfigs;
import com.ryg.utils.DLConstants;
import android.annotation.TargetApi;
import android.app.Service;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
public class DLServiceProxyImpl {
private static final String TAG = "DLServiceProxyImpl";
private Service mProxyService;
private DLServicePlugin mRemoteService;
public DLServiceProxyImpl(Service service) {
mProxyService = service;
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void init(Intent intent) {
// set the extra's class loader
intent.setExtrasClassLoader(DLConfigs.sPluginClassloader);
String packageName = intent.getStringExtra(DLConstants.EXTRA_PACKAGE);
String clazz = intent.getStringExtra(DLConstants.EXTRA_CLASS);
Log.d(TAG, "clazz=" + clazz + " packageName=" + packageName);
DLPluginManager pluginManager = DLPluginManager.getInstance(mProxyService);
DLPluginPackage pluginPackage = pluginManager.getPackage(packageName);
try {
Class<?> localClass = pluginPackage.classLoader.loadClass(clazz);
Constructor<?> localConstructor = localClass.getConstructor(new Class[] {});
Object instance = localConstructor.newInstance(new Object[] {});
mRemoteService = (DLServicePlugin) instance;
((DLServiceAttachable) mProxyService).attach(mRemoteService, pluginManager);
Log.d(TAG, "instance = " + instance);
// attach the proxy activity and plugin package to the
// mPluginActivity
mRemoteService.attach(mProxyService, pluginPackage);
Bundle bundle = new Bundle();
bundle.putInt(DLConstants.FROM, DLConstants.FROM_EXTERNAL);
mRemoteService.onCreate();
} catch (Exception e) {
e.printStackTrace();
}
}
}