package org.bbs.osgi.activity.embed; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import org.bbs.felix.FelixWrapper; import org.bbs.felix.activity.apidemo.ApiDemoBundleActicity; import org.bbs.osgi.activity.BundleActivity; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; /** * all method will call through {@link #mTargetActivity}, so, we can * "embed' an exist activity to {@link BundleActivity}. * @author luoqii * */ public class EmbeddedBundleActivity extends BundleActivity { private static final String TAG = EmbeddedBundleActivity.class.getSimpleName(); private int mThemeResource = android.R.style.Theme_Black; private Theme mTheme; protected PackageManager mPackageManager; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); mPackageManager = getPackageManager(); } @Override public void setTheme(int resid) { super.setTheme(resid); // mThemeResource = resid; } @Override public Theme getTheme() { // return super.getTheme(); boolean first = mTheme == null; if (first) { // mThemeResource = Resources.selectDefaultTheme(mThemeResource, // getApplicationInfo().targetSdkVersion); mTheme = getResources().newTheme(); // TODO how to get an un-installed apk's theme. mTheme.applyStyle(mThemeResource, true); } return mTheme; } @Override public void processIntent(Intent intent) { Log.d(TAG, "processIntent. intent: " + intent); if (!intent.getBooleanExtra(EXTRA_INTENT_HAS_PROCESSED, false)) { ComponentName com = intent.getComponent(); if (null != com) { String c = com.getClassName(); intent.putExtra(EXTRA_EMBEDED_ACTIVITY_CLASS_NAME, c); if (!TextUtils.isEmpty(c)) { intent.setComponent(new ComponentName(getPackageName(), EmbeddedBundleActivity.class.getCanonicalName())); intent.putExtra(EXTRA_INTENT_HAS_PROCESSED, true); intent.putExtra(EXTRA_EMBEDED_BUNDLE_ID, mBundle != null ? mBundle.getBundleId() : -1); } } else { ResolveInfo a = mPackageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); Log.d(TAG, "ResolveInfo a: " + a); // a.activityInfo. } } super.processIntent(intent); } }