mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-20 16:42:44 +02:00
Add slider to room screen, stack views at the top of the screen
This commit is contained in:
@@ -135,7 +135,7 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
@interface RoomViewController () <UISearchBarDelegate, UIGestureRecognizerDelegate, UIScrollViewAccessibilityDelegate, RoomTitleViewTapGestureDelegate, RoomParticipantsViewControllerDelegate, MXKRoomMemberDetailsViewControllerDelegate, ContactsTableViewControllerDelegate, MXServerNoticesDelegate, RoomContextualMenuViewControllerDelegate,
|
||||
ReactionsMenuViewModelCoordinatorDelegate, EditHistoryCoordinatorBridgePresenterDelegate, MXKDocumentPickerPresenterDelegate, EmojiPickerCoordinatorBridgePresenterDelegate,
|
||||
ReactionHistoryCoordinatorBridgePresenterDelegate, CameraPresenterDelegate, MediaPickerCoordinatorBridgePresenterDelegate,
|
||||
RoomDataSourceDelegate, RoomCreationModalCoordinatorBridgePresenterDelegate, RoomInfoCoordinatorBridgePresenterDelegate, DialpadViewControllerDelegate>
|
||||
RoomDataSourceDelegate, RoomCreationModalCoordinatorBridgePresenterDelegate, RoomInfoCoordinatorBridgePresenterDelegate, DialpadViewControllerDelegate, RemoveJitsiWidgetViewDelegate>
|
||||
{
|
||||
|
||||
// The preview header
|
||||
@@ -220,6 +220,7 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
}
|
||||
|
||||
@property (nonatomic, weak) IBOutlet UIView *overlayContainerView;
|
||||
@property (nonatomic, strong) RemoveJitsiWidgetView *removeJitsiWidgetView;
|
||||
|
||||
|
||||
@property (nonatomic, strong) RoomContextualMenuViewController *roomContextualMenuViewController;
|
||||
@@ -387,6 +388,8 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
|
||||
[self vc_removeBackTitle];
|
||||
|
||||
[self setupRemoveJitsiWidgetRemoveView];
|
||||
|
||||
// Replace the default input toolbar view.
|
||||
// Note: this operation will force the layout of subviews. That is why cell view classes must be registered before.
|
||||
[self updateRoomInputToolbarViewClassIfNeeded];
|
||||
@@ -455,6 +458,8 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
|
||||
self.activityIndicator.backgroundColor = ThemeService.shared.theme.overlayBackgroundColor;
|
||||
|
||||
[self.removeJitsiWidgetView updateWithTheme:ThemeService.shared.theme];
|
||||
|
||||
// Prepare jump to last unread banner
|
||||
self.jumpToLastUnreadBannerContainer.backgroundColor = ThemeService.shared.theme.backgroundColor;
|
||||
self.jumpToLastUnreadImageView.tintColor = ThemeService.shared.theme.textPrimaryColor;
|
||||
@@ -518,6 +523,9 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
// Refresh the room title view
|
||||
[self refreshRoomTitle];
|
||||
|
||||
// refresh remove Jitsi widget view
|
||||
[self refreshRemoveJitsiWidgetView];
|
||||
|
||||
// Refresh tool bar if the room data source is set.
|
||||
if (self.roomDataSource)
|
||||
{
|
||||
@@ -1397,6 +1405,18 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
|
||||
#pragma mark - Internals
|
||||
|
||||
- (void)setupRemoveJitsiWidgetRemoveView
|
||||
{
|
||||
self.removeJitsiWidgetView = [RemoveJitsiWidgetView instantiate];
|
||||
self.removeJitsiWidgetView.delegate = self;
|
||||
|
||||
[self.removeJitsiWidgetContainer vc_addSubViewMatchingParent:self.removeJitsiWidgetView];
|
||||
|
||||
self.removeJitsiWidgetContainer.hidden = YES;
|
||||
|
||||
[self refreshRemoveJitsiWidgetView];
|
||||
}
|
||||
|
||||
- (void)forceLayoutRefresh
|
||||
{
|
||||
// Sanity check: check whether the table view data source is set.
|
||||
@@ -4422,17 +4442,20 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
|
||||
- (void)listenWidgetNotifications
|
||||
{
|
||||
MXWeakify(self);
|
||||
|
||||
kMXKWidgetManagerDidUpdateWidgetObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kWidgetManagerDidUpdateWidgetNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
|
||||
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
Widget *widget = notif.object;
|
||||
if (widget.mxSession == self.roomDataSource.mxSession
|
||||
&& [widget.roomId isEqualToString:customizedRoomDataSource.roomId])
|
||||
&& [widget.roomId isEqualToString:self->customizedRoomDataSource.roomId])
|
||||
{
|
||||
// Jitsi conference widget existence is shown in the bottom bar
|
||||
// Update the bar
|
||||
[self refreshActivitiesViewDisplay];
|
||||
[self refreshRoomInputToolbar];
|
||||
// Call button update
|
||||
[self refreshRoomTitle];
|
||||
// Remove Jitsi widget view update
|
||||
[self refreshRemoveJitsiWidgetView];
|
||||
}
|
||||
}];
|
||||
}
|
||||
@@ -4480,8 +4503,6 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
[roomActivitiesView removeGestureRecognizer:roomActivitiesView.gestureRecognizers[0]];
|
||||
}
|
||||
|
||||
Widget *jitsiWidget = [customizedRoomDataSource jitsiWidget];
|
||||
|
||||
if ([self.roomDataSource.mxSession.syncError.errcode isEqualToString:kMXErrCodeStringResourceLimitExceeded])
|
||||
{
|
||||
self.activitiesViewExpanded = YES;
|
||||
@@ -5083,6 +5104,32 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)refreshRemoveJitsiWidgetView
|
||||
{
|
||||
if (self.roomDataSource.isLive && !self.roomDataSource.isPeeking)
|
||||
{
|
||||
Widget *jitsiWidget = [customizedRoomDataSource jitsiWidget];
|
||||
|
||||
if (jitsiWidget && self.canEditJitsiWidget)
|
||||
{
|
||||
[self.removeJitsiWidgetView reset];
|
||||
self.removeJitsiWidgetContainer.hidden = NO;
|
||||
self.removeJitsiWidgetView.delegate = self;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.removeJitsiWidgetContainer.hidden = YES;
|
||||
self.removeJitsiWidgetView.delegate = nil;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.removeJitsiWidgetView reset];
|
||||
self.removeJitsiWidgetContainer.hidden = YES;
|
||||
self.removeJitsiWidgetView.delegate = self;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)refreshJumpToLastUnreadBannerDisplay
|
||||
{
|
||||
// This banner is only displayed when the room timeline is in live (and no peeking).
|
||||
@@ -6028,4 +6075,37 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
||||
self.roomInfoCoordinatorBridgePresenter = nil;
|
||||
}
|
||||
|
||||
#pragma mark - RemoveJitsiWidgetViewDelegate
|
||||
|
||||
- (void)removeJitsiWidgetViewDidCompleteSliding:(RemoveJitsiWidgetView *)view
|
||||
{
|
||||
view.delegate = nil;
|
||||
Widget *jitsiWidget = [customizedRoomDataSource jitsiWidget];
|
||||
|
||||
[self startActivityIndicator];
|
||||
|
||||
// close the widget
|
||||
MXWeakify(self);
|
||||
|
||||
[[WidgetManager sharedManager] closeWidget:jitsiWidget.widgetId
|
||||
inRoom:self.roomDataSource.room
|
||||
success:^{
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
[self stopActivityIndicator];
|
||||
// we can wait for kWidgetManagerDidUpdateWidgetNotification, but we want to be faster
|
||||
self.removeJitsiWidgetContainer.hidden = YES;
|
||||
self.removeJitsiWidgetView.delegate = nil;
|
||||
|
||||
// end active call if exists
|
||||
if ([[AppDelegate theDelegate].callPresenter.jitsiVC.widget.widgetId isEqualToString:jitsiWidget.widgetId])
|
||||
{
|
||||
[[AppDelegate theDelegate].callPresenter endActiveJitsiCall];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
[self showJitsiErrorAsAlert:error];
|
||||
[self stopActivityIndicator];
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user