Skip to content

Commit d2019d9

Browse files
committed
Refactor when ids are saved
1 parent 2a83b20 commit d2019d9

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

com.unity.mobile.notifications/Runtime/Android/Plugins/com/unity/androidnotifications/UnityNotificationBackgroundThread.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
public class UnityNotificationBackgroundThread extends Thread {
1414
private static abstract class Task {
15-
public abstract void run(Context context, Set<String> notificationIds);
15+
// returns true if notificationIds was modified (needs to be saved)
16+
public abstract boolean run(Context context, Set<String> notificationIds);
1617
}
1718

1819
private static class ScheduleNotificationTask extends Task {
@@ -25,14 +26,13 @@ public ScheduleNotificationTask(int id, Notification.Builder builder) {
2526
}
2627

2728
@Override
28-
public void run(Context context, Set<String> notificationIds) {
29+
public boolean run(Context context, Set<String> notificationIds) {
2930
String id = String.valueOf(notificationId);
3031
// are we replacing existing alarm or have capacity to schedule new one
3132
if (!(notificationIds.contains(id) || UnityNotificationManager.canScheduleMoreAlarms(notificationIds)))
32-
return;
33-
notificationIds.add(id);
34-
UnityNotificationManager.saveScheduledNotificationIDs(context, notificationIds);
33+
return false;
3534
UnityNotificationManager.mUnityNotificationManager.performNotificationScheduling(notificationId, notificationBuilder);
35+
return notificationIds.add(id);
3636
}
3737
}
3838

@@ -44,23 +44,25 @@ public CancelNotificationTask(int id) {
4444
}
4545

4646
@Override
47-
public void run(Context context, Set<String> notificationIds) {
47+
public boolean run(Context context, Set<String> notificationIds) {
4848
UnityNotificationManager.cancelPendingNotificationIntent(context, notificationId);
4949
String id = String.valueOf(notificationId);
5050
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
5151
notificationIds.remove(id);
52+
return true;
5253
}
5354
}
5455

5556
private static class CancelAllNotificationsTask extends Task {
5657
@Override
57-
public void run(Context context, Set<String> notificationIds) {
58+
public boolean run(Context context, Set<String> notificationIds) {
5859
for (String id : notificationIds) {
5960
UnityNotificationManager.cancelPendingNotificationIntent(context, Integer.valueOf(id));
6061
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
6162
}
6263

6364
notificationIds.clear();
65+
return true;
6466
}
6567
}
6668

@@ -72,8 +74,9 @@ public HousekeepingTask(UnityNotificationBackgroundThread th) {
7274
}
7375

7476
@Override
75-
public void run(Context context, Set<String> notificationIds) {
77+
public boolean run(Context context, Set<String> notificationIds) {
7678
thread.performHousekeeping(context, notificationIds);
79+
return false;
7780
}
7881
}
7982

@@ -105,26 +108,30 @@ private void enqueueHousekeeping() {
105108
public void run() {
106109
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
107110
HashSet<String> notificationIds = new HashSet(UnityNotificationManager.getScheduledNotificationIDs(context));
111+
boolean haveChanges = false;
108112
while (true) {
109113
try {
110114
Task task = mTasks.take();
111-
executeTask(context, task, notificationIds);
115+
haveChanges |= executeTask(context, task, notificationIds);
112116
if (!(task instanceof HousekeepingTask))
113117
++mTasksSinceHousekeeping;
114-
if (mTasks.size() == 0)
118+
if (mTasks.size() == 0 && haveChanges) {
119+
haveChanges = false;
115120
enqueueHousekeeping();
121+
}
116122
} catch (InterruptedException e) {
117123
if (mTasks.isEmpty())
118124
break;
119125
}
120126
}
121127
}
122128

123-
private void executeTask(Context context, Task task, Set<String> notificationIds) {
129+
private boolean executeTask(Context context, Task task, Set<String> notificationIds) {
124130
try {
125-
task.run(context, notificationIds);
131+
return task.run(context, notificationIds);
126132
} catch (Exception e) {
127133
Log.e(TAG_UNITY, "Exception executing notification task", e);
134+
return false;
128135
}
129136
}
130137

@@ -134,5 +141,6 @@ private void performHousekeeping(Context context, Set<String> notificationIds) {
134141
mTasksSinceHousekeeping = 0;
135142
if (performHousekeeping)
136143
UnityNotificationManager.performNotificationHousekeeping(context, notificationIds);
144+
UnityNotificationManager.saveScheduledNotificationIDs(context, notificationIds);
137145
}
138146
}

com.unity.mobile.notifications/Runtime/Android/Plugins/com/unity/androidnotifications/UnityNotificationManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,6 @@ protected static void performNotificationHousekeeping(Context context, Set<Strin
380380
currentIds.remove(id);
381381
removeScheduledNotification(Integer.valueOf(id));
382382
}
383-
saveScheduledNotificationIDs(context, currentIds);
384383
}
385384

386385
// in case we have saved intents, clear them

0 commit comments

Comments
 (0)