Skip to content

Commit c6d7a00

Browse files
committed
Main id list and pass it around
1 parent db5a2f9 commit c6d7a00

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

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

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

1313
public class UnityNotificationBackgroundThread extends Thread {
1414
private static abstract class Task {
15-
public abstract void run(Context context);
15+
public abstract void run(Context context, Set<String> notificationIds);
1616
}
1717

1818
private static class ScheduleNotificationTask extends Task {
@@ -25,15 +25,13 @@ public ScheduleNotificationTask(int id, Notification.Builder builder) {
2525
}
2626

2727
@Override
28-
public void run(Context context) {
29-
Set<String> ids = UnityNotificationManager.getScheduledNotificationIDs(context);
28+
public void run(Context context, Set<String> notificationIds) {
3029
String id = String.valueOf(notificationId);
3130
// are we replacing existing alarm or have capacity to schedule new one
32-
if (!(ids.contains(id) || UnityNotificationManager.canScheduleMoreAlarms(ids)))
31+
if (!(notificationIds.contains(id) || UnityNotificationManager.canScheduleMoreAlarms(notificationIds)))
3332
return;
34-
ids = new HashSet<>(ids);
35-
ids.add(id);
36-
UnityNotificationManager.saveScheduledNotificationIDs(context, ids);
33+
notificationIds.add(id);
34+
UnityNotificationManager.saveScheduledNotificationIDs(context, notificationIds);
3735
UnityNotificationManager.mUnityNotificationManager.performNotificationScheduling(notificationId, notificationBuilder);
3836
}
3937
}
@@ -46,20 +44,23 @@ public CancelNotificationTask(int id) {
4644
}
4745

4846
@Override
49-
public void run(Context context) {
47+
public void run(Context context, Set<String> notificationIds) {
5048
UnityNotificationManager.cancelPendingNotificationIntent(context, notificationId);
49+
String id = String.valueOf(notificationId);
50+
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
51+
notificationIds.remove(id);
5152
}
5253
}
5354

5455
private static class CancelAllNotificationsTask extends Task {
5556
@Override
56-
public void run(Context context) {
57-
Set<String> ids = UnityNotificationManager.getScheduledNotificationIDs(context);
58-
59-
for (String id : ids) {
57+
public void run(Context context, Set<String> notificationIds) {
58+
for (String id : notificationIds) {
6059
UnityNotificationManager.cancelPendingNotificationIntent(context, Integer.valueOf(id));
6160
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
6261
}
62+
63+
notificationIds.clear();
6364
}
6465
}
6566

@@ -71,8 +72,8 @@ public HousekeepingTask(UnityNotificationBackgroundThread th) {
7172
}
7273

7374
@Override
74-
public void run(Context context) {
75-
thread.performHousekeeping(context);
75+
public void run(Context context, Set<String> notificationIds) {
76+
thread.performHousekeeping(context, notificationIds);
7677
}
7778
}
7879

@@ -105,24 +106,25 @@ private void enqueueHousekeeping() {
105106
@Override
106107
public void run() {
107108
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
109+
HashSet<String> notificationIds = new HashSet(UnityNotificationManager.getScheduledNotificationIDs(context));
108110
while (true) {
109111
try {
110112
Task task = mTasks.take();
111-
executeTask(context, task);
113+
executeTask(context, task, notificationIds);
112114
} catch (InterruptedException e) {
113115
if (mTasks.isEmpty())
114116
break;
115117
}
116118
}
117119
}
118120

119-
private void executeTask(Context context, Task task) {
121+
private void executeTask(Context context, Task task, Set<String> notificationIds) {
120122
try {
121123
ScheduleNotificationTask scheduleTask = null;
122124
if (task instanceof ScheduleNotificationTask)
123125
scheduleTask = (ScheduleNotificationTask)task;
124126

125-
task.run(context);
127+
task.run(context, notificationIds);
126128

127129
if (scheduleTask != null)
128130
++mSentNotificationsSinceHousekeeping;
@@ -136,14 +138,13 @@ private void executeTask(Context context, Task task) {
136138
}
137139
}
138140

139-
private void performHousekeeping(Context context) {
141+
private void performHousekeeping(Context context, Set<String> notificationIds) {
140142
// don't do housekeeping if last task we did was housekeeping (other=1)
141143
boolean performHousekeeping = mSentNotificationsSinceHousekeeping > 0 && mOtherTasksSinceHousekeeping > 1;
142144
mSentNotificationsSinceHousekeeping = 0;
143145
mOtherTasksSinceHousekeeping = 0;
144146
if (!performHousekeeping)
145147
return;
146-
Set<String> notificationIds = UnityNotificationManager.getScheduledNotificationIDs(context);
147148
UnityNotificationManager.performNotificationHousekeeping(context, notificationIds);
148149
}
149150
}

0 commit comments

Comments
 (0)