33
33
import android .content .ContentValues ;
34
34
import android .content .Context ;
35
35
import android .content .Intent ;
36
- import android .content .pm .PackageManager ;
37
36
import android .content .res .Resources ;
38
37
import android .database .Cursor ;
39
38
import android .graphics .Bitmap ;
@@ -78,11 +77,11 @@ class GenerateNotification {
78
77
// notification Intent.
79
78
public static final String BUNDLE_KEY_ONESIGNAL_DATA = "onesignalData" ;
80
79
80
+ private static Class <?> notificationOpenedClass = NotificationOpenedReceiver .class ;
81
+ private static Class <?> notificationDismissedClass = NotificationDismissReceiver .class ;
82
+ private static Resources contextResources = null ;
81
83
private static Context currentContext = null ;
82
84
private static String packageName = null ;
83
- private static Resources contextResources = null ;
84
- private static Class <?> notificationOpenedClass ;
85
- private static boolean openerIsBroadcast ;
86
85
87
86
private static class OneSignalNotificationBuilder {
88
87
NotificationCompat .Builder compatBuilder ;
@@ -93,16 +92,6 @@ private static void setStatics(Context inContext) {
93
92
currentContext = inContext ;
94
93
packageName = currentContext .getPackageName ();
95
94
contextResources = currentContext .getResources ();
96
-
97
- PackageManager packageManager = currentContext .getPackageManager ();
98
- Intent intent = new Intent (currentContext , NotificationOpenedReceiver .class );
99
- intent .setPackage (currentContext .getPackageName ());
100
- if (packageManager .queryBroadcastReceivers (intent , 0 ).size () > 0 ) {
101
- openerIsBroadcast = true ;
102
- notificationOpenedClass = NotificationOpenedReceiver .class ;
103
- }
104
- else
105
- notificationOpenedClass = NotificationOpenedActivity .class ;
106
95
}
107
96
108
97
@ WorkerThread
@@ -132,29 +121,29 @@ private static CharSequence getTitle(JSONObject fcmJson) {
132
121
return currentContext .getPackageManager ().getApplicationLabel (currentContext .getApplicationInfo ());
133
122
}
134
123
124
+
125
+ /**
126
+ * Notification delete is processed by Broadcast Receiver to avoid creation of activities that can end
127
+ * on weird UI interaction
128
+ */
135
129
private static PendingIntent getNewActionPendingIntent (int requestCode , Intent intent ) {
136
- if (openerIsBroadcast )
137
- return PendingIntent .getBroadcast (currentContext , requestCode , intent , PendingIntent .FLAG_UPDATE_CURRENT );
138
130
return PendingIntent .getActivity (currentContext , requestCode , intent , PendingIntent .FLAG_UPDATE_CURRENT );
139
131
}
140
132
141
- private static Intent getNewBaseIntent (int notificationId ) {
142
- Intent intent = new Intent (currentContext , notificationOpenedClass )
143
- .putExtra (BUNDLE_KEY_ANDROID_NOTIFICATION_ID , notificationId );
144
-
145
- if (openerIsBroadcast )
146
- return intent ;
147
- return intent .addFlags (Intent .FLAG_ACTIVITY_SINGLE_TOP | Intent .FLAG_ACTIVITY_CLEAR_TOP );
133
+ private static PendingIntent getNewDismissActionPendingIntent (int requestCode , Intent intent ) {
134
+ return PendingIntent .getBroadcast (currentContext , requestCode , intent , PendingIntent .FLAG_UPDATE_CURRENT );
148
135
}
149
136
150
- private static Intent getNewBaseDeleteIntent (int notificationId ) {
151
- Intent intent = new Intent (currentContext , notificationOpenedClass )
152
- .putExtra (BUNDLE_KEY_ANDROID_NOTIFICATION_ID , notificationId )
153
- .putExtra ("dismissed" , true );
137
+ private static Intent getNewBaseIntent (int notificationId ) {
138
+ return new Intent (currentContext , notificationOpenedClass )
139
+ .putExtra (BUNDLE_KEY_ANDROID_NOTIFICATION_ID , notificationId )
140
+ .addFlags (Intent .FLAG_ACTIVITY_SINGLE_TOP | Intent .FLAG_ACTIVITY_CLEAR_TOP );
141
+ }
154
142
155
- if (openerIsBroadcast )
156
- return intent ;
157
- return intent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK | Intent .FLAG_ACTIVITY_MULTIPLE_TASK | Intent .FLAG_ACTIVITY_NO_ANIMATION );
143
+ private static Intent getNewBaseDismissIntent (int notificationId ) {
144
+ return new Intent (currentContext , notificationDismissedClass )
145
+ .putExtra (BUNDLE_KEY_ANDROID_NOTIFICATION_ID , notificationId )
146
+ .putExtra ("dismissed" , true );
158
147
}
159
148
160
149
private static OneSignalNotificationBuilder getBaseOneSignalNotificationBuilder (OSNotificationGenerationJob notificationJob ) {
@@ -324,10 +313,9 @@ private static void showNotification(OSNotificationGenerationJob notificationJob
324
313
createGrouplessSummaryNotification (notificationJob , grouplessNotifs .size () + 1 );
325
314
else
326
315
createSummaryNotification (notificationJob , oneSignalNotificationBuilder );
327
- }
328
- else
316
+ } else {
329
317
notification = createGenericPendingIntentsForNotif (notifBuilder , fcmJson , notificationId );
330
-
318
+ }
331
319
// NotificationManagerCompat does not auto omit the individual notification on the device when using
332
320
// stacked notifications on Android 4.2 and older
333
321
// The benefits of calling notify for individual notifications in-addition to the summary above it is shows
@@ -344,7 +332,7 @@ private static Notification createGenericPendingIntentsForNotif(NotificationComp
344
332
Random random = new SecureRandom ();
345
333
PendingIntent contentIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseIntent (notificationId ).putExtra (BUNDLE_KEY_ONESIGNAL_DATA , gcmBundle .toString ()));
346
334
notifBuilder .setContentIntent (contentIntent );
347
- PendingIntent deleteIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseDeleteIntent (notificationId ));
335
+ PendingIntent deleteIntent = getNewDismissActionPendingIntent (random .nextInt (), getNewBaseDismissIntent (notificationId ));
348
336
notifBuilder .setDeleteIntent (deleteIntent );
349
337
return notifBuilder .build ();
350
338
}
@@ -353,14 +341,13 @@ private static void createGenericPendingIntentsForGroup(NotificationCompat.Build
353
341
Random random = new SecureRandom ();
354
342
PendingIntent contentIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseIntent (notificationId ).putExtra (BUNDLE_KEY_ONESIGNAL_DATA , gcmBundle .toString ()).putExtra ("grp" , group ));
355
343
notifBuilder .setContentIntent (contentIntent );
356
- PendingIntent deleteIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseDeleteIntent (notificationId ).putExtra ("grp" , group ));
344
+ PendingIntent deleteIntent = getNewDismissActionPendingIntent (random .nextInt (), getNewBaseDismissIntent (notificationId ).putExtra ("grp" , group ));
357
345
notifBuilder .setDeleteIntent (deleteIntent );
358
346
notifBuilder .setGroup (group );
359
347
360
348
try {
361
349
notifBuilder .setGroupAlertBehavior (NotificationCompat .GROUP_ALERT_SUMMARY );
362
- }
363
- catch (Throwable t ) {
350
+ } catch (Throwable t ) {
364
351
//do nothing in this case...Android support lib 26 isn't in the project
365
352
}
366
353
}
@@ -457,7 +444,7 @@ private static void createSummaryNotification(OSNotificationGenerationJob notifi
457
444
String group = fcmJson .optString ("grp" , null );
458
445
459
446
SecureRandom random = new SecureRandom ();
460
- PendingIntent summaryDeleteIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseDeleteIntent (0 ).putExtra ("summary" , group ));
447
+ PendingIntent summaryDeleteIntent = getNewDismissActionPendingIntent (random .nextInt (), getNewBaseDismissIntent (0 ).putExtra ("summary" , group ));
461
448
462
449
Notification summaryNotification ;
463
450
Integer summaryNotificationId = null ;
@@ -660,7 +647,7 @@ private static void createGrouplessSummaryNotification(OSNotificationGenerationJ
660
647
int summaryNotificationId = OneSignalNotificationManager .getGrouplessSummaryId ();
661
648
662
649
PendingIntent summaryContentIntent = getNewActionPendingIntent (random .nextInt (), createBaseSummaryIntent (summaryNotificationId , fcmJson , group ));
663
- PendingIntent summaryDeleteIntent = getNewActionPendingIntent (random .nextInt (), getNewBaseDeleteIntent (0 ).putExtra ("summary" , group ));
650
+ PendingIntent summaryDeleteIntent = getNewDismissActionPendingIntent (random .nextInt (), getNewBaseDismissIntent (0 ).putExtra ("summary" , group ));
664
651
665
652
NotificationCompat .Builder summaryBuilder = getBaseOneSignalNotificationBuilder (notificationJob ).compatBuilder ;
666
653
if (notificationJob .getOverriddenSound () != null )
0 commit comments