Skip to content

Commit 61079ef

Browse files
committed
move NSUserActitivy update code into UserActivityService
Signed-off-by: Finn Behrens <[email protected]>
1 parent 3685d80 commit 61079ef

File tree

6 files changed

+58
-88
lines changed

6 files changed

+58
-88
lines changed

Riot/Managers/Activities/UserActivities.m

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

Riot/Managers/Activities/UserActivities.h renamed to Riot/Managers/Activities/UserActivityService.h

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,18 @@
1414
// limitations under the License.
1515
//
1616

17-
#ifndef UserActivities_h
18-
#define UserActivities_h
17+
#ifndef UserActivityService_h
18+
#define UserActivityService_h
1919

20-
#import <Foundation/Foundation.h>
20+
/// MXUserActivityTypes identifes user activities
21+
typedef NSString *const UserActivityType NS_TYPED_EXTENSIBLE_ENUM;
2122

22-
/**
23-
NSUserActivity types for rooms
24-
*/
25-
FOUNDATION_EXPORT NSString *const kUserActivityTypeMatrixRoom;
23+
static UserActivityType const MXUserActivityTypeRoom = @"org.matrix.room";
2624

27-
/**
28-
UserInfo field for the room id
29-
*/
30-
FOUNDATION_EXPORT NSString *const kUserActivityInfoRoomId;
25+
/// MXUserActivityFields identifies fields in the userInfo of a UserActivity
26+
typedef NSString *const UserActivityField NS_TYPED_EXTENSIBLE_ENUM;
3127

32-
/**
33-
UserInfo field for the user id
34-
*/
35-
FOUNDATION_EXPORT NSString *const kUserActivityInfoUserId;
28+
static UserActivityField const UserActivityFieldRoom = @"roomID";
29+
static UserActivityField const UserActivityFieldUser = @"userID";
3630

37-
#endif /* UserActivities_h */
31+
#endif /* UserActivityService_h */

Riot/Managers/Activities/UserActivityService.swift

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,12 @@
1515
//
1616

1717
import Foundation
18+
import CoreSpotlight
1819
import MatrixSDK
1920

2021
@objcMembers
2122
class UserActivityService: NSObject {
2223

23-
// MARK: - Constants
24-
25-
// TODO: Move constants in here from UserActivities.m
26-
2724
// MARK: - Properties
2825

2926
#warning("This is initialised lazily so currently only observes left rooms if RoomViewController has been presented.")
@@ -39,12 +36,46 @@ class UserActivityService: NSObject {
3936

4037
// MARK: - Public
4138

42-
func update(_ activity: NSUserActivity, from room: MXRoom) {
43-
// TODO: Convert objc code into here.
39+
func update(_ userActivity: NSUserActivity, from room: MXRoom) {
40+
userActivity.title = room.summary.displayname
41+
42+
userActivity.requiredUserInfoKeys = [ UserActivityField.room.rawValue ]
43+
var userInfo = [String: Any]()
44+
userInfo[UserActivityField.room.rawValue] = room.roomId
45+
if room.isDirect {
46+
userInfo[UserActivityField.user.rawValue] = room.directUserId
47+
}
48+
userActivity.userInfo = userInfo
49+
50+
// TODO: if we add more userActivities, a `org.matrix.room` prefix should probably be added
51+
userActivity.persistentIdentifier = room.roomId
52+
53+
userActivity.isEligibleForHandoff = true
54+
userActivity.isEligibleForSearch = true
55+
userActivity.isEligibleForPrediction = true
56+
57+
var contentAttributes: CSSearchableItemAttributeSet
58+
if #available(iOS 14.0, *) {
59+
contentAttributes = CSSearchableItemAttributeSet(contentType: UTType.item)
60+
} else {
61+
contentAttributes = CSSearchableItemAttributeSet(itemContentType: "public.item")
62+
}
63+
64+
contentAttributes.title = room.summary.displayname
65+
contentAttributes.displayName = room.summary.displayname
66+
contentAttributes.contentDescription = room.summary.lastMessage.text
67+
// TODO: contentAttributes.thumbnailURL
68+
contentAttributes.domainIdentifier = room.roomId
69+
contentAttributes.relatedUniqueIdentifier = room.summary.lastMessage.eventId
70+
// TODO: contentAttributes.weakRelatedUniqueIdentifier (is this needed? does it break anything else?)
71+
contentAttributes.instantMessageAddresses = [ room.roomId ]
72+
73+
userActivity.contentAttributeSet = contentAttributes
4474
}
4575

4676
func didLeaveRoom(_ notification: Notification) {
4777
guard let roomId = notification.userInfo?[kMXSessionNotificationRoomIdKey] as? String else { return }
48-
// TODO: Remove the room from spotlight
78+
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: [roomId], completionHandler: { })
79+
CSSearchableIndex.default().deleteSearchableItems(withDomainIdentifiers: [roomId], completionHandler: nil)
4980
}
5081
}

Riot/Modules/Application/LegacyAppDelegate.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@
5555
#import "MXSession+Riot.h"
5656
#import "MXRoom+Riot.h"
5757

58+
#import "UserActivityService.h"
59+
5860
#import "Riot-Swift.h"
5961
#import "PushNotificationService.h"
6062

61-
#import "UserActivities.h"
62-
6363
//#define MX_CALL_STACK_OPENWEBRTC
6464
#ifdef MX_CALL_STACK_OPENWEBRTC
6565
#import <MatrixOpenWebRTCWrapper/MatrixOpenWebRTCWrapper.h>
@@ -747,9 +747,9 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
747747
{
748748
continueUserActivity = [self handleUniversalLink:userActivity];
749749
}
750-
else if ([userActivity.activityType isEqualToString:kUserActivityTypeMatrixRoom])
750+
else if ([userActivity.activityType isEqualToString:MXUserActivityTypeRoom])
751751
{
752-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
752+
NSString *roomID = userActivity.userInfo[UserActivityFieldRoom];
753753
if (!roomID)
754754
return continueUserActivity;
755755

@@ -762,7 +762,7 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
762762
INInteraction *interaction = userActivity.interaction;
763763

764764
// roomID provided by Siri intent
765-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
765+
NSString *roomID = userActivity.userInfo[UserActivityFieldRoom];
766766

767767
// We've launched from calls history list
768768
if (!roomID)

Riot/Modules/Room/RoomViewController.m

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,10 @@
129129
#import "SecurityViewController.h"
130130

131131
#import "TypingUserInfo.h"
132+
#import "UserActivityService.h"
132133

133134
#import "MXSDKOptions.h"
134135

135-
#import "UserActivities.h"
136-
137136
#import "Riot-Swift.h"
138137

139138
NSNotificationName const RoomCallTileTappedNotification = @"RoomCallTileTappedNotification";
@@ -614,7 +613,7 @@ - (void)viewWillAppear:(BOOL)animated
614613
category:AnalyticsNoficationsCategory];
615614
}
616615

617-
[self becomeCurrentActivity];
616+
[self updateUserActivity];
618617
}
619618

620619
- (void)viewWillDisappear:(BOOL)animated
@@ -2035,51 +2034,17 @@ - (void)setupActions {
20352034
roomInputView.actionsBar.actionItems = actionItems;
20362035
}
20372036

2038-
- (void)becomeCurrentActivity
2037+
- (void)updateUserActivity
20392038
{
20402039
if (!self.userActivity) {
2041-
self.userActivity = [[NSUserActivity alloc] initWithActivityType:kUserActivityTypeMatrixRoom];
2040+
self.userActivity = [[NSUserActivity alloc] initWithActivityType:MXUserActivityTypeRoom];
20422041
}
20432042

2044-
// TODO: Move everything else into the method called below
20452043
[UserActivityService.shared update:self.userActivity from:self.roomDataSource.room];
20462044

2047-
self.userActivity.title = self.roomDataSource.room.summary.displayname;
2048-
self.userActivity.requiredUserInfoKeys = [[NSSet alloc] initWithObjects:kUserActivityInfoRoomId, nil];
2049-
2050-
// user info
2051-
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
2052-
[userInfo setObject:self.roomDataSource.roomId forKey:kUserActivityInfoRoomId];
2053-
if ([self.roomDataSource.room isDirect]) {
2054-
[userInfo setObject:self.roomDataSource.room.directUserId forKey:kUserActivityInfoUserId];
2055-
}
2056-
self.userActivity.userInfo = userInfo;
2057-
20582045
// TODO: add a NSUserActivityDelegate to save the current text in the userinfo of the activity
20592046
// self.userActivity.delegate = self;
20602047
// self.userActivity.needsSave = true;
2061-
self.userActivity.persistentIdentifier = self.roomDataSource.roomId;
2062-
2063-
self.userActivity.eligibleForHandoff = true;
2064-
self.userActivity.eligibleForSearch = true;
2065-
self.userActivity.eligibleForPrediction = true;
2066-
2067-
CSSearchableItemAttributeSet *contentAttribute;
2068-
if (@available(iOS 14.0, *)) {
2069-
contentAttribute = [[CSSearchableItemAttributeSet alloc] initWithContentType:UTTypeItem];
2070-
} else {
2071-
contentAttribute = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"public.item"];
2072-
}
2073-
2074-
contentAttribute.title = self.roomDataSource.room.summary.displayname;
2075-
contentAttribute.displayName = self.roomDataSource.room.summary.displayname;
2076-
contentAttribute.contentDescription = self.roomDataSource.room.summary.lastMessage.text;
2077-
2078-
// TODO: contentAttribute.thumbnailURL =
2079-
// TODO: accountHandles of everyone in the room
2080-
contentAttribute.instantMessageAddresses = [[NSArray alloc] initWithObjects:self.roomDataSource.roomId, nil];
2081-
2082-
self.userActivity.contentAttributeSet = contentAttribute;
20832048
}
20842049

20852050
- (void)roomInputToolbarViewPresentStickerPicker

Riot/SupportingFiles/Riot-Bridging-Header.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,4 @@
4545
#import "GroupDetailsViewController.h"
4646
#import "RoomInputToolbarView.h"
4747
#import "NSArray+Element.h"
48+
#import "UserActivityService.h"

0 commit comments

Comments
 (0)