From 9dc9ad0c978acea985df4d9ace9ea4c51d964570 Mon Sep 17 00:00:00 2001 From: Benjamin Verdier Date: Mon, 2 Jul 2018 09:29:27 +0200 Subject: [PATCH] Fix landscape view + refactor --- Classes/ChatConversationView.m | 142 ++++++++++----------- Classes/LinphoneUI/UIChatBubblePhotoCell.m | 2 +- Classes/LinphoneUI/UIChatBubbleTextCell.m | 3 - 3 files changed, 69 insertions(+), 78 deletions(-) diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index 6008b869e..717e39531 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -173,6 +173,7 @@ static UICompositeViewDescription *compositeDescription = nil; [self configureForRoom:true]; _backButton.hidden = _tableController.isEditing; [_tableController scrollToBottom:true]; + [self refreshImageDrawer]; } #pragma mark - @@ -339,7 +340,7 @@ static UICompositeViewDescription *compositeDescription = nil; [_imagesArray addObject:image]; [_assetIdsArray addObject:phAssetId]; [_qualitySettingsArray addObject:@(quality)]; - [self addImageToDrawer:image withAssetId:phAssetId]; + [self refreshImageDrawer]; } - (void)chooseImageQuality:(UIImage *)image assetId:(NSString *)phAssetId { @@ -662,28 +663,6 @@ static UICompositeViewDescription *compositeDescription = nil; [VIEW(ImagePickerView).popoverController dismissPopoverAnimated:TRUE]; } [self chooseImageQuality:image assetId:phAssetId]; - //[self chooseImageQuality:image assetId:phAssetId]; -} - -- (void)addImageToDrawer:(UIImage *)img withAssetId:(NSString *)assetId { - if ([_imagesArray count] == 1) { // We resize chatView to display the image - [UIView animateWithDuration:0 - delay:0 - options:UIViewAnimationOptionBeginFromCurrentState - animations:^{ - // resizing imagesView - CGRect imagesFrame = [_imagesView frame]; - imagesFrame.origin.y = [_messageView frame].origin.y - 100; - imagesFrame.size.height = 100; - [_imagesView setFrame:imagesFrame]; - // resizing chatTable - CGRect tableViewFrame = [_tableController.tableView frame]; - tableViewFrame.size.height -= 100; - [_tableController.tableView setFrame:tableViewFrame]; - } - completion:nil]; - } - [_imagesCollectionView reloadData]; } - (void)tableViewIsScrolling { @@ -697,6 +676,9 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)keyboardWillHide:(NSNotification *)notif { NSTimeInterval duration = [[[notif userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + int heightDiff = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) ? 50 : 100; + [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState @@ -745,12 +727,12 @@ static UICompositeViewDescription *compositeDescription = nil; if ([_imagesArray count] > 0){ // resizing imagesView CGRect imagesFrame = [_imagesView frame]; - imagesFrame.origin.y = [_messageView frame].origin.y - 100; - imagesFrame.size.height = 100; + imagesFrame.origin.y = [_messageView frame].origin.y - heightDiff; + imagesFrame.size.height = heightDiff; [_imagesView setFrame:imagesFrame]; // resizing chatTable CGRect tableViewFrame = [_tableController.tableView frame]; - tableViewFrame.size.height -= 100; + tableViewFrame.size.height = imagesFrame.origin.y - tableViewFrame.origin.y; [_tableController.tableView setFrame:tableViewFrame]; } } @@ -761,7 +743,9 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)keyboardWillShow:(NSNotification *)notif { NSTimeInterval duration = [[[notif userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; - + + int heightDiff = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) ? 50 : 100; + [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState @@ -812,12 +796,12 @@ static UICompositeViewDescription *compositeDescription = nil; if ([_imagesArray count] > 0){ // resizing imagesView CGRect imagesFrame = [_imagesView frame]; - imagesFrame.origin.y = [_messageView frame].origin.y - 100; - imagesFrame.size.height = 100; + imagesFrame.origin.y = [_messageView frame].origin.y - heightDiff; + imagesFrame.size.height = heightDiff; [_imagesView setFrame:imagesFrame]; // resizing chatTable CGRect tableViewFrame = [_tableController.tableView frame]; - tableViewFrame.size.height -= 100; + tableViewFrame.size.height = imagesFrame.origin.y - tableViewFrame.origin.y; [_tableController.tableView setFrame:tableViewFrame]; } @@ -835,6 +819,7 @@ static UICompositeViewDescription *compositeDescription = nil; } completion:^(BOOL finished){ + }]; } @@ -942,6 +927,40 @@ void on_chat_room_conference_left(LinphoneChatRoom *cr, const LinphoneEventLog * NSUInteger key = [_assetIdsArray indexOfObject:assetId]; [_imagesArray removeObjectAtIndex:key]; [_assetIdsArray removeObjectAtIndex:key]; + [self refreshImageDrawer]; +} + +- (void)clearMessageView { + [_messageField setText:@""]; + _imagesArray = [NSMutableArray array]; + _assetIdsArray = [NSMutableArray array]; + + [self refreshImageDrawer]; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return [_imagesArray count]; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + UIImageViewDeletable *imgView = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UIImageViewDeletable class]) forIndexPath:indexPath]; + CGRect imgFrame; + if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { + imgFrame = CGRectMake(0, 0, 50, 50); + } else { + imgFrame = CGRectMake(0, 0, 50, 100); + } + [imgView.image setImage:[UIImage resizeImage:[_imagesArray objectAtIndex:[indexPath item]] withMaxWidth:imgFrame.size.width andMaxHeight:imgFrame.size.height]]; + [imgView setAssetId:[_assetIdsArray objectAtIndex:[indexPath item]]]; + [imgView setDeleteDelegate:self]; + [imgView setFrame:imgFrame]; + [_sendButton setEnabled:TRUE]; + return imgView; +} + +- (void)refreshImageDrawer { + int heightDiff = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) ? 50 : 100; + if ([_imagesArray count] == 0) { [UIView animateWithDuration:0 delay:0 @@ -954,54 +973,29 @@ void on_chat_room_conference_left(LinphoneChatRoom *cr, const LinphoneEventLog * [_imagesView setFrame:imagesFrame]; // resizing chatTable CGRect tableViewFrame = [_tableController.tableView frame]; - tableViewFrame.size.height += 100; + tableViewFrame.size.height = imagesFrame.origin.y - tableViewFrame.origin.y; [_tableController.tableView setFrame:tableViewFrame]; } completion:nil]; - - [_sendButton setEnabled:FALSE]; + if ([_messageField.text isEqualToString:@""]) + [_sendButton setEnabled:FALSE]; + } else { + [UIView animateWithDuration:0 + delay:0 + options:UIViewAnimationOptionBeginFromCurrentState + animations:^{ + // resizing imagesView + CGRect imagesFrame = [_imagesView frame]; + imagesFrame.origin.y = [_messageView frame].origin.y - heightDiff; + imagesFrame.size.height = heightDiff; + [_imagesView setFrame:imagesFrame]; + // resizing chatTable + CGRect tableViewFrame = [_tableController.tableView frame]; + tableViewFrame.size.height = imagesFrame.origin.y - tableViewFrame.origin.y; + [_tableController.tableView setFrame:tableViewFrame]; + } + completion:^(BOOL result){[_imagesCollectionView reloadData];}]; } - [_imagesCollectionView reloadData]; -} - -- (void)clearMessageView { - [_messageField setText:@""]; - _imagesArray = [NSMutableArray array]; - _assetIdsArray = [NSMutableArray array]; - - // resizing imagesView - [UIView animateWithDuration:0 - delay:0 - options:UIViewAnimationOptionBeginFromCurrentState - animations:^{ - // resizing imagesView - CGRect imagesFrame = [_imagesView frame]; - imagesFrame.origin.y = [_messageView frame].origin.y; - imagesFrame.size.height = 0; - [_imagesView setFrame:imagesFrame]; - - // resizing chatTable - CGRect tableViewFrame = [_tableController.tableView frame]; - CGFloat composeIndicatorCompensation = composingVisible ? _composeIndicatorView.frame.size.height : 0.0f; - tableViewFrame.size.height = [_messageView frame].origin.y - tableViewFrame.origin.y - composeIndicatorCompensation; - [_tableController.tableView setFrame:tableViewFrame]; - } - completion:nil]; - - [_imagesCollectionView reloadData]; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return [_imagesArray count]; -} - -- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - UIImageViewDeletable *imgView = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UIImageViewDeletable class]) forIndexPath:indexPath]; - [imgView.image setImage:[UIImage resizeImage:[_imagesArray objectAtIndex:[indexPath item]] withMaxWidth:50 andMaxHeight:100]]; - [imgView setAssetId:[_assetIdsArray objectAtIndex:[indexPath item]]]; - [imgView setDeleteDelegate:self]; - [_sendButton setEnabled:TRUE]; - return imgView; } @end diff --git a/Classes/LinphoneUI/UIChatBubblePhotoCell.m b/Classes/LinphoneUI/UIChatBubblePhotoCell.m index d81c69c3b..b10d52f2e 100644 --- a/Classes/LinphoneUI/UIChatBubblePhotoCell.m +++ b/Classes/LinphoneUI/UIChatBubblePhotoCell.m @@ -168,6 +168,7 @@ - (void) loadPlaceholder { dispatch_async(dispatch_get_main_queue(), ^{ + // Change this to load placeholder image when no asset id //[_finalImage setImage:image]; //[_messageImageView setAsset:asset]; [_messageImageView stopLoading]; @@ -407,7 +408,6 @@ } - (void)layoutSubviews { - //[super layoutSubviews]; BOOL is_outgoing = linphone_chat_message_is_outgoing(super.message); CGRect bubbleFrame = super.bubbleView.frame; int origin_x; diff --git a/Classes/LinphoneUI/UIChatBubbleTextCell.m b/Classes/LinphoneUI/UIChatBubbleTextCell.m index 68d3a5f32..0623e4204 100644 --- a/Classes/LinphoneUI/UIChatBubbleTextCell.m +++ b/Classes/LinphoneUI/UIChatBubbleTextCell.m @@ -341,8 +341,6 @@ static const CGFloat CELL_MESSAGE_Y_MARGIN = 52; // 44; [[UIChatBubbleTextCell alloc] initWithIdentifier:NSStringFromClass(UIChatBubbleTextCell.class)]; messageFont = cell.messageText.font; } - // UITableView *tableView = VIEW(ChatConversationView).tableController.tableView; - // if (tableView.isEditing) width -= 40; /*checkbox */ CGSize size; const char *url = linphone_chat_message_get_external_body_url(chat); @@ -440,7 +438,6 @@ static const CGFloat CELL_MESSAGE_Y_MARGIN = 52; // 44; if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { availableWidth = availableWidth /3; } - //availableWidth -= CELL_MESSAGE_X_MARGIN; int newHeight = originalSize.height; float originalAspectRatio = originalSize.width / originalSize.height; // We resize in width and crop in height