diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index a75f7b58..aaf09b06 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -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 { diff --git a/src/api-impl/android/content/Intent.java b/src/api-impl/android/content/Intent.java index 1ed3067b..6e1f02ff 100644 --- a/src/api-impl/android/content/Intent.java +++ b/src/api-impl/android/content/Intent.java @@ -9,7 +9,7 @@ import java.util.Map; public class Intent { private ComponentName component; - private Map 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 + "]";