package com.tencent.tws.pluginhost.plugindebug;
import java.util.HashMap;
import java.util.Iterator;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Space;
import android.widget.TextView;
import android.widget.Toast;
import com.tencent.tws.pluginhost.R;
import com.tencent.tws.sharelib.SharePOJO;
import com.tws.plugin.content.PluginDescriptor;
import com.tws.plugin.core.PluginLauncher;
import com.tws.plugin.core.annotation.PluginContainer;
import com.tws.plugin.manager.PluginManagerHelper;
public class PluginDetailActivity extends Activity {
private ViewGroup mRoot;
private boolean mIsHostDependPlugin = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_plugin_detail);
setTitle("插件详情");
mRoot = (ViewGroup) findViewById(R.id.root);
String pluginId = getIntent().getStringExtra("plugin_id");
if (pluginId == null) {
Toast.makeText(this, "缺少plugin_id参数", Toast.LENGTH_SHORT).show();
return;
}
final PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
if (pluginDescriptor != null) {
initViews(pluginDescriptor);
}
if (pluginDescriptor != null && !PluginLauncher.instance().isRunning(pluginDescriptor.getPackageName())) {
new Thread(new Runnable() {
@Override
public void run() {
PluginLauncher.instance().startPlugin(pluginDescriptor);
}
}).start();
}
}
@Override
protected void onResume() {
super.onResume();
}
private void initViews(PluginDescriptor pluginDescriptor) {
TextView pluginIdView = (TextView) mRoot.findViewById(R.id.plugin_id);
String packageName = pluginDescriptor.getPackageName();
if (packageName.equalsIgnoreCase("com.pacewear.tws.phoneside.plugin.login")
|| packageName.equalsIgnoreCase("com.pacewear.tws.phoneside.plugin.pair")) {
mIsHostDependPlugin = true;
}
pluginIdView.setText("插件Id:" + packageName);
TextView pluginVerView = (TextView) mRoot.findViewById(R.id.plugin_version);
pluginVerView.setText("插件Version:" + pluginDescriptor.getVersion());
TextView pluginDescipt = (TextView) mRoot.findViewById(R.id.plugin_description);
pluginDescipt.setText("插件Description:" + pluginDescriptor.getDescription());
TextView pluginInstalled = (TextView) mRoot.findViewById(R.id.plugin_installedPath);
pluginInstalled.setText("插件安装路径:" + pluginDescriptor.getInstalledPath());
TextView pluginStandalone = (TextView) mRoot.findViewById(R.id.isstandalone);
pluginStandalone.setText("独立插件:" + (pluginDescriptor.isStandalone() ? "是" : "否"));
LinearLayout pluginView = (LinearLayout) mRoot.findViewById(R.id.plugin_items);
addButton(pluginView, pluginDescriptor.isStandalone(), pluginDescriptor.getFragments(), "Fragment",
pluginDescriptor.getPackageName());
addButton(pluginView, pluginDescriptor.isStandalone(), pluginDescriptor.getActivitys(), "Activity");
addButton(pluginView, pluginDescriptor.isStandalone(), pluginDescriptor.getServices(), "Service");
addButton(pluginView, pluginDescriptor.isStandalone(), pluginDescriptor.getReceivers(), "Receiver");
}
private void addButton(LinearLayout pluginView, final boolean isStandalone, HashMap<String, ?> map,
final String type) {
addButton(pluginView, isStandalone, map, type, null);
}
private void addButton(LinearLayout pluginView, final boolean isStandalone, HashMap<String, ?> map,
final String type, final String packageName) {
Iterator<String> keys = map.keySet().iterator();
while (keys.hasNext()) {
final String className = keys.next();
TextView tv = new TextView(this);
// 这个判断仅仅是为了方便debug,在实际开发中,类型一定是已知的
tv.append("插件类型:" + type);
pluginView.addView(tv);
tv = new TextView(this);
tv.append("插件ClassName : " + className);
pluginView.addView(tv);
if (!mIsHostDependPlugin) {
Button btn = new Button(this);
btn.setText("点击打开");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 这个判断仅仅是为了方便debug,在实际开发中,类型一定是已知的
if (type.equals("Service")) {
Intent intent = new Intent();
intent.setClassName(PluginDetailActivity.this, className);
intent.putExtra("testParam", "testParam");
if (!isStandalone) {
intent.putExtra("paramVO", new SharePOJO("测试VO"));
}
startService(intent);
// stopService(intent);
} else if (type.equals("Receiver")) {// 这个判断仅仅是为了方便debug,在实际开发中,类型一定是已知的
Intent intent = new Intent();
intent.setClassName(PluginDetailActivity.this, className);
intent.putExtra("testParam", "testParam");
if (!isStandalone) {
intent.putExtra("paramVO", new SharePOJO("测试VO"));
}
sendBroadcast(intent);
} else if (type.equals("Activity")) {// 这个判断仅仅是为了方便debug,在实际开发中,类型一定是已知的
Intent intent = new Intent();
intent.setClassName(PluginDetailActivity.this, className);
intent.putExtra("testParam", "testParam");
if (!isStandalone) {
intent.putExtra("paramVO", new SharePOJO("测试VO"));
}
startActivity(intent);
} else if (type.equals("Fragment")) {
// 插件中的Fragment分两类
// 第一类是在插件提供的Activity中展示,就是一个普通的Fragment
// 第二类是在宿主提供的Activity中展示,分为普通Fragment和特别处理过的fragment
Intent pluginActivity = new Intent();
pluginActivity.setClass(PluginDetailActivity.this, PluginTwsFragmentActivity.class);
pluginActivity.putExtra(PluginFragmentActivity.FRAGMENT_ID_IN_PLUGIN, className);
pluginActivity.putExtra(PluginContainer.FRAGMENT_PLUGIN_ID, packageName);
pluginActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(pluginActivity);
}
}
});
pluginView.addView(btn);
}
if (Build.VERSION.SDK_INT >= 14) {
Space space = new Space(this);
space.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 25));
pluginView.addView(space);
}
}
}
}