Skip to content

Commit c185dd3

Browse files
committed
Introduce Task class and refactor to use it
1 parent 6e1cd1a commit c185dd3

File tree

1 file changed

+54
-25
lines changed

1 file changed

+54
-25
lines changed

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

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
import java.util.Set;
1212

1313
public class UnityNotificationBackgroundThread extends Thread {
14-
private static class ScheduleNotificationTask implements Runnable {
14+
private static abstract class Task {
15+
public abstract void run(Context context);
16+
}
17+
18+
private static class ScheduleNotificationTask extends Task {
1519
private int notificationId;
1620
private Notification.Builder notificationBuilder;
1721

@@ -21,8 +25,7 @@ public ScheduleNotificationTask(int id, Notification.Builder builder) {
2125
}
2226

2327
@Override
24-
public void run() {
25-
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
28+
public void run(Context context) {
2629
Set<String> ids = UnityNotificationManager.getScheduledNotificationIDs(context);
2730
String id = String.valueOf(notificationId);
2831
// are we replacing existing alarm or have capacity to schedule new one
@@ -35,7 +38,45 @@ public void run() {
3538
}
3639
}
3740

38-
private LinkedTransferQueue<Runnable> mTasks = new LinkedTransferQueue();
41+
private static class CancelNotificationTask extends Task {
42+
private int notificationId;
43+
44+
public CancelNotificationTask(int id) {
45+
notificationId = id;
46+
}
47+
48+
@Override
49+
public void run(Context context) {
50+
UnityNotificationManager.cancelPendingNotificationIntent(context, notificationId);
51+
}
52+
}
53+
54+
private static class CancelAllNotificationsTask extends Task {
55+
@Override
56+
public void run(Context context) {
57+
Set<String> ids = UnityNotificationManager.getScheduledNotificationIDs(context);
58+
59+
for (String id : ids) {
60+
UnityNotificationManager.cancelPendingNotificationIntent(context, Integer.valueOf(id));
61+
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
62+
}
63+
}
64+
}
65+
66+
private static class HousekeepingTask extends Task {
67+
UnityNotificationBackgroundThread thread;
68+
69+
public HousekeepingTask(UnityNotificationBackgroundThread th) {
70+
thread = th;
71+
}
72+
73+
@Override
74+
public void run(Context context) {
75+
thread.performHousekeeping(context);
76+
}
77+
}
78+
79+
private LinkedTransferQueue<Task> mTasks = new LinkedTransferQueue();
3980
private int mSentNotificationsSinceHousekeeping = 0;
4081
private int mOtherTasksSinceHousekeeping = 0;
4182

@@ -50,49 +91,38 @@ public void enqueueNotification(int id, Notification.Builder notificationBuilder
5091
}
5192

5293
public void enqueueCancelNotification(int id) {
53-
mTasks.add(() -> {
54-
UnityNotificationManager.cancelPendingNotificationIntent(UnityNotificationManager.mUnityNotificationManager.mContext, id);
55-
});
94+
mTasks.add(new CancelNotificationTask(id));
5695
}
5796

5897
public void enqueueCancelAllNotifications() {
59-
mTasks.add(() -> {
60-
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
61-
Set<String> ids = UnityNotificationManager.getScheduledNotificationIDs(context);
62-
63-
if (ids.size() > 0) {
64-
for (String id : ids) {
65-
UnityNotificationManager.cancelPendingNotificationIntent(context, Integer.valueOf(id));
66-
UnityNotificationManager.deleteExpiredNotificationIntent(context, id);
67-
}
68-
}
69-
});
98+
mTasks.add(new CancelAllNotificationsTask());
7099
}
71100

72101
private void enqueueHousekeeping() {
73-
mTasks.add(() -> { performHousekeeping(); });
102+
mTasks.add(new HousekeepingTask(this));
74103
}
75104

76105
@Override
77106
public void run() {
107+
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
78108
while (true) {
79109
try {
80-
Runnable task = mTasks.take();
81-
executeTask(task);
110+
Task task = mTasks.take();
111+
executeTask(context, task);
82112
} catch (InterruptedException e) {
83113
if (mTasks.isEmpty())
84114
break;
85115
}
86116
}
87117
}
88118

89-
private void executeTask(Runnable task) {
119+
private void executeTask(Context context, Task task) {
90120
try {
91121
ScheduleNotificationTask scheduleTask = null;
92122
if (task instanceof ScheduleNotificationTask)
93123
scheduleTask = (ScheduleNotificationTask)task;
94124

95-
task.run();
125+
task.run(context);
96126

97127
if (scheduleTask != null)
98128
++mSentNotificationsSinceHousekeeping;
@@ -105,14 +135,13 @@ private void executeTask(Runnable task) {
105135
}
106136
}
107137

108-
private void performHousekeeping() {
138+
private void performHousekeeping(Context context) {
109139
// don't do housekeeping if last task we did was housekeeping (other=1)
110140
boolean performHousekeeping = mSentNotificationsSinceHousekeeping > 0 && mOtherTasksSinceHousekeeping > 1;
111141
mSentNotificationsSinceHousekeeping = 0;
112142
mOtherTasksSinceHousekeeping = 0;
113143
if (!performHousekeeping)
114144
return;
115-
Context context = UnityNotificationManager.mUnityNotificationManager.mContext;
116145
Set<String> notificationIds = UnityNotificationManager.getScheduledNotificationIDs(context);
117146
UnityNotificationManager.performNotificationHousekeeping(context, notificationIds);
118147
}

0 commit comments

Comments
 (0)