Skip to content

Commit 3fdb74b

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

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>
@@ -751,9 +751,9 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
751751
{
752752
continueUserActivity = [self handleUniversalLink:userActivity];
753753
}
754-
else if ([userActivity.activityType isEqualToString:kUserActivityTypeMatrixRoom])
754+
else if ([userActivity.activityType isEqualToString:MXUserActivityTypeRoom])
755755
{
756-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
756+
NSString *roomID = userActivity.userInfo[UserActivityFieldRoom];
757757
if (!roomID)
758758
return continueUserActivity;
759759

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

768768
// roomID provided by Siri intent
769-
NSString *roomID = userActivity.userInfo[kUserActivityInfoRoomId];
769+
NSString *roomID = userActivity.userInfo[UserActivityFieldRoom];
770770

771771
// We've launched from calls history list
772772
if (!roomID)

Riot/Modules/Room/RoomViewController.m

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

129129
#import "TypingUserInfo.h"
130+
#import "UserActivityService.h"
130131

131132
#import "MXSDKOptions.h"
132133

133-
#import "UserActivities.h"
134-
135134
#import "Riot-Swift.h"
136135

137136
NSNotificationName const RoomCallTileTappedNotification = @"RoomCallTileTappedNotification";
@@ -595,7 +594,7 @@ - (void)viewWillAppear:(BOOL)animated
595594
category:AnalyticsNoficationsCategory];
596595
}
597596

598-
[self becomeCurrentActivity];
597+
[self updateUserActivity];
599598
}
600599

601600
- (void)viewWillDisappear:(BOOL)animated
@@ -2001,51 +2000,17 @@ - (void)setupActions {
20012000
roomInputView.actionsBar.actionItems = actionItems;
20022001
}
20032002

2004-
- (void)becomeCurrentActivity
2003+
- (void)updateUserActivity
20052004
{
20062005
if (!self.userActivity) {
2007-
self.userActivity = [[NSUserActivity alloc] initWithActivityType:kUserActivityTypeMatrixRoom];
2006+
self.userActivity = [[NSUserActivity alloc] initWithActivityType:MXUserActivityTypeRoom];
20082007
}
20092008

2010-
// 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

Riot/SupportingFiles/Riot-Bridging-Header.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,4 @@
4040
#import "BuildInfo.h"
4141
#import "RoomMemberDetailsViewController.h"
4242
#import "Tools.h"
43+
#import "UserActivityService.h"

0 commit comments

Comments
 (0)