Activity: make startActivityForResult() functional

This commit is contained in:
Julian Winkler
2023-08-22 13:23:34 +02:00
parent 3399c84e84
commit 9bd5593657
2 changed files with 48 additions and 25 deletions

View File

@@ -31,6 +31,11 @@ public class Activity extends Context {
Window window = new Window();
int requested_orientation = -1 /*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/; // dummy
private Intent intent;
private Activity resultActivity;
private int resultRequestCode;
private int pendingRequestCode;
private int pendingResultCode;
private Intent pendingData;
/**
* Helper function to be called from native code to construct main activity
@@ -124,6 +129,10 @@ public class Activity extends Context {
protected void onResume() {
System.out.println("- onResume - yay!");
if (pendingData != null) {
onActivityResult(pendingRequestCode, pendingResultCode, pendingData);
pendingData = null;
}
return;
}
@@ -235,6 +244,8 @@ public class Activity extends Context {
Activity activity = constructor.newInstance();
activity.intent = intent;
activity.getWindow().native_window = getWindow().native_window;
activity.resultRequestCode = requestCode;
activity.resultActivity = this;
nativeStartActivity(activity);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
onActivityResult(requestCode, 0 /*RESULT_CANCELED*/, new Intent()); // RESULT_CANCELED is the only pre-defined return value, so hopefully it works out for us
@@ -245,6 +256,14 @@ public class Activity extends Context {
}
}
public void setResult(int resultCode, Intent data) {
if (resultActivity != null) {
resultActivity.pendingRequestCode = resultRequestCode;
resultActivity.pendingResultCode = resultCode;
resultActivity.pendingData = data;
}
}
public void startActivity(Intent intent) {
System.out.println("startActivity(" + intent + ") called");
try {

View File

@@ -9,7 +9,7 @@ import java.util.Map;
public class Intent {
private ComponentName component;
private Map<String, Object> extras = new HashMap<>();
private Bundle extras = new Bundle();
public Intent() {}
public Intent(Intent o) {}
@@ -32,122 +32,122 @@ public class Intent {
}
public Intent putExtra(String name, Parcelable value) {
extras.put(name, value);
extras.putParcelable(name, value);
return this;
}
public Intent putExtra(String name, long[] value) {
extras.put(name, value);
extras.putLongArray(name, value);
return this;
}
public Intent putExtra(String name, byte value) {
extras.put(name, value);
extras.putByte(name, value);
return this;
}
public Intent putExtra(String name, double[] value) {
extras.put(name, value);
extras.putDoubleArray(name, value);
return this;
}
public Intent putExtra(String name, CharSequence value) {
extras.put(name, value);
extras.putCharSequence(name, value);
return this;
}
public Intent putExtra(String name, boolean[] value) {
extras.put(name, value);
extras.putBooleanArray(name, value);
return this;
}
public Intent putExtra(String name, int value) {
extras.put(name, value);
extras.putInt(name, value);
return this;
}
public Intent putExtra(String name, char[] value) {
extras.put(name, value);
extras.putCharArray(name, value);
return this;
}
public Intent putExtra(String name, byte[] value) {
extras.put(name, value);
extras.putByteArray(name, value);
return this;
}
public Intent putExtra(String name, Parcelable[] value) {
extras.put(name, value);
extras.putParcelableArray(name, value);
return this;
}
public Intent putExtra(String name, Bundle value) {
extras.put(name, value);
extras.putBundle(name, value);
return this;
}
public Intent putExtra(String name, CharSequence[] value) {
extras.put(name, value);
extras.putCharSequenceArray(name, value);
return this;
}
public Intent putExtra(String name, float[] value) {
extras.put(name, value);
extras.putFloatArray(name, value);
return this;
}
public Intent putExtra(String name, double value) {
extras.put(name, value);
extras.putDouble(name, value);
return this;
}
public Intent putExtra(String name, int[] value) {
extras.put(name, value);
extras.putIntArray(name, value);
return this;
}
public Intent putExtra(String name, String[] value) {
extras.put(name, value);
extras.putStringArray(name, value);
return this;
}
public Intent putExtra(String name, short[] value) {
extras.put(name, value);
extras.putShortArray(name, value);
return this;
}
public Intent putExtra(String name, boolean value) {
extras.put(name, value);
extras.putBoolean(name, value);
return this;
}
public Intent putExtra(String name, String value) {
extras.put(name, value);
extras.putString(name, value);
return this;
}
public Intent putExtra(String name, long value) {
extras.put(name, value);
extras.putLong(name, value);
return this;
}
public Intent putExtra(String name, char value) {
extras.put(name, value);
extras.putChar(name, value);
return this;
}
public Intent putExtra(String name, Serializable value) {
extras.put(name, value);
extras.putSerializable(name, value);
return this;
}
public Intent putExtra(String name, float value) {
extras.put(name, value);
extras.putFloat(name, value);
return this;
}
public Intent putExtra(String name, short value) {
extras.put(name, value);
extras.putShort(name, value);
return this;
}
@@ -193,6 +193,10 @@ public class Intent {
return (Serializable)extras.get(name);
}
public Bundle getExtras() {
return extras;
}
@Override
public String toString() {
return "Intent [component=" + component + ", extras=" + extras + "]";