element-ios/Riot/Modules/MatrixKit/Views/PushRule/MXKPushRuleCreationTableVie...

201 lines
5.5 KiB
Objective-C

/*
Copyright 2024 New Vector Ltd.
Copyright 2015 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
*/
#import "MXKPushRuleCreationTableViewCell.h"
#import "NSBundle+MatrixKit.h"
#import "MXKSwiftHeader.h"
@interface MXKPushRuleCreationTableViewCell ()
{
/**
Snapshot of matrix session rooms used in room picker (in case of MXPushRuleKindRoom)
*/
NSArray* rooms;
}
@end
@implementation MXKPushRuleCreationTableViewCell
- (void)awakeFromNib
{
[super awakeFromNib];
self.mxPushRuleKind = MXPushRuleKindContent;
}
- (void)setMxPushRuleKind:(MXPushRuleKind)mxPushRuleKind
{
switch (mxPushRuleKind)
{
case MXPushRuleKindContent:
_inputTextField.placeholder = [VectorL10n notificationSettingsWordToMatch];
_inputTextField.autocorrectionType = UITextAutocorrectionTypeDefault;
break;
case MXPushRuleKindRoom:
_inputTextField.placeholder = [VectorL10n notificationSettingsSelectRoom];
break;
case MXPushRuleKindSender:
_inputTextField.placeholder = [VectorL10n notificationSettingsSenderHint];
_inputTextField.autocorrectionType = UITextAutocorrectionTypeNo;
break;
default:
break;
}
_inputTextField.hidden = NO;
_roomPicker.hidden = YES;
_roomPickerDoneButton.hidden = YES;
_mxPushRuleKind = mxPushRuleKind;
}
- (void)dismissKeyboard
{
[_inputTextField resignFirstResponder];
}
#pragma mark - UITextField delegate
- (IBAction)textFieldEditingChanged:(id)sender
{
// Update Add Room button
if (_inputTextField.text.length)
{
_addButton.enabled = YES;
}
else
{
_addButton.enabled = NO;
}
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField == _inputTextField && _mxPushRuleKind == MXPushRuleKindRoom)
{
_inputTextField.hidden = YES;
_roomPicker.hidden = NO;
_roomPickerDoneButton.hidden = NO;
return NO;
}
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == _inputTextField && _mxPushRuleKind == MXPushRuleKindSender)
{
if (textField.text.length == 0)
{
textField.text = @"@";
}
}
}
- (BOOL)textFieldShouldReturn:(UITextField*) textField
{
// "Done" key has been pressed
[textField resignFirstResponder];
return YES;
}
#pragma mark - Actions
- (IBAction)onButtonPressed:(id)sender
{
[self dismissKeyboard];
if (sender == _addButton)
{
// Disable button to prevent multiple request
_addButton.enabled = NO;
if (_mxPushRuleKind == MXPushRuleKindContent)
{
[_mxSession.notificationCenter addContentRule:_inputTextField.text
notify:(_actionSegmentedControl.selectedSegmentIndex == 0)
sound:_soundSwitch.on
highlight:_highlightSwitch.on];
}
else if (_mxPushRuleKind == MXPushRuleKindRoom)
{
MXRoom* room;
NSInteger row = [_roomPicker selectedRowInComponent:0];
if ((row >= 0) && (row < rooms.count))
{
room = [rooms objectAtIndex:row];
}
if (room)
{
[_mxSession.notificationCenter addRoomRule:room.roomId
notify:(_actionSegmentedControl.selectedSegmentIndex == 0)
sound:_soundSwitch.on
highlight:_highlightSwitch.on];
}
}
else if (_mxPushRuleKind == MXPushRuleKindSender)
{
[_mxSession.notificationCenter addSenderRule:_inputTextField.text
notify:(_actionSegmentedControl.selectedSegmentIndex == 0)
sound:_soundSwitch.on
highlight:_highlightSwitch.on];
}
_inputTextField.text = nil;
}
else if (sender == _roomPickerDoneButton)
{
NSInteger row = [_roomPicker selectedRowInComponent:0];
// sanity check
if ((row >= 0) && (row < rooms.count))
{
MXRoom* room = [rooms objectAtIndex:row];
_inputTextField.text = room.summary.displayName;
_addButton.enabled = YES;
}
_inputTextField.hidden = NO;
_roomPicker.hidden = YES;
_roomPickerDoneButton.hidden = YES;
}
}
#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
rooms = [_mxSession.rooms sortedArrayUsingComparator:^NSComparisonResult(MXRoom* firstRoom, MXRoom* secondRoom) {
// Alphabetic order
return [firstRoom.summary.displayName compare:secondRoom.summary.displayName options:NSCaseInsensitiveSearch];
}];
return rooms.count;
}
#pragma mark - UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
MXRoom* room = [rooms objectAtIndex:row];
return room.summary.displayName;
}
@end