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(); Window window = new Window();
int requested_orientation = -1 /*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/; // dummy int requested_orientation = -1 /*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/; // dummy
private Intent intent; 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 * Helper function to be called from native code to construct main activity
@@ -124,6 +129,10 @@ public class Activity extends Context {
protected void onResume() { protected void onResume() {
System.out.println("- onResume - yay!"); System.out.println("- onResume - yay!");
if (pendingData != null) {
onActivityResult(pendingRequestCode, pendingResultCode, pendingData);
pendingData = null;
}
return; return;
} }
@@ -235,6 +244,8 @@ public class Activity extends Context {
Activity activity = constructor.newInstance(); Activity activity = constructor.newInstance();
activity.intent = intent; activity.intent = intent;
activity.getWindow().native_window = getWindow().native_window; activity.getWindow().native_window = getWindow().native_window;
activity.resultRequestCode = requestCode;
activity.resultActivity = this;
nativeStartActivity(activity); nativeStartActivity(activity);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { } 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 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) { public void startActivity(Intent intent) {
System.out.println("startActivity(" + intent + ") called"); System.out.println("startActivity(" + intent + ") called");
try { try {

View File

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