package org.bbs.felix.activity.bundlemanager; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import org.bbs.felix.FelixWrapper; import org.bbs.felixonandroid.R; import org.osgi.framework.BundleException; import org.osgi.framework.launch.Framework; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class BundleListActivity extends FragmentActivity { private static final String TAG = BundleListActivity.class.getSimpleName(); private static final int REAUEST_CODE_PICK_JAR = Activity.RESULT_FIRST_USER + 1; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.activity_bundle_list); } public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_bundle_list, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.action_install) { // Intent intent = new Intent(Intent.ACTION_PICK); Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // intent.setDataAndType(data, type); intent.setType("*/*"); startActivityForResult(intent, REAUEST_CODE_PICK_JAR); } return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult. requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data); if (data == null) { return; } Uri uri = data.getData(); if (null == uri) { return; } String path = uri.toString(); if (!TextUtils.isEmpty(path)) { try { if (path.startsWith("file:///")) { path = path.substring("file://".length()); } Log.d(TAG, "path: " + path); FelixWrapper.getInstance(null).getFramework().getBundleContext().installBundle(path, new FileInputStream(new File(path))); updateUI(); } catch (BundleException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } super.onActivityResult(requestCode, resultCode, data); } private void updateUI() { } public static class BundleList { private static BundleList sInstance; private org.osgi.framework.Bundle[] mBundles; public static BundleList getInstance(){ if (sInstance == null){ sInstance = new BundleList(); } sInstance.syncWithOsgi(); return sInstance; } private BundleList(){ } public org.osgi.framework.Bundle[] getBundles(){ return mBundles; } private void syncWithOsgi() { Framework f = FelixWrapper.getInstance(null).getFramework(); mBundles = f.getBundleContext().getBundles(); } } }