Skip to content

Commit 23f41ff

Browse files
committed
Add Android IAM Lifecycle
* Add IAM Lifecycle implementation to OneSignalPlugin.java * Add convertInAppMessageToMap to OneSignalSerializer
1 parent 449192f commit 23f41ff

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

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

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.onesignal.OSEmailSubscriptionObserver;
88
import com.onesignal.OSEmailSubscriptionStateChanges;
99
import com.onesignal.OSInAppMessageAction;
10+
import com.onesignal.OSInAppMessage;
11+
import com.onesignal.OSInAppMessageLifecycleHandler;
1012
import com.onesignal.OSNotification;
1113
import com.onesignal.OSNotificationOpenedResult;
1214
import com.onesignal.OSNotificationReceivedEvent;
@@ -57,6 +59,12 @@ public class OneSignalPlugin
5759
private boolean hasSetRequiresPrivacyConsent = false;
5860
private boolean waitingForUserPrivacyConsent = false;
5961

62+
private OSInAppMessage inAppMessage;
63+
private boolean hasSetOnWillDisplayInAppMessageHandler = false;
64+
private boolean hasSetOnDidDisplayInAppMessageHandler = false;
65+
private boolean hasSetOnWillDismissInAppMessageHandler = false;
66+
private boolean hasSetOnDidDismissInAppMessageHandler = false;
67+
6068
private final HashMap<String, OSNotificationReceivedEvent> notificationReceivedEventCache = new HashMap<>();
6169

6270
public OneSignalPlugin() {
@@ -160,6 +168,14 @@ else if (call.method.contentEquals("OneSignal#initNotificationOpenedHandlerParam
160168
this.initNotificationOpenedHandlerParams();
161169
else if (call.method.contentEquals("OneSignal#initInAppMessageClickedHandlerParams"))
162170
this.initInAppMessageClickedHandlerParams();
171+
else if (call.method.contentEquals("OneSignal#onWillDisplayInAppMessageHandlerParams"))
172+
this.OnWillDisplayInAppMessageHandlerParams();
173+
else if (call.method.contentEquals("OneSignal#onDidDisplayInAppMessageHandlerParams"))
174+
this.OnWillDisplayInAppMessageHandlerParams();
175+
else if (call.method.contentEquals("OneSignal#onWillDismissInAppMessageHandlerParams"))
176+
this.OnWillDisplayInAppMessageHandlerParams();
177+
else if (call.method.contentEquals("OneSignal#onDidDismissInAppMessageHandlerParams"))
178+
this.OnWillDisplayInAppMessageHandlerParams();
163179
else if (call.method.contentEquals("OneSignal#initNotificationWillShowInForegroundHandlerParams"))
164180
this.initNotificationWillShowInForegroundHandlerParams();
165181
else if (call.method.contentEquals("OneSignal#completeNotification"))
@@ -183,6 +199,7 @@ private void setAppId(MethodCall call, Result reply) {
183199
OneSignal.setInAppMessageClickHandler(this);
184200
OneSignal.initWithContext(context);
185201
OneSignal.setAppId(appId);
202+
setInAppMessageLifecycleHandler();
186203

187204
if (hasSetRequiresPrivacyConsent && !OneSignal.userProvidedPrivacyConsent())
188205
this.waitingForUserPrivacyConsent = true;
@@ -409,6 +426,99 @@ public void inAppMessageClicked(OSInAppMessageAction action) {
409426
invokeMethodOnUiThread("OneSignal#handleClickedInAppMessage", OneSignalSerializer.convertInAppMessageClickedActionToMap(action));
410427
}
411428

429+
/* in app message lifecycle */
430+
private void OnWillDisplayInAppMessageHandlerParams() {
431+
this.hasSetOnWillDisplayInAppMessageHandler = true;
432+
if(this.inAppMessage != null) {
433+
this.onWillDisplayInAppMessageFlutter(this.inAppMessage);
434+
this.inAppMessage = null;
435+
}
436+
}
437+
438+
private void OnDidDisplayInAppMessageHandlerParams() {
439+
this.hasSetOnDidDisplayInAppMessageHandler = true;
440+
if(this.inAppMessage != null) {
441+
this.onDidDisplayInAppMessageFlutter(this.inAppMessage);
442+
this.inAppMessage = null;
443+
}
444+
}
445+
446+
private void OnWillDismissInAppMessageHandlerParams() {
447+
this.hasSetOnWillDismissInAppMessageHandler = true;
448+
if(this.inAppMessage != null) {
449+
this.onWillDismissInAppMessageFlutter(this.inAppMessage);
450+
this.inAppMessage = null;
451+
}
452+
}
453+
454+
private void OnDidDismissInAppMessageHandlerParams() {
455+
this.hasSetOnDidDismissInAppMessageHandler = true;
456+
if(this.inAppMessage != null) {
457+
this.onDidDismissInAppMessageFlutter(this.inAppMessage);
458+
this.inAppMessage = null;
459+
}
460+
}
461+
462+
public void setInAppMessageLifecycleHandler() {
463+
OneSignal.setInAppMessageLifecycleHandler(new OSInAppMessageLifecycleHandler() {
464+
@Override
465+
public void onWillDisplayInAppMessage(OSInAppMessage message) {
466+
onWillDisplayInAppMessageFlutter(message);
467+
}
468+
469+
@Override
470+
public void onDidDisplayInAppMessage(OSInAppMessage message) {
471+
onDidDisplayInAppMessageFlutter(message);
472+
}
473+
474+
@Override
475+
public void onWillDismissInAppMessage(OSInAppMessage message) {
476+
onWillDismissInAppMessageFlutter(message);
477+
}
478+
479+
@Override
480+
public void onDidDismissInAppMessage(OSInAppMessage message) {
481+
onDidDismissInAppMessageFlutter(message);
482+
}
483+
});
484+
}
485+
486+
public void onWillDisplayInAppMessageFlutter(OSInAppMessage message) {
487+
if (!this.hasSetOnWillDisplayInAppMessageHandler) {
488+
this.inAppMessage = message;
489+
return;
490+
}
491+
492+
invokeMethodOnUiThread("OneSignal#onWillDisplayInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
493+
}
494+
495+
public void onDidDisplayInAppMessageFlutter(OSInAppMessage message) {
496+
if (!this.hasSetOnDidDisplayInAppMessageHandler) {
497+
this.inAppMessage = message;
498+
return;
499+
}
500+
501+
invokeMethodOnUiThread("OneSignal#onDidDisplayInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
502+
}
503+
504+
public void onWillDismissInAppMessageFlutter(OSInAppMessage message) {
505+
if (!this.hasSetOnWillDismissInAppMessageHandler) {
506+
this.inAppMessage = message;
507+
return;
508+
}
509+
510+
invokeMethodOnUiThread("OneSignal#onWillDismissInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
511+
}
512+
513+
public void onDidDismissInAppMessageFlutter(OSInAppMessage message) {
514+
if (!this.hasSetOnDidDismissInAppMessageHandler) {
515+
this.inAppMessage = message;
516+
return;
517+
}
518+
519+
invokeMethodOnUiThread("OneSignal#onDidDismissInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
520+
}
521+
412522
@Override
413523
public void notificationWillShowInForeground(OSNotificationReceivedEvent notificationReceivedEvent) {
414524
if (!this.hasSetNotificationWillShowInForegroundHandler) {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.onesignal.OSEmailSubscriptionState;
77
import com.onesignal.OSEmailSubscriptionStateChanges;
88
import com.onesignal.OSInAppMessageAction;
9+
import com.onesignal.OSInAppMessage;
910
import com.onesignal.OSNotification;
1011
import com.onesignal.OSNotificationAction;
1112
import com.onesignal.OSNotificationOpenedResult;
@@ -232,6 +233,14 @@ static HashMap<String, Object> convertInAppMessageClickedActionToMap(OSInAppMess
232233
return hash;
233234
}
234235

236+
static HashMap<String, Object> convertInAppMessageToMap(OSInAppMessage message) {
237+
HashMap<String, Object> hash = new HashMap<>();
238+
239+
hash.put("message_id", message.getMessageId());
240+
241+
return hash;
242+
}
243+
235244
static HashMap<String, Object> convertNotificationReceivedEventToMap(OSNotificationReceivedEvent notificationReceivedEvent) throws JSONException {
236245
return convertNotificationToMap(notificationReceivedEvent.getNotification());
237246
}

0 commit comments

Comments
 (0)