package org.bbs.osgi.activity.embed;
import org.bbs.osgi.activity.ActivityAgent;
import org.bbs.osgi.activity.BundleActivity;
import org.bbs.osgi.activity.ReflectUtil.ActivityReflectUtil;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
/**
* all method will call through {@link #mTargetActivity}, so, we can
* "embed' an exist activity to {@link BundleActivity}.
* @author luoqii
*
* @see {@link BundleActivity}
*
*/
public abstract class EmbeddedActivityAgent extends ActivityAgent {
static final String TAG = EmbeddedActivityAgent.class.getSimpleName();
protected Activity mTargetActivity;
private Resources mBundleResource;
public abstract Activity getTargetActivity();
// protected void onCreate(Bundle savedInstanceState) {
// mTargetActivity = getTargetActivity();
//
// if (null == mTargetActivity) {
// throw new IllegalStateException("target activity is null");
// }
//
// copyContext(mHostActivity, mTargetActivity, mBundleResource);
//
// ActivityReflectUtil.onCreate(mTargetActivity, savedInstanceState);
//
// }
public static void copyContext(Activity hostActivity, Activity targetActivity, Resources newResource) {
// we become target's base context.
Context baseContext = new ContextWrapper(hostActivity);
baseContext = hostActivity;
ActivityReflectUtil.copyBaseContext(targetActivity, baseContext);
// prepare new activity.
// ActivityUtil.attach(mHostActivity, mTargetActivity);
// ActivityReflectUtil.attachBaseContext(targetActivity, hostActivity.getApplication());
ActivityReflectUtil.copyFields(hostActivity, targetActivity);
// do this before activity.onCreate()
if (null != targetActivity && null != newResource) {
ActivityReflectUtil.copyNewResouce(targetActivity, newResource);
}
}
// protected void onResume() {
// ActivityReflectUtil.onResume(mTargetActivity);
// }
//
// protected void onPause() {
// ActivityReflectUtil.onPause(mTargetActivity);
// }
//
// protected void onDestroy() {
// ActivityReflectUtil.onDestroy(mTargetActivity);
// }
@Override
public void onBundleResourceReady(Resources source) {
mBundleResource = source;
}
public boolean onPreparePanel(int arg0, View arg1, Menu arg2) {
return mTargetActivity.onPreparePanel(arg0, arg1, arg2);
}
public boolean onPrepareOptionsMenu(Menu menu) {
return mTargetActivity.onPrepareOptionsMenu(menu);
}
public boolean onCreateOptionsMenu(Menu menu) {
return mTargetActivity.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return mTargetActivity.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
mTargetActivity.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return mTargetActivity.onContextItemSelected(item);
}
@Override
public void onContextMenuClosed(Menu menu) {
mTargetActivity.onContextMenuClosed(menu);
}
public void onActivityResult(int arg0, int arg1, Intent arg2) {
ActivityReflectUtil.onActivityResult(mTargetActivity, arg0, arg1, arg2);
}
public void onConfigurationChanged(Configuration newConfig) {
mTargetActivity.onConfigurationChanged(newConfig);
}
public void onContentChanged() {
mTargetActivity.onContentChanged();
}
public void onClick(View view) {
ActivityReflectUtil.onClick(mTargetActivity, view);
}
}