1
00:00:00,150 --> 00:00:06,390
Hire Beaven in this story are we going to go ahead and we're going to actually upload the user's voice

2
00:00:06,420 --> 00:00:08,590
or an audio to firebase.

3
00:00:08,910 --> 00:00:11,940
So let's go to our main activity class here.

4
00:00:12,130 --> 00:00:13,410
Let's scroll to the top here.

5
00:00:13,410 --> 00:00:17,390
Now we need to actually declare somebody else inside our main activity class.

6
00:00:17,400 --> 00:00:22,380
So the first one the first value that we're going to do declared inside our main activity class is going

7
00:00:22,380 --> 00:00:23,830
to be actually private.

8
00:00:24,060 --> 00:00:28,410
And the name of it the data type of this value is going to be media record there and the name is going

9
00:00:28,410 --> 00:00:29,910
to be media recorders semicolon.

10
00:00:29,940 --> 00:00:34,620
The second round of it is going to be of type string and the name of this variable is going to be audio

11
00:00:34,620 --> 00:00:38,940
file and audio file semi-colon.

12
00:00:38,940 --> 00:00:45,960
Now let's go to our activity under like minded exemption here so let's add a button into our constraints.

13
00:00:45,960 --> 00:00:46,270
Lay out.

14
00:00:46,270 --> 00:00:51,840
So inside this pallet section click on all and here select this button and to strike it here and put

15
00:00:51,840 --> 00:00:53,450
it here below this image.

16
00:00:53,460 --> 00:00:56,920
So now you have this image this part in here below the same as you right.

17
00:00:57,030 --> 00:01:02,310
Let's create a consensus here to the bottom of this image view so we can see this little circle that

18
00:01:02,310 --> 00:01:05,170
is pulsating here on the top of this button.

19
00:01:05,220 --> 00:01:09,180
Let's create a constraint to the bottom edge of this image view.

20
00:01:09,180 --> 00:01:14,430
Let's change the top margin to number 20 and then present until January 3rd.

21
00:01:14,610 --> 00:01:21,210
So now that we have this button here selected and let's change the text of this button so the taste

22
00:01:21,210 --> 00:01:31,140
of this button is going to be tap and hold tap on hold to record or you record or you and in person

23
00:01:31,160 --> 00:01:32,630
interview on your keyboard.

24
00:01:32,640 --> 00:01:35,240
So now let's keep an eye to this button.

25
00:01:35,370 --> 00:01:42,690
So the idea here just type in DTN record audio and in person and on your keyboard.

26
00:01:42,690 --> 00:01:47,810
Let's go to our main activity class and here let's declare this button here.

27
00:01:47,820 --> 00:01:55,080
Inside the room in the class we're just in here private Barton Pythian PTEN record audio and then put

28
00:01:55,080 --> 00:01:56,150
a semicolon here.

29
00:01:56,280 --> 00:02:02,370
Let's go to our uncreate MF'er and below this line of code that actually initialises this age download

30
00:02:02,370 --> 00:02:07,120
image view we can initialize our PTEN record audio variable assignment operator.

31
00:02:07,170 --> 00:02:15,020
So let's cast this object to our button object find view by I-T or that Id thought PTEN record or the

32
00:02:15,410 --> 00:02:16,180
semicolon.

33
00:02:16,230 --> 00:02:22,170
So because we want to access the audio recorder of the user's device we need to actually ask the user

34
00:02:22,170 --> 00:02:25,500
to give us the permission to access the audio recorder.

35
00:02:25,680 --> 00:02:28,550
So let's open the manifest file here.

36
00:02:28,620 --> 00:02:33,420
And below is a line of code that actually uses the permission for a right external storage we need to

37
00:02:33,420 --> 00:02:36,440
add another permission and other users permission actually tag.

38
00:02:36,540 --> 00:02:43,260
So let's open a task here and just type in user's permission and here select is fun and right that permission

39
00:02:43,300 --> 00:02:48,780
that record audio and then lets self close the stack here by just putting a slash and this and in fact

40
00:02:48,780 --> 00:02:54,600
let's go to our main activity here and here inside this uncreate if you must also ask the user to give

41
00:02:54,600 --> 00:02:58,220
us our runtime permission to access the audio recorder.

42
00:02:58,440 --> 00:03:01,750
So now we have this valuable permission result.

43
00:03:02,010 --> 00:03:05,910
Let's change this the name of this Friday about to get permission result number one.

44
00:03:05,910 --> 00:03:09,750
And here you can see that we have this statement so let's add another one here.

45
00:03:09,780 --> 00:03:13,740
If preemption is number one is equal to package manager the permission granted.

46
00:03:13,740 --> 00:03:14,200
Right.

47
00:03:14,220 --> 00:03:19,930
So let's create another variable here let's say in the name of this value but it's going to be permission.

48
00:03:20,280 --> 00:03:20,980
Result.

49
00:03:21,000 --> 00:03:22,320
Number two right.

50
00:03:22,470 --> 00:03:27,690
Assignment operator and I can say contex compact that check self permission.

51
00:03:27,720 --> 00:03:29,400
And here we can say manifests.

52
00:03:29,400 --> 00:03:29,890
Right.

53
00:03:29,940 --> 00:03:36,670
That permission that audio recorder data record audio actually record audio semicolon.

54
00:03:36,930 --> 00:03:39,620
So now after this line of code here.

55
00:03:39,660 --> 00:03:42,370
So here we can see that we have this error here.

56
00:03:42,380 --> 00:03:45,100
That's because we actually didn't add the context.

57
00:03:45,240 --> 00:03:51,750
So the first argument must be actually the context the main activity that this comma and then B can

58
00:03:51,780 --> 00:03:52,860
actually be at the permission.

59
00:03:52,860 --> 00:03:57,960
So this if it checks a print machine needs two arguments the first one is going to be the context and

60
00:03:57,960 --> 00:04:02,110
the second argument is going to be the permission manifests the permission that record audio.

61
00:04:02,250 --> 00:04:05,630
So let me create a new line here so that you can see these values better.

62
00:04:05,940 --> 00:04:07,770
And here we have this statement right.

63
00:04:07,770 --> 00:04:13,020
So let's actually change the condition of this statement to a logical or actually condition to a logical

64
00:04:13,020 --> 00:04:13,710
operator.

65
00:04:13,740 --> 00:04:21,900
We can add this ontological operator here and we can say mission result Number two is equal to package

66
00:04:21,900 --> 00:04:27,520
manager permission gratin package manager that permission granted.

67
00:04:27,540 --> 00:04:33,990
So we actually created these two conditions here if Actually both of these conditions are true only

68
00:04:33,990 --> 00:04:39,330
in that case it's going to go inside this state and an if statement and it's going actually for example

69
00:04:39,680 --> 00:04:40,950
show this message to the user.

70
00:04:40,950 --> 00:04:51,630
Thank you for giving the permission to access external storage X terminal storage and audio recorder

71
00:04:51,900 --> 00:04:53,610
audio recorder.

72
00:04:53,640 --> 00:04:54,220
Right.

73
00:04:54,240 --> 00:04:56,640
So now let me create a new line here.

74
00:04:56,670 --> 00:04:59,310
So here we can see that you have this a statement.

75
00:04:59,310 --> 00:05:04,230
So if they use it does it doesn't give us the permission to for example access the audio recorder.

76
00:05:04,230 --> 00:05:10,350
We must ask the user to give us their permission to access the audio recorder he had inside the statement.

77
00:05:10,410 --> 00:05:16,980
So here you can see that as the second argument of the at the request permissions we have an array of

78
00:05:16,980 --> 00:05:19,530
permissions right the first permission is going to be this one.

79
00:05:19,540 --> 00:05:26,760
So now I want to add another permission so just put a comma here and just say manifest that permission

80
00:05:27,540 --> 00:05:29,130
that record audio.

81
00:05:29,370 --> 00:05:30,030
That's it.

82
00:05:30,030 --> 00:05:33,930
So now we have two permissions inside our stray string.

83
00:05:34,090 --> 00:05:37,960
So the request quote is number two so we can see that here right.

84
00:05:37,980 --> 00:05:39,750
So let me create a new line here.

85
00:05:39,750 --> 00:05:46,410
So now inside these Mefford inside is uncreate Mefford after this piece of code here the unclick listener

86
00:05:46,410 --> 00:05:54,660
of the city and upload image let's initialize our file actually file valuable our file audio file valuable

87
00:05:54,700 --> 00:06:00,360
actually so let's leave word that is valuable and then put an assignment operator here and here I can

88
00:06:00,360 --> 00:06:09,450
refer to this environment a class that gets external storage directory get external storage directory

89
00:06:09,810 --> 00:06:13,330
that get absolute path semicolon.

90
00:06:13,410 --> 00:06:16,360
So we are to access the extension storage directory.

91
00:06:16,560 --> 00:06:19,520
And we're going to get the absolute path of that directory.

92
00:06:19,530 --> 00:06:23,340
And we're going to assign that value to the audio file of it.

93
00:06:23,370 --> 00:06:27,090
And now I can't say audio file assignment operator.

94
00:06:27,120 --> 00:06:28,220
Audio file.

95
00:06:28,370 --> 00:06:31,720
Plus Sarlat is that this audio file variabilities of type string.

96
00:06:31,740 --> 00:06:32,170
Right.

97
00:06:32,190 --> 00:06:37,670
So here we are concatenating string values together and then put two quotes here.

98
00:06:37,800 --> 00:06:42,060
Slash and the name of our file is going to be audio file.

99
00:06:42,290 --> 00:06:45,200
Or do you find that free G.

100
00:06:45,450 --> 00:06:51,400
So it is going to be there actually the format is Fregelius is going to be the format of our audio file.

101
00:06:51,420 --> 00:06:58,590
Now after these two lines of code I can refer to this pretty only quote audio button that sets and click

102
00:06:58,590 --> 00:07:04,140
listener knew and then hold the shift key on your keyboard and then press on the needle Vicci on your

103
00:07:04,140 --> 00:07:07,100
keyboard in order to select his option and click the center.

104
00:07:07,290 --> 00:07:11,180
So now the Android studio put these lines of code here for you automatically.

105
00:07:11,340 --> 00:07:13,610
So inside this unclick click here I can say.

106
00:07:13,650 --> 00:07:20,220
So there is a problem here not is that insight or activity underlayment minute and here we said tap

107
00:07:20,280 --> 00:07:22,180
and hold through the court audio.

108
00:07:22,470 --> 00:07:29,580
So we want to actually use the motion event listener instead of unclick listener OK because the user

109
00:07:29,730 --> 00:07:33,930
wants to for example hold the button for some seconds.

110
00:07:33,960 --> 00:07:34,270
OK.

111
00:07:34,320 --> 00:07:39,790
So in that case we don't want to actually use the uncle or whomever it we are we want to use the on

112
00:07:39,810 --> 00:07:41,300
touch listener method.

113
00:07:41,520 --> 00:07:45,580
So let's go to our main activity class and here let's actually did it.

114
00:07:45,590 --> 00:07:50,120
This piece of code here that says the unclick the Senate he had for this button.

115
00:07:50,370 --> 00:07:57,510
Let's again distopian record audio that sits on touch listener and then typing.

116
00:07:57,510 --> 00:08:01,050
He had a new view on Tochtli Center.

117
00:08:01,050 --> 00:08:01,590
That's it.

118
00:08:01,710 --> 00:08:05,120
So now this Meffert Unterschied Meffert here is actually over rated.

119
00:08:05,130 --> 00:08:11,370
So not is that anonymous in a class is created here and that anonymous class is implementing these articles

120
00:08:11,370 --> 00:08:16,530
in an interface and inside this Unterschied is an interface we have this untouched method that we must

121
00:08:16,560 --> 00:08:17,550
over right.

122
00:08:17,580 --> 00:08:19,800
So let's go inside the Smurfette here here.

123
00:08:19,860 --> 00:08:24,540
And before this line of code that returns follows from the Smurfette because the return type of this

124
00:08:24,780 --> 00:08:26,840
is what is Boolean actually.

125
00:08:26,850 --> 00:08:29,350
So this method must return a value.

126
00:08:29,370 --> 00:08:36,510
So now I can actually say if so here we can we have this value of type motion events right.

127
00:08:36,510 --> 00:08:40,710
We have this argument which is of a motion event and we can refer to this argument.

128
00:08:40,740 --> 00:08:48,510
If event that gets action is equal to action down motion event that action down.

129
00:08:48,510 --> 00:08:54,730
This means that the user has actually tapped the button and the user is actually using the action down

130
00:08:55,080 --> 00:08:57,220
and the user is holding the button down.

131
00:08:57,420 --> 00:09:00,380
And the user can actually now record the audio.

132
00:09:00,390 --> 00:09:04,860
So in that case we can actually say we can refer to an effect that we have not created yet we can't

133
00:09:04,860 --> 00:09:11,480
say start recording audio semi-colon.

134
00:09:11,950 --> 00:09:12,580
Right.

135
00:09:12,580 --> 00:09:16,190
So what happens if the action is actually off.

136
00:09:16,360 --> 00:09:18,550
So in that case we need to create an elusive statement.

137
00:09:18,550 --> 00:09:27,740
So after the curly brace of this statement I can't say LCF event that gets action is equal to motion

138
00:09:27,760 --> 00:09:31,580
event that action up.

139
00:09:31,600 --> 00:09:36,990
So in that case you want to actually stop the recording so you can say stop recording.

140
00:09:37,820 --> 00:09:39,270
Or do you semicolon.

141
00:09:39,470 --> 00:09:45,710
So now let's actually create these two methods inside our main activity class the first one is going

142
00:09:45,710 --> 00:09:47,420
to be start recording audio.

143
00:09:47,450 --> 00:09:48,800
So let's scroll down here.

144
00:09:48,890 --> 00:09:55,130
And before the end incredible piece of this main activity class I can say private void and the name

145
00:09:55,130 --> 00:09:59,430
of this movie is going to be start recording audio and then put a bit of practice this year and then

146
00:09:59,450 --> 00:10:02,030
open and close it by using the curly braces.

147
00:10:02,030 --> 00:10:08,510
The second if it is going to be again private Voyt stop recording or you stop recording audio and then

148
00:10:08,510 --> 00:10:12,680
put a pair of parenthesis here open and closed this method by using these curly braces.

149
00:10:12,680 --> 00:10:15,150
Let's go inside this article in audio Mefford.

150
00:10:15,200 --> 00:10:18,510
So here I'm going to actually paste some lines of code inside these.

151
00:10:18,530 --> 00:10:20,190
Start recording audio Meffert.

152
00:10:20,210 --> 00:10:24,120
So now insight is Smurfit we can actually paste these codes here.

153
00:10:24,230 --> 00:10:28,050
So now you can see that these are the lines of code that I pasted here.

154
00:10:28,190 --> 00:10:33,250
And the first of all I am actually initialising media recorder variable that we created above inside

155
00:10:33,260 --> 00:10:34,680
the main activity class.

156
00:10:34,910 --> 00:10:38,900
So the record media recorder assignment operator new media recorder right.

157
00:10:38,900 --> 00:10:43,830
So you know that we are actually creating a new object of state media recorder here.

158
00:10:43,880 --> 00:10:47,540
So now you can see that in line number one hundred and eighty five.

159
00:10:47,540 --> 00:10:52,010
We have code media recorders that sit audio source.

160
00:10:52,070 --> 00:10:57,950
So we are actually specifying the source of the audio and we have seen media recorder that audio source

161
00:10:57,950 --> 00:11:05,120
that microphone a mic and he had a number one hundred an 86 media recorder that said output format media

162
00:11:05,120 --> 00:11:09,170
recorders that output format that free underline GPP.

163
00:11:09,170 --> 00:11:11,020
OK so let me scroll to the top here.

164
00:11:11,030 --> 00:11:18,100
In order to show you that here in line number one hundred and six inside is uncreate method he had specified

165
00:11:18,130 --> 00:11:20,180
that data type 3 GP here.

166
00:11:20,180 --> 00:11:20,930
Right.

167
00:11:20,930 --> 00:11:26,570
So you can see that the format is pretty GP and if I actually scroll down here you can see that the

168
00:11:26,570 --> 00:11:31,670
output format is going to be freed Underland GPP E-Loan number of one hundred and eighty seven.

169
00:11:31,700 --> 00:11:32,270
I am saying.

170
00:11:32,270 --> 00:11:35,790
Media recorder that said output file audio file.

171
00:11:35,790 --> 00:11:39,960
So here I am referring to that audio file that you actually initialized inside the uncreate in effect

172
00:11:39,980 --> 00:11:41,710
an inline number one hundred eighty eight.

173
00:11:41,720 --> 00:11:49,130
I am saying media recorder that set your encoder MediaTek recorder that audio in court that data are

174
00:11:49,550 --> 00:11:56,780
underlined and so it is going to be the encoding actually the process of our video recorder here and

175
00:11:56,780 --> 00:11:59,630
here we have this try catch block here.

176
00:11:59,630 --> 00:12:05,100
So inside this trial like we are saying media recorder that prepared so it can prepare the media recorder.

177
00:12:05,150 --> 00:12:11,000
And finally if insight is atrocious like we dont have any errors we are going to actually execute this

178
00:12:11,000 --> 00:12:15,410
line of thought maybe a quarter start here so it can actually start recording the voice.

179
00:12:15,710 --> 00:12:19,330
So now let's go inside is stop recording audio effect here.

180
00:12:19,340 --> 00:12:22,970
Now I am going to paste some lines of code here and then I'm going to explain to you what's going on

181
00:12:22,970 --> 00:12:23,400
here.

182
00:12:23,420 --> 00:12:26,620
So here as you can see these are the lines of code that I pasted here.

183
00:12:26,630 --> 00:12:33,770
So I created an if statement and here I am saying if media recorder is not equal to null then we can

184
00:12:33,770 --> 00:12:36,410
actually go inside the curly braces of this statement.

185
00:12:36,410 --> 00:12:40,780
And here we can say maybe recorder that stop media recorder of that release.

186
00:12:40,790 --> 00:12:44,820
And finally we get to assign the value to this valuable audio recorder.

187
00:12:44,930 --> 00:12:45,420
OK.

188
00:12:45,620 --> 00:12:52,180
So after the media record that is actually stopped and the value null is assigned to this media recorder

189
00:12:52,190 --> 00:12:53,190
valuable.

190
00:12:53,270 --> 00:12:56,040
I want to actually upload this voice.

191
00:12:56,050 --> 00:12:59,020
These are actually two firebase.

192
00:12:59,090 --> 00:13:00,690
So let's create a method for that.

193
00:13:00,710 --> 00:13:02,810
First let's actually call this Smurfette.

194
00:13:03,020 --> 00:13:09,890
And here I can say upload the audio upload the audio to Firebrace So it is going to be RMF at this with

195
00:13:09,920 --> 00:13:12,400
us on the call and at the end of our statement here.

196
00:13:12,500 --> 00:13:21,590
So now before the end in curly brace of this class let's just say private voit upload the audio to firebase

197
00:13:21,980 --> 00:13:23,260
and let's put a pair of parenthesis.

198
00:13:23,330 --> 00:13:28,510
And that often includes this method by using these curly braces so insert Smurfette here I can't say.

199
00:13:28,520 --> 00:13:32,520
So first of all we can actually the first two are a Proclus dialogue.

200
00:13:32,540 --> 00:13:36,570
So we have Procrustes they like here already created inside our file.

201
00:13:36,570 --> 00:13:41,780
Its name is download progress they like we can actually use it inside our Meffert upload the audio to

202
00:13:41,780 --> 00:13:43,920
firebase So here I can say download progress.

203
00:13:43,920 --> 00:13:45,890
I like that said message.

204
00:13:45,890 --> 00:13:54,490
And inside the parenthesis I can say uploading the audio uploading the audio to firebase dot dot dot.

205
00:13:54,710 --> 00:13:56,520
And here I can say download progress.

206
00:13:56,510 --> 00:13:59,840
They like that show that show.

207
00:13:59,960 --> 00:14:00,570
Right.

208
00:14:00,620 --> 00:14:06,000
So now after these two lines of code I can say create a local variable of type storage or so stories

209
00:14:06,140 --> 00:14:13,830
of friends and the name of this variable is going to be audio file address assignment operator.

210
00:14:14,040 --> 00:14:19,310
And here I'm going to refer to this as reference that I actually created above inside this class.

211
00:14:19,350 --> 00:14:21,240
So this reference that.

212
00:14:21,300 --> 00:14:27,450
So I'm going to actually create a folder inside our firebase storage named audio files.

213
00:14:27,510 --> 00:14:27,970
OK.

214
00:14:28,170 --> 00:14:33,340
So it is going to be that child and inside the prentices I can say audio files.

215
00:14:33,390 --> 00:14:34,810
So this is the name of our folder.

216
00:14:34,950 --> 00:14:38,710
And inside that folder I want to put our audio files.

217
00:14:38,730 --> 00:14:41,110
So again I'm going to call that child.

218
00:14:41,130 --> 00:14:47,550
And now we need to specify the name of the audio that we want to actually put inside our folders so

219
00:14:47,550 --> 00:14:57,190
just put two coats here and the name is going to be my art you'll find my audio file dot free.

220
00:14:57,230 --> 00:14:59,150
So it is going to be the format right.

221
00:14:59,190 --> 00:15:01,700
The type and after this line of code here.

222
00:15:01,700 --> 00:15:04,260
So let me create an image so that you can see what's going on here.

223
00:15:04,260 --> 00:15:07,220
So here let's create a variable of type you are.

224
00:15:07,350 --> 00:15:08,470
So you and I.

225
00:15:08,850 --> 00:15:12,110
And the name is going to be audio file.

226
00:15:12,570 --> 00:15:18,990
You are the assignment operator so let's refer to this you have a class that you are right let's call

227
00:15:18,990 --> 00:15:20,540
this method you are.

228
00:15:20,910 --> 00:15:22,690
This is me from file.

229
00:15:22,920 --> 00:15:24,000
You are from file.

230
00:15:24,150 --> 00:15:27,750
So we're going to get that you are from a file that is passed to this method.

231
00:15:27,870 --> 00:15:31,030
So we already created a valuable type Stream.

232
00:15:31,080 --> 00:15:33,740
And the name of that value but is audio file right.

233
00:15:33,750 --> 00:15:39,780
If you remember it here inside our class we created this variable in line number 41 audio file.

234
00:15:40,320 --> 00:15:45,390
And inside this uncreate method we actually initialize this variable here.

235
00:15:45,390 --> 00:15:52,110
So here if I scroll down here we can see that Enceladus starts to record the audio Mefford here views

236
00:15:52,110 --> 00:15:56,060
this audio file here in order to specify the output file.

237
00:15:56,130 --> 00:16:01,540
Ok so now we're going to use this audio file here in order to get you out of that voice.

238
00:16:01,590 --> 00:16:02,380
So you or I.

239
00:16:02,430 --> 00:16:04,950
So let's go inside is upload the audio to fire Smurfette.

240
00:16:05,070 --> 00:16:09,020
And he in line number two hundred and fifty four inside Apprentice's.

241
00:16:09,150 --> 00:16:15,240
We can actually see a new file because we need to pass a value of a file to this MF at here right now

242
00:16:15,290 --> 00:16:15,870
file.

243
00:16:16,130 --> 00:16:19,320
And now I just need to pass the audio file which is of type string.

244
00:16:19,320 --> 00:16:21,080
So it's going to create a file.

245
00:16:21,480 --> 00:16:26,910
It's going to create a value of type file from this string value that you passed to the constructor

246
00:16:27,420 --> 00:16:33,230
and this new object is created and we passed this object to the from file method of this you are right.

247
00:16:33,360 --> 00:16:35,750
And it's going to return a value of type you are right.

248
00:16:35,790 --> 00:16:40,380
So it's going to actually be assigned to this valuable audio.

249
00:16:40,380 --> 00:16:43,970
So let me put little or hear audio file you or I.

250
00:16:44,060 --> 00:16:47,260
OK so now that we have this audio file you are here.

251
00:16:47,280 --> 00:16:50,820
Let's actually refer to this audio file address.

252
00:16:50,820 --> 00:16:57,180
So now I want to put this file this audio file to this address right so I can say that pute fine.

253
00:16:57,180 --> 00:16:59,620
So we have this right here right.

254
00:16:59,630 --> 00:17:02,990
Because if it needs an argument of type you are right.

255
00:17:03,180 --> 00:17:08,130
So if you already created this valuable off that you or I so if we can pass that here audio file you

256
00:17:08,130 --> 00:17:12,400
are right that I actually add on success listener.

257
00:17:12,570 --> 00:17:18,180
And inside the just typing here new and then just hold the shift key on your keyboard and then personal

258
00:17:18,180 --> 00:17:18,960
it personally.

259
00:17:18,990 --> 00:17:19,920
OK on your keyboard.

260
00:17:19,920 --> 00:17:25,230
In order to get this option unsuccessfully send it and then press an intelligent new keyboard in order

261
00:17:25,230 --> 00:17:26,150
to select this option.

262
00:17:26,150 --> 00:17:29,120
So let me create a new line so that you can see what's going on here.

263
00:17:29,160 --> 00:17:31,140
So this Smurfette is actually overrated for us.

264
00:17:31,140 --> 00:17:35,320
Unsuccess my friend and he had at the end in Prentice's you can see that here right.

265
00:17:35,370 --> 00:17:41,130
Let's actually just type in dot at unfairly a listener knew on.

266
00:17:41,140 --> 00:17:42,430
So select is fun.

267
00:17:42,630 --> 00:17:46,580
Unfilial listener so this should be the same if it is also over here.

268
00:17:46,590 --> 00:17:50,300
So let me put a semicolon here at the end of this practices here.

269
00:17:50,310 --> 00:17:51,810
So now let's go into this.

270
00:17:51,840 --> 00:17:52,970
Unsuccess Meffert here.

271
00:17:52,980 --> 00:17:59,530
So this unsuccess Meffert here is going to be called the offloading of the voice to firebase was successful.

272
00:17:59,550 --> 00:18:04,280
So inside the Smurfette here we can say download progress de-lurked not dismiss.

273
00:18:04,530 --> 00:18:05,820
That's it.

274
00:18:05,820 --> 00:18:08,820
So now let's run our application.

275
00:18:08,850 --> 00:18:10,260
Let's choose so.

276
00:18:10,280 --> 00:18:15,910
Because it is going to be and I actually use the audio recorder of the device.

277
00:18:15,990 --> 00:18:21,540
It is actually necessary to test this app on the actual device because the emulator cannot be used in

278
00:18:21,540 --> 00:18:23,720
order to access the audio recorder.

279
00:18:23,910 --> 00:18:27,550
So choose actually an actual device and then click on OK.

