Skip to content

Commit bbb9844

Browse files
author
Rodrigo Gomez Palacio
authored
Merge pull request #1278 from frankenthumbs/main
Functions to remove specific subscription observers
2 parents 4dc53ae + 8fd502a commit bbb9844

File tree

5 files changed

+121
-7
lines changed

5 files changed

+121
-7
lines changed

android/src/main/java/com/geektime/rnonesignalandroid/RNOneSignal.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,9 @@ private String appIdFromManifest(ReactApplicationContext context) {
120120
}
121121

122122
private void removeObservers() {
123-
OneSignal.removeEmailSubscriptionObserver(this);
124-
OneSignal.removePermissionObserver(this);
125-
OneSignal.removeSubscriptionObserver(this);
126-
hasSetEmailSubscriptionObserver = false;
127-
hasSetPermissionObserver = false;
128-
hasSetSubscriptionObserver = false;
123+
this.removeEmailSubscriptionObserver();
124+
this.removePermissionObserver();
125+
this.removeSubscriptionObserver();
129126
}
130127

131128
private void removeHandlers() {
@@ -217,6 +214,14 @@ public void addPermissionObserver() {
217214
}
218215
}
219216

217+
@ReactMethod
218+
public void removePermissionObserver() {
219+
if (hasSetPermissionObserver) {
220+
OneSignal.removePermissionObserver(this);
221+
hasSetPermissionObserver = false;
222+
}
223+
}
224+
220225
@ReactMethod
221226
public void addSubscriptionObserver() {
222227
if (!hasSetSubscriptionObserver) {
@@ -225,6 +230,14 @@ public void addSubscriptionObserver() {
225230
}
226231
}
227232

233+
@ReactMethod
234+
public void removeSubscriptionObserver() {
235+
if (hasSetSubscriptionObserver) {
236+
OneSignal.removeSubscriptionObserver(this);
237+
hasSetSubscriptionObserver = false;
238+
}
239+
}
240+
228241
@ReactMethod
229242
public void addEmailSubscriptionObserver() {
230243
if (!hasSetEmailSubscriptionObserver) {
@@ -233,6 +246,14 @@ public void addEmailSubscriptionObserver() {
233246
}
234247
}
235248

249+
@ReactMethod
250+
public void removeEmailSubscriptionObserver() {
251+
if (hasSetEmailSubscriptionObserver) {
252+
OneSignal.removeEmailSubscriptionObserver(this);
253+
hasSetEmailSubscriptionObserver = false;
254+
}
255+
}
256+
236257
@ReactMethod
237258
public void addSMSSubscriptionObserver() {
238259
if (!hasSetSMSSubscriptionObserver) {
@@ -241,6 +262,14 @@ public void addSMSSubscriptionObserver() {
241262
}
242263
}
243264

265+
@ReactMethod
266+
public void removeSMSSubscriptionObserver() {
267+
if (hasSetSMSSubscriptionObserver) {
268+
OneSignal.removeSMSSubscriptionObserver(this);
269+
hasSetSMSSubscriptionObserver = false;
270+
}
271+
}
272+
244273
/* Other methods */
245274

246275
@ReactMethod

ios/RCTOneSignal/RCTOneSignalEventEmitter.m

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,27 +103,55 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
103103
}
104104
}
105105

106+
RCT_EXPORT_METHOD(removePermissionObserver) {
107+
if (_hasSetPermissionObserver) {
108+
[OneSignal removePermissionObserver:[RCTOneSignal sharedInstance]];
109+
_hasSetPermissionObserver = false;
110+
}
111+
}
112+
106113
RCT_EXPORT_METHOD(addSubscriptionObserver) {
107114
if (!_hasSetSubscriptionObserver) {
108115
[OneSignal addSubscriptionObserver:[RCTOneSignal sharedInstance]];
109116
_hasSetSubscriptionObserver = true;
110117
}
111118
}
112119

120+
RCT_EXPORT_METHOD(removeSubscriptionObserver) {
121+
if (_hasSetSubscriptionObserver) {
122+
[OneSignal removeSubscriptionObserver:[RCTOneSignal sharedInstance]];
123+
_hasSetSubscriptionObserver = false;
124+
}
125+
}
126+
113127
RCT_EXPORT_METHOD(addEmailSubscriptionObserver) {
114128
if (!_hasSetEmailSubscriptionObserver) {
115129
[OneSignal addEmailSubscriptionObserver:[RCTOneSignal sharedInstance]];
116130
_hasSetEmailSubscriptionObserver = true;
117131
}
118132
}
119133

134+
RCT_EXPORT_METHOD(removeEmailSubscriptionObserver) {
135+
if (_hasSetEmailSubscriptionObserver) {
136+
[OneSignal removeEmailSubscriptionObserver:[RCTOneSignal sharedInstance]];
137+
_hasSetEmailSubscriptionObserver = false;
138+
}
139+
}
140+
120141
RCT_EXPORT_METHOD(addSMSSubscriptionObserver) {
121142
if (!_hasSetSMSSubscriptionObserver) {
122143
[OneSignal addSMSSubscriptionObserver:[RCTOneSignal sharedInstance]];
123144
_hasSetSMSSubscriptionObserver = true;
124145
}
125146
}
126147

148+
RCT_EXPORT_METHOD(removeSMSSubscriptionObserver) {
149+
if (_hasSetSMSSubscriptionObserver) {
150+
[OneSignal removeSMSSubscriptionObserver:[RCTOneSignal sharedInstance]];
151+
_hasSetSMSSubscriptionObserver = false;
152+
}
153+
}
154+
127155
RCT_REMAP_METHOD(requiresUserPrivacyConsent, requiresPrivacyConsentResolver:(RCTPromiseResolveBlock)resolve
128156
rejecter:(RCTPromiseRejectBlock)reject) {
129157
resolve(@(OneSignal.requiresUserPrivacyConsent));

src/EventManager.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ export default class EventManager {
6969
handlerArray && handlerArray.length > 0 ? handlerArray.push(handler) : this.eventHandlerArrayMap.set(eventName, [handler]);
7070
}
7171

72+
/**
73+
* clears the event handler(s) for the event name
74+
* @param {string} eventName
75+
* @param {function} handler
76+
*/
77+
clearEventHandler(eventName) {
78+
this.eventHandlerArrayMap.delete(eventName);
79+
}
80+
7281
// returns an event listener with the js to native mapping
7382
generateEventListener(eventName) {
7483
const addListenerCallback = (payload) => {

src/index.d.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ declare module 'react-native-onesignal' {
123123
isPushDisabled : boolean;
124124
isEmailSubscribed : boolean;
125125
isSMSSubscribed : boolean;
126-
hasNotificationPermission ?: boolean; // ios only
126+
hasNotificationPermission ?: boolean; // is areNotificationsEnabled on android
127127
notificationPermissionStatus ?: IosPermissionStatus; // ios only
128128
// areNotificationsEnabled (android) not included since it is converted to hasNotificationPermission in bridge
129129
}
@@ -144,27 +144,51 @@ declare module 'react-native-onesignal' {
144144
*/
145145
addPermissionObserver(observer: (event: ChangeEvent<PermissionChange>) => void): void;
146146

147+
/**
148+
* Clears current permission observers.
149+
* @returns void
150+
*/
151+
clearPermissionObservers(): void;
152+
147153
/**
148154
* Add a callback that fires when the OneSignal subscription state changes.
149155
* @param {(event:ChangeEvent<SubscriptionChange>)=>void} observer
150156
* @returns void
151157
*/
152158
addSubscriptionObserver(observer: (event: ChangeEvent<SubscriptionChange>) => void): void;
153159

160+
/**
161+
* Clears current subscription observers.
162+
* @returns void
163+
*/
164+
clearSubscriptionObservers(): void;
165+
154166
/**
155167
* Add a callback that fires when the OneSignal email subscription changes.
156168
* @param {(event:ChangeEvent<EmailSubscriptionChange>)=>void} observer
157169
* @returns void
158170
*/
159171
addEmailSubscriptionObserver(observer: (event: ChangeEvent<EmailSubscriptionChange>) => void): void;
160172

173+
/**
174+
* Clears current email subscription observers.
175+
* @returns void
176+
*/
177+
clearEmailSubscriptionObservers(): void;
178+
161179
/**
162180
* Add a callback that fires when the OneSignal sms subscription changes.
163181
* @param {(event:ChangeEvent<SMSSubscriptionChange>)=>void} observer
164182
* @returns void
165183
*/
166184
addSMSSubscriptionObserver(observer: (event: ChangeEvent<SMSSubscriptionChange>) => void): void;
167185

186+
/**
187+
* Clears current SMS subscription observers.
188+
* @returns void
189+
*/
190+
clearSMSSubscriptionObservers(): void;
191+
168192
/**
169193
* Set the callback to run just before displaying a notification while the app is in focus.
170194
* @param {(event:NotificationReceivedEvent)=>void} handler

src/index.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,51 @@ export default class OneSignal {
3737
eventManager.addEventHandler(PERMISSION_CHANGED, observer);
3838
}
3939

40+
static clearPermissionObservers() {
41+
if (!isObjectNonNull(RNOneSignal)) return;
42+
RNOneSignal.removePermissionObserver();
43+
eventManager.clearEventHandler(PERMISSION_CHANGED);
44+
}
45+
4046
static addSubscriptionObserver(observer) {
4147
if (!isObjectNonNull(RNOneSignal)) return;
4248
isValidCallback(observer);
4349
RNOneSignal.addSubscriptionObserver();
4450
eventManager.addEventHandler(SUBSCRIPTION_CHANGED, observer);
4551
}
4652

53+
static clearSubscriptionObservers() {
54+
if (!isObjectNonNull(RNOneSignal)) return;
55+
RNOneSignal.removeSubscriptionObserver();
56+
eventManager.clearEventHandler(SUBSCRIPTION_CHANGED);
57+
}
58+
4759
static addEmailSubscriptionObserver(observer) {
4860
if (!isObjectNonNull(RNOneSignal)) return;
4961
isValidCallback(observer);
5062
RNOneSignal.addEmailSubscriptionObserver();
5163
eventManager.addEventHandler(EMAIL_SUBSCRIPTION_CHANGED, observer);
5264
}
5365

66+
static clearEmailSubscriptionObservers() {
67+
if (!isObjectNonNull(RNOneSignal)) return;
68+
RNOneSignal.removeEmailSubscriptionObserver();
69+
eventManager.clearEventHandler(EMAIL_SUBSCRIPTION_CHANGED);
70+
}
71+
5472
static addSMSSubscriptionObserver(observer) {
5573
if (!isObjectNonNull(RNOneSignal)) return;
5674
isValidCallback(observer);
5775
RNOneSignal.addSMSSubscriptionObserver();
5876
eventManager.addEventHandler(SMS_SUBSCRIPTION_CHANGED, observer);
5977
}
6078

79+
static clearSMSSubscriptionObservers() {
80+
if (!isObjectNonNull(RNOneSignal)) return;
81+
RNOneSignal.removeSMSSubscriptionObserver();
82+
eventManager.clearEventHandler(SMS_SUBSCRIPTION_CHANGED);
83+
}
84+
6185
/* H A N D L E R S */
6286

6387
/**

0 commit comments

Comments
 (0)