JLChen
2021-08-02 38f4fb064df09f344fc3237409c76a9fba2a8a9e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * Copyright (c) 2010-2020 Belledonne Communications SARL.
 *
 * This file is part of linphone-iphone
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
#import "UIRecordingCell.h"
#import "PhoneMainView.h"
#import "UILabel+Boldify.h"
#import "Utils.h"
#import "UILinphoneAudioPlayer.h"
 
@implementation UIRecordingCell
 
static UILinphoneAudioPlayer *player;
 
#pragma mark - Lifecycle Functions
/*
 * TODO:
 * - When we scroll past a selected row, the player loads incorrectly (no buttons). Probably a problem in the player code.
 * - mkv recording is probably buggy, wrong eof. wav playing works but does not display the length/timestamp.
 * - The share button is greyed out when not clicking it. idk why, it's really weird.
*/
- (id)initWithIdentifier:(NSString *)identifier {
    if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier])) {
        NSArray *arrayOfViews =
        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil];
        
        // resize cell to match .nib size. It is needed when resized the cell to
        // correctly adapt its height too
        UIRecordingCell *sub = [arrayOfViews objectAtIndex:0];
        [self setFrame:CGRectMake(0, 0, sub.frame.size.width, 40)];
        self = sub;
        self.recording = NULL;
        _shareButton.target = self;
        _shareButton.action = @selector(onShareButtonPressed);
    }
    return self;
}
 
- (void)dealloc {
    self.recording = NULL;
    [NSNotificationCenter.defaultCenter removeObserver:self];
}
 
#pragma mark - Property Functions
 
- (void)setRecording:(NSString *)arecording {
    _recording = arecording;
    if(_recording) {
        NSArray *parsedRecording = [LinphoneUtils parseRecordingName:_recording];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"HH:mm:ss"];
        _nameLabel.text = [[[parsedRecording objectAtIndex:0] stringByAppendingString:@" @ "] stringByAppendingString:[dateFormat stringFromDate:[parsedRecording objectAtIndex:1]]];
    }
}
 
#pragma mark -
 
- (NSString *)accessibilityLabel {
    return _nameLabel.text;
}
 
- (void)setEditing:(BOOL)editing {
    [self setEditing:editing animated:FALSE];
}
 
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    if (animated) {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.3];
    }
    if (animated) {
        [UIView commitAnimations];
    }
}
 
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    self.selectionStyle = UITableViewCellSelectionStyleNone;
}
 
- (void)updateFrame {
    CGRect frame = self.frame;
    if (!self.selected) {
        frame.size.height = 40;
    } else {
        frame.size.height = 150;
    }
    [self setFrame:frame];
}
 
-(void)setSelected:(BOOL)selected animated:(BOOL)animated{
    [super setSelected:selected animated:animated];
    _toolbar.hidden = !selected;
    if (!selected) {
        return;
    }
    if (player && [player isCreated]) {
        [player close];
    }
 
    player = [UILinphoneAudioPlayer audioPlayerWithFilePath:[self recording]];
 
    [player.view removeFromSuperview];
    [self addSubview:player.view];
    [self bringSubviewToFront:player.view];
    player.view.frame = _playerView.frame;
    player.view.bounds = _playerView.bounds;
    [player open];
}
 
- (void)onShareButtonPressed {
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[[NSURL fileURLWithPath:_recording]] applicationActivities:nil];
    [activityVC setCompletionWithItemsHandler:^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {
        //This is used to select the same row when we get back to the recordings view.
        NSString *file = player.file;
        [[(RecordingsListView *)VIEW(RecordingsListView) tableController] setSelected:file];
    }];
    [PhoneMainView.instance presentViewController:activityVC animated:YES completion:nil];
}
 
@end