feat(android): implement a 'activityNewIntent' event

This commit is contained in:
Eddy Verbruggen
2019-04-03 10:06:14 +02:00
committed by Martin Yankov
parent 2d63c9f276
commit 3efc06ed98
6 changed files with 77 additions and 18 deletions

View File

@@ -135,6 +135,10 @@ if (application.android) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
// Set args.cancel = true to cancel back navigation and do something custom.
});
application.android.on(application.AndroidApplication.activityNewIntentEvent, function (args: application.AndroidActivityNewIntentEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", Intent: " + args.intent);
});
}
var time;

View File

@@ -1,6 +1,6 @@
import {
AndroidActivityBundleEventData, AndroidActivityEventData, ApplicationEventData, OrientationChangedEventData,
AndroidApplication as AndroidApplicationDefinition,
AndroidApplication as AndroidApplicationDefinition, AndroidActivityNewIntentEventData,
AndroidActivityResultEventData, AndroidActivityBackPressedEventData, AndroidActivityRequestPermissionsEventData
} from ".";
@@ -25,6 +25,7 @@ const ActivityStopped = "activityStopped";
const SaveActivityState = "saveActivityState";
const ActivityResult = "activityResult";
const ActivityBackPressed = "activityBackPressed";
const ActivityNewIntent = "activityNewIntent";
const ActivityRequestPermissions = "activityRequestPermissions";
export class AndroidApplication extends Observable implements AndroidApplicationDefinition {
@@ -37,6 +38,7 @@ export class AndroidApplication extends Observable implements AndroidApplication
public static saveActivityStateEvent = SaveActivityState;
public static activityResultEvent = ActivityResult;
public static activityBackPressedEvent = ActivityBackPressed;
public static activityNewIntentEvent = ActivityNewIntent;
public static activityRequestPermissionsEvent = ActivityRequestPermissions;
public paused: boolean;
@@ -119,6 +121,7 @@ export interface AndroidApplication {
on(event: "saveActivityState", callback: (args: AndroidActivityBundleEventData) => void, thisArg?: any);
on(event: "activityResult", callback: (args: AndroidActivityResultEventData) => void, thisArg?: any);
on(event: "activityBackPressed", callback: (args: AndroidActivityBackPressedEventData) => void, thisArg?: any);
on(event: "activityNewIntent", callback: (args: AndroidActivityNewIntentEventData) => void, thisArg?: any);
on(event: "activityRequestPermissions", callback: (args: AndroidActivityRequestPermissionsEventData) => void, thisArg?: any);
}

View File

@@ -371,6 +371,16 @@ export interface AndroidActivityResultEventData extends AndroidActivityEventData
intent: any /* android.content.Intent */;
}
/**
* Data for the Android activity newIntent event.
*/
export interface AndroidActivityNewIntentEventData extends AndroidActivityEventData {
/**
* The intent.
*/
intent: any /* android.content.Intent */;
}
/**
* Data for the Android activity back pressed event.
*/
@@ -480,6 +490,11 @@ export class AndroidApplication extends Observable {
*/
on(event: "activityBackPressed", callback: (args: AndroidActivityBackPressedEventData) => void, thisArg?: any);
/**
* This event is raised when the Android app was launched by an Intent with data.
*/
on(event: "activityNewIntent", callback: (args: AndroidActivityNewIntentEventData) => void, thisArg?: any);
/**
* This event is raised when the Android activity requests permissions.
*/
@@ -530,6 +545,11 @@ export class AndroidApplication extends Observable {
*/
public static activityBackPressedEvent: string;
/**
* String value used when hooking to activityNewIntent event.
*/
public static activityNewIntentEvent: string;
/**
* String value used when hooking to requestPermissions event.
*/

View File

@@ -26,12 +26,11 @@ class NativeScriptActivity extends android.support.v7.app.AppCompatActivity {
setActivityCallbacks(this);
}
this._callbacks.onCreate(this, savedInstanceState, super.onCreate);
this._callbacks.onCreate(this, savedInstanceState, this.getIntent(), super.onCreate);
}
public onNewIntent(intent: android.content.Intent): void {
super.onNewIntent(intent);
super.setIntent(intent);
this._callbacks.onNewIntent(this, intent, super.setIntent, super.onNewIntent);
}
public onSaveInstanceState(outState: android.os.Bundle): void {

View File

@@ -944,11 +944,17 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
}
@profile
public onCreate(activity: android.support.v7.app.AppCompatActivity, savedInstanceState: android.os.Bundle, superFunc: Function): void {
public onCreate(activity: android.support.v7.app.AppCompatActivity, savedInstanceState: android.os.Bundle, intentOrSuperFunc: android.content.Intent | Function, superFunc?: Function): void {
if (traceEnabled()) {
traceWrite(`Activity.onCreate(${savedInstanceState})`, traceCategories.NativeLifecycle);
}
const intent: android.content.Intent = superFunc ? <android.content.Intent>intentOrSuperFunc : undefined;
if (!superFunc) {
superFunc = <Function>intentOrSuperFunc;
}
// If there is savedInstanceState this call will recreate all fragments that were previously in the navigation.
// We take care of associating them with a Page from our backstack in the onAttachFragment callback.
// If there is savedInstanceState and moduleLoaded is false we are restarted but process was killed.
@@ -966,6 +972,15 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
}
}
if (intent && intent.getAction()) {
application.android.notify(<application.AndroidActivityNewIntentEventData>{
eventName: application.AndroidApplication.activityNewIntentEvent,
object: application.android,
activity,
intent
});
}
this.setActivityContent(activity, savedInstanceState, true);
moduleLoaded = true;
}
@@ -982,6 +997,19 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
outState.putInt(ROOT_VIEW_ID_EXTRA, rootView._domId);
}
@profile
public onNewIntent(activity: android.support.v7.app.AppCompatActivity, intent: android.content.Intent, superSetIntentFunc: Function, superFunc: Function): void {
superFunc.call(activity, intent);
superSetIntentFunc.call(activity, intent);
application.android.notify(<application.AndroidActivityNewIntentEventData>{
eventName: application.AndroidApplication.activityNewIntentEvent,
object: application.android,
activity,
intent
});
}
@profile
public onStart(activity: any, superFunc: Function): void {
superFunc.call(activity);

View File

@@ -414,7 +414,11 @@ export interface AndroidActivityCallbacks {
getRootView(): View;
resetActivityContent(activity: any): void;
/**
* @deprecated use onCreate(activity, savedInstanceState, intent, superFunc) instead.
*/
onCreate(activity: any, savedInstanceState: any, superFunc: Function): void;
onCreate(activity: any, savedInstanceState: any, intent: any, superFunc: Function): void;
onSaveInstanceState(activity: any, outState: any, superFunc: Function): void;
onStart(activity: any, superFunc: Function): void;
onStop(activity: any, superFunc: Function): void;
@@ -423,6 +427,7 @@ export interface AndroidActivityCallbacks {
onBackPressed(activity: any, superFunc: Function): void;
onRequestPermissionsResult(activity: any, requestCode: number, permissions: Array<String>, grantResults: Array<number>, superFunc: Function): void;
onActivityResult(activity: any, requestCode: number, resultCode: number, data: any, superFunc: Function);
onNewIntent(activity: any, intent: any, superSetIntentFunc: Function, superFunc: Function): void;
}
export interface AndroidFragmentCallbacks {