Skip to content
This repository has been archived by the owner on Jul 13, 2021. It is now read-only.

Commit

Permalink
Performance Improvements
Browse files Browse the repository at this point in the history
* Accessibility actions are now configured on background threads

Signed-off-by: John Gabelmann <john@floof.dog>
  • Loading branch information
ReticentJohn committed Apr 18, 2018
1 parent 662bf6e commit 7c5b708
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 59 deletions.
2 changes: 1 addition & 1 deletion DireFloof/DWAccessibilityAction.h
Expand Up @@ -26,6 +26,6 @@

#pragma mark - Class Actions

+ (NSArray *)accessibilityActionsForStatus:(MSStatus *)status atIndexPath:(NSIndexPath *)indexPath withTarget:(id)target andSelector:(SEL)selector;
+ (void)accessibilityActionsForStatus:(MSStatus *)status atIndexPath:(NSIndexPath *)indexPath withTarget:(id)target andSelector:(SEL)selector withCompletion:(void (^)(MSStatus *status, NSArray *actions))completion;

@end
74 changes: 41 additions & 33 deletions DireFloof/DWAccessibilityAction.m
Expand Up @@ -17,41 +17,49 @@ @implementation DWAccessibilityAction

#pragma mark - Class Actions

+ (NSArray *)accessibilityActionsForStatus:(MSStatus *)status atIndexPath:(NSIndexPath *)indexPath withTarget:(id)target andSelector:(SEL)selector
+ (void)accessibilityActionsForStatus:(MSStatus *)status atIndexPath:(NSIndexPath *)indexPath withTarget:(id)target andSelector:(SEL)selector withCompletion:(void (^)(MSStatus *, NSArray *))completion
{
NSMutableArray *actions = [NSMutableArray new];

NSString *content = status.reblog ? status.reblog.content : status.content;

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray<NSTextCheckingResult *> *URLs = [detector matchesInString:status.content options:0 range:NSMakeRange(0, content.length)];
NSArray *mentions = [TwitterText mentionedScreenNamesInText:content];
NSArray *hashtags = [TwitterText hashtagsInText:content checkingURLOverlap:YES];

for (NSTextCheckingResult *result in URLs) {
DWAccessibilityAction *openURLAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Open link", @"Open link"), result.URL.absoluteString] target:target selector:selector];
openURLAction.actionType = DWAccessibilityActionTypeOpenUrl;
openURLAction.url = result.URL;
[actions addObject:openURLAction];
}

for (TwitterTextEntity *entity in mentions) {
NSString *user = [content substringWithRange:entity.range];
DWAccessibilityAction *openUserAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"View Profile", @"View Profile"), user] target:target selector:selector];
openUserAction.actionType = DWAccessibilityActionTypeOpenUser;
openUserAction.user = user;
[actions addObject:openUserAction];
}

for (TwitterTextEntity *entity in hashtags) {
NSString *hashtag = [content substringWithRange:entity.range];
DWAccessibilityAction *openHashtagAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"View Hashtag", @"View Hashtag"), hashtag] target:target selector:selector];
openHashtagAction.actionType = DWAccessibilityActionTypeOpenHashtag;
openHashtagAction.hashtag = [hashtag substringFromIndex:1];
[actions addObject:openHashtagAction];
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSMutableArray *actions = [NSMutableArray new];

NSString *content = status.reblog ? status.reblog.content : status.content;

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray<NSTextCheckingResult *> *URLs = [detector matchesInString:status.content options:0 range:NSMakeRange(0, content.length)];
NSArray *mentions = [TwitterText mentionedScreenNamesInText:content];
NSArray *hashtags = [TwitterText hashtagsInText:content checkingURLOverlap:YES];

for (NSTextCheckingResult *result in URLs) {
DWAccessibilityAction *openURLAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Open link", @"Open link"), result.URL.absoluteString] target:target selector:selector];
openURLAction.actionType = DWAccessibilityActionTypeOpenUrl;
openURLAction.url = result.URL;
[actions addObject:openURLAction];
}

for (TwitterTextEntity *entity in mentions) {
NSString *user = [content substringWithRange:entity.range];
DWAccessibilityAction *openUserAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"View Profile", @"View Profile"), user] target:target selector:selector];
openUserAction.actionType = DWAccessibilityActionTypeOpenUser;
openUserAction.user = user;
[actions addObject:openUserAction];
}

for (TwitterTextEntity *entity in hashtags) {
NSString *hashtag = [content substringWithRange:entity.range];
DWAccessibilityAction *openHashtagAction = [[DWAccessibilityAction alloc] initWithName:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"View Hashtag", @"View Hashtag"), hashtag] target:target selector:selector];
openHashtagAction.actionType = DWAccessibilityActionTypeOpenHashtag;
openHashtagAction.hashtag = [hashtag substringFromIndex:1];
[actions addObject:openHashtagAction];
}

dispatch_async(dispatch_get_main_queue(), ^{
if (completion) {
completion(status, actions);
}
});

});

return actions;
}

@end
26 changes: 23 additions & 3 deletions DireFloof/DWNotificationsViewController.m
Expand Up @@ -266,17 +266,37 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
DWTimelineTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MentionCell"];
cell.notification = notification;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:notification.status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];


MSStatus *status = notification.status;

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
else
{
DWTimelineNotificationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NotificationCell"];
cell.notification = notification;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:notification.status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

MSStatus *status = notification.status;

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}

Expand Down
60 changes: 48 additions & 12 deletions DireFloof/DWProfileViewController.m
Expand Up @@ -1156,8 +1156,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TimelineMediaReblogCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
else
Expand All @@ -1166,8 +1172,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
}
Expand All @@ -1177,8 +1189,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TimelineMediaReblogCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
else
Expand All @@ -1187,8 +1205,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
}
Expand All @@ -1199,8 +1223,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TimelineMediaCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
else
Expand All @@ -1209,8 +1239,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView timelineCellForRowAtInde

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];
return cell;
}
}
Expand Down
62 changes: 52 additions & 10 deletions DireFloof/DWTimelineViewController.m
Expand Up @@ -333,7 +333,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TimelineMediaReblogCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];
cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
Expand All @@ -343,7 +350,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];
cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
Expand All @@ -354,8 +368,15 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TimelineMediaReblogCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
else
Expand All @@ -364,8 +385,15 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
}
Expand All @@ -382,8 +410,15 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
DWTimelineMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:isThreadStatus ? @"TimelineMediaThreadCell" : @"TimelineMediaCell"];
cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;
}
else
Expand All @@ -392,8 +427,15 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N

cell.status = status;
cell.delegate = self;
cell.accessibilityCustomActions = [DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:)];

cell.accessibilityCustomActions = nil;

NSString *statusId = [status._id copy];
[DWAccessibilityAction accessibilityActionsForStatus:status atIndexPath:indexPath withTarget:self andSelector:@selector(cellAccessibilityActionSelected:) withCompletion:^(MSStatus *status, NSArray *actions) {
if ([status._id isEqualToString:statusId]) {
cell.accessibilityCustomActions = actions;
}
}];

return cell;

}
Expand Down

0 comments on commit 7c5b708

Please sign in to comment.