Skip to content

Commit 71ac609

Browse files
committed
fix logic for android hot restarts
1 parent a98c77c commit 71ac609

15 files changed

Lines changed: 170 additions & 92 deletions

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

Lines changed: 12 additions & 2 deletions
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;
1213

13-
static void registerWith(BinaryMessenger messenger) {
14-
OneSignalDebug controller = new OneSignalDebug();
14+
public static OneSignalDebug getSharedInstance() {
15+
if (sharedInstance == null) {
16+
sharedInstance = new OneSignalDebug();
17+
}
18+
return sharedInstance;
19+
}
20+
21+
private OneSignalDebug() { }
22+
23+
static void registerWith(BinaryMessenger messenger) {
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: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,25 @@
1818
import java.util.Map;
1919
import org.json.JSONException;
2020

21-
public class OneSignalInAppMessages extends FlutterMessengerResponder
22-
implements MethodCallHandler, IInAppMessageClickListener, IInAppMessageLifecycleListener {
21+
public class OneSignalInAppMessages extends FlutterMessengerResponder implements MethodCallHandler,
22+
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
}
@@ -101,34 +113,27 @@ public void onClick(IInAppMessageClickEvent event) {
101113
"OneSignal#onClickInAppMessage", OneSignalSerializer.convertInAppMessageClickEventToMap(event));
102114
} catch (JSONException e) {
103115
e.getStackTrace();
104-
Logging.error(
105-
"Encountered an error attempting to convert IInAppMessageClickEvent object to hash map:"
106-
+ e.toString(),
107-
null);
116+
Logging.error("Encountered an error attempting to convert IInAppMessageClickEvent object to hash map:" + e.toString(), null);
108117
}
109118
}
110119

111120
@Override
112121
public void onWillDisplay(IInAppMessageWillDisplayEvent event) {
113122
try {
114-
invokeMethodOnUiThread(
115-
"OneSignal#onWillDisplayInAppMessage",
116-
OneSignalSerializer.convertInAppMessageWillDisplayEventToMap(event));
123+
invokeMethodOnUiThread("OneSignal#onWillDisplayInAppMessage",
124+
OneSignalSerializer.convertInAppMessageWillDisplayEventToMap(event));
117125
} catch (JSONException e) {
118126
e.getStackTrace();
119-
Logging.error(
120-
"Encountered an error attempting to convert IInAppMessageWillDisplayEvent object to hash map:"
121-
+ e.toString(),
122-
null);
127+
Logging.error("Encountered an error attempting to convert IInAppMessageWillDisplayEvent object to hash map:" + e.toString(), null);
123128
}
129+
124130
}
125131

126132
@Override
127133
public void onDidDisplay(IInAppMessageDidDisplayEvent event) {
128134
try {
129-
invokeMethodOnUiThread(
130-
"OneSignal#onDidDisplayInAppMessage",
131-
OneSignalSerializer.convertInAppMessageDidDisplayEventToMap(event));
135+
invokeMethodOnUiThread("OneSignal#onDidDisplayInAppMessage",
136+
OneSignalSerializer.convertInAppMessageDidDisplayEventToMap(event));
132137
} catch (JSONException e) {
133138
e.getStackTrace();
134139
Logging.error(
@@ -141,9 +146,8 @@ public void onDidDisplay(IInAppMessageDidDisplayEvent event) {
141146
@Override
142147
public void onWillDismiss(IInAppMessageWillDismissEvent event) {
143148
try {
144-
invokeMethodOnUiThread(
145-
"OneSignal#onWillDismissInAppMessage",
146-
OneSignalSerializer.convertInAppMessageWillDismissEventToMap(event));
149+
invokeMethodOnUiThread("OneSignal#onWillDismissInAppMessage",
150+
OneSignalSerializer.convertInAppMessageWillDismissEventToMap(event));
147151
} catch (JSONException e) {
148152
e.getStackTrace();
149153
Logging.error(
@@ -156,15 +160,15 @@ public void onWillDismiss(IInAppMessageWillDismissEvent event) {
156160
@Override
157161
public void onDidDismiss(IInAppMessageDidDismissEvent event) {
158162
try {
159-
invokeMethodOnUiThread(
160-
"OneSignal#onDidDismissInAppMessage",
161-
OneSignalSerializer.convertInAppMessageDidDismissEventToMap(event));
163+
invokeMethodOnUiThread("OneSignal#onDidDismissInAppMessage",
164+
OneSignalSerializer.convertInAppMessageDidDismissEventToMap(event));
162165
} catch (JSONException e) {
163166
e.getStackTrace();
164167
Logging.error(
165168
"Encountered an error attempting to convert IInAppMessageDidDismissEvent object to hash map:"
166169
+ e.toString(),
167170
null);
168171
}
172+
169173
}
170174
}

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: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,21 @@
2222
import org.json.JSONException;
2323
import org.json.JSONObject;
2424

25-
public class OneSignalNotifications extends FlutterMessengerResponder
26-
implements MethodCallHandler, INotificationClickListener, INotificationLifecycleListener, IPermissionObserver {
25+
public class OneSignalNotifications extends FlutterMessengerResponder implements MethodCallHandler, INotificationClickListener, INotificationLifecycleListener, IPermissionObserver {
26+
private static OneSignalNotifications sharedInstance;
27+
2728
private final HashMap<String, INotificationWillDisplayEvent> notificationOnWillDisplayEventCache = new HashMap<>();
2829
private final HashMap<String, INotificationWillDisplayEvent> preventedDefaultCache = new HashMap<>();
2930

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

6373
static void registerWith(BinaryMessenger messenger) {
64-
OneSignalNotifications controller = new OneSignalNotifications();
74+
OneSignalNotifications controller = getSharedInstance();
6575
controller.messenger = messenger;
6676
controller.channel = new MethodChannel(messenger, "OneSignal#notifications");
6777
controller.channel.setMethodCallHandler(controller);
@@ -117,8 +127,7 @@ private void clearAll(MethodCall call, Result result) {
117127
replySuccess(result, null);
118128
}
119129

120-
/// Our bridge layer needs to preventDefault() so that the Flutter listener has time to preventDefault() before the
121-
// notification is displayed
130+
/// Our bridge layer needs to preventDefault() so that the Flutter listener has time to preventDefault() before the notification is displayed
122131
/// This function is called after all of the flutter listeners have responded to the willDisplay event.
123132
/// If any of them have called preventDefault() we will not call display(). Otherwise we will display.
124133
private void proceedWithWillDisplay(MethodCall call, Result result) {
@@ -209,19 +218,24 @@ public void onWillDisplay(INotificationWillDisplayEvent event) {
209218
}
210219

211220
@Override
212-
public void onNotificationPermissionChange(boolean permission) {
221+
public void onNotificationPermissionChange(boolean permission) {
213222
HashMap<String, Object> hash = new HashMap<>();
214223
hash.put("permission", permission);
215224
invokeMethodOnUiThread("OneSignal#onNotificationPermissionDidChange", hash);
216225
}
217226

218227
private void lifecycleInit(Result result) {
228+
OneSignal.getNotifications().removeForegroundLifecycleListener(this);
219229
OneSignal.getNotifications().addForegroundLifecycleListener(this);
230+
OneSignal.getNotifications().removePermissionObserver(this);
220231
OneSignal.getNotifications().addPermissionObserver(this);
232+
notificationOnWillDisplayEventCache.clear();
233+
preventedDefaultCache.clear();
221234
replySuccess(result, null);
222235
}
223236

224237
private void registerClickListener() {
238+
OneSignal.getNotifications().removeClickListener(this);
225239
OneSignal.getNotifications().addClickListener(this);
226240
}
227241
}

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ public class OneSignalPlugin extends FlutterMessengerResponder
1919

2020
public OneSignalPlugin() {}
2121

22-
private void init(Context context, BinaryMessenger messenger) {
23-
this.context = context;
24-
this.messenger = messenger;
25-
OneSignalWrapper.setSdkType("flutter");
26-
// For 5.0.0, hard code to reflect SDK version
27-
OneSignalWrapper.setSdkVersion("050305");
22+
private void init(Context context, BinaryMessenger messenger)
23+
{
24+
this.context = context;
25+
this.messenger = messenger;
26+
OneSignalWrapper.setSdkType("flutter");
27+
// For 5.0.0, hard code to reflect SDK version
28+
OneSignalWrapper.setSdkVersion("050305");
29+
30+
channel = new MethodChannel(messenger, "OneSignal");
31+
channel.setMethodCallHandler(this);
2832

2933
channel = new MethodChannel(messenger, "OneSignal");
3034
channel.setMethodCallHandler(this);
@@ -93,18 +97,13 @@ private void setConsentGiven(MethodCall call, Result reply) {
9397
replySuccess(reply, null);
9498
}
9599

96-
private void login(MethodCall call, Result result) {
97-
OneSignal.login((String) call.argument("externalId"));
98-
replySuccess(result, null);
99-
}
100+
private void loginWithJWT(MethodCall call, Result result) {
101+
OneSignal.login((String) call.argument("externalId"), (String) call.argument("jwt"));
102+
replySuccess(result, null);
103+
}
100104

101-
private void loginWithJWT(MethodCall call, Result result) {
102-
OneSignal.login((String) call.argument("externalId"), (String) call.argument("jwt"));
103-
replySuccess(result, null);
104-
}
105-
106-
private void logout(MethodCall call, Result result) {
107-
OneSignal.logout();
108-
replySuccess(result, null);
109-
}
105+
private void logout(MethodCall call, Result result) {
106+
OneSignal.logout();
107+
replySuccess(result, null);
108+
}
110109
}

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,20 @@
1111
import io.flutter.plugin.common.MethodChannel.Result;
1212
import org.json.JSONException;
1313

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

1726
static void registerWith(BinaryMessenger messenger) {
18-
OneSignalPushSubscription controller = new OneSignalPushSubscription();
27+
OneSignalPushSubscription controller = getSharedInstance();
1928
controller.messenger = messenger;
2029
controller.channel = new MethodChannel(messenger, "OneSignal#pushsubscription");
2130
controller.channel.setMethodCallHandler(controller);
@@ -46,6 +55,7 @@ private void optOut(MethodCall call, Result reply) {
4655
}
4756

4857
private void lifecycleInit(Result result) {
58+
OneSignal.getUser().getPushSubscription().removeObserver(this);
4959
OneSignal.getUser().getPushSubscription().addObserver(this);
5060
replySuccess(result, null);
5161
}
@@ -58,10 +68,7 @@ public void onPushSubscriptionChange(PushSubscriptionChangedState changeState) {
5868
OneSignalSerializer.convertOnPushSubscriptionChange(changeState));
5969
} catch (JSONException e) {
6070
e.getStackTrace();
61-
Logging.error(
62-
"Encountered an error attempting to convert PushSubscriptionChangedState object to hash map:"
63-
+ e.toString(),
64-
null);
71+
Logging.error("Encountered an error attempting to convert PushSubscriptionChangedState object to hash map:" + e.toString(), null);
6572
}
6673
}
6774
}

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: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,21 @@
1313
import java.util.Map;
1414
import org.json.JSONException;
1515

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

1829
static void registerWith(BinaryMessenger messenger) {
19-
OneSignalUser controller = new OneSignalUser();
30+
OneSignalUser controller = getSharedInstance();
2031
controller.messenger = messenger;
2132
controller.channel = new MethodChannel(messenger, "OneSignal#user");
2233
controller.channel.setMethodCallHandler(controller);
@@ -50,6 +61,7 @@ private void setLanguage(MethodCall call, Result result) {
5061
}
5162

5263
private void lifecycleInit(Result result) {
64+
OneSignal.getUser().removeObserver(this);
5365
OneSignal.getUser().addObserver(this);
5466
replySuccess(result, null);
5567
}

example/ios/Flutter/Flutter.podspec

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

0 commit comments

Comments
 (0)