diff --git a/Riot/Modules/Room/MXKRoomViewController.h b/Riot/Modules/Room/MXKRoomViewController.h index dd3bfd205..c56e7fb7b 100644 --- a/Riot/Modules/Room/MXKRoomViewController.h +++ b/Riot/Modules/Room/MXKRoomViewController.h @@ -214,7 +214,7 @@ typedef NS_ENUM(NSUInteger, MXKRoomViewControllerJoinRoomResult) { @property (weak, nonatomic) IBOutlet UITableView *bubblesTableView; @property (weak, nonatomic) IBOutlet UIView *roomTitleViewContainer; -@property (weak, nonatomic) IBOutlet UIView *roomInputToolbarContainer; +@property (strong, nonatomic) IBOutlet UIView *roomInputToolbarContainer; @property (weak, nonatomic) IBOutlet UIView *roomActivitiesContainer; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *bubblesTableViewTopConstraint; diff --git a/Riot/Modules/Room/RoomViewController.h b/Riot/Modules/Room/RoomViewController.h index af49e8f6e..0cae86a77 100644 --- a/Riot/Modules/Room/RoomViewController.h +++ b/Riot/Modules/Room/RoomViewController.h @@ -115,6 +115,9 @@ extern NSTimeInterval const kResizeComposerAnimationDuration; // The voice broadcast service @property (nonatomic, nullable) VoiceBroadcastService *voiceBroadcastService; +@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *toolbarContainerConstraints; + + /** Retrieve the live data source in cases where the timeline is not live. diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index edc0d8700..ebfa140af 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -553,7 +553,6 @@ static CGSize kThreadListBarButtonItemImageSize; [self updateTopBanners]; self.bubblesTableView.clipsToBounds = NO; - [self showToolbarContainerIfNeeded]; } - (void)viewWillDisappear:(BOOL)animated @@ -603,7 +602,6 @@ static CGSize kThreadListBarButtonItemImageSize; // Stop the loading indicator even if the session is still in progress [self stopLoadingUserIndicator]; - [self hideToolbarContainerIfNeeded]; } - (void)viewDidAppear:(BOOL)animated @@ -1213,7 +1211,6 @@ static CGSize kThreadListBarButtonItemImageSize; if (!self.inputToolbarView || ![self.inputToolbarView isMemberOfClass:roomInputToolbarViewClass]) { [super setRoomInputToolbarViewClass:roomInputToolbarViewClass]; - [self moveToolbarContainerIfNeeded]; if ([self.inputToolbarView.class conformsToProtocol:@protocol(RoomInputToolbarViewProtocol)]) { id inputToolbar = (id)self.inputToolbarView; [inputToolbar setVoiceMessageToolbarView:self.voiceMessageController.voiceMessageToolbarView]; diff --git a/Riot/Modules/Room/RoomViewController.swift b/Riot/Modules/Room/RoomViewController.swift index 09bfb683c..2ba0bd078 100644 --- a/Riot/Modules/Room/RoomViewController.swift +++ b/Riot/Modules/Room/RoomViewController.swift @@ -150,27 +150,19 @@ extension RoomViewController { } } - @objc func moveToolbarContainerIfNeeded() { - if inputToolbarView is WysiwygInputToolbarView, - let container = roomInputToolbarContainer, + @objc func didChangeMaximisedState(_ state: Bool) { + if state, + roomInputToolbarContainer.superview == self.view, let view = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) { - - view.addSubview(container) - container.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true - container.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true - container.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true - } - } - - @objc func showToolbarContainerIfNeeded() { - if inputToolbarView is WysiwygInputToolbarView { - roomInputToolbarContainer.isHidden = false - } - } - - @objc func hideToolbarContainerIfNeeded() { - if inputToolbarView is WysiwygInputToolbarView { - roomInputToolbarContainer.isHidden = true + roomInputToolbarContainer.removeFromSuperview() + view.addSubview(roomInputToolbarContainer) + roomInputToolbarContainer.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true + roomInputToolbarContainer.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true + roomInputToolbarContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true + } else if roomInputToolbarContainer.superview != self.view { + roomInputToolbarContainer.removeFromSuperview() + self.view.addSubview(roomInputToolbarContainer) + NSLayoutConstraint.activate(toolbarContainerConstraints) } } } diff --git a/Riot/Modules/Room/RoomViewController.xib b/Riot/Modules/Room/RoomViewController.xib index 073276604..181077ecf 100644 --- a/Riot/Modules/Room/RoomViewController.xib +++ b/Riot/Modules/Room/RoomViewController.xib @@ -1,9 +1,9 @@ - + - + @@ -35,6 +35,13 @@ + + + + + + + diff --git a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h index 4bdea353b..08357ebe5 100644 --- a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h +++ b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h @@ -75,6 +75,8 @@ typedef NS_ENUM(NSUInteger, RoomInputToolbarViewSendMode) */ - (void)roomInputToolbarView:(RoomInputToolbarView *)toolbarView sendAttributedTextMessage:(NSAttributedString *)attributedTextMessage; +- (void)didChangeMaximisedState: (BOOL) state; + @end /** diff --git a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift index 112056d01..ad2844bb4 100644 --- a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift +++ b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift @@ -111,6 +111,12 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp .removeDuplicates() .sink { [weak hostingViewController] _ in hostingViewController?.view.setNeedsLayout() + }, + + wysiwygViewModel.$maximised + .removeDuplicates() + .sink { [weak self] value in + self?.toolbarViewDelegate?.didChangeMaximisedState(value) } ]