Skip to content

Commit 102cdf7

Browse files
committed
update permission observer callback's object
* No longer pass a `OSPermissionStateChanges` object with a `to` and `from` * Instead, we wanted to pass a single boolean to represent the current permission * However, the observable infrastructure set up does not allow us to pass bools * Let's for now pass a `OSPermissionState` object representing the current state with 1 property on it called `permission` * Updated SDK minimally to support this case, unused codes could be cleaned up...
1 parent 1d8e1e7 commit 102cdf7

File tree

6 files changed

+24
-92
lines changed

6 files changed

+24
-92
lines changed

iOS_SDK/OneSignalDevApp/OneSignalDevApp/AppDelegate.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ + (void) setOneSignalAppId:(NSString*)onesignalAppId {
117117
// [OneSignal setAppId:onesignalAppId];
118118
}
119119

120-
- (void) onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges {
121-
NSLog(@"onOSPermissionChanged: %@", stateChanges);
120+
- (void)onOSPermissionChanged:(OSPermissionState*)state {
121+
NSLog(@"Dev App onOSPermissionChanged: %@", state);
122122
}
123123

124124
- (void)onOSPushSubscriptionChangedWithStateChanges:(OSPushSubscriptionStateChanges *)stateChanges {
125-
NSLog(@"onOSPushSubscriptionChangedWithStateChanges: %@", stateChanges);
125+
NSLog(@"Dev App onOSPushSubscriptionChangedWithStateChanges: %@", stateChanges);
126126
ViewController* mainController = (ViewController*) self.window.rootViewController;
127127
mainController.subscriptionSegmentedControl.selectedSegmentIndex = (NSInteger) stateChanges.to.optedIn;
128128
}

iOS_SDK/OneSignalDevApp/OneSignalDevAppClip/AppDelegate.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ + (void) setOneSignalAppId:(NSString*)onesignalAppId {
112112
[OneSignal initialize:onesignalAppId withLaunchOptions:nil];
113113
}
114114

115-
- (void) onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges {
116-
NSLog(@"onOSPermissionChanged: %@", stateChanges);
115+
- (void) onOSPermissionChanged:(OSPermissionState*)state {
116+
NSLog(@"onOSPermissionChanged: %@", state);
117117
}
118118

119119
// TODO: Add push sub observer

iOS_SDK/OneSignalSDK/OneSignalNotifications/OSNotificationsManager.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ + (OneSignalNotificationSettings *)osNotificationSettings {
143143
return _osNotificationSettings;
144144
}
145145

146+
// static property def to add developer's OSPermissionStateChanges observers to.
146147
static ObservablePermissionStateChangesType* _permissionStateChangesObserver;
147148
+ (ObservablePermissionStateChangesType*)permissionStateChangesObserver {
148149
if (!_permissionStateChangesObserver)
@@ -421,11 +422,11 @@ + (void)setSubscriptionErrorStatus:(int)errorType {
421422
[self sendNotificationTypesUpdateToDelegate];
422423
}
423424

424-
// onOSPermissionChanged should only fire if something changed.
425+
// onOSPermissionChanged should only fire if the reachable property changed.
425426
+ (void)addPermissionObserver:(NSObject<OSPermissionObserver>*)observer {
426427
[self.permissionStateChangesObserver addObserver:observer];
427428

428-
if ([self.currentPermissionState compare:self.lastPermissionState])
429+
if (self.currentPermissionState.reachable != self.lastPermissionState.reachable)
429430
[OSPermissionChangedInternalObserver fireChangesObserver:self.currentPermissionState];
430431
}
431432

iOS_SDK/OneSignalSDK/OneSignalNotifications/OSPermission.h

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,9 @@ typedef NS_ENUM(NSInteger, OSNotificationPermission) {
4949
// Permission Classes
5050
@interface OSPermissionState : NSObject
5151
// TODO: Decide: remove/change properties after addition of canRequestPermission and permission boolean
52-
@property (readonly, nonatomic) BOOL reachable;
53-
@property (readonly, nonatomic) BOOL hasPrompted;
54-
@property (readonly, nonatomic) BOOL provisional;
55-
@property (readonly, nonatomic) BOOL providesAppNotificationSettings;
56-
@property (readonly, nonatomic) OSNotificationPermission status;
52+
@property (readonly, nonatomic) BOOL permission;
5753
- (NSDictionary * _Nonnull)jsonRepresentation;
58-
- (instancetype _Nonnull )initWithStatus:(OSNotificationPermission)status reachable:(BOOL)reachable hasPrompted:(BOOL)hasPrompted provisional:(BOOL)provisional providesAppNotificationSettings:(BOOL)providesAppNotificationSettings;
54+
- (instancetype _Nonnull )initWithPermission:(BOOL)permission;
5955
@end
6056

6157
@protocol OSPermissionStateObserver<NSObject>
@@ -87,24 +83,15 @@ typedef OSObservable<NSObject<OSPermissionStateObserver>*, OSPermissionState*> O
8783
- (instancetype _Nonnull )initAsTo;
8884
- (instancetype _Nonnull )initAsFrom;
8985

90-
- (BOOL)compare:(OSPermissionStateInternal * _Nonnull)from;
9186
- (OSPermissionState * _Nonnull)getExternalState;
92-
93-
@end
94-
95-
@interface OSPermissionStateChanges : NSObject
96-
97-
@property (readonly, nonnull) OSPermissionState* to;
98-
@property (readonly, nonnull) OSPermissionState* from;
9987
- (NSDictionary * _Nonnull)jsonRepresentation;
100-
- (instancetype _Nonnull)initAsTo:(OSPermissionState * _Nonnull)to from:(OSPermissionState * _Nonnull)from;
10188
@end
10289

10390
@protocol OSPermissionObserver <NSObject>
104-
- (void)onOSPermissionChanged:(OSPermissionStateChanges * _Nonnull)stateChanges;
91+
- (void)onOSPermissionChanged:(OSPermissionState * _Nonnull)state;
10592
@end
10693

107-
typedef OSObservable<NSObject<OSPermissionObserver>*, OSPermissionStateChanges*> ObservablePermissionStateChangesType;
94+
typedef OSObservable<NSObject<OSPermissionObserver>*, OSPermissionState*> ObservablePermissionStateChangesType;
10895

10996

11097
@interface OSPermissionChangedInternalObserver : NSObject<OSPermissionStateObserver>

iOS_SDK/OneSignalSDK/OneSignalNotifications/OSPermission.m

Lines changed: 11 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,8 @@ - (OSNotificationPermission)status {
159159
return OSNotificationPermissionNotDetermined;
160160
}
161161

162-
- (BOOL)compare:(OSPermissionStateInternal*)from {
163-
return self.accepted != from.accepted ||
164-
self.ephemeral != from.ephemeral ||
165-
self.answeredPrompt != from.answeredPrompt ||
166-
self.hasPrompted != from.hasPrompted;
167-
}
168-
169162
- (OSPermissionState *)getExternalState {
170-
return [[OSPermissionState alloc] initWithStatus:self.status reachable:self.reachable hasPrompted:self.hasPrompted provisional:self.provisional providesAppNotificationSettings:self.providesAppNotificationSettings];
163+
return [[OSPermissionState alloc] initWithPermission:self.reachable];
171164
}
172165

173166
- (NSString*)description {
@@ -181,40 +174,18 @@ - (NSString*)description {
181174

182175
@implementation OSPermissionState
183176

184-
- (instancetype)initWithStatus:(OSNotificationPermission)status reachable:(BOOL)reachable hasPrompted:(BOOL)hasPrompted provisional:(BOOL)provisional providesAppNotificationSettings:(BOOL)providesAppNotificationSettings {
185-
_status = status;
186-
_reachable = reachable;
187-
_hasPrompted = hasPrompted;
188-
_providesAppNotificationSettings = providesAppNotificationSettings;
189-
_provisional = provisional;
177+
- (instancetype)initWithPermission:(BOOL)permission {
178+
_permission = permission;
190179
return self;
191180
}
192181

193-
- (NSString*)statusAsString {
194-
switch(self.status) {
195-
case OSNotificationPermissionNotDetermined:
196-
return @"NotDetermined";
197-
case OSNotificationPermissionAuthorized:
198-
return @"Authorized";
199-
case OSNotificationPermissionDenied:
200-
return @"Denied";
201-
case OSNotificationPermissionProvisional:
202-
return @"Provisional";
203-
case OSNotificationPermissionEphemeral:
204-
return @"Ephemeral";
205-
}
206-
return @"NotDetermined";
207-
}
208-
209182
- (NSString*)description {
210-
static NSString* format = @"<OSPermissionState: hasPrompted: %d, status: %@, provisional: %d>";
211-
return [NSString stringWithFormat:format, self.hasPrompted, self.statusAsString, self.provisional];
183+
static NSString* format = @"<OSPermissionState: permission: %d>";
184+
return [NSString stringWithFormat:format, self.permission];
212185
}
213186

214187
- (NSDictionary*)jsonRepresentation {
215-
return @{@"hasPrompted": @(self.hasPrompted),
216-
@"status": @(self.status),
217-
@"provisional" : @(self.provisional)};
188+
return @{@"permission": @(self.permission)};
218189
}
219190

220191
@end
@@ -227,9 +198,12 @@ - (void)onChanged:(OSPermissionStateInternal*)state {
227198
+ (void)fireChangesObserver:(OSPermissionStateInternal*)state {
228199
OSPermissionState *externalToState = [state getExternalState];
229200
OSPermissionState *externalFromState = [OSNotificationsManager.lastPermissionState getExternalState];
230-
OSPermissionStateChanges* stateChanges = [[OSPermissionStateChanges alloc] initAsTo:externalToState from:externalFromState];
231201

232-
BOOL hasReceiver = [OSNotificationsManager.permissionStateChangesObserver notifyChange:stateChanges];
202+
if (externalToState.permission == externalFromState.permission) {
203+
return;
204+
}
205+
206+
BOOL hasReceiver = [OSNotificationsManager.permissionStateChangesObserver notifyChange:externalToState];
233207
if (hasReceiver) {
234208
OSNotificationsManager.lastPermissionState = [state copy];
235209
[OSNotificationsManager.lastPermissionState persistAsFrom];
@@ -242,22 +216,3 @@ + (void)fireChangesObserver:(OSPermissionStateInternal*)state {
242216
}
243217

244218
@end
245-
246-
@implementation OSPermissionStateChanges
247-
248-
- (NSString*)description {
249-
static NSString* format = @"<OSPermissionStateChanges:\nfrom: %@,\nto: %@\n>";
250-
return [NSString stringWithFormat:format, _from, _to];
251-
}
252-
253-
- (NSDictionary*)jsonRepresentation {
254-
return @{@"from": [_from jsonRepresentation], @"to": [_to jsonRepresentation]};
255-
}
256-
257-
- (instancetype)initAsTo:(OSPermissionState *)to from:(OSPermissionState *)from {
258-
_to = to;
259-
_from = from;
260-
return self;
261-
}
262-
263-
@end

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,6 @@ + (DelayedConsentInitializationParameters *)delayedInitParameters {
121121
// Set when the app is launched
122122
static NSDate *sessionLaunchTime;
123123

124-
// static property def to add developer's OSPermissionStateChanges observers to.
125-
static ObservablePermissionStateChangesType* _permissionStateChangesObserver;
126-
+ (ObservablePermissionStateChangesType*)permissionStateChangesObserver {
127-
if (!_permissionStateChangesObserver)
128-
_permissionStateChangesObserver = [[OSObservable alloc] initWithChangeSelector:@selector(onOSPermissionChanged:)];
129-
return _permissionStateChangesObserver;
130-
}
131-
132-
133124
/*
134125
Indicates if the iOS params request has started
135126
Set to true when the method is called and set false if the request's failure callback is triggered
@@ -198,9 +189,7 @@ + (void)clearStatics {
198189

199190
[OSNotificationsManager clearStatics];
200191
registeredWithApple = false;
201-
202-
_permissionStateChangesObserver = nil;
203-
192+
204193
_downloadedParameters = false;
205194
_didCallDownloadParameters = false;
206195

0 commit comments

Comments
 (0)