From d5ba3ecc297bb82f81ca958ece316048a7035a3b Mon Sep 17 00:00:00 2001 From: Aram Sargsyan Date: Sat, 26 Aug 2017 15:54:25 +0400 Subject: [PATCH] Improved cell rendering --- Riot/Views/RoomList/RoomTableViewCell.h | 2 +- Riot/Views/RoomList/RoomTableViewCell.m | 4 +- RiotShareExtension/Info.plist | 6 +- RiotShareExtension/Model/ShareDataSource.h | 9 +-- RiotShareExtension/Model/ShareDataSource.m | 14 +--- .../Model/ShareExtensionManager.h | 17 +++-- .../Model/ShareExtensionManager.m | 68 ++++++++++--------- 7 files changed, 58 insertions(+), 62 deletions(-) diff --git a/Riot/Views/RoomList/RoomTableViewCell.h b/Riot/Views/RoomList/RoomTableViewCell.h index c2ab90f1e..ac262029d 100644 --- a/Riot/Views/RoomList/RoomTableViewCell.h +++ b/Riot/Views/RoomList/RoomTableViewCell.h @@ -33,7 +33,7 @@ */ - (void)render:(MXRoom *)room; -- (void)renderWithSummary:(MXRoomSummary *)roomSummary; +- (void)renderWithSummary:(MXRoomSummary *)roomSummary restClient:(MXRestClient *)restClient; /** Get the cell height. diff --git a/Riot/Views/RoomList/RoomTableViewCell.m b/Riot/Views/RoomList/RoomTableViewCell.m index 5e2b3f5e8..d53d5a1a8 100644 --- a/Riot/Views/RoomList/RoomTableViewCell.m +++ b/Riot/Views/RoomList/RoomTableViewCell.m @@ -59,9 +59,9 @@ self.encryptedRoomIcon.hidden = !room.state.isEncrypted; } -- (void)renderWithSummary:(MXRoomSummary *)roomSummary +- (void)renderWithSummary:(MXRoomSummary *)roomSummary restClient:(MXRestClient *)restClient { - //[self.avatarImageView setImageURL: urlOfContentThumbnail:roomAvatarUrl toFitViewSize:self.avatarImageView.frame.size withMethod:MXThumbnailingMethodCrop] withType:nil andImageOrientation:UIImageOrientationUp previewImage:nil]; + [self.avatarImageView setImageURL:[restClient urlOfContentThumbnail:roomSummary.avatar toFitViewSize:self.avatarImageView.frame.size withMethod:MXThumbnailingMethodCrop] withType:nil andImageOrientation:UIImageOrientationUp previewImage:nil]; self.titleLabel.text = roomSummary.displayname; diff --git a/RiotShareExtension/Info.plist b/RiotShareExtension/Info.plist index a1e0e17d0..f4553d32a 100644 --- a/RiotShareExtension/Info.plist +++ b/RiotShareExtension/Info.plist @@ -29,13 +29,13 @@ NSExtensionActivationRule NSExtensionActivationSupportsMovieWithMaxCount - 0 + 1 NSExtensionActivationSupportsImageWithMaxCount 5 NSExtensionActivationSupportsWebURLWithMaxCount - 0 + 1 NSExtensionActivationSupportsText - + NSExtensionPointIdentifier diff --git a/RiotShareExtension/Model/ShareDataSource.h b/RiotShareExtension/Model/ShareDataSource.h index ecba6b299..f7a574ca9 100644 --- a/RiotShareExtension/Model/ShareDataSource.h +++ b/RiotShareExtension/Model/ShareDataSource.h @@ -22,16 +22,11 @@ typedef NS_ENUM(NSInteger, ShareDataSourceMode) DataSourceModeRooms }; -@protocol ShareDataSourceDelegate - -- (void)refreshRooms; - -@end @interface ShareDataSource : MXKRecentsDataSource -//@property (weak) id delegate; - - (instancetype)initWithMode:(ShareDataSourceMode)dataSourceMode; +- (MXRoomSummary *)getRoomSummaryAtIndexPath:(NSIndexPath *)indexPath; + @end diff --git a/RiotShareExtension/Model/ShareDataSource.m b/RiotShareExtension/Model/ShareDataSource.m index 7c2f48bf0..d10bebc1d 100644 --- a/RiotShareExtension/Model/ShareDataSource.m +++ b/RiotShareExtension/Model/ShareDataSource.m @@ -15,6 +15,7 @@ */ #import "ShareDataSource.h" +#import "ShareExtensionManager.h" #import "RoomTableViewCell.h" @interface ShareDataSource () @@ -48,16 +49,7 @@ [self.recentRooms removeAllObjects]; [self.recentPeople removeAllObjects]; - // Force account manager to reload account from the local storage. - [[MXKAccountManager sharedManager] forceReloadAccounts]; - - // Get the first active account - MXKAccount *account = [MXKAccountManager sharedManager].activeAccounts.firstObject; - - MXFileStore *fileStore = [[MXFileStore alloc] initWithCredentials:account.mxCredentials]; - - //NSMutableArray *rooms = [NSMutableArray array]; - //NSMutableArray *people = [NSMutableArray array]; + MXFileStore *fileStore = [[MXFileStore alloc] initWithCredentials:[ShareExtensionManager sharedManager].account.mxCredentials]; [fileStore asyncRoomsSummaries:^(NSArray * _Nonnull roomsSummaries) { for (MXRoomSummary *roomSummary in roomsSummaries) @@ -125,7 +117,7 @@ MXRoomSummary *roomSummary = [self getRoomSummaryAtIndexPath:indexPath]; - [cell renderWithSummary:roomSummary]; + [cell renderWithSummary:roomSummary restClient:[ShareExtensionManager sharedManager].mxRestClient]; if (!roomSummary.displayname.length && !cell.titleLabel.text.length) { diff --git a/RiotShareExtension/Model/ShareExtensionManager.h b/RiotShareExtension/Model/ShareExtensionManager.h index a67b14e05..bb187fe2e 100644 --- a/RiotShareExtension/Model/ShareExtensionManager.h +++ b/RiotShareExtension/Model/ShareExtensionManager.h @@ -42,7 +42,12 @@ extern NSString *const kShareExtensionManagerDidChangeMXSessionNotification; @optional -- (void)shareExtensionManager:(ShareExtensionManager *)extensionManager didStartSendingContentToRoom:(MXRoom *)room; +/** + Called when the manager starts sending the content to a room + @param extensionManager the ShareExtensionManager object that called the method + @param roomID the ID of the room + */ +- (void)shareExtensionManager:(ShareExtensionManager *)extensionManager didStartSendingContentToRoom:(NSString *)roomID; /** Called when the progress of the uploading media changes @@ -70,10 +75,8 @@ extern NSString *const kShareExtensionManagerDidChangeMXSessionNotification; */ @property (nonatomic) SharePresentingViewController *primaryViewController; -/** - The associated matrix session (nil by default). - */ -@property (nonatomic, readonly) MXSession *mxSession; +@property (nonatomic, readonly) MXKAccount *account; +@property (nonatomic, readonly) MXRestClient *mxRestClient; /** A delegate used to notify about needed UI changes when sharing @@ -87,11 +90,11 @@ extern NSString *const kShareExtensionManagerDidChangeMXSessionNotification; /** Send the content that the user has chosen to a room - @param room the room to send the content to + @param roomID the ID of the room to send the content to @param failureBlock the code to be executed when sharing has failed for whatever reason note: there is no "successBlock" parameter because when the sharing succeds, the extension needs to close itself */ -- (void)sendContentToRoom:(MXRoom *)room failureBlock:(void(^)())failureBlock; +- (void)sendContentToRoom:(NSString *)roomID failureBlock:(void(^)())failureBlock; /** Checks if there is an image in the user chosen content diff --git a/RiotShareExtension/Model/ShareExtensionManager.m b/RiotShareExtension/Model/ShareExtensionManager.m index cf20dd4dc..196c2e7ba 100644 --- a/RiotShareExtension/Model/ShareExtensionManager.m +++ b/RiotShareExtension/Model/ShareExtensionManager.m @@ -32,13 +32,16 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) @interface ShareExtensionManager () -@property NSArray *rooms; -@property NSArray *people; +@property (nonatomic, readwrite) MXKAccount *account; +@property (nonatomic, readwrite) MXRestClient *mxRestClient; -@property NSMutableArray *pendingImages; -@property NSMutableDictionary *imageUploadProgresses; -@property ImageCompressionMode imageCompressionMode; -@property CGFloat actualLargeSize; +@property (nonatomic) NSArray *rooms; +@property (nonatomic) NSArray *people; + +@property (nonatomic) NSMutableArray *pendingImages; +@property (nonatomic) NSMutableDictionary *imageUploadProgresses; +@property (nonatomic) ImageCompressionMode imageCompressionMode; +@property (nonatomic) CGFloat actualLargeSize; @end @@ -52,7 +55,6 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) static ShareExtensionManager *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; sharedInstance.pendingImages = [NSMutableArray array]; @@ -60,19 +62,19 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) [[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(onMediaUploadProgress:) name:kMXMediaUploadProgressNotification object:nil]; - // Add observer to handle logout - /*[[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(checkUserAccount) name:kMXKAccountManagerDidRemoveAccountNotification object:nil];*/ - - // Add observer on the Extension host - /*[[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(checkUserAccount) name:NSExtensionHostWillEnterForegroundNotification object:nil];*/ - /*[[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(suspendSession) name:NSExtensionHostDidEnterBackgroundNotification object:nil];*/ - MXSDKOptions *sdkOptions = [MXSDKOptions sharedInstance]; - // Apply the application group sdkOptions.applicationGroupIdentifier = @"group.im.vector"; // Disable identicon use sdkOptions.disableIdenticonUseForUserAvatar = YES; + + // Force account manager to reload account from the local storage. + [[MXKAccountManager sharedManager] forceReloadAccounts]; + + // Save the first active account + sharedInstance.account = [MXKAccountManager sharedManager].activeAccounts.firstObject; + + sharedInstance.mxRestClient = [[MXRestClient alloc] initWithCredentials:sharedInstance.account.mxCredentials andOnUnrecognizedCertificateBlock:nil]; }); return sharedInstance; } @@ -85,7 +87,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) _shareExtensionContext = shareExtensionContext; } -- (void)sendContentToRoom:(MXRoom *)room failureBlock:(void(^)())failureBlock +- (void)sendContentToRoom:(NSString *)roomID failureBlock:(void(^)())failureBlock { NSString *UTTypeText = (__bridge NSString *)kUTTypeText; NSString *UTTypeURL = (__bridge NSString *)kUTTypeURL; @@ -112,7 +114,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) if (weakSelf) { typeof(self) self = weakSelf; - [self sendFileWithUrl:fileUrl toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendFileWithUrl:fileUrl toRoom:room extensionItem:item failureBlock:failureBlock]; } }); @@ -129,7 +131,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) if (weakSelf) { typeof(self) self = weakSelf; - [self sendText:text toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendText:text toRoom:room extensionItem:item failureBlock:failureBlock]; } }); @@ -146,7 +148,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) if (weakSelf) { typeof(self) self = weakSelf; - [self sendText:url.absoluteString toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendText:url.absoluteString toRoom:room extensionItem:item failureBlock:failureBlock]; } }); @@ -167,7 +169,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) { UIImage *firstImage = [UIImage imageWithData:self.pendingImages.firstObject]; UIAlertController *compressionPrompt = [self compressionPromptForImage:firstImage shareBlock:^{ - [self sendImages:self.pendingImages withProviders:item.attachments toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendImages:self.pendingImages withProviders:item.attachments toRoom:room extensionItem:item failureBlock:failureBlock]; }]; [self.delegate shareExtensionManager:self showImageCompressionPrompt:compressionPrompt]; @@ -185,7 +187,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) if (weakSelf) { typeof(self) self = weakSelf; - [self sendVideo:videoLocalUrl toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendVideo:videoLocalUrl toRoom:room extensionItem:item failureBlock:failureBlock]; } }); @@ -202,7 +204,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) if (weakSelf) { typeof(self) self = weakSelf; - [self sendVideo:videoLocalUrl toRoom:room extensionItem:item failureBlock:failureBlock]; + //[self sendVideo:videoLocalUrl toRoom:room extensionItem:item failureBlock:failureBlock]; } }); @@ -405,11 +407,11 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) return compressionPrompt; } -- (void)didStartSendingToRoom:(MXRoom *)room +- (void)didStartSendingToRoom:(NSString *)roomID { if ([self.delegate respondsToSelector:@selector(shareExtensionManager:didStartSendingContentToRoom:)]) { - [self.delegate shareExtensionManager:self didStartSendingContentToRoom:room]; + [self.delegate shareExtensionManager:self didStartSendingContentToRoom:roomID]; } } @@ -450,9 +452,9 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) #pragma mark - Sharing -- (void)sendText:(NSString *)text toRoom:(MXRoom *)room extensionItem:(NSExtensionItem *)extensionItem failureBlock:(void(^)())failureBlock +- (void)sendText:(NSString *)text toRoom:(NSString *)roomID extensionItem:(NSExtensionItem *)extensionItem failureBlock:(void(^)())failureBlock { - [self didStartSendingToRoom:room]; + [self didStartSendingToRoom:roomID]; if (!text) { NSLog(@"[ShareExtensionManager] loadItemForTypeIdentifier: failed."); @@ -465,7 +467,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) __weak typeof(self) weakSelf = self; - [room sendTextMessage:text success:^(NSString *eventId) { + [self.mxRestClient sendTextMessageToRoom:roomID text:text success:^(NSString *eventId) { if (weakSelf) { typeof(self) self = weakSelf; @@ -480,9 +482,9 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) }]; } -- (void)sendFileWithUrl:(NSURL *)fileUrl toRoom:(MXRoom *)room extensionItem:(NSExtensionItem *)extensionItem failureBlock:(void(^)())failureBlock +- (void)sendFileWithUrl:(NSURL *)fileUrl toRoom:(NSString *)roomID extensionItem:(NSExtensionItem *)extensionItem failureBlock:(void(^)())failureBlock { - [self didStartSendingToRoom:room]; + [self didStartSendingToRoom:roomID]; if (!fileUrl) { NSLog(@"[ShareExtensionManager] loadItemForTypeIdentifier: failed."); @@ -500,7 +502,11 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) __weak typeof(self) weakSelf = self; - [room sendFile:fileUrl mimeType:mimeType localEcho:nil success:^(NSString *eventId) { + //self.mxRestClient send + + + + /*[room sendFile:fileUrl mimeType:mimeType localEcho:nil success:^(NSString *eventId) { if (weakSelf) { typeof(self) self = weakSelf; @@ -512,7 +518,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode) { failureBlock(); } - } keepActualFilename:YES]; + } keepActualFilename:YES];*/ }