Skip to content

Commit 8d0a7e3

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

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>
@@ -750,9 +748,9 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
750748
{
751749
continueUserActivity = [self handleUniversalLink:userActivity];
752750
}
753-
else if ([userActivity.activityType isEqualToString:kUserActivityTypeMatrixRoom])
751+
else if ([userActivity.activityType isEqualToString:[UserActivityService roomActivityType]])
754752
{
755-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
753+
NSString *roomID = userActivity.userInfo[[UserActivityService userInfoKeyRoomId]];
756754
if (!roomID)
757755
return continueUserActivity;
758756

@@ -765,7 +763,7 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
765763
INInteraction *interaction = userActivity.interaction;
766764

767765
// roomID provided by Siri intent
768-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
766+
NSString *roomID = userActivity.userInfo[[UserActivityService userInfoKeyRoomId]];
769767

770768
// We've launched from calls history list
771769
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";
@@ -593,7 +591,7 @@ - (void)viewWillAppear:(BOOL)animated
593591
category:AnalyticsNoficationsCategory];
594592
}
595593

596-
[self becomeCurrentActivity];
594+
[self updateUserActivity];
597595
}
598596

599597
- (void)viewWillDisappear:(BOOL)animated
@@ -1997,51 +1995,18 @@ - (void)setupActions {
19971995
roomInputView.actionsBar.actionItems = actionItems;
19981996
}
19991997

2000-
- (void)becomeCurrentActivity
1998+
- (void)updateUserActivity
20011999
{
20022000
if (!self.userActivity) {
2003-
self.userActivity = [[NSUserActivity alloc] initWithActivityType:kUserActivityTypeMatrixRoom];
2001+
self.userActivity = [[NSUserActivity alloc] initWithActivityType:[UserActivityService roomActivityType]];
20042002
}
20052003

20062004
// TODO: Move everything else into the method called below
20072005
[UserActivityService.shared update:self.userActivity from:self.roomDataSource.room];
20082006

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

20472012
- (void)roomInputToolbarViewPresentStickerPicker

0 commit comments

Comments
 (0)