Skip to content

Commit f5e88e8

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

File tree

5 files changed

+56
-103
lines changed

5 files changed

+56
-103
lines changed

Riot/Managers/Activities/UserActivities.h

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

Riot/Managers/Activities/UserActivities.m

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

Riot/Managers/Activities/UserActivityService.swift

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,28 @@
1515
//
1616

1717
import Foundation
18+
import CoreSpotlight
1819
import MatrixSDK
1920

2021
@objcMembers
2122
class UserActivityService: NSObject {
2223

2324
// MARK: - Constants
25+
/// The NSUserActivity type for rooms
26+
public static let roomActivityType = "org.matrix.room"
2427

25-
// TODO: Move constants in here from UserActivities.m
28+
/// Keys to use inside the userInfo dict
29+
public enum UserInfoKeys: String, RawRepresentable {
30+
/// Key for a room id usually the internal id prefix with `!`
31+
case roomId = "roomID"
32+
33+
/// Key to store a user id
34+
case userId = "userID"
35+
}
36+
37+
// objc reexport
38+
public static let userInfoKeyRoomId = UserInfoKeys.roomId.rawValue
39+
public static let userInfoKeyUserId = UserInfoKeys.userId.rawValue
2640

2741
// MARK: - Properties
2842

@@ -39,12 +53,46 @@ class UserActivityService: NSObject {
3953

4054
// MARK: - Public
4155

42-
func update(_ activity: NSUserActivity, from room: MXRoom) {
56+
func update(_ userActivity: NSUserActivity, from room: MXRoom) {
4357
// TODO: Convert objc code into here.
58+
userActivity.title = room.summary.displayname
59+
60+
userActivity.requiredUserInfoKeys = [ UserInfoKeys.roomId.rawValue ]
61+
var userInfo = [UserInfoKeys: Any]()
62+
userInfo[UserInfoKeys.roomId] = room.roomId
63+
if room.isDirect {
64+
userInfo[UserInfoKeys.userId] = room.directUserId
65+
}
66+
userActivity.userInfo = userInfo
67+
68+
// TODO: if we add more userActivities, a `org.matrix.room` prefix should probably be added
69+
userActivity.persistentIdentifier = room.roomId
70+
71+
userActivity.isEligibleForHandoff = true
72+
userActivity.isEligibleForSearch = true
73+
userActivity.isEligibleForPrediction = true
74+
75+
var contentAttributes: CSSearchableItemAttributeSet
76+
if #available(iOS 14.0, *) {
77+
contentAttributes = CSSearchableItemAttributeSet(contentType: UTType.item)
78+
} else {
79+
contentAttributes = CSSearchableItemAttributeSet(itemContentType: "public.item")
80+
}
81+
82+
contentAttributes.title = room.summary.displayname
83+
contentAttributes.displayName = room.summary.displayname
84+
contentAttributes.contentDescription = room.summary.lastMessage.text
85+
// TODO: contentAttributes.thumbnailURL
86+
contentAttributes.domainIdentifier = room.roomId
87+
// TODO: contentAttributes.weakRelatedUniqueIdentifier (is this needed? does it break anything else?)
88+
contentAttributes.instantMessageAddresses = [ room.roomId ]
89+
90+
userActivity.contentAttributeSet = contentAttributes
4491
}
4592

4693
func didLeaveRoom(_ notification: Notification) {
4794
guard let roomId = notification.userInfo?[kMXSessionNotificationRoomIdKey] as? String else { return }
4895
// TODO: Remove the room from spotlight
96+
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: [roomId], completionHandler: { })
4997
}
5098
}

Riot/Modules/Application/LegacyAppDelegate.m

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@
5858
#import "Riot-Swift.h"
5959
#import "PushNotificationService.h"
6060

61-
#import "UserActivities.h"
62-
6361
//#define MX_CALL_STACK_OPENWEBRTC
6462
#ifdef MX_CALL_STACK_OPENWEBRTC
6563
#import <MatrixOpenWebRTCWrapper/MatrixOpenWebRTCWrapper.h>
@@ -751,9 +749,9 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
751749
{
752750
continueUserActivity = [self handleUniversalLink:userActivity];
753751
}
754-
else if ([userActivity.activityType isEqualToString:kUserActivityTypeMatrixRoom])
752+
else if ([userActivity.activityType isEqualToString:[UserActivityService roomActivityType]])
755753
{
756-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
754+
NSString *roomID = userActivity.userInfo[[UserActivityService userInfoKeyRoomId]];
757755
if (!roomID)
758756
return continueUserActivity;
759757

@@ -766,7 +764,7 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
766764
INInteraction *interaction = userActivity.interaction;
767765

768766
// roomID provided by Siri intent
769-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
767+
NSString *roomID = userActivity.userInfo[[UserActivityService userInfoKeyRoomId]];
770768

771769
// We've launched from calls history list
772770
if (!roomID)

Riot/Modules/Room/RoomViewController.m

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,6 @@
130130

131131
#import "MXSDKOptions.h"
132132

133-
#import "UserActivities.h"
134-
135133
#import "Riot-Swift.h"
136134

137135
NSNotificationName const RoomCallTileTappedNotification = @"RoomCallTileTappedNotification";
@@ -595,7 +593,7 @@ - (void)viewWillAppear:(BOOL)animated
595593
category:AnalyticsNoficationsCategory];
596594
}
597595

598-
[self becomeCurrentActivity];
596+
[self updateUserActivity];
599597
}
600598

601599
- (void)viewWillDisappear:(BOOL)animated
@@ -2001,51 +1999,18 @@ - (void)setupActions {
20011999
roomInputView.actionsBar.actionItems = actionItems;
20022000
}
20032001

2004-
- (void)becomeCurrentActivity
2002+
- (void)updateUserActivity
20052003
{
20062004
if (!self.userActivity) {
2007-
self.userActivity = [[NSUserActivity alloc] initWithActivityType:kUserActivityTypeMatrixRoom];
2005+
self.userActivity = [[NSUserActivity alloc] initWithActivityType:[UserActivityService roomActivityType]];
20082006
}
20092007

20102008
// TODO: Move everything else into the method called below
20112009
[UserActivityService.shared update:self.userActivity from:self.roomDataSource.room];
20122010

2013-
self.userActivity.title = self.roomDataSource.room.summary.displayname;
2014-
self.userActivity.requiredUserInfoKeys = [[NSSet alloc] initWithObjects:kUserActivityInfoRoomId, nil];
2015-
2016-
// user info
2017-
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
2018-
[userInfo setObject:self.roomDataSource.roomId forKey:kUserActivityInfoRoomId];
2019-
if ([self.roomDataSource.room isDirect]) {
2020-
[userInfo setObject:self.roomDataSource.room.directUserId forKey:kUserActivityInfoUserId];
2021-
}
2022-
self.userActivity.userInfo = userInfo;
2023-
20242011
// TODO: add a NSUserActivityDelegate to save the current text in the userinfo of the activity
20252012
// self.userActivity.delegate = self;
20262013
// self.userActivity.needsSave = true;
2027-
self.userActivity.persistentIdentifier = self.roomDataSource.roomId;
2028-
2029-
self.userActivity.eligibleForHandoff = true;
2030-
self.userActivity.eligibleForSearch = true;
2031-
self.userActivity.eligibleForPrediction = true;
2032-
2033-
CSSearchableItemAttributeSet *contentAttribute;
2034-
if (@available(iOS 14.0, *)) {
2035-
contentAttribute = [[CSSearchableItemAttributeSet alloc] initWithContentType:UTTypeItem];
2036-
} else {
2037-
contentAttribute = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"public.item"];
2038-
}
2039-
2040-
contentAttribute.title = self.roomDataSource.room.summary.displayname;
2041-
contentAttribute.displayName = self.roomDataSource.room.summary.displayname;
2042-
contentAttribute.contentDescription = self.roomDataSource.room.summary.lastMessage.text;
2043-
2044-
// TODO: contentAttribute.thumbnailURL =
2045-
// TODO: accountHandles of everyone in the room
2046-
contentAttribute.instantMessageAddresses = [[NSArray alloc] initWithObjects:self.roomDataSource.roomId, nil];
2047-
2048-
self.userActivity.contentAttributeSet = contentAttribute;
20492014
}
20502015

20512016
- (void)roomInputToolbarViewPresentStickerPicker

0 commit comments

Comments
 (0)