/* 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