1
00:00:00,590 --> 00:00:01,370
Welcome back.

2
00:00:01,609 --> 00:00:08,630
Now it's finally time to make use of the feature that we have implemented, which is this set current

3
00:00:08,690 --> 00:00:09,630
location feature.

4
00:00:09,660 --> 00:00:16,010
So when we click on it, you can see now it's going to give me this location here, which is the location

5
00:00:16,010 --> 00:00:23,600
that is by default set up and emulator, and that is the Google office.

6
00:00:23,930 --> 00:00:25,220
All right, Google Head Office.

7
00:00:25,670 --> 00:00:28,670
And you can change the location if you want to.

8
00:00:28,820 --> 00:00:31,970
So here you can play around with the location.

9
00:00:32,980 --> 00:00:39,400
For example, you could just assign this value here on nine prote, so maybe we should use another one.

10
00:00:39,820 --> 00:00:42,220
Let's go here and select this road here.

11
00:00:44,370 --> 00:00:45,740
And set the location.

12
00:00:46,110 --> 00:00:51,600
So now let's press this button again and you can see now changed it to the location where we are.

13
00:00:52,240 --> 00:00:56,880
OK, so we can test this quite a bit or you can play around with this as you want.

14
00:00:57,250 --> 00:00:59,810
But generally, what I want is this feature here.

15
00:01:00,300 --> 00:01:05,040
So the location, as it is stated here, how do we get there?

16
00:01:05,220 --> 00:01:12,540
Well, there are many ways, as always, but I personally prefer the way where we create a helper class

17
00:01:12,570 --> 00:01:14,550
which will do the job for us.

18
00:01:17,380 --> 00:01:20,830
So I'm going to create a new kotlin class.

19
00:01:22,770 --> 00:01:27,180
Which will be class here, and this will be called get address.

20
00:01:29,640 --> 00:01:34,500
From lat long, from the latitude and longitude.

21
00:01:35,470 --> 00:01:43,060
And this class should be an easy task, so it should run asynchronously because I don't want to block

22
00:01:43,060 --> 00:01:47,680
the main threat, so I'm just going to say inherit from async task.

23
00:01:48,720 --> 00:01:56,460
Now, when we inherit from async task, we need to pass in three values here, void, string and string,

24
00:01:56,700 --> 00:02:00,840
as we've seen before, is at least that's what I'm going to use here.

25
00:02:01,680 --> 00:02:06,390
And then I, of course, need to adjust my constructor here.

26
00:02:07,960 --> 00:02:19,750
So the constructor will be that IPASS in the context, so in which I want to run this async task so

27
00:02:19,750 --> 00:02:23,950
to me and put context here, then the latitude.

28
00:02:26,830 --> 00:02:36,460
So Private Ovalle lattitude, which will be a double, and then Private Ovalle longitude, which will

29
00:02:36,460 --> 00:02:37,840
also be a double.

30
00:02:40,340 --> 00:02:43,460
All right, so that is going to be our.

31
00:02:44,700 --> 00:02:51,210
I think task class here and of course, if I create a class which is async task, it should implement

32
00:02:51,210 --> 00:02:53,420
its members, which is do in background.

33
00:02:53,760 --> 00:02:59,500
So we have this function doing background and that is what we want to execute in the background.

34
00:02:59,700 --> 00:03:05,730
But as you also maybe remember, is that we had some other functions here as well, which I also want

35
00:03:05,730 --> 00:03:07,780
to use, which is unposed execute.

36
00:03:08,400 --> 00:03:12,150
So that's going to be the other method that I want to use in here.

37
00:03:12,450 --> 00:03:15,800
And then what I would like to have is an interface.

38
00:03:15,840 --> 00:03:20,080
So I'm going to set those things up before I implement the actual methods here, as you can see.

39
00:03:20,370 --> 00:03:25,400
So I want to use an interface here and it will be an address listener.

40
00:03:26,640 --> 00:03:33,560
So we are creating our own listener here, which will have two functions on headrests found.

41
00:03:33,900 --> 00:03:41,430
So what do we want to execute when the address is found and we pass in an address here and then another

42
00:03:41,430 --> 00:03:43,440
function on error?

43
00:03:43,470 --> 00:03:45,870
So what will happen if we get an error?

44
00:03:47,140 --> 00:03:50,950
All right, so this is going to be our interface that we're going to require for this.

45
00:03:51,640 --> 00:03:52,260
All right.

46
00:03:52,300 --> 00:03:59,380
So the next thing that I need inside of my closet here, inside of this get addressed from latitude.

47
00:03:59,380 --> 00:04:06,400
Longitude is going to be a geocode or so geocode is going to be the magical class, which will take

48
00:04:06,400 --> 00:04:14,170
care of actually making a location, a readable location from latitude and longitude.

49
00:04:14,770 --> 00:04:15,160
All right.

50
00:04:15,160 --> 00:04:22,570
So let's create this variable here, private vol geo coder, which would be of type geocode.

51
00:04:26,960 --> 00:04:35,570
And I'm going to create a geocode object here, so Geocode dur and here I need to put this into context.

52
00:04:35,570 --> 00:04:39,880
So I'm going to use the context that is passed to this class.

53
00:04:39,920 --> 00:04:45,380
So here at the top, you can see when we create an object of this class, we will need to pass in a

54
00:04:45,380 --> 00:04:45,860
context.

55
00:04:45,860 --> 00:04:48,610
And that's going to be the context that I use for this geocode.

56
00:04:49,700 --> 00:04:55,090
And then I'm going to or I have to pass the local dot.

57
00:04:55,100 --> 00:04:57,860
And here I'm just going to use the default of the device.

58
00:04:57,870 --> 00:05:02,870
So you could, of course, use local and an English, German, Chinese, whatever.

59
00:05:03,080 --> 00:05:08,450
But I'm just going to get the default of the device so it will be different for every setting, so to

60
00:05:08,450 --> 00:05:08,800
speak.

61
00:05:10,140 --> 00:05:14,820
Next, I create another variable here, which will be isolate initialised.

62
00:05:18,610 --> 00:05:25,750
Which will be a private late in advance and address listener.

63
00:05:29,570 --> 00:05:34,940
Which will be of our address listening, of course, which is this interface that we created earlier.

64
00:05:36,930 --> 00:05:37,420
All right.

65
00:05:37,440 --> 00:05:40,410
Now comes the actual magic, and that is going to happen in the background.

66
00:05:40,410 --> 00:05:41,970
So we're going to use this geocode.

67
00:05:42,000 --> 00:05:49,740
And I told you earlier that this geocode hour is taking care of encoding the geolocation to something

68
00:05:49,740 --> 00:05:53,750
that we can read about the latitude and longitude into readable text.

69
00:05:53,970 --> 00:05:56,860
So that's what we want to use inside of our Dooen background.

70
00:05:56,880 --> 00:05:59,280
So that's basically what we want to have the result of.

71
00:05:59,280 --> 00:05:59,550
Right.

72
00:05:59,850 --> 00:06:07,200
So I'm just going to create a new list of results that I get from it, which is going to be a list of

73
00:06:07,350 --> 00:06:08,080
addresses.

74
00:06:09,090 --> 00:06:17,010
So here you can see there's this address, class and Android available and we're going to use our geocode

75
00:06:17,220 --> 00:06:21,090
object to get something from the location.

76
00:06:21,330 --> 00:06:23,010
So you can see there are two options.

77
00:06:23,010 --> 00:06:25,890
You can either get it from the name or you can get it from the location.

78
00:06:25,890 --> 00:06:30,070
And we want to get it from the location because that's the latitude and longitude.

79
00:06:30,630 --> 00:06:39,480
So here we, of course, pass in the latitude and longitude which are passed to the class when we create

80
00:06:39,480 --> 00:06:40,170
an object of it.

81
00:06:41,040 --> 00:06:47,760
So here at the top of the construct, you can see whenever we create an object of get cross from latitude

82
00:06:47,760 --> 00:06:54,390
and longitude, we need latitude and longitude, OK, and then get from location requires one more variable

83
00:06:54,390 --> 00:06:54,630
here.

84
00:06:55,170 --> 00:07:00,150
And that is the amount of results that you want to have, the maximum result.

85
00:07:00,420 --> 00:07:05,460
So when you have the latitude and longitude, it can happen that there are multiple addresses at that

86
00:07:05,460 --> 00:07:05,880
point.

87
00:07:06,240 --> 00:07:11,090
And I'm just going to take the most likely one or just one of them.

88
00:07:11,100 --> 00:07:13,400
So I'm just going to assign mixed results.

89
00:07:13,920 --> 00:07:14,340
One.

90
00:07:16,300 --> 00:07:22,120
Now, the next thing that I want to do is if the list is not empty and if there is something in there,

91
00:07:22,120 --> 00:07:30,610
so if address list is not equal null and heteros list, it's not an empty list, so is not empty.

92
00:07:31,960 --> 00:07:41,470
Then I want to use that address and break it into parts, so what address, which will be the address

93
00:07:42,160 --> 00:07:45,580
that we get from our address list, had position zero.

94
00:07:48,010 --> 00:07:54,790
So from this list here, which gets the value from the location using the geo coder, I take the very

95
00:07:54,790 --> 00:07:59,500
first entry and I store that into this variable called address.

96
00:08:00,340 --> 00:08:04,090
And then I need a string builder because this address is not actually a string.

97
00:08:04,090 --> 00:08:04,360
Right.

98
00:08:04,360 --> 00:08:09,970
And I need to get the data in form of a string because as you can see, doing background is going to

99
00:08:09,970 --> 00:08:14,290
return a string here that has to do with the string up here.

100
00:08:15,070 --> 00:08:15,480
All right.

101
00:08:15,490 --> 00:08:16,850
So it's going to return a string.

102
00:08:17,140 --> 00:08:25,690
So I'm just going to say, let's use the string builder object in order to go through all of the addresses

103
00:08:25,690 --> 00:08:26,690
that we have.

104
00:08:27,040 --> 00:08:30,850
So I in zero thought address.

105
00:08:31,040 --> 00:08:32,770
So go through all of the address.

106
00:08:33,280 --> 00:08:40,450
This is available and it's here double the address that makes address line index.

107
00:08:41,830 --> 00:08:49,000
And then there's, of course, going to be the largest index currently in use of the specified address

108
00:08:49,000 --> 00:08:49,280
line.

109
00:08:49,750 --> 00:08:52,120
OK, so an address can have multiple lines.

110
00:08:52,120 --> 00:08:56,470
That can be a very complex address and we just want to have all of them.

111
00:08:57,220 --> 00:08:59,230
So the maximum line index.

112
00:08:59,920 --> 00:09:01,990
So give me the whole address, so to speak.

113
00:09:01,990 --> 00:09:05,610
And the address consists, as I said, of multiple elements.

114
00:09:05,620 --> 00:09:12,880
So admin area, subnet, admin area, locality, sub, sub, locality and so forth.

115
00:09:12,880 --> 00:09:14,860
You can see postal code, country code.

116
00:09:15,310 --> 00:09:16,960
So it's a super long thing.

117
00:09:17,320 --> 00:09:20,020
It's a super long, detailed information.

118
00:09:20,260 --> 00:09:22,370
And what I want to do is I want to get all of it.

119
00:09:22,750 --> 00:09:26,080
So just say, OK, go through all of it and then append that.

120
00:09:26,230 --> 00:09:39,280
So use as B, our string builder to append this address, get address line at the position I and append.

121
00:09:41,710 --> 00:09:44,470
And empty space in between.

122
00:09:45,500 --> 00:09:49,370
OK, because otherwise it's not readable for us if it's all connected to each other.

123
00:09:49,390 --> 00:09:50,290
It doesn't look good.

124
00:09:50,860 --> 00:09:52,820
OK, so that's what this line will do.

125
00:09:53,830 --> 00:09:54,310
And then.

126
00:09:56,670 --> 00:10:01,740
I will use the following line where they lead a character at the end, so I just delete the very last

127
00:10:01,740 --> 00:10:06,150
character because I don't want to have an empty space, which is not required at the end.

128
00:10:06,180 --> 00:10:07,680
So this is what this line is going to do.

129
00:10:08,100 --> 00:10:13,930
So delete char, it has to be that length minus one.

130
00:10:14,370 --> 00:10:18,720
So whatever the length of this string builder string is going to be.

131
00:10:18,720 --> 00:10:20,100
So string builder, by the way.

132
00:10:21,130 --> 00:10:21,760
Is this.

133
00:10:23,320 --> 00:10:28,690
Classier constructs a string build with no characters in it and initial capacity of 16 characters,

134
00:10:28,930 --> 00:10:31,690
but it's going to be more than that in our case.

135
00:10:32,660 --> 00:10:40,970
And then I finally can return that string builder, but the thing is, the string itself is not of type

136
00:10:40,970 --> 00:10:46,370
string, but we're going to make it a string and beautifully enough, it's going to give us the right

137
00:10:46,370 --> 00:10:47,150
type anyways.

138
00:10:47,750 --> 00:10:50,560
OK, so this whole code here can go wrong.

139
00:10:53,130 --> 00:10:58,770
So I'm going to put all of that into I try and catch block, so let's do that.

140
00:10:59,250 --> 00:10:59,820
Try.

141
00:11:01,880 --> 00:11:09,410
All of that catch it if something goes wrong with a generic exception, he which is of type exception.

142
00:11:11,650 --> 00:11:18,580
And then just Heathered prints that trace or just print it onto our console and otherwise return.

143
00:11:19,910 --> 00:11:20,810
An empty string.

144
00:11:22,500 --> 00:11:25,050
So what we're saying is if.

145
00:11:25,930 --> 00:11:32,230
Try and catch for whatever reason, didn't work out, it's just going to return this empty string and

146
00:11:32,350 --> 00:11:39,250
if the try block worked and we are inside of this block where we have an address list, which is not

147
00:11:39,250 --> 00:11:44,840
an empty and not now, then we return the string that was created from it.

148
00:11:44,860 --> 00:11:46,150
So basically the address.

149
00:11:47,810 --> 00:11:53,360
So now this method is fine, but we still have this unposed execute, which we are not using, and we

150
00:11:53,360 --> 00:11:55,620
have this address listener, which we are not really using.

151
00:11:55,970 --> 00:11:57,950
So how do we properly use it?

152
00:11:58,340 --> 00:12:05,780
Well, inside of this unposed execute, what I want to do is I want to check if the result string.

153
00:12:07,860 --> 00:12:15,510
Which is string here and I'm going to recall this one or rename it string is more to my liking.

154
00:12:15,780 --> 00:12:28,410
So if this result string is null, then just call the end address listener on error and otherwise call

155
00:12:28,410 --> 00:12:32,340
and address listener on address font.

156
00:12:33,370 --> 00:12:39,730
So if we have a result strength, which we get in on post execute, then we want to use it.

157
00:12:40,270 --> 00:12:42,960
And of course, this should be resolved straight.

158
00:12:44,050 --> 00:12:50,050
Now, there are two more things that we still need to do, and one of them is to set this address.

159
00:12:50,050 --> 00:12:52,150
Listener so fun.

160
00:12:52,160 --> 00:13:01,240
It's a public function that we're going to create here, set address listener, which will require an

161
00:13:01,240 --> 00:13:07,000
address listener and it should basically just assign.

162
00:13:08,620 --> 00:13:14,500
The address listener that is passed to our variable called Home Address Listener.

163
00:13:16,490 --> 00:13:21,830
So when we call this function, we need to pass on and address listener, and that one will be assigned

164
00:13:21,830 --> 00:13:28,280
to the address listener of this class, which is this late and variable, which we, of course, need

165
00:13:28,610 --> 00:13:32,710
inside of our on post to execute because otherwise it will not work.

166
00:13:32,720 --> 00:13:37,010
So we need an on an address listener that we, of course, create ourselves.

167
00:13:38,370 --> 00:13:43,920
And by the way, on address phone needs, of course, a result strength because it's still complaining

168
00:13:43,920 --> 00:13:44,330
it right.

169
00:13:44,880 --> 00:13:47,660
So it needs to have a string because look at this function.

170
00:13:47,670 --> 00:13:49,950
You can see that requires a string here.

171
00:13:52,760 --> 00:13:58,040
And then finally, we need one more function, and that one was going to take care of getting the address,

172
00:13:58,680 --> 00:14:00,310
so I'm just calling it like that.

173
00:14:00,860 --> 00:14:05,810
But what it really just does is it executes this.

174
00:14:06,920 --> 00:14:13,970
Whole async task, so an easy task doesn't do anything until it is executed, and I'm just going to

175
00:14:13,970 --> 00:14:18,800
say, OK, in order to execute, just call this public function called get address.

176
00:14:19,640 --> 00:14:20,110
All right.

177
00:14:20,330 --> 00:14:26,690
And at this point, we can use our beautiful class that we prepared because now you can reuse this class

178
00:14:26,690 --> 00:14:31,580
whenever you want, whenever you need the address from the latitude and longitude.

179
00:14:31,880 --> 00:14:37,820
So you can just paste this class in or copy this class into your other projects that you will use in

180
00:14:37,820 --> 00:14:39,270
the future and use it.

181
00:14:39,290 --> 00:14:39,890
That's perfect.

182
00:14:40,700 --> 00:14:42,590
OK, so let's go back to our.

183
00:14:43,930 --> 00:14:51,220
Spot where we actually it, and that's the ad happy place activity, and here would be a good spot where

184
00:14:51,220 --> 00:14:56,930
we can put this well that's inside our location called back here.

185
00:14:57,760 --> 00:14:58,140
All right.

186
00:14:58,150 --> 00:14:58,510
So.

187
00:14:59,470 --> 00:15:06,460
When we get the location, result guarantees the latitude and longitude, which we just log, but we

188
00:15:06,460 --> 00:15:11,800
don't do anything else with it, and now it's time to actually transfer it into the right format, because

189
00:15:11,800 --> 00:15:17,140
now we have the latitude and longitude and we can use that in order to send that data to our address

190
00:15:17,140 --> 00:15:19,640
from latitude and longitude class.

191
00:15:20,260 --> 00:15:21,820
So let's go and do that.

192
00:15:22,870 --> 00:15:31,360
Volle address task is going to be an object of my get address from latitude and longitude.

193
00:15:31,570 --> 00:15:39,760
And yeah, I need to pass in the context and latitude and which is going to be our latitude and longitude,

194
00:15:39,760 --> 00:15:41,260
which is our longitude.

195
00:15:42,890 --> 00:15:45,140
All right, so this task.

196
00:15:46,240 --> 00:15:52,080
Has the function where we can set to address listener, and it's going to be important that we do so.

197
00:15:52,270 --> 00:15:55,630
So by the way, this is complaining because we're not in the right context.

198
00:15:55,630 --> 00:16:03,940
So I'm going to have to add the add happy place activity in here, because that's where we want this

199
00:16:03,940 --> 00:16:04,980
to be executed.

200
00:16:06,490 --> 00:16:12,430
All right, so now we can use this address, TASC, which is an object of our get address from latitude

201
00:16:12,430 --> 00:16:16,620
and longitude to call its function, which is to set address listener.

202
00:16:17,140 --> 00:16:23,950
But if we do that, you can see we need to assign the whole address listener, which is a new object.

203
00:16:24,190 --> 00:16:30,990
So I'm just going to create a new get address or actually within Javal here.

204
00:16:31,000 --> 00:16:36,370
So we need you use object here, get address from latitude and longitude.

205
00:16:36,790 --> 00:16:39,010
That address listener.

206
00:16:40,170 --> 00:16:45,900
OK, so I'm actually passing the address listener from the get address from latitude and longitude here

207
00:16:46,260 --> 00:16:48,750
as a new object and creating a new object from that.

208
00:16:49,290 --> 00:16:54,300
And then I need to implement it according or the right functions here, of course.

209
00:16:54,630 --> 00:16:55,770
And which are those?

210
00:16:55,950 --> 00:16:59,890
Well, on address phones and on error.

211
00:17:00,570 --> 00:17:05,310
So if we go back here, you can see we had these two functions, Oneida's Fontan an error and we need

212
00:17:05,310 --> 00:17:06,200
to implement them here.

213
00:17:06,480 --> 00:17:09,060
So let's overwrite on address font.

214
00:17:11,040 --> 00:17:24,270
So here on Hydrous Font, she needs an address type string nullable and of course, want to override

215
00:17:24,430 --> 00:17:24,810
fun.

216
00:17:25,140 --> 00:17:29,280
So I was hoping that the idea would pick up on that, but it doesn't.

217
00:17:30,790 --> 00:17:38,930
So that's the one function and then we had the other function override fun, and that was on error.

218
00:17:39,490 --> 00:17:42,850
So what do we want to do if we get an error here?

219
00:17:44,290 --> 00:17:45,170
Right, and there.

220
00:17:46,070 --> 00:17:50,270
What I'm just going to do is I'm going to write a little lock entry Lucky.

221
00:17:52,410 --> 00:17:53,910
Get her address.

222
00:17:56,560 --> 00:18:03,820
And the message should be something went wrong, super useful error message, but I think that's going

223
00:18:03,820 --> 00:18:04,350
to be fine.

224
00:18:06,130 --> 00:18:12,070
And the market is still complaining, that's because I'm closing the bracket here and it's not so happy

225
00:18:12,070 --> 00:18:12,790
about that.

226
00:18:14,030 --> 00:18:19,430
So now I need to close to break it down here, so this whole thing here is actually just one line of

227
00:18:19,430 --> 00:18:20,840
code, so to speak.

228
00:18:21,440 --> 00:18:27,500
OK, and of course, on address found there, I still want to execute some code and that is going to

229
00:18:27,500 --> 00:18:31,460
be the ETTY underscore location.

230
00:18:32,180 --> 00:18:36,410
And that's the final step set text address.

231
00:18:39,040 --> 00:18:45,580
Actually, it's the second last, of course, we need to call get addressed at one point, so address

232
00:18:45,580 --> 00:18:46,060
task.

233
00:18:47,220 --> 00:18:51,180
Third, get address, which is executing the whole async task.

234
00:18:52,270 --> 00:18:59,410
OK, so what we just did here is we created an object of our address from latitude and longitude class,

235
00:18:59,890 --> 00:19:09,280
and then we set its listener to be a new object of an address listener and which we override the two

236
00:19:09,280 --> 00:19:15,420
functions on address font and on error, which are required as we have defined it in the interface.

237
00:19:16,300 --> 00:19:19,060
And now the moment of truth is here.

238
00:19:19,270 --> 00:19:21,610
Let's run this application once again.

239
00:19:22,950 --> 00:19:30,480
So let's go ahead and create a new location here, and this one will be Google Head Office.

240
00:19:34,310 --> 00:19:35,030
And.

241
00:19:36,480 --> 00:19:40,970
That's where the Google magic happens.

242
00:19:42,580 --> 00:19:48,760
And then let's set the current location and, of course, the new location that I assigned earlier,

243
00:19:49,090 --> 00:19:55,990
and it's not the actual Google location, I don't know how to reset that here, but let's just take

244
00:19:55,990 --> 00:19:56,740
any value.

245
00:19:56,750 --> 00:19:58,060
Let's set the location.

246
00:19:58,060 --> 00:19:59,080
Let's test it again.

247
00:19:59,470 --> 00:20:01,290
And we could see it works perfectly.

248
00:20:02,020 --> 00:20:02,510
All right.

249
00:20:02,800 --> 00:20:07,480
So at this point, we can, of course, go ahead and add an image here, select one from gallery.

250
00:20:07,480 --> 00:20:08,890
And it's going to be.

251
00:20:10,170 --> 00:20:15,360
The beautiful image here from the camera, you can see that's how I think it looks like in the Google

252
00:20:15,360 --> 00:20:15,930
Head office.

253
00:20:16,830 --> 00:20:18,840
And then when we save that location.

254
00:20:19,750 --> 00:20:21,190
We can find the location here.

255
00:20:21,220 --> 00:20:24,880
Now let's click on it, you can see the location is down there.

256
00:20:26,360 --> 00:20:28,610
And that's where the Google magic happens.

257
00:20:28,640 --> 00:20:29,660
That's viewed on the map.

258
00:20:33,510 --> 00:20:35,310
And to concede zooms all the way in.

259
00:20:35,700 --> 00:20:39,360
Well, not that far, it seems, in up to 10.

260
00:20:40,080 --> 00:20:46,650
So the settings I had set last was 10, but of course, we could go back to 15 to zoom in even further.

261
00:20:47,220 --> 00:20:47,790
All right.

262
00:20:48,090 --> 00:20:48,750
But that's it.

263
00:20:48,960 --> 00:20:55,470
So now you see how you can create such an application, which uses a bunch of new features that we have

264
00:20:55,470 --> 00:20:56,330
not seen before.

265
00:20:57,340 --> 00:21:03,850
And the cool thing is, because we wrote the code so cleanly, you can just use a bunch of it for your

266
00:21:03,850 --> 00:21:04,490
own project.

267
00:21:04,540 --> 00:21:09,640
So this whole database handler, the adapter worked with some minor changes.

268
00:21:09,640 --> 00:21:10,780
You can use that as well.

269
00:21:11,080 --> 00:21:14,680
The Happy Place model is great example of how a model would look like.

270
00:21:15,040 --> 00:21:21,610
And all of those details, for example, this Weiping to delete and to edit, they are amazing as well

271
00:21:21,610 --> 00:21:23,770
as this get address from latitude and longitude.

272
00:21:25,230 --> 00:21:31,230
So I think that these whole classes that you see here will make your life as a developer so much easier

273
00:21:31,230 --> 00:21:36,750
in the future once you have projects which require any of those capabilities.

274
00:21:37,960 --> 00:21:45,460
OK, so thanks a lot for being part of this project and following along and coding along and yes, I

275
00:21:45,460 --> 00:21:46,300
see you in the next one.

