Skip to content

Commit c002b52

Browse files
committed
Fix suppressLaunchURLs not working
* suppressLaunchURLs Manifest value is boolean, code was trying to parse a String value * Update test to make it fail, then fix parsing issue
1 parent 50ba6a5 commit c002b52

File tree

4 files changed

+47
-10
lines changed

4 files changed

+47
-10
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OSUtils.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -402,13 +402,31 @@ String getCarrierName() {
402402
}
403403
}
404404

405-
static String getManifestMeta(Context context, String metaName) {
405+
static Bundle getManifestMetaBundle(Context context) {
406+
407+
ApplicationInfo ai = null;
406408
try {
407-
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
408-
Bundle bundle = ai.metaData;
409+
ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
410+
} catch (PackageManager.NameNotFoundException e) {
411+
Log(OneSignal.LOG_LEVEL.ERROR, "Manifest application info not found", e);
412+
}
413+
414+
return null;
415+
}
416+
417+
static boolean getManifestMetaBoolean(Context context, String metaName) {
418+
Bundle bundle = getManifestMetaBundle(context);
419+
if (bundle != null) {
420+
return bundle.getBoolean(metaName);
421+
}
422+
423+
return false;
424+
}
425+
426+
static String getManifestMeta(Context context, String metaName) {
427+
Bundle bundle = getManifestMetaBundle(context);
428+
if (bundle != null) {
409429
return bundle.getString(metaName);
410-
} catch (Throwable t) {
411-
Log(OneSignal.LOG_LEVEL.ERROR, "", t);
412430
}
413431

414432
return null;

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2141,7 +2141,7 @@ private static boolean openURLFromNotification(Context context, JSONArray dataAr
21412141
int jsonArraySize = dataArray.length();
21422142

21432143
boolean urlOpened = false;
2144-
boolean launchUrlSuppress = "true".equals(OSUtils.getManifestMeta(context, "com.onesignal.suppressLaunchURLs"));
2144+
boolean launchUrlSuppress = OSUtils.getManifestMetaBoolean(context, "com.onesignal.suppressLaunchURLs");
21452145

21462146
for (int i = 0; i < jsonArraySize; i++) {
21472147
try {

OneSignalSDK/unittest/src/test/java/com/onesignal/OneSignalShadowPackageManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public static void resetStatics() {
4444
public static void addManifestMetaData(String key, Object value) {
4545
if (value instanceof String) {
4646
metaData.putString(key, value.toString());
47+
} else if (value instanceof Boolean) {
48+
metaData.putBoolean(key, (Boolean) value);
4749
} else {
4850
// TODO: We should add any other cases we have for different values here
4951
}

OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,13 +1110,24 @@ public void testDisableOpeningLauncherActivityOnNotificationOpen() throws Except
11101110
@Test
11111111
public void testLaunchUrlSuppressTrue() throws Exception {
11121112
// Add the 'com.onesignal.suppressLaunchURLs' as 'true' meta-data tag
1113-
OneSignalShadowPackageManager.addManifestMetaData("com.onesignal.suppressLaunchURLs", "true");
1113+
// First init run for appId to be saved
1114+
// At least OneSignal was init once for user to be subscribed
1115+
// If this doesn't' happen, notifications will not arrive
1116+
OneSignalInit();
1117+
fastColdRestartApp();
1118+
1119+
// Add the 'com.onesignal.suppressLaunchURLs' as 'true' meta-data tag
1120+
OneSignalShadowPackageManager.addManifestMetaData("com.onesignal.suppressLaunchURLs", true);
11141121

11151122
// Removes app launch
11161123
shadowOf(blankActivity).getNextStartedActivity();
11171124

1118-
// No OneSignal init here to test case where it is located in an Activity.
1125+
// Init with context since this is call before calling OneSignal_handleNotificationOpen internally
1126+
OneSignal.initWithContext(blankActivity);
1127+
11191128
OneSignal_handleNotificationOpen(blankActivity, new JSONArray("[{ \"alert\": \"Test Msg\", \"custom\": { \"i\": \"UUID\", \"u\": \"http://google.com\" } }]"), false, ONESIGNAL_NOTIFICATION_ID);
1129+
threadAndTaskWait();
1130+
11201131
assertNull(shadowOf(blankActivity).getNextStartedActivity());
11211132
}
11221133

@@ -1128,13 +1139,19 @@ public void testLaunchUrlSuppressFalse() throws Exception {
11281139
// If this doesn't' happen, notifications will not arrive
11291140
OneSignalInit();
11301141
fastColdRestartApp();
1131-
OneSignalShadowPackageManager.addManifestMetaData("com.onesignal.suppressLaunchURLs", "false");
1142+
1143+
OneSignalShadowPackageManager.addManifestMetaData("com.onesignal.suppressLaunchURLs", false);
11321144
OneSignal.initWithContext(blankActivity);
1145+
11331146
// Removes app launch
11341147
shadowOf(blankActivity).getNextStartedActivity();
11351148

1136-
// No OneSignal init here to test case where it is located in an Activity.
1149+
// Init with context since this is call before calling OneSignal_handleNotificationOpen internally
1150+
OneSignal.initWithContext(blankActivity);
1151+
11371152
OneSignal_handleNotificationOpen(blankActivity, new JSONArray("[{ \"alert\": \"Test Msg\", \"custom\": { \"i\": \"UUID\", \"u\": \"http://google.com\" } }]"), false, ONESIGNAL_NOTIFICATION_ID);
1153+
threadAndTaskWait();
1154+
11381155
Intent intent = shadowOf(blankActivity).getNextStartedActivity();
11391156
assertEquals("android.intent.action.VIEW", intent.getAction());
11401157
assertEquals("http://google.com", intent.getData().toString());

0 commit comments

Comments
 (0)