Skip to content

Commit

Permalink
Changed handling of initialSysNotification. Launch of app by notifica…
Browse files Browse the repository at this point in the history
…tion no longer causes duplicate activity and duplicate notification.
  • Loading branch information
lukefanning committed Mar 13, 2016
1 parent 83cc214 commit 6839d8f
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,10 @@ public void onReceive(Context context, Intent intent) {
launchIntent.putExtra("initialSysNotificationId", extras.getInt(NOTIFICATION_ID));
launchIntent.putExtra("initialSysNotificationAction", extras.getString(ACTION));
launchIntent.putExtra("initialSysNotificationPayload", extras.getString(PAYLOAD));
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

context.startActivity(launchIntent);
Log.i("ReactSystemNotification", "NotificationEventReceiver: Launching: " + packageName);

sendBroadcast(context, extras); // Send a broadcast after come from background to foreground
} else {
sendBroadcast(context, extras); // If the application is already running in foreground, send a brodcast too
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,24 +240,34 @@ private void sendEvent(
Log.i("ReactSystemNotification", "NotificationModule: sendEvent (to JS): " + eventName);
}

@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
@ReactMethod
public void getInitialSysNotification(Callback cb) {

if (mActivity == null) return constants;
if (mActivity == null) {
return;
}

Intent intent = mActivity.getIntent();
Bundle extras = intent.getExtras();

if (extras != null) {
Integer initialSysNotificationID = extras.getInt("initialSysNotificationId");
if (initialSysNotificationID != null) {
constants.put("initialSysNotificationID", initialSysNotificationID);
constants.put("initialSysNotificationAction", extras.getString("initialSysNotificationAction"));
constants.put("initialSysNotificationPayload", extras.getString("initialSysNotificationPayload"));
Integer initialSysNotificationId = extras.getInt("initialSysNotificationId");
if (initialSysNotificationId != null) {
cb.invoke(initialSysNotificationId, extras.getString("initialSysNotificationAction"), extras.getString("initialSysNotificationPayload"));
return;
}
}

return constants;
}

@ReactMethod
public void removeInitialSysNotification() {
if (mActivity == null) {
return;
}

mActivity.getIntent().removeExtra("initialSysNotificationId");
mActivity.getIntent().removeExtra("initialSysNotificationAction");
mActivity.getIntent().removeExtra("initialSysNotificationPayload");
}

private NotificationAttributes getNotificationAttributesFromReadableMap(
Expand Down
21 changes: 14 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,21 @@ var Notification = {
case 'click':
DeviceEventEmitter.addListener('sysNotificationClick', listener);

if (this.module.initialSysNotificationPayload) {
var event = {
action: this.module.initialSysNotificationAction,
payload: JSON.parse(this.module.initialSysNotificationPayload)
NotificationModule.getInitialSysNotification(function(initialSysNotificationId,
initialSysNotificationAction,
initialSysNotificationPayload) {
if (initialSysNotificationId) {
var event = {
action: initialSysNotificationAction,
payload: JSON.parse(initialSysNotificationPayload)
}

listener(event);

NotificationModule.removeInitialSysNotification();
}

listener(event);
}
});

break;
}
},
Expand Down

0 comments on commit 6839d8f

Please sign in to comment.