Skip to content

Commit 8118f36

Browse files
authored
fix: address hot reloading issues (#1102)
1 parent cd38f5a commit 8118f36

14 files changed

Lines changed: 130 additions & 42 deletions

android/src/main/java/com/onesignal/flutter/OneSignalDebug.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,19 @@
99
import io.flutter.plugin.common.MethodChannel.Result;
1010

1111
public class OneSignalDebug extends FlutterMessengerResponder implements MethodCallHandler {
12+
private static OneSignalDebug sharedInstance;
13+
14+
public static OneSignalDebug getSharedInstance() {
15+
if (sharedInstance == null) {
16+
sharedInstance = new OneSignalDebug();
17+
}
18+
return sharedInstance;
19+
}
20+
21+
private OneSignalDebug() {}
1222

1323
static void registerWith(BinaryMessenger messenger) {
14-
OneSignalDebug controller = new OneSignalDebug();
24+
OneSignalDebug controller = getSharedInstance();
1525
controller.messenger = messenger;
1626
controller.channel = new MethodChannel(messenger, "OneSignal#debug");
1727
controller.channel.setMethodCallHandler(controller);

android/src/main/java/com/onesignal/flutter/OneSignalInAppMessages.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,23 @@
2020

2121
public class OneSignalInAppMessages extends FlutterMessengerResponder
2222
implements MethodCallHandler, IInAppMessageClickListener, IInAppMessageLifecycleListener {
23+
private static OneSignalInAppMessages sharedInstance;
24+
25+
public static OneSignalInAppMessages getSharedInstance() {
26+
if (sharedInstance == null) {
27+
sharedInstance = new OneSignalInAppMessages();
28+
}
29+
return sharedInstance;
30+
}
31+
32+
private OneSignalInAppMessages() {}
2333

2434
static void registerWith(BinaryMessenger messenger) {
25-
OneSignalInAppMessages sharedInstance = new OneSignalInAppMessages();
35+
OneSignalInAppMessages controller = getSharedInstance();
2636

27-
sharedInstance.messenger = messenger;
28-
sharedInstance.channel = new MethodChannel(messenger, "OneSignal#inappmessages");
29-
sharedInstance.channel.setMethodCallHandler(sharedInstance);
37+
controller.messenger = messenger;
38+
controller.channel = new MethodChannel(messenger, "OneSignal#inappmessages");
39+
controller.channel.setMethodCallHandler(controller);
3040
}
3141

3242
@Override
@@ -89,7 +99,9 @@ private void paused(MethodCall call, Result result) {
8999
}
90100

91101
public void lifecycleInit(Result result) {
102+
OneSignal.getInAppMessages().removeLifecycleListener(this);
92103
OneSignal.getInAppMessages().addLifecycleListener(this);
104+
OneSignal.getInAppMessages().removeClickListener(this);
93105
OneSignal.getInAppMessages().addClickListener(this);
94106
replySuccess(result, null);
95107
}

android/src/main/java/com/onesignal/flutter/OneSignalLocation.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,19 @@
99
import io.flutter.plugin.common.MethodChannel.Result;
1010

1111
public class OneSignalLocation extends FlutterMessengerResponder implements MethodCallHandler {
12+
private static OneSignalLocation sharedInstance;
13+
14+
public static OneSignalLocation getSharedInstance() {
15+
if (sharedInstance == null) {
16+
sharedInstance = new OneSignalLocation();
17+
}
18+
return sharedInstance;
19+
}
20+
21+
private OneSignalLocation() {}
1222

1323
static void registerWith(BinaryMessenger messenger) {
14-
OneSignalLocation controller = new OneSignalLocation();
24+
OneSignalLocation controller = getSharedInstance();
1525
controller.messenger = messenger;
1626
controller.channel = new MethodChannel(messenger, "OneSignal#location");
1727
controller.channel.setMethodCallHandler(controller);

android/src/main/java/com/onesignal/flutter/OneSignalNotifications.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,20 @@
2424

2525
public class OneSignalNotifications extends FlutterMessengerResponder
2626
implements MethodCallHandler, INotificationClickListener, INotificationLifecycleListener, IPermissionObserver {
27+
private static OneSignalNotifications sharedInstance;
28+
2729
private final HashMap<String, INotificationWillDisplayEvent> notificationOnWillDisplayEventCache = new HashMap<>();
2830
private final HashMap<String, INotificationWillDisplayEvent> preventedDefaultCache = new HashMap<>();
2931

32+
public static OneSignalNotifications getSharedInstance() {
33+
if (sharedInstance == null) {
34+
sharedInstance = new OneSignalNotifications();
35+
}
36+
return sharedInstance;
37+
}
38+
39+
private OneSignalNotifications() {}
40+
3041
/**
3142
* A helper class to encapsulate invoking the suspending function [requestPermission] in Java.
3243
* To support API level < 24, the SDK cannot use the OneSignal-defined [Continue.with] helper method.
@@ -61,7 +72,7 @@ public void resumeWith(@NonNull Object o) {
6172
}
6273

6374
static void registerWith(BinaryMessenger messenger) {
64-
OneSignalNotifications controller = new OneSignalNotifications();
75+
OneSignalNotifications controller = getSharedInstance();
6576
controller.messenger = messenger;
6677
controller.channel = new MethodChannel(messenger, "OneSignal#notifications");
6778
controller.channel.setMethodCallHandler(controller);
@@ -216,12 +227,17 @@ public void onNotificationPermissionChange(boolean permission) {
216227
}
217228

218229
private void lifecycleInit(Result result) {
230+
OneSignal.getNotifications().removeForegroundLifecycleListener(this);
219231
OneSignal.getNotifications().addForegroundLifecycleListener(this);
232+
OneSignal.getNotifications().removePermissionObserver(this);
220233
OneSignal.getNotifications().addPermissionObserver(this);
234+
notificationOnWillDisplayEventCache.clear();
235+
preventedDefaultCache.clear();
221236
replySuccess(result, null);
222237
}
223238

224239
private void registerClickListener() {
240+
OneSignal.getNotifications().removeClickListener(this);
225241
OneSignal.getNotifications().addClickListener(this);
226242
}
227243
}

android/src/main/java/com/onesignal/flutter/OneSignalPushSubscription.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,19 @@
1313

1414
public class OneSignalPushSubscription extends FlutterMessengerResponder
1515
implements MethodCallHandler, IPushSubscriptionObserver {
16+
private static OneSignalPushSubscription sharedInstance;
17+
18+
public static OneSignalPushSubscription getSharedInstance() {
19+
if (sharedInstance == null) {
20+
sharedInstance = new OneSignalPushSubscription();
21+
}
22+
return sharedInstance;
23+
}
24+
25+
private OneSignalPushSubscription() {}
1626

1727
static void registerWith(BinaryMessenger messenger) {
18-
OneSignalPushSubscription controller = new OneSignalPushSubscription();
28+
OneSignalPushSubscription controller = getSharedInstance();
1929
controller.messenger = messenger;
2030
controller.channel = new MethodChannel(messenger, "OneSignal#pushsubscription");
2131
controller.channel.setMethodCallHandler(controller);
@@ -46,6 +56,7 @@ private void optOut(MethodCall call, Result reply) {
4656
}
4757

4858
private void lifecycleInit(Result result) {
59+
OneSignal.getUser().getPushSubscription().removeObserver(this);
4960
OneSignal.getUser().getPushSubscription().addObserver(this);
5061
replySuccess(result, null);
5162
}

android/src/main/java/com/onesignal/flutter/OneSignalSession.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
import io.flutter.plugin.common.MethodChannel.Result;
99

1010
public class OneSignalSession extends FlutterMessengerResponder implements MethodCallHandler {
11+
private static OneSignalSession sharedInstance;
12+
13+
public static OneSignalSession getSharedInstance() {
14+
if (sharedInstance == null) {
15+
sharedInstance = new OneSignalSession();
16+
}
17+
return sharedInstance;
18+
}
19+
20+
private OneSignalSession() {}
1121

1222
static void registerWith(BinaryMessenger messenger) {
13-
OneSignalSession controller = new OneSignalSession();
23+
OneSignalSession controller = getSharedInstance();
1424
controller.messenger = messenger;
1525
controller.channel = new MethodChannel(messenger, "OneSignal#session");
1626
controller.channel.setMethodCallHandler(controller);

android/src/main/java/com/onesignal/flutter/OneSignalUser.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,19 @@
1414
import org.json.JSONException;
1515

1616
public class OneSignalUser extends FlutterMessengerResponder implements MethodCallHandler, IUserStateObserver {
17+
private static OneSignalUser sharedInstance;
18+
19+
public static OneSignalUser getSharedInstance() {
20+
if (sharedInstance == null) {
21+
sharedInstance = new OneSignalUser();
22+
}
23+
return sharedInstance;
24+
}
25+
26+
private OneSignalUser() {}
1727

1828
static void registerWith(BinaryMessenger messenger) {
19-
OneSignalUser controller = new OneSignalUser();
29+
OneSignalUser controller = getSharedInstance();
2030
controller.messenger = messenger;
2131
controller.channel = new MethodChannel(messenger, "OneSignal#user");
2232
controller.channel.setMethodCallHandler(controller);
@@ -50,6 +60,7 @@ private void setLanguage(MethodCall call, Result result) {
5060
}
5161

5262
private void lifecycleInit(Result result) {
63+
OneSignal.getUser().removeObserver(this);
5364
OneSignal.getUser().addObserver(this);
5465
replySuccess(result, null);
5566
}

example/ios/Flutter/Flutter.podspec

Lines changed: 0 additions & 18 deletions
This file was deleted.

example/lib/main.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,13 @@ class _MyAppState extends State<MyApp> {
6666
});
6767

6868
OneSignal.Notifications.addClickListener((event) {
69-
print('NOTIFICATION CLICK LISTENER CALLED WITH EVENT: $event');
70-
this.setState(() {
71-
_debugLabelString =
72-
"Clicked notification: \n${event.notification.jsonRepresentation().replaceAll("\\n", "\n")}";
73-
});
69+
print(
70+
'NOTIFICATION CLICK LISTENER CALLED WITH EVENT: ${event.notification.title}');
7471
});
7572

7673
OneSignal.Notifications.addForegroundWillDisplayListener((event) {
7774
print(
78-
'NOTIFICATION WILL DISPLAY LISTENER CALLED WITH: ${event.notification.jsonRepresentation()}');
75+
'NOTIFICATION WILL DISPLAY LISTENER CALLED WITH: ${event.notification.title}');
7976

8077
/// Display Notification, preventDefault to not display
8178
event.preventDefault();

ios/Classes/OSFlutterInAppMessages.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,15 @@ - (void)paused:(FlutterMethodCall *)call withResult:(FlutterResult)result {
107107

108108
- (void)lifecycleInit:(FlutterMethodCall *)call
109109
withResult:(FlutterResult)result {
110+
[OneSignal.InAppMessages
111+
removeClickListener:OSFlutterInAppMessages.sharedInstance];
110112
[OneSignal.InAppMessages
111113
addClickListener:OSFlutterInAppMessages.sharedInstance];
114+
[OneSignal.InAppMessages
115+
removeLifecycleListener:OSFlutterInAppMessages.sharedInstance];
112116
[OneSignal.InAppMessages
113117
addLifecycleListener:OSFlutterInAppMessages.sharedInstance];
118+
result(nil);
114119
}
115120

116121
#pragma mark In App Message Click

0 commit comments

Comments
 (0)