Files
mattermost-mobile/patches/react-native-notifications+4.3.3.patch
2022-11-14 18:15:03 +02:00

557 lines
29 KiB
Diff

diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
index 24cd226..4bfacba 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wix.reactnativenotifications">
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
<application>
<!--
@@ -23,6 +24,9 @@
android:name=".fcm.FcmInstanceIdRefreshHandlerService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
+ <receiver android:name=".core.notification.PushNotificationPublisher"
+ android:enabled="true"
+ android:exported="false" />
</application>
</manifest>
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
index 90969b2..3420045 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
@@ -63,7 +63,7 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
@Override
public void onNewIntent(Intent intent) {
if (NotificationIntentAdapter.canHandleIntent(intent)) {
- Bundle notificationData = intent.getExtras();
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
final IPushNotification notification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationData);
if (notification != null) {
notification.onOpened();
@@ -102,7 +102,12 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
if(BuildConfig.DEBUG) Log.d(LOGTAG, "Native method invocation: postLocalNotification");
final Bundle notificationProps = Arguments.toBundle(notificationPropsMap);
final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps);
- pushNotification.onPostRequest(notificationId);
+ double date = notificationProps.getDouble("fireDate", 0);
+ if (date == 0) {
+ pushNotification.onPostRequest(notificationId);
+ } else {
+ pushNotification.onScheduleRequest(notificationId);
+ }
}
@ReactMethod
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
index a249c6a..1c9ec28 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
@@ -15,6 +15,7 @@ import com.wix.reactnativenotifications.core.AppLifecycleFacade;
import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
+import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade;
import com.wix.reactnativenotifications.core.notification.IPushNotification;
import com.wix.reactnativenotifications.core.notification.PushNotification;
import com.wix.reactnativenotifications.core.notificationdrawer.IPushNotificationsDrawer;
@@ -66,7 +67,11 @@ public class RNNotificationsPackage implements ReactPackage, AppLifecycleFacade.
@Override
public void onActivityStarted(Activity activity) {
- if (InitialNotificationHolder.getInstance().get() == null) {
+ boolean isInitialized = false;
+ if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) {
+ isInitialized = AppLifecycleFacadeHolder.get().isReactInitialized();
+ }
+ if (!isInitialized && InitialNotificationHolder.getInstance().get() == null) {
callOnOpenedIfNeed(activity);
}
}
@@ -95,8 +100,7 @@ public class RNNotificationsPackage implements ReactPackage, AppLifecycleFacade.
Intent intent = activity.getIntent();
if (NotificationIntentAdapter.canHandleIntent(intent)) {
Context appContext = mApplication.getApplicationContext();
- Bundle notificationData = NotificationIntentAdapter.canHandleTrampolineActivity(appContext) ?
- intent.getExtras() : NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
final IPushNotification pushNotification = PushNotification.get(appContext, notificationData);
if (pushNotification != null) {
pushNotification.onOpened();
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
index 70f609a..4484808 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
@@ -14,17 +14,9 @@ public class NotificationIntentAdapter {
@SuppressLint("UnspecifiedImmutableFlag")
public static PendingIntent createPendingNotificationIntent(Context appContext, PushNotificationProps notification) {
- if (canHandleTrampolineActivity(appContext)) {
- Intent intent = new Intent(appContext, ProxyService.class);
- intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
- return PendingIntent.getService(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
- } else {
- Intent mainActivityIntent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
- mainActivityIntent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
- TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(appContext);
- taskStackBuilder.addNextIntentWithParentStack(mainActivityIntent);
- return taskStackBuilder.getPendingIntent((int) System.currentTimeMillis(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
- }
+ Intent intent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
+ intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
+ return PendingIntent.getActivity(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
}
public static boolean canHandleTrampolineActivity(Context appContext) {
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java
new file mode 100644
index 0000000..3b8818e
--- /dev/null
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java
@@ -0,0 +1,91 @@
+package com.wix.reactnativenotifications.core.helpers;
+
+import android.app.AlarmManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.content.Context;
+import android.content.Intent;
+import android.app.PendingIntent;
+import android.content.SharedPreferences;
+import android.util.Log;
+
+import com.wix.reactnativenotifications.core.notification.PushNotificationProps;
+import com.wix.reactnativenotifications.core.notification.PushNotificationPublisher;
+
+import static com.wix.reactnativenotifications.Defs.LOGTAG;
+
+public class ScheduleNotificationHelper {
+ public static ScheduleNotificationHelper sInstance;
+ public static final String PREFERENCES_KEY = "rn_push_notification";
+ static final String NOTIFICATION_ID = "notificationId";
+
+ private final SharedPreferences scheduledNotificationsPersistence;
+ protected final Context mContext;
+
+ private ScheduleNotificationHelper(Context context) {
+ this.mContext = context;
+ this.scheduledNotificationsPersistence = context.getSharedPreferences(ScheduleNotificationHelper.PREFERENCES_KEY, Context.MODE_PRIVATE);
+ }
+
+ public static ScheduleNotificationHelper getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new ScheduleNotificationHelper(context);
+ }
+ return sInstance;
+ }
+
+ public PendingIntent createPendingNotificationIntent(Integer notificationId, Bundle bundle) {
+ Intent notificationIntent = new Intent(mContext, PushNotificationPublisher.class);
+ notificationIntent.putExtra(ScheduleNotificationHelper.NOTIFICATION_ID, notificationId);
+ notificationIntent.putExtras(bundle);
+ return PendingIntent.getBroadcast(mContext, notificationId, notificationIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ public void schedulePendingNotificationIntent(PendingIntent intent, long fireDate) {
+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ alarmManager.set(AlarmManager.RTC_WAKEUP, fireDate, intent);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, fireDate, intent);
+ } else {
+ alarmManager.set(AlarmManager.RTC_WAKEUP, fireDate, intent);
+ }
+ }
+
+ public void cancelScheduledNotificationIntent(PendingIntent intent) {
+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+ alarmManager.cancel(intent);
+ }
+
+ public boolean savePreferences(String notificationId, PushNotificationProps notificationProps) {
+ SharedPreferences.Editor editor = scheduledNotificationsPersistence.edit();
+ editor.putString(notificationId, notificationProps.toString());
+ commit(editor);
+
+ return scheduledNotificationsPersistence.contains(notificationId);
+ }
+
+ public void removePreference(String notificationId) {
+ if (scheduledNotificationsPersistence.contains(notificationId)) {
+ // remove it from local storage
+ SharedPreferences.Editor editor = scheduledNotificationsPersistence.edit();
+ editor.remove(notificationId);
+ commit(editor);
+ } else {
+ Log.w(LOGTAG, "Unable to find notification " + notificationId);
+ }
+ }
+
+ public java.util.Set<String> getPreferencesKeys() {
+ return scheduledNotificationsPersistence.getAll().keySet();
+ }
+
+ private static void commit(SharedPreferences.Editor editor) {
+ if (Build.VERSION.SDK_INT < 9) {
+ editor.commit();
+ } else {
+ editor.apply();
+ }
+ }
+}
\ No newline at end of file
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java
index 0d70024..47b962e 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/IPushNotification.java
@@ -26,5 +26,20 @@ public interface IPushNotification {
*/
int onPostRequest(Integer notificationId);
+ /**
+ * Handle a request to schedule this notification.
+ *
+ * @param notificationId The specific ID to associated with the notification.
+ */
+ void onScheduleRequest(Integer notificationId);
+
+ /**
+ * Handle a request to post this scheduled notification.
+ *
+ * @param notificationId The specific ID to associated with the notification.
+ * @return The ID assigned to the notification.
+ */
+ int onPostScheduledRequest(Integer notificationId);
+
PushNotificationProps asProps();
}
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
index eade08d..91d42ee 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
@@ -8,6 +8,10 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
+import android.util.Log;
+
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
import com.facebook.react.bridge.ReactContext;
import com.wix.reactnativenotifications.core.AppLaunchHelper;
@@ -17,7 +21,9 @@ import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
import com.wix.reactnativenotifications.core.JsIOHelper;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
+import com.wix.reactnativenotifications.core.helpers.ScheduleNotificationHelper;
+import static com.wix.reactnativenotifications.Defs.LOGTAG;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_OPENED_EVENT_NAME;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_BACKGROUND_EVENT_NAME;
@@ -28,7 +34,7 @@ public class PushNotification implements IPushNotification {
final protected AppLifecycleFacade mAppLifecycleFacade;
final protected AppLaunchHelper mAppLaunchHelper;
final protected JsIOHelper mJsIOHelper;
- final protected PushNotificationProps mNotificationProps;
+ protected PushNotificationProps mNotificationProps;
final protected AppVisibilityListener mAppVisibilityListener = new AppVisibilityListener() {
@Override
public void onAppVisible() {
@@ -61,7 +67,7 @@ public class PushNotification implements IPushNotification {
}
@Override
- public void onReceived() throws InvalidNotificationException {
+ public void onReceived() {
if (!mAppLifecycleFacade.isAppVisible()) {
postNotification(null);
notifyReceivedBackgroundToJS();
@@ -70,6 +76,42 @@ public class PushNotification implements IPushNotification {
}
}
+ @Override
+ public void onScheduleRequest(Integer notificationId) {
+ Bundle bundle = mNotificationProps.asBundle();
+
+ if (bundle.getString("body") == null) {
+ Log.e(LOGTAG, "No message specified for the scheduled notification");
+ return;
+ }
+
+ double date = bundle.getDouble("fireDate", 0);
+ if (date == 0) {
+ Log.e(LOGTAG, "No date specified for the scheduled notification");
+ return;
+ }
+
+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext);
+ String notificationIdStr = Integer.toString(notificationId);
+ boolean isSaved = helper.savePreferences(notificationIdStr, mNotificationProps);
+ if (!isSaved) {
+ Log.e(LOGTAG, "Failed to save preference for notificationId " + notificationIdStr);
+ }
+
+ PendingIntent pendingIntent = helper.createPendingNotificationIntent(notificationId, bundle);
+ long fireDate = (long) date;
+ helper.schedulePendingNotificationIntent(pendingIntent, fireDate);
+ }
+
+ @Override
+ public int onPostScheduledRequest(Integer notificationId) {
+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext);
+ helper.removePreference(String.valueOf(notificationId));
+
+ return postNotification(notificationId);
+ }
+
+
@Override
public void onOpened() {
digestNotification();
@@ -140,21 +182,22 @@ public class PushNotification implements IPushNotification {
}
protected Notification buildNotification(PendingIntent intent) {
- return getNotificationBuilder(intent).build();
+ NotificationCompat.Builder builder = getNotificationBuilder(intent);
+ return builder.build();
}
- protected Notification.Builder getNotificationBuilder(PendingIntent intent) {
- final Notification.Builder notification = new Notification.Builder(mContext)
+ protected NotificationCompat.Builder getNotificationBuilder(PendingIntent intent) {
+ final NotificationCompat.Builder notification = new NotificationCompat.Builder(mContext, DEFAULT_CHANNEL_ID)
.setContentTitle(mNotificationProps.getTitle())
.setContentText(mNotificationProps.getBody())
.setContentIntent(intent)
- .setDefaults(Notification.DEFAULT_ALL)
+ .setDefaults(NotificationCompat.DEFAULT_ALL)
.setAutoCancel(true);
setUpIcon(notification);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mContext);
String channelId = mNotificationProps.getChannelId();
NotificationChannel channel = notificationManager.getNotificationChannel(channelId);
notification.setChannelId(channel != null ? channelId : DEFAULT_CHANNEL_ID);
@@ -163,7 +206,7 @@ public class PushNotification implements IPushNotification {
return notification;
}
- private void setUpIcon(Notification.Builder notification) {
+ private void setUpIcon(NotificationCompat.Builder notification) {
int iconResId = getAppResourceId("notification_icon", "drawable");
if (iconResId != 0) {
notification.setSmallIcon(iconResId);
@@ -174,7 +217,7 @@ public class PushNotification implements IPushNotification {
setUpIconColor(notification);
}
- private void setUpIconColor(Notification.Builder notification) {
+ private void setUpIconColor(NotificationCompat.Builder notification) {
int colorResID = getAppResourceId("colorAccent", "color");
if (colorResID != 0) {
int color = mContext.getResources().getColor(colorResID);
@@ -189,7 +232,7 @@ public class PushNotification implements IPushNotification {
}
protected void postNotification(int id, Notification notification) {
- final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mContext);
notificationManager.notify(id, notification);
}
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
new file mode 100644
index 0000000..5b64593
--- /dev/null
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
@@ -0,0 +1,27 @@
+package com.wix.reactnativenotifications.core.notification;
+
+import android.app.Application;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import static com.wix.reactnativenotifications.Defs.LOGTAG;
+
+public class PushNotificationPublisher extends BroadcastReceiver {
+ final static String NOTIFICATION_ID = "notificationId";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.d(LOGTAG, "Received scheduled notification intent");
+ int notificationId = intent.getIntExtra(NOTIFICATION_ID, 0);
+ long currentTime = System.currentTimeMillis();
+
+ Application applicationContext = (Application) context.getApplicationContext();
+ final IPushNotification pushNotification = PushNotification.get(applicationContext, intent.getExtras());
+
+ Log.i(LOGTAG, "PushNotificationPublisher: Prepare To Publish: " + notificationId + ", Now Time: " + currentTime);
+
+ pushNotification.onPostScheduledRequest(notificationId);
+ }
+}
\ No newline at end of file
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
index a14089f..89590e3 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
@@ -2,9 +2,15 @@ package com.wix.reactnativenotifications.core.notificationdrawer;
import android.app.Activity;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
import com.wix.reactnativenotifications.core.AppLaunchHelper;
+import com.wix.reactnativenotifications.core.helpers.ScheduleNotificationHelper;
+
+import static com.wix.reactnativenotifications.Defs.LOGTAG;
public class PushNotificationsDrawer implements IPushNotificationsDrawer {
@@ -49,17 +55,50 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer {
public void onNotificationClearRequest(int id) {
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(id);
+ cancelScheduledNotification(String.valueOf(id));
}
@Override
public void onNotificationClearRequest(String tag, int id) {
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(tag, id);
+ cancelScheduledNotification(String.valueOf(id));
}
@Override
public void onAllNotificationsClearRequest() {
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
+ cancelAllScheduledNotifications();
}
+
+ protected void cancelAllScheduledNotifications() {
+ Log.i(LOGTAG, "Cancelling all scheduled notifications");
+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext);
+
+ for (String notificationId : helper.getPreferencesKeys()) {
+ cancelScheduledNotification(notificationId);
+ }
+ }
+
+ protected void cancelScheduledNotification(String notificationId) {
+ Log.i(LOGTAG, "Cancelling scheduled notification: " + notificationId);
+
+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext);
+ if (!helper.getPreferencesKeys().contains(notificationId)) {
+ return;
+ }
+
+ // Remove it from the alarm manger schedule
+ Bundle bundle = new Bundle();
+ bundle.putString("id", notificationId);
+ PendingIntent pendingIntent = helper.createPendingNotificationIntent(Integer.parseInt(notificationId), bundle);
+ helper.cancelScheduledNotificationIntent(pendingIntent);
+
+ helper.removePreference(notificationId);
+
+ // Remove it from the notification center
+ final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.cancel(Integer.parseInt(notificationId));
+ }
}
diff --git a/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts b/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts
index 7b2b3b1..3a2f872 100644
--- a/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts
+++ b/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts
@@ -1,4 +1,5 @@
export declare class Notification {
+ fireDate?: number | string;
identifier: string;
payload: any;
constructor(payload: object);
diff --git a/node_modules/react-native-notifications/lib/dist/DTO/Notification.js b/node_modules/react-native-notifications/lib/dist/DTO/Notification.js
index 54874f4..a6c55ce 100644
--- a/node_modules/react-native-notifications/lib/dist/DTO/Notification.js
+++ b/node_modules/react-native-notifications/lib/dist/DTO/Notification.js
@@ -7,6 +7,7 @@ class Notification {
constructor(payload) {
this.payload = payload;
this.identifier = this.payload.identifier;
+ this.fireDate = undefined;
}
get title() {
return this.payload.title;
diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
index afd5c73..6036dda 100644
--- a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
@@ -87,7 +87,7 @@
for (UNNotification *notification in notifications) {
[formattedNotifications addObject:[RCTConvert UNNotificationPayload:notification]];
}
- callback(@[formattedNotifications]);
+ callback(formattedNotifications);
}];
}
diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
index 5c8dd0b..1c7e575 100644
--- a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
@@ -6,11 +6,13 @@
@implementation RNNotificationEventHandler {
RNNotificationsStore* _store;
+ NSDate* wakeTime;
}
- (instancetype)initWithStore:(RNNotificationsStore *)store {
self = [super init];
_store = store;
+ wakeTime = [[NSDate alloc] init];
return self;
}
@@ -31,6 +33,15 @@
- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response completionHandler:(void (^)(void))completionHandler {
[_store setActionCompletionHandler:completionHandler withCompletionKey:response.notification.request.identifier];
[RNEventEmitter sendEvent:RNNotificationOpened body:[RNNotificationParser parseNotificationResponse:response]];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ NSDate* now = [[NSDate alloc] init];
+ double interval = [now timeIntervalSinceDate:self->wakeTime];
+ BOOL background = [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground;
+ NSDictionary* userInfo = response.notification.request.content.userInfo;
+ if (interval < 1.0 && !background) {
+ [self->_store setInitialNotification:userInfo];
+ }
+ });
}
- (void)didReceiveBackgroundNotification:(NSDictionary *)userInfo withCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
@@ -38,7 +49,7 @@
NSString *uuid = [[NSUUID UUID] UUIDString];
__block BOOL completionHandlerCalled = NO;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
- [_store setBackgroundActionCompletionHandler:^(UIBackgroundFetchResult result) {
+ [self->_store setBackgroundActionCompletionHandler:^(UIBackgroundFetchResult result) {
dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(result);
});