Quellcode durchsuchen

feat(recording) mobile and web ui updates

master
Calinteodor vor 3 Jahren
Ursprung
Commit
c60a51e671
Es ist kein Account mit der E-Mail-Adresse des Committers verbunden

+ 74
- 4
css/_recording.scss Datei anzeigen

@@ -7,22 +7,23 @@
7 7
     flex-direction: column;
8 8
 
9 9
     .recording-header {
10
+        align-items: center;
10 11
         display: flex;
11 12
         flex: 0;
12 13
         flex-direction: row;
13 14
         justify-content: space-between;
14
-        padding-top: 32px;
15 15
 
16 16
         .recording-title {
17 17
             display: inline-flex;
18 18
             align-items: center;
19
-            font-size: 16px;
19
+            font-size: 14px;
20 20
             margin-left: 16px;
21 21
         }
22 22
     }
23 23
 
24 24
     .recording-header-line {
25 25
         border-top: 1px solid #5e6d7a;
26
+        padding-top: 32px;
26 27
     }
27 28
 
28 29
     .recording-switch-disabled {
@@ -34,10 +35,79 @@
34 35
         align-items: center;
35 36
     }
36 37
 
38
+    .file-sharing-icon-container {
39
+        background-color: #525252;
40
+        border-radius: 4px;
41
+        height: 40px;
42
+        justify-content: center;
43
+        width: 56px;
44
+    }
45
+
46
+    .cloud-content-recording-icon-container {
47
+        background-color: #FFFFFF;
48
+        border-radius: 4px;
49
+        height: 40px;
50
+        justify-content: center;
51
+        width: 40px;
52
+    }
53
+
54
+    .jitsi-recording-header {
55
+        margin-bottom: 32px;
56
+    }
57
+
58
+    .jitsi-content-recording-icon-container-with-switch {
59
+        background-color: #FFFFFF;
60
+        border-radius: 4px;
61
+        height: 40px;
62
+        width: 56px;
63
+    }
64
+
65
+    .jitsi-content-recording-icon-container-without-switch {
66
+        background-color: #FFFFFF;
67
+        border-radius: 4px;
68
+        height: 40px;
69
+        width: 46px;
70
+    }
71
+
37 72
     .recording-icon {
38
-        width: 32px;
39
-        height: 32px;
73
+        height: 40px;
40 74
         object-fit: contain;
75
+        width: 40px;
76
+    }
77
+
78
+    .content-recording-icon {
79
+        height: 18px;
80
+        margin: 10px 0 0 10px;
81
+        object-fit: contain;
82
+        width: 18px;
83
+    }
84
+
85
+    .recording-file-sharing-icon {
86
+        height: 18px;
87
+        object-fit: contain;
88
+        width: 18px;
89
+    }
90
+
91
+    .recording-info{
92
+        background-color: #FFD740;
93
+        color: black;
94
+        display: inline-flex;
95
+        margin: 32px 0;
96
+        width: 100%;
97
+    }
98
+
99
+    .recording-info-icon {
100
+        align-self: center;
101
+        height: 14px;
102
+        margin: 0 24px 0 16px;
103
+        object-fit: contain;
104
+        width: 14px;
105
+    }
106
+
107
+    .recording-info-title {
108
+        display: inline-flex;
109
+        font-size: 14px;
110
+        width: 290px
41 111
     }
42 112
 
43 113
     .recording-switch {

BIN
images/icon-info.png Datei anzeigen


+ 2
- 1
lang/main.json Datei anzeigen

@@ -859,7 +859,7 @@
859 859
         "expandedOn": "The meeting is currently being recorded.",
860 860
         "expandedPending": "Recording is being started...",
861 861
         "failedToStart": "Recording failed to start",
862
-        "fileSharingdescription": "Share recording with meeting participants",
862
+        "fileSharingdescription": "Share the recording link with the meeting participants",
863 863
         "inProgress": "Recording or live streaming in progress",
864 864
         "limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
865 865
         "limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
@@ -874,6 +874,7 @@
874 874
         "rec": "REC",
875 875
         "serviceDescription": "Your recording will be saved by the recording service",
876 876
         "serviceDescriptionCloud": "Cloud recording",
877
+        "serviceDescriptionCloudInfo": "Recorded meetings are automatically cleared 24h after their recording time.",
877 878
         "serviceName": "Recording service",
878 879
         "sessionAlreadyActive": "This session is already being recorded or live streamed.",
879 880
         "signIn": "Sign in",

+ 7
- 0
react/features/base/ui/Tokens.js Datei anzeigen

@@ -44,6 +44,7 @@ export const colors = {
44 44
 
45 45
     warning05: '#F8AE1A',
46 46
     warning06: '#FFD600',
47
+    warning07: '#FFD740',
47 48
 
48 49
     disabled01: '#00000040',
49 50
 
@@ -166,6 +167,9 @@ export const colorMap = {
166 167
     // Text for saved input values
167 168
     text06: 'surface03',
168 169
 
170
+    // Text info
171
+    text07Info: 'surface02',
172
+
169 173
     // error messages
170 174
     textError: 'error06',
171 175
 
@@ -265,6 +269,9 @@ export const colorMap = {
265 269
     // Color for indicating a raised hand
266 270
     warning02: 'warning06',
267 271
 
272
+    // Color for indicating recording info
273
+    warning03: 'warning07',
274
+
268 275
     // Color for disabled tab
269 276
     tab01Disabled: 'disabled01',
270 277
 

+ 69
- 13
react/features/recording/components/Recording/StartRecordingDialogContent.js Datei anzeigen

@@ -26,7 +26,14 @@ import { isVpaasMeeting } from '../../../jaas/functions';
26 26
 import { RECORDING_TYPES } from '../../constants';
27 27
 import { getRecordingDurationEstimation } from '../../functions';
28 28
 
29
-import { DROPBOX_LOGO, ICON_CLOUD, JITSI_LOGO, TRACK_COLOR } from './styles';
29
+import {
30
+    DROPBOX_LOGO,
31
+    ICON_CLOUD,
32
+    ICON_INFO,
33
+    ICON_USERS,
34
+    JITSI_LOGO,
35
+    TRACK_COLOR
36
+} from './styles';
30 37
 
31 38
 type Props = {
32 39
 
@@ -149,8 +156,9 @@ class StartRecordingDialogContent extends Component<Props> {
149 156
                 className = 'recording-dialog'
150 157
                 style = { styles.container }>
151 158
                 { this._renderNoIntegrationsContent() }
152
-                { this._renderIntegrationsContent() }
153 159
                 { this._renderFileSharingContent() }
160
+                { this._renderUploadToTheCloudInfo() }
161
+                { this._renderIntegrationsContent() }
154 162
             </Container>
155 163
         );
156 164
     }
@@ -182,14 +190,11 @@ class StartRecordingDialogContent extends Component<Props> {
182 190
             <Container
183 191
                 className = 'recording-header'
184 192
                 key = 'fileSharingSetting'
185
-                style = { [
186
-                    styles.header,
187
-                    _dialogStyles.topBorderContainer
188
-                ] }>
189
-                <Container className = 'recording-icon-container'>
193
+                style = { styles.header }>
194
+                <Container className = 'recording-icon-container file-sharing-icon-container'>
190 195
                     <Image
191
-                        className = 'recording-icon'
192
-                        src = { ICON_CLOUD }
196
+                        className = 'recording-file-sharing-icon'
197
+                        src = { ICON_USERS }
193 198
                         style = { styles.recordingIcon } />
194 199
                 </Container>
195 200
                 <Text
@@ -212,6 +217,46 @@ class StartRecordingDialogContent extends Component<Props> {
212 217
         );
213 218
     }
214 219
 
220
+    /**
221
+     * Renders the info in case recording is uploaded to the cloud.
222
+     *
223
+     * @returns {React$Component}
224
+     */
225
+    _renderUploadToTheCloudInfo() {
226
+        const {
227
+            _dialogStyles,
228
+            _styles: styles,
229
+            isVpaas,
230
+            selectedRecordingService,
231
+            t
232
+        } = this.props;
233
+
234
+        if (isVpaas
235
+            || selectedRecordingService !== RECORDING_TYPES.JITSI_REC_SERVICE) {
236
+            return null;
237
+        }
238
+
239
+        return (
240
+            <Container
241
+                className = 'recording-info'
242
+                key = 'cloudUploadInfo'
243
+                style = { styles.headerInfo }>
244
+                <Image
245
+                    className = 'recording-info-icon'
246
+                    src = { ICON_INFO }
247
+                    style = { styles.recordingInfoIcon } />
248
+                <Text
249
+                    className = 'recording-info-title'
250
+                    style = {{
251
+                        ..._dialogStyles.text,
252
+                        ...styles.titleInfo
253
+                    }}>
254
+                    { t('recording.serviceDescriptionCloudInfo') }
255
+                </Text>
256
+            </Container>
257
+        );
258
+    }
259
+
215 260
     /**
216 261
      * Renders the content in case no integrations were enabled.
217 262
      *
@@ -242,15 +287,23 @@ class StartRecordingDialogContent extends Component<Props> {
242 287
 
243 288
         const icon = isVpaas ? ICON_CLOUD : JITSI_LOGO;
244 289
         const label = isVpaas ? t('recording.serviceDescriptionCloud') : t('recording.serviceDescription');
290
+        const jitsiContentRecordingIconContainer
291
+            = this.props.integrationsEnabled
292
+                ? 'jitsi-content-recording-icon-container-with-switch'
293
+                : 'jitsi-content-recording-icon-container-without-switch';
294
+        const contentRecordingClass = isVpaas
295
+            ? 'cloud-content-recording-icon-container'
296
+            : jitsiContentRecordingIconContainer;
297
+        const jitsiRecordingHeaderClass = !isVpaas && 'jitsi-recording-header';
245 298
 
246 299
         return (
247 300
             <Container
248
-                className = 'recording-header'
301
+                className = { `recording-header ${jitsiRecordingHeaderClass}` }
249 302
                 key = 'noIntegrationSetting'
250 303
                 style = { styles.header }>
251
-                <Container className = 'recording-icon-container'>
304
+                <Container className = { contentRecordingClass }>
252 305
                     <Image
253
-                        className = 'recording-icon'
306
+                        className = 'content-recording-icon'
254 307
                         src = { icon }
255 308
                         style = { styles.recordingIcon } />
256 309
                 </Container>
@@ -327,7 +380,10 @@ class StartRecordingDialogContent extends Component<Props> {
327 380
             <Container>
328 381
                 <Container
329 382
                     className = 'recording-header recording-header-line'
330
-                    style = { styles.header }>
383
+                    style = { [
384
+                        styles.headerIntegrations,
385
+                        _dialogStyles.topBorderContainer
386
+                    ] }>
331 387
                     <Container
332 388
                         className = 'recording-icon-container'>
333 389
                         <Image

+ 50
- 14
react/features/recording/components/Recording/styles.native.js Datei anzeigen

@@ -6,6 +6,8 @@ import BaseTheme from '../../../base/ui/components/BaseTheme.native';
6 6
 
7 7
 export const DROPBOX_LOGO = require('../../../../../images/dropboxLogo_square.png');
8 8
 export const ICON_CLOUD = require('../../../../../images/icon-cloud.png');
9
+export const ICON_INFO = require('../../../../../images/icon-info.png');
10
+export const ICON_USERS = require('../../../../../images/icon-users.png');
9 11
 export const JITSI_LOGO = require('../../../../../images/jitsiLogo_square.png');
10 12
 export const TRACK_COLOR = BaseTheme.palette.ui15;
11 13
 
@@ -14,6 +16,29 @@ export const TRACK_COLOR = BaseTheme.palette.ui15;
14 16
 // the special case(s) of the recording feature below.
15 17
 const _PADDING = BoxModel.padding * 1.5;
16 18
 
19
+
20
+const header = {
21
+    alignItems: 'center',
22
+    flex: 0,
23
+    flexDirection: 'row',
24
+    justifyContent: 'space-between',
25
+    paddingBottom: _PADDING,
26
+    paddingTop: _PADDING
27
+};
28
+
29
+const recordingIcon = {
30
+    width: BaseTheme.spacing[4],
31
+    height: BaseTheme.spacing[4]
32
+};
33
+
34
+const title = {
35
+    flex: 1,
36
+    fontSize: 16,
37
+    fontWeight: 'bold',
38
+    textAlign: 'left',
39
+    paddingLeft: BoxModel.padding
40
+};
41
+
17 42
 export default {
18 43
     /**
19 44
      * Container for the StartRecordingDialog screen.
@@ -24,7 +49,6 @@ export default {
24 49
         flex: 1,
25 50
         flexDirection: 'column',
26 51
         justifyContent: 'center',
27
-        paddingHorizontal: BaseTheme.spacing[3],
28 52
         paddingTop: BaseTheme.spacing[3]
29 53
     },
30 54
 
@@ -52,12 +76,20 @@ ColorSchemeRegistry.register('StartRecordingDialogContent', {
52 76
     },
53 77
 
54 78
     header: {
55
-        alignItems: 'center',
56
-        flex: 0,
57
-        flexDirection: 'row',
58
-        justifyContent: 'space-between',
59
-        paddingBottom: _PADDING,
60
-        paddingTop: _PADDING
79
+        ...header,
80
+        marginHorizontal: BaseTheme.spacing[3]
81
+    },
82
+
83
+    headerIntegrations: {
84
+        ...header,
85
+        paddingHorizontal: BaseTheme.spacing[3]
86
+    },
87
+
88
+    headerInfo: {
89
+        ...header,
90
+        backgroundColor: BaseTheme.palette.warning03,
91
+        marginBottom: BaseTheme.spacing[4],
92
+        paddingHorizontal: BaseTheme.spacing[3]
61 93
     },
62 94
 
63 95
     loggedIn: {
@@ -65,8 +97,11 @@ ColorSchemeRegistry.register('StartRecordingDialogContent', {
65 97
     },
66 98
 
67 99
     recordingIcon: {
68
-        width: BaseTheme.spacing[4],
69
-        height: BaseTheme.spacing[4]
100
+        ...recordingIcon
101
+    },
102
+
103
+    recordingInfoIcon: {
104
+        ...recordingIcon
70 105
     },
71 106
 
72 107
     recordingText: {
@@ -86,11 +121,12 @@ ColorSchemeRegistry.register('StartRecordingDialogContent', {
86 121
     },
87 122
 
88 123
     title: {
89
-        flex: 1,
90
-        fontSize: 16,
91
-        fontWeight: 'bold',
92
-        textAlign: 'left',
93
-        paddingLeft: BoxModel.padding
124
+        ...title
125
+    },
126
+
127
+    titleInfo: {
128
+        ...title,
129
+        color: BaseTheme.palette.text07Info
94 130
     },
95 131
 
96 132
     text: {

+ 4
- 0
react/features/recording/components/Recording/styles.web.js Datei anzeigen

@@ -8,6 +8,10 @@ export const DROPBOX_LOGO = 'images/dropboxLogo_square.png';
8 8
 
9 9
 export const ICON_CLOUD = 'images/icon-cloud.png';
10 10
 
11
+export const ICON_INFO = 'images/icon-info.png';
12
+
13
+export const ICON_USERS = 'images/icon-users.png';
14
+
11 15
 export const JITSI_LOGO = 'images/jitsiLogo_square.png';
12 16
 
13 17
 export const TRACK_COLOR = BaseTheme.palette.ui15;

Laden…
Abbrechen
Speichern