mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-02 14:16:59 +02:00
@@ -19,7 +19,38 @@
|
||||
#import "MediaPickerViewController.h"
|
||||
#import "TableViewCellWithCheckBoxes.h"
|
||||
|
||||
/**
|
||||
List the settings fields. Used to preselect/edit a field
|
||||
*/
|
||||
typedef enum : NSUInteger {
|
||||
/**
|
||||
Default.
|
||||
*/
|
||||
RoomSettingsViewControllerFieldNone,
|
||||
|
||||
/**
|
||||
The room name.
|
||||
*/
|
||||
RoomSettingsViewControllerFieldName,
|
||||
|
||||
/**
|
||||
The room topic.
|
||||
*/
|
||||
RoomSettingsViewControllerFieldTopic,
|
||||
|
||||
/**
|
||||
The room avatar.
|
||||
*/
|
||||
RoomSettingsViewControllerFieldAvatar
|
||||
|
||||
} RoomSettingsViewControllerField;
|
||||
|
||||
@interface RoomSettingsViewController : MXKRoomSettingsViewController <UITextViewDelegate, UITextFieldDelegate, MediaPickerViewControllerDelegate, MXKRoomMemberDetailsViewControllerDelegate, TableViewCellWithCheckBoxesDelegate>
|
||||
|
||||
/**
|
||||
Select a settings field in order to edit it ('RoomSettingsViewControllerFieldNone' by default).
|
||||
*/
|
||||
@property (nonatomic) RoomSettingsViewControllerField selectedRoomSettingsField;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -147,6 +147,13 @@ NSString *const kRoomSettingsAdvancedCellViewIdentifier = @"kRoomSettingsAdvance
|
||||
|
||||
@implementation RoomSettingsViewController
|
||||
|
||||
- (void)finalizeInit
|
||||
{
|
||||
[super finalizeInit];
|
||||
|
||||
_selectedRoomSettingsField = RoomSettingsViewControllerFieldNone;
|
||||
}
|
||||
|
||||
- (void)initWithSession:(MXSession *)session andRoomId:(NSString *)roomId
|
||||
{
|
||||
[super initWithSession:session andRoomId:roomId];
|
||||
@@ -244,6 +251,17 @@ NSString *const kRoomSettingsAdvancedCellViewIdentifier = @"kRoomSettingsAdvance
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
// Edit the selected field if any
|
||||
if (_selectedRoomSettingsField != RoomSettingsViewControllerFieldNone)
|
||||
{
|
||||
self.selectedRoomSettingsField = _selectedRoomSettingsField;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewWillDisappear:animated];
|
||||
@@ -371,6 +389,44 @@ NSString *const kRoomSettingsAdvancedCellViewIdentifier = @"kRoomSettingsAdvance
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)setSelectedRoomSettingsField:(RoomSettingsViewControllerField)selectedRoomSettingsField
|
||||
{
|
||||
// Check whether the view controller is already embedded inside a navigation controller
|
||||
if (self.navigationController)
|
||||
{
|
||||
[self dismissFirstResponder];
|
||||
|
||||
switch (selectedRoomSettingsField)
|
||||
{
|
||||
case RoomSettingsViewControllerFieldName:
|
||||
{
|
||||
[self editRoomName];
|
||||
break;
|
||||
}
|
||||
case RoomSettingsViewControllerFieldTopic:
|
||||
{
|
||||
[self editRoomTopic];
|
||||
break;
|
||||
}
|
||||
case RoomSettingsViewControllerFieldAvatar:
|
||||
{
|
||||
[self onRoomAvatarTap:nil];
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This selection will be applied when the view controller will become active (see 'viewDidAppear')
|
||||
_selectedRoomSettingsField = selectedRoomSettingsField;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - private
|
||||
|
||||
- (void)editRoomName
|
||||
@@ -428,6 +484,8 @@ NSString *const kRoomSettingsAdvancedCellViewIdentifier = @"kRoomSettingsAdvance
|
||||
{
|
||||
[addAddressTextField resignFirstResponder];
|
||||
}
|
||||
|
||||
_selectedRoomSettingsField = RoomSettingsViewControllerFieldNone;
|
||||
}
|
||||
|
||||
- (void)startActivityIndicator
|
||||
|
||||
@@ -88,9 +88,13 @@
|
||||
// Typing notifications listener.
|
||||
id typingNotifListener;
|
||||
|
||||
// The first tab is selected by default in room details screen in of case 'showRoomDetails' segue.
|
||||
// The first tab is selected by default in room details screen in case of 'showRoomDetails' segue.
|
||||
// Use this flag to select a specific tab (0: people, 1: settings).
|
||||
NSUInteger selectedRoomDetailsIndex;
|
||||
|
||||
// No field is selected by default in room details screen in case of 'showRoomDetails' segue.
|
||||
// Use this value to select a specific field in room settings.
|
||||
RoomSettingsViewControllerField selectedRoomSettingsField;
|
||||
|
||||
// The position of the first touch down event stored in case of scrolling when the expanded header is visible.
|
||||
CGPoint startScrollingPoint;
|
||||
@@ -1802,8 +1806,12 @@
|
||||
segmentedViewController.title = NSLocalizedStringFromTable(@"room_details_title", @"Vector", nil);
|
||||
[segmentedViewController initWithTitles:titles viewControllers:viewControllers defaultSelected:selectedRoomDetailsIndex];
|
||||
|
||||
// to display a red navbar when the home server cannot be reached.
|
||||
// Add the current session to be able to observe its state change.
|
||||
[segmentedViewController addMatrixSession:session];
|
||||
|
||||
// Preselect the tapped field if any
|
||||
settingsViewController.selectedRoomSettingsField = selectedRoomSettingsField;
|
||||
selectedRoomSettingsField = RoomSettingsViewControllerFieldNone;
|
||||
}
|
||||
}
|
||||
else if ([[segue identifier] isEqualToString:@"showRoomSearch"])
|
||||
@@ -2054,9 +2062,9 @@
|
||||
|
||||
- (void)roomTitleView:(RoomTitleView*)titleView recognizeTapGesture:(UITapGestureRecognizer*)tapGestureRecognizer
|
||||
{
|
||||
UIView *view = tapGestureRecognizer.view;
|
||||
UIView *tappedView = tapGestureRecognizer.view;
|
||||
|
||||
if (view == titleView.titleMask)
|
||||
if (tappedView == titleView.titleMask)
|
||||
{
|
||||
if (self.expandedHeaderContainer.isHidden)
|
||||
{
|
||||
@@ -2065,18 +2073,56 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedRoomSettingsField = RoomSettingsViewControllerFieldNone;
|
||||
|
||||
CGPoint point = [tapGestureRecognizer locationInView:self.expandedHeaderContainer];
|
||||
|
||||
CGRect roomNameArea = expandedHeader.displayNameTextField.frame;
|
||||
roomNameArea.origin.x -= 10;
|
||||
roomNameArea.origin.y -= 10;
|
||||
roomNameArea.size.width += 20;
|
||||
roomNameArea.size.height += 15;
|
||||
if (CGRectContainsPoint(roomNameArea, point))
|
||||
{
|
||||
// Starting to move the local preview view
|
||||
selectedRoomSettingsField = RoomSettingsViewControllerFieldName;
|
||||
}
|
||||
else
|
||||
{
|
||||
CGRect roomTopicArea = expandedHeader.roomTopic.frame;
|
||||
roomTopicArea.origin.x -= 10;
|
||||
roomTopicArea.size.width += 20;
|
||||
roomTopicArea.size.height += 10;
|
||||
if (CGRectContainsPoint(roomTopicArea, point))
|
||||
{
|
||||
// Starting to move the local preview view
|
||||
selectedRoomSettingsField = RoomSettingsViewControllerFieldTopic;
|
||||
}
|
||||
else if ([self.titleView isKindOfClass:[RoomAvatarTitleView class]])
|
||||
{
|
||||
RoomAvatarTitleView *avatarTitleView = (RoomAvatarTitleView*)self.titleView;
|
||||
CGRect roomAvatarFrame = avatarTitleView.roomAvatar.frame;
|
||||
roomAvatarFrame.origin = [avatarTitleView convertPoint:roomAvatarFrame.origin toView:self.expandedHeaderContainer];
|
||||
if (CGRectContainsPoint(roomAvatarFrame, point))
|
||||
{
|
||||
// Starting to move the local preview view
|
||||
selectedRoomSettingsField = RoomSettingsViewControllerFieldAvatar;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Open room settings
|
||||
selectedRoomDetailsIndex = 1;
|
||||
[self performSegueWithIdentifier:@"showRoomDetails" sender:self];
|
||||
}
|
||||
}
|
||||
else if (view == titleView.roomDetailsMask)
|
||||
else if (tappedView == titleView.roomDetailsMask)
|
||||
{
|
||||
// Open room details by selecting member list
|
||||
selectedRoomDetailsIndex = 0;
|
||||
[self performSegueWithIdentifier:@"showRoomDetails" sender:self];
|
||||
}
|
||||
else if (view == previewHeader.rightButton)
|
||||
else if (tappedView == previewHeader.rightButton)
|
||||
{
|
||||
// 'Join' button has been pressed
|
||||
if (roomPreviewData)
|
||||
@@ -2140,7 +2186,7 @@
|
||||
}];
|
||||
}
|
||||
}
|
||||
else if (view == previewHeader.leftButton)
|
||||
else if (tappedView == previewHeader.leftButton)
|
||||
{
|
||||
// 'Decline' button has been pressed
|
||||
if (roomPreviewData)
|
||||
|
||||
Reference in New Issue
Block a user