Skip to content

Commit a9dac1b

Browse files
committed
Badges are now cleared when notifications are disabled
1 parent 789c234 commit a9dac1b

File tree

8 files changed

+52
-17
lines changed

8 files changed

+52
-17
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class BadgeCountUpdater {
4141
// Cache for manifest setting.
4242
private static int badgesEnabled = -1;
4343

44-
private static boolean isBadgesEnabled(Context context) {
44+
private static boolean areBadgeSettingsEnabled(Context context) {
4545
if (badgesEnabled != -1)
4646
return (badgesEnabled == 1);
4747

@@ -57,9 +57,13 @@ private static boolean isBadgesEnabled(Context context) {
5757

5858
return (badgesEnabled == 1);
5959
}
60+
61+
private static boolean areBadgesEnabled(Context context) {
62+
return areBadgeSettingsEnabled(context) && OSUtils.areNotificationsEnabled(context);
63+
}
6064

6165
static void update(SQLiteDatabase readableDb, Context context) {
62-
if (!isBadgesEnabled(context))
66+
if (!areBadgesEnabled(context))
6367
return;
6468

6569
Cursor cursor = readableDb.query(
@@ -79,7 +83,7 @@ static void update(SQLiteDatabase readableDb, Context context) {
7983
}
8084

8185
static void updateCount(int count, Context context) {
82-
if (!isBadgesEnabled(context))
86+
if (!areBadgeSettingsEnabled(context))
8387
return;
8488

8589
// Can throw if badges are not support on the device.

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@
2929

3030
class OSPermissionChangedInternalObserver {
3131

32+
// TODO: Make sure this method doesn't get prograuded out.
3233
public void changed(OSPermissionState state) {
33-
handleInternalChanges();
34+
handleInternalChanges(state);
3435
fireChangesToPublicObserver(state);
3536
}
3637

37-
private void handleInternalChanges() {
38+
static void handleInternalChanges(OSPermissionState state) {
39+
if (!state.getEnabled())
40+
BadgeCountUpdater.updateCount(0, OneSignal.appContext);
3841
OneSignalStateSynchronizer.setPermission(OneSignal.areNotificationsEnabledForSubscribedState());
3942
}
4043

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,9 @@ public static void init(Context context, String googleProjectNumber, String oneS
373373

374374
if (TrackGooglePurchase.CanTrack(appContext))
375375
trackGooglePurchase = new TrackGooglePurchase(appContext);
376-
376+
377+
OSPermissionChangedInternalObserver.handleInternalChanges(getCurrentPermissionState(appContext));
378+
377379
initDone = true;
378380
}
379381

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Modified MIT License
33
*
4-
* Copyright 2016 OneSignal
4+
* Copyright 2017 OneSignal
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -40,8 +40,5 @@ public class ShadowBadgeCountUpdater {
4040

4141
public static void updateCount(int count, Context context) {
4242
lastCount = count;
43-
try {
44-
ShortcutBadger.applyCount(context, count);
45-
} catch(Throwable t) {}
4643
}
4744
}

OneSignalSDK/unittest/src/test/java/com/test/onesignal/ShadowNotificationManagerCompat.java renamed to OneSignalSDK/unittest/src/test/java/com/onesignal/ShadowNotificationManagerCompat.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
* THE SOFTWARE.
2626
*/
2727

28-
package com.test.onesignal;
28+
package com.onesignal;
2929

3030
import android.support.v4.app.NotificationManagerCompat;
3131

3232
import org.robolectric.annotation.Implements;
3333

3434
@Implements(NotificationManagerCompat.class)
3535
public class ShadowNotificationManagerCompat {
36-
static boolean enabled = true;
36+
public static boolean enabled = true;
3737

3838
public boolean areNotificationsEnabled() {
3939
return enabled;

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.onesignal.OneSignalDbHelper;
5151
import com.onesignal.OneSignalPackagePrivateHelper;
5252
import com.onesignal.ShadowBadgeCountUpdater;
53+
import com.onesignal.ShadowNotificationManagerCompat;
5354
import com.onesignal.ShadowNotificationRestorer;
5455
import com.onesignal.ShadowOneSignal;
5556
import com.onesignal.ShadowOneSignalRestClient;
@@ -92,7 +93,8 @@
9293
instrumentedPackages = {"com.onesignal"},
9394
shadows = { ShadowRoboNotificationManager.class,
9495
ShadowOneSignalRestClient.class,
95-
ShadowBadgeCountUpdater.class },
96+
ShadowBadgeCountUpdater.class,
97+
ShadowNotificationManagerCompat.class},
9698
sdk = 21)
9799
@RunWith(RobolectricTestRunner.class)
98100
public class GenerateNotificationRunner {
@@ -304,6 +306,17 @@ public void shouldUpdateBadgesWhenDismissingNotification() {
304306
Assert.assertEquals(0, ShadowBadgeCountUpdater.lastCount);
305307
}
306308

309+
@Test
310+
public void shouldNotSetBadgesWhenNotificationPermissionIsDisabled() throws Exception {
311+
ShadowNotificationManagerCompat.enabled = false;
312+
OneSignal.init(blankActivity, "123456789", "b2f7f966-d8cc-11e4-bed1-df8f05be55ba");
313+
threadAndTaskWait();
314+
315+
Bundle bundle = getBaseNotifBundle();
316+
NotificationBundleProcessor_ProcessFromGCMIntentService(blankActivity, bundle, null);
317+
Assert.assertEquals(0, ShadowBadgeCountUpdater.lastCount);
318+
}
319+
307320
@Test
308321
public void shouldUpdateNormalNotificationDisplayWhenReplacingANotification() throws Exception {
309322
// Setup - init

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.onesignal.ShadowGoogleApiClientBuilder;
5858
import com.onesignal.ShadowGoogleApiClientCompatProxy;
5959
import com.onesignal.ShadowFusedLocationApiWrapper;
60+
import com.onesignal.ShadowNotificationManagerCompat;
6061
import com.onesignal.ShadowOSUtils;
6162
import com.onesignal.ShadowOneSignal;
6263
import com.onesignal.ShadowOneSignalRestClient;
@@ -83,7 +84,6 @@
8384
import org.robolectric.shadows.ShadowApplication;
8485
import org.robolectric.shadows.ShadowConnectivityManager;
8586
import org.robolectric.shadows.ShadowLog;
86-
import org.robolectric.shadows.ShadowNotificationManager;
8787
import org.robolectric.shadows.ShadowSystemClock;
8888
import org.robolectric.util.ActivityController;
8989

@@ -94,7 +94,6 @@
9494
import java.util.Iterator;
9595
import java.util.List;
9696
import java.util.Map;
97-
import java.util.Observer;
9897

9998
import static com.onesignal.OneSignalPackagePrivateHelper.GcmBroadcastReceiver_processBundle;
10099
import static com.onesignal.OneSignalPackagePrivateHelper.NotificationBundleProcessor_Process;
@@ -1667,16 +1666,32 @@ public void shouldSetNotificationTypesToZeroWhenUnsubscribeWhenNotificationsAreD
16671666
OneSignal.startInit(blankActivity).unsubscribeWhenNotificationsAreDisabled(true).init();
16681667
OneSignal.init(blankActivity, "123456789", ONESIGNAL_APP_ID);
16691668
threadAndTaskWait();
1670-
1669+
16711670
Assert.assertEquals(0, ShadowOneSignalRestClient.lastPost.getInt("notification_types"));
1672-
1671+
16731672
blankActivityController.pause();
16741673
threadAndTaskWait();
16751674
ShadowNotificationManagerCompat.enabled = true;
16761675
blankActivityController.resume();
16771676
threadAndTaskWait();
16781677
Assert.assertEquals(1, ShadowOneSignalRestClient.lastPost.getInt("notification_types"));
16791678
}
1679+
1680+
@Test
1681+
@Config(shadows = {ShadowBadgeCountUpdater.class})
1682+
public void shouldClearBadgesWhenPermissionIsDisabled() throws Exception {
1683+
OneSignalInit();
1684+
threadAndTaskWait();
1685+
ShadowBadgeCountUpdater.updateCount(1, blankActivity);
1686+
1687+
blankActivityController.pause();
1688+
threadAndTaskWait();
1689+
ShadowNotificationManagerCompat.enabled = false;
1690+
blankActivityController.resume();
1691+
threadAndTaskWait();
1692+
1693+
Assert.assertEquals(0, ShadowBadgeCountUpdater.lastCount);
1694+
}
16801695

16811696
// ####### Unit test helper methods ########
16821697

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.test.onesignal;
22

33
import com.onesignal.OneSignalPackagePrivateHelper;
4+
import com.onesignal.ShadowNotificationManagerCompat;
45
import com.onesignal.ShadowOSUtils;
56
import com.onesignal.ShadowOneSignalRestClient;
67
import com.onesignal.ShadowPushRegistratorGPS;

0 commit comments

Comments
 (0)