package com.example.mainapp; import java.io.File; import java.util.ArrayList; import android.app.Activity; import android.app.ApkFile; import android.app.CopyPluginListener; import android.app.InstallPluginListener; import android.app.PluginInfo; import android.app.PluginManager; import android.app.ProgressDialog; import android.app.ScanPluginListener; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity implements ScanPluginListener, OnItemClickListener, InstallPluginListener, CopyPluginListener{ private ProgressDialog mDialog; private ListView mListView; private PluginsAdapter mAdapter; private ArrayList<ApkFile> apks = new ArrayList<ApkFile>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.list); mListView.setOnItemClickListener(this); mDialog = new ProgressDialog(this); mDialog.setMessage("scanning"); File dir = getFilesDir(); dir = new File(dir, "koala"); PluginManager.getInstance().init(this, getDir("dexout", Context.MODE_PRIVATE).getAbsolutePath(), dir.getAbsolutePath()); ApkFile apk = new ApkFile(); apk.apkName = "CppEmptyTest.apk"; apk.name = "cocos2dx"; apk.nativeLibs.add("libcpp_empty_test.so"); apk.version = 1.0f; apks.add(apk); apk = new ApkFile(); apk.apkName = "PluginApp.apk"; apk.name = "simpledemo"; apk.nativeLibs.add("libhello-jni.so"); apk.version = 1.0f; apks.add(apk); PluginManager.getInstance().copyApksFromAsset(apks, getAssets(), this); } @Override public void onScanEnd(ArrayList<PluginInfo> arg0) { mAdapter = new PluginsAdapter(this, arg0); mListView.setAdapter(mAdapter); } @Override public void onScanStart() { } @Override public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { PluginManager.getInstance().startPlugin((PluginInfo) mAdapter.getItem(pos)); } static class PluginsAdapter extends BaseAdapter { private Activity mContext; private ArrayList<PluginInfo> mDatas = new ArrayList<PluginInfo>(); private LayoutInflater mInflater; public PluginsAdapter(Activity context, ArrayList<PluginInfo> datas) { if (datas == null) { return; } this.mContext = context; this.mDatas = datas; mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int arg0) { return mDatas.get(arg0); } @Override public long getItemId(int arg0) { return arg0; } @Override public View getView(int pos, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.plugin_item, parent, false); } TextView tv = (TextView) convertView.findViewById(R.id.name); final PluginInfo info = mDatas.get(pos); tv.setText(info.applicationName); Button btn = (Button) convertView.findViewById(R.id.status); btn.setFocusable(false); if (info.isInstalled) { btn.setText("uninstall"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { PluginManager.getInstance().uninstallPlugin(mContext, info.packageName); notifyDataSetChanged(); } }); } else { btn.setText("install"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { PluginManager.getInstance().installPlugin(info, (InstallPluginListener) mContext); ; } }); } return convertView; } } @Override public void onInstallEnd(PluginInfo arg0) { mAdapter.notifyDataSetChanged(); PluginManager.getInstance().startPlugin(arg0); } @Override public void onInstallStart(PluginInfo arg0) { } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.add("menu1"); menu.add("menu2"); menu.add("menu3"); return super.onPrepareOptionsMenu(menu); } @Override public void onCopyStart() { } @Override public void onCopyEnd() { PluginManager.getInstance().scanApks(this); } @Override protected void onDestroy() { super.onDestroy(); PluginManager.getInstance().destory(); } }