package android.app;
import java.lang.reflect.Method;
import javax.swing.JFrame;
import com.applang.SwingUtil.Behavior;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import static com.applang.Util.*;
public class Activity extends Context
{
protected static final String TAG = Activity.class.getSimpleName();
public static ValMap activities = vmap(
"com.applang.action.PROMPT", "com.applang.Dialogs",
"com.applang.action.CONSTRUCT", "com.applang.ConstructDialogs"
);
public static Activity getInstance() {
return new Activity();
}
private Activity mParent = null;
public Activity getParent() {
return mParent;
}
public void startActivity(Intent intent) {
String action = intent.getAction();
if (activities.containsKey(action)) {
try {
Class<?> c = Class.forName(activities.get(action).toString());
Object inst = c.newInstance();
Method method = c.getMethod("setPackageInfo", String.class, Object[].class);
method.invoke(inst, null, objects(this.mPackageInfo));
method = c.getMethod("setIntent", Intent.class);
method.invoke(inst, intent);
setPrivateField(Activity.class, inst, "mParent", this);
setPrivateField(Activity.class, inst, "mRequestCode", mRequestCode);
method = Activity.class.getDeclaredMethod("onCreate", Bundle.class);
method.invoke(inst, _null());
} catch (Exception e) {
Log.e(TAG, "startActivity", e);
}
}
}
public void startActivityForResult (Intent intent, int requestCode) {
mRequestCode = requestCode;
startActivity(intent);
}
private Integer mRequestCode = null;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
private Intent intent = null;
public Intent getIntent() {
return intent;
}
public void setIntent(Intent intent) {
this.intent = intent;
}
protected void onCreate(Bundle savedInstanceState) {
}
protected void onDestroy() {
}
public Dialog dialog = null;
public final void showDialog(int id) {
AlertDialog.behavior = Behavior.setModal(AlertDialog.behavior, id / 100 < 1);
dialog = onCreateDialog(id);
if (dialog != null) {
dialog.open();
if (dialog.isModal()) {
setResult(dialog.result != null ? RESULT_OK : RESULT_CANCELED, intent);
Activity ancestor = getParent();
while (ancestor != null) {
try {
Method method = ancestor.getClass().getDeclaredMethod("onActivityResult",
Integer.TYPE, Integer.TYPE, Intent.class);
if (method != null) {
ancestor.onActivityResult(mRequestCode, mResultCode, mResultData);
break;
}
} catch (Exception e) {
Log.e(TAG, "showDialog", e);
}
ancestor = ancestor.getParent();
}
}
}
}
protected Dialog onCreateDialog(int id) {
return null;
}
protected void onPrepareDialog(int id, android.app.Dialog dialog) {
}
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;
public final void setResult(int resultCode) {
this.mResultCode = resultCode;
this.mResultData = null;
}
public final void setResult(int resultCode, Intent data) {
this.mResultCode = resultCode;
this.mResultData = data;
}
public int mResultCode = RESULT_CANCELED;
public Intent mResultData = null;
public void finish() {
try {
onDestroy();
finalize();
} catch (Throwable e) {
Log.e(TAG, "finish", e);
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// handles KEYCODE_BACK to stop the activity and go back.
return true;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
// handles KEYCODE_BACK to stop the activity and go back.
return true;
}
public static JFrame frame = null;
private ViewGroup viewGroup = new ViewGroup(this);
public void setContentView(View view) {
viewGroup.setId(android.R.id.content);
viewGroup.addView(view, null);
}
public View findViewById(int id) {
return viewGroup.findViewById(id);
}
}