1 00:00:05,250 --> 00:00:11,530 Alright so moving on, once you know what an intent is, the code's going to be fairly, really easy to understand. 2 00:00:11,530 --> 00:00:18,510 So let's go, swing over to the Google documentation and find out more about intents. 3 00:00:18,510 --> 00:00:24,030 Alright, so it says here that "An intent is an abstract description of an operation to be performed". 4 00:00:24,030 --> 00:00:30,060 So the use of the word abstract here can be a bit confusing, because intent isn't an abstract class. 5 00:00:30,060 --> 00:00:34,140 What they really mean here is that it's not tied to any particular operation. 6 00:00:34,140 --> 00:00:39,690 So reading on it can be used with a start activity method to launch an activity, which is what we're using 7 00:00:39,690 --> 00:00:46,860 it for in our app, and intent can also be used to send data to components that are registered to receive broadcasts, 8 00:00:46,860 --> 00:00:53,160 such as a notification that a text message has been received for example, and also to start a service. But 9 00:00:53,160 --> 00:00:55,890 it's launching activities that we're interested in here. 10 00:00:55,890 --> 00:01:00,840 Now the next paragraph is a bit jargony, but basically means that you can use an intent to launch an 11 00:01:00,840 --> 00:01:06,420 activity, without linking your code directly to the activity that you want to launch. 12 00:01:06,420 --> 00:01:12,090 So if you wanted to start the devices email app, you just specify email in the intent, without having to 13 00:01:12,090 --> 00:01:16,350 know which app the user's installed to handle emails on that device. 14 00:01:16,350 --> 00:01:22,800 So the most significant use of intents is in launching activities, and the documentation refers to them 15 00:01:22,800 --> 00:01:24,870 as the glue between activities. 16 00:01:24,870 --> 00:01:30,930 So in other words intents bind activities together. Now as well as the reference documentation, 17 00:01:30,930 --> 00:01:34,770 Google also provide guides on many aspects of Android. 18 00:01:34,770 --> 00:01:40,770 Now the reference documentation can be quite formal, but the guides are often written in a friendlier style, 19 00:01:40,770 --> 00:01:48,090 and there's actually a guides, a guide rather on intents. I'm just going to paste that link in, so you can check that out. 20 00:01:48,090 --> 00:01:51,180 Now here it's saying that "An intent is a messaging object 21 00:01:51,180 --> 00:01:54,480 you can use to request an action from another app component", 22 00:01:54,480 --> 00:01:59,490 and that's probably a more helpful description than an abstract description of an operation to be performed, 23 00:01:59,490 --> 00:02:01,380 as the previous page had. 24 00:02:01,380 --> 00:02:08,009 Now this page also mentions using intents to start activities, and mentions that the intent describes 25 00:02:08,009 --> 00:02:11,340 the activity to start and carries any necessary data. 26 00:02:11,340 --> 00:02:13,530 So I think this page is more readable. 27 00:02:13,530 --> 00:02:19,590 So watch out for URL's starting with developer.android.com/guide, as well as the slash 28 00:02:19,590 --> 00:02:22,270 reference pages, because the guides can be more help. 29 00:02:22,270 --> 00:02:28,500 We can see here where we've got slash guide in the URL, compared to slash reference there. 30 00:02:28,500 --> 00:02:32,720 I think the slash guides are a bit more readable in many cases. 31 00:02:32,720 --> 00:02:36,890 So once you finish this section, and you've seen how the code starts the various activities from our 32 00:02:36,890 --> 00:02:43,370 buttons, it is worth reading the rest of this page to get an explanation of how Android handles intents. 33 00:02:43,370 --> 00:02:47,120 Now don't worry about the bits about services and broadcasts just yet. 34 00:02:47,120 --> 00:02:49,590 It's activities we're interested in at the moment. 35 00:02:49,590 --> 00:02:51,800 Now we're going to create our own intent shortly, 36 00:02:51,800 --> 00:02:58,840 but here we don't need to, or have to, because the YouTubeStandalonePlayer class will actually create them for us. 37 00:02:58,840 --> 00:03:03,460 Now if we want an intent to play a video, we just call the create video intent function, if 38 00:03:03,460 --> 00:03:09,270 we go back to our code, and we're using that as you can see on line 40, and to play a list of videos 39 00:03:09,270 --> 00:03:13,060 as a playlist we're calling the create playlist intent. 40 00:03:13,060 --> 00:03:18,490 Now both of these functions will turn an intent that we can use, to start an activity but to perform 41 00:03:18,490 --> 00:03:23,110 the operation we want. Both methods need to know which activity's starting the intent, 42 00:03:23,110 --> 00:03:25,840 and that's why we're providing this here as the activity. 43 00:03:25,840 --> 00:03:28,210 Now we also have to provide the Google API key 44 00:03:28,210 --> 00:03:33,670 and the ID of what we want to play, either a single video or a playlist, depending on which intent's 45 00:03:33,670 --> 00:03:40,390 being used. And by the by the functions of the YouTubeStandalonePlayer class are documented, and we 46 00:03:40,390 --> 00:03:45,160 go back to a browser, paste that link in, 47 00:03:45,160 --> 00:03:52,320 and they're actually documented on the YouTubeStandalonePlayer down here. You can find out more 48 00:03:52,320 --> 00:03:54,110 about it there from the link on the left, so 49 00:03:54,110 --> 00:03:56,520 check them out if you want to know more about its functions. 50 00:03:56,520 --> 00:04:02,860 So that's actually it. The documentation for intents may look a bit scary, but using them is actually pretty simple. 51 00:04:02,860 --> 00:04:08,340 Now it's just as easy to create our own intents to start different activities in our own app. I'm going to switch 52 00:04:08,340 --> 00:04:12,810 over back to the code now, and we're going to go back to our MainActivity. 53 00:04:12,810 --> 00:04:15,910 We're going to add the code for the buttons on the main screen. 54 00:04:15,910 --> 00:04:20,640 So the first thing we want to do is make the class implement the onClick list of interface, just as we 55 00:04:20,640 --> 00:04:24,270 did in the previous video for the StandaloneActivity class. 56 00:04:24,270 --> 00:04:26,920 So to do that we're just going to add a comma here, 57 00:04:26,920 --> 00:04:30,020 and View.OnClickListener, and 58 00:04:30,020 --> 00:04:32,040 you can see the imports are added automatically. 59 00:04:32,040 --> 00:04:37,370 We then add the code to assign the listener to the buttons, 60 00:04:37,370 --> 00:04:39,900 and I'm going to do that that after the setContinueView. 61 00:04:39,900 --> 00:04:49,230 So it's going to be btnPlaySingle.setOnClickListener, parentheses this, and btnPlayStandalone, 62 00:04:49,230 --> 00:04:58,290 or sorry, btnStandalone I should say, dot setOnClickListener, this, and accept the synthetic import 63 00:04:58,290 --> 00:05:03,210 if Android Studio doesn't add it automatically, but you can see here on line 6 it was added automatically for me. 64 00:05:03,210 --> 00:05:07,570 Now we've got an error at the moment but that will disappear once we implement the interfaces 65 00:05:07,570 --> 00:05:09,900 onClick method, so I'm going to go ahead and do that now. 66 00:05:09,900 --> 00:05:14,190 So we get Android Studio to generate the interface method by using control I. 67 00:05:14,190 --> 00:05:17,910 Again, before you do that remember to make sure that the cursor is inside the class 68 00:05:17,910 --> 00:05:24,260 when you do that, otherwise you'll get a weird error and it won't actually work. So I'm going to press enter there, and then we 69 00:05:24,260 --> 00:05:27,210 need to add the code for that so let's actually change this. 70 00:05:27,210 --> 00:05:32,000 And what we'll do is we'll try refactoring it this time, so Refactor, Rename. We'll 71 00:05:32,000 --> 00:05:41,880 call it view again, enter. Get rid of the question mark, we'll get rid of the TODO. The code's going to be val intent equals 72 00:05:41,880 --> 00:05:54,420 when, parentheses view.id, so R.id.btnPlaySingle, error token, capital I for intent, 73 00:05:54,420 --> 00:05:58,110 making sure that Android content is the one that was selected there. 74 00:05:58,110 --> 00:06:02,840 This is the first argument, comma Youtube, 75 00:06:02,840 --> 00:06:11,040 this time it's Youtube with a lower case t, Activity colon colon class.java 76 00:06:11,040 --> 00:06:20,360 right parentheses. We'll do the same for the Standalone, so R.id.btnStandalone error token, intent 77 00:06:20,360 --> 00:06:27,380 again, parentheses, this again comma, this time it's going to be StandaloneActivity 78 00:06:27,380 --> 00:06:37,560 colon colon class.java closing parentheses, then an else error token throw IllegalArgument 79 00:06:37,560 --> 00:06:53,020 Exception, parentheses double quotes "Undefined button clicked". Then outside of the code block for our when, startActivity intent. 80 00:06:53,020 --> 00:06:57,380 So this code's very similar to the code we just created in the StandaloneActivity class. 81 00:06:57,380 --> 00:07:00,340 The difference here is that we're creating our own intents. 82 00:07:00,340 --> 00:07:05,390 Now the intent class has got several constructors, but whenever you want to use an intent to launch a new 83 00:07:05,390 --> 00:07:09,300 activity in your own app, then this is the one you'll often use. 84 00:07:09,300 --> 00:07:14,170 Now we have to provide it with a context, so you can see we use this to pass the current context. 85 00:07:14,170 --> 00:07:20,720 Now the btnPlaySingle button will launch the YouTubeActivity, and btnStandalone starts our Standalone 86 00:07:20,720 --> 00:07:26,030 Activity, and these are passed as the second parameter to the intent class constructor. 87 00:07:26,030 --> 00:07:30,920 Now YouTubeActivity colon colon class as you can see being used here on line 21, 88 00:07:30,920 --> 00:07:36,230 that's called a class literal, and it's a way to pass a reference to a class as a parameter. 89 00:07:36,230 --> 00:07:38,810 Now you wouldn't pass string or integer as a parameter. 90 00:07:38,810 --> 00:07:43,760 You'd use an actual string such as, you know, tim in double quotes, or an actual number like 100, 91 00:07:43,760 --> 00:07:45,170 and this is the same thing. 92 00:07:45,170 --> 00:07:52,430 We need to pass an object of type class, whose value is the YouTubeActivity class, and that's how you do it in Kotlin. 93 00:07:52,430 --> 00:07:58,220 Now don't worry too much about it, just remember that when you want to pass a class to a function, you 94 00:07:58,220 --> 00:08:03,290 have to create a class literal by adding the colon colon class at the end, 95 00:08:03,290 --> 00:08:07,450 and because these are Java classes we're also adding dot Java. 96 00:08:07,450 --> 00:08:12,530 Now the other thing I've done is check that this method wasn't called by some other button. Now it shouldn't 97 00:08:12,530 --> 00:08:15,360 be, because we've only got two buttons in the screen, and 98 00:08:15,360 --> 00:08:18,110 we're actually handling both of them in the when statement. 99 00:08:18,110 --> 00:08:22,790 So we've got a case for each button in other words, but it's good practice to make sure in case we add 100 00:08:22,790 --> 00:08:26,180 a new button, and forget to update this function. 101 00:08:26,180 --> 00:08:30,110 So that's why I've added the else branch on line 23. 102 00:08:30,110 --> 00:08:32,549 Alright so that's it, that's our code finished. 103 00:08:32,549 --> 00:08:36,380 Now there's one more thing that the new activity wizard does, 104 00:08:36,380 --> 00:08:40,039 and we've got to do that manually for the StandaloneActivity class. 105 00:08:40,039 --> 00:08:45,230 Now I mentioned it briefly when we used the wizard to create the YouTubeActivity class, and it's to do 106 00:08:45,230 --> 00:08:46,940 with the manifest file. 107 00:08:46,940 --> 00:08:49,650 So let's have a look at that, and see what that's all about. 108 00:08:49,650 --> 00:08:57,030 We're going to open our manifest file up here. Now inside the application tag as you can see here on line 7, there's 109 00:08:57,030 --> 00:09:02,720 tags for each of our activities, and in this case you can see we've got dot MainActivity and dot YoutubeActivity. 110 00:09:02,720 --> 00:09:06,440 Now we're actually missing a tag for the new StandaloneActivity, and 111 00:09:06,440 --> 00:09:07,860 I'm going to add that in a minute. 112 00:09:07,860 --> 00:09:13,590 Now when we created the YoutubeActivity using the wizard, and checked the launcher activity box, the 113 00:09:13,590 --> 00:09:18,930 wizard added an intent-filter tag with an action filter and a category filter. 114 00:09:18,930 --> 00:09:24,370 So we've got this intent-filter that's got an action, and also a category tag as you can see. Now without 115 00:09:24,370 --> 00:09:27,390 these, we couldn't launch the activity as we've been doing, 116 00:09:27,390 --> 00:09:32,460 so we would've been unable to see YoutubeActivity working. So checking that launcher activity 117 00:09:32,460 --> 00:09:37,860 box resulted in these extra tags being added to the manifest for YoutubeActivity. 118 00:09:37,860 --> 00:09:41,910 And once again these wizards don't do anything that we couldn't do ourselves, they just save us a bit of 119 00:09:41,910 --> 00:09:43,230 time and typing. 120 00:09:43,230 --> 00:09:48,150 So now that we've got a way to launch the YoutubeActivity using a button, we actually don't need these 121 00:09:48,150 --> 00:09:52,830 intent-filters anymore, but we do need an activity tag for each activity, 122 00:09:52,830 --> 00:09:56,700 otherwise they can't be seen by the Android system and can't be launched at all. 123 00:09:56,700 --> 00:10:04,000 Now the tag must include a name attribute but everything else is optional, and I'm going to also specify a label 124 00:10:04,000 --> 00:10:06,080 and that will appear in the activity's title. 125 00:10:06,080 --> 00:10:11,940 So I'm going to modify the YoutubeActivity element first, and add another one then for the new StandaloneActivity. 126 00:10:11,940 --> 00:10:14,360 So basically again all we need here is activity, 127 00:10:14,360 --> 00:10:18,710 and we've got android name YoutubeActivity, and I'm going to also add the label. 128 00:10:18,710 --> 00:10:21,290 And what I'll do for clarity is put that on the next line, 129 00:10:21,290 --> 00:10:33,030 so Android colon label, and we'll call that Youtube Player. So, and we'll come back to there, then I'm going to delete this 130 00:10:33,030 --> 00:10:38,590 intent-filter as I mentioned, and we've got the closing activity tag now, and we're going to copy that, 131 00:10:38,590 --> 00:10:41,420 and we're going to create another one now for our StandaloneActivity. 132 00:10:41,420 --> 00:10:46,050 It has to be inside the application before the application closing tag, so 133 00:10:46,050 --> 00:10:52,320 this time instead of YouTubeActivity, we're going to call this one StandaloneActivity, and you can 134 00:10:52,320 --> 00:10:58,270 see that Android Studio is correctly referring to our StandaloneActivity class, and press enter there. 135 00:10:58,270 --> 00:11:02,840 OK, get rid of that trailing activity there, and 136 00:11:02,840 --> 00:11:04,930 this time it's going to be called StandaloneActivity. 137 00:11:04,930 --> 00:11:11,230 That's going to be what's on our label. 138 00:11:11,230 --> 00:11:16,390 Alright, so at this point now the apps finished, and we can actually run it on a device to make sure it all works. 139 00:11:16,390 --> 00:11:21,180 So I've got my emulator going, and I've got it set to portrait mode as you can see there. Now, 140 00:11:21,180 --> 00:11:23,970 we've been running the YoutubeActivity until now, 141 00:11:23,970 --> 00:11:28,700 and Android Studio reconfigures the play button on the toolbar, so that it runs the last activity that 142 00:11:28,700 --> 00:11:31,660 you selected, you can see up here it's YoutubeActivity. Now 143 00:11:31,660 --> 00:11:35,920 if I just click the run button, I actually get this error pop up on the bottom of the screen. 144 00:11:35,920 --> 00:11:39,040 So I'll do that and show you, see down the bottom there, the error, 145 00:11:39,040 --> 00:11:40,240 "Error running YoutubeActivity: 146 00:11:40,240 --> 00:11:45,480 The activity must be exported or contain an intent-filter". Essentially it's now complaining about 147 00:11:45,480 --> 00:11:50,320 the fact that the YoutubeActivity entry in the manifest file must have that intent-filter, 148 00:11:50,320 --> 00:11:54,300 and of course we've just taken that out of there. But that's fine though because we don't want to run Youtube 149 00:11:54,300 --> 00:11:56,400 Activity directly anymore. 150 00:11:56,400 --> 00:11:59,150 We're going to be using the buttons that we've added now. 151 00:11:59,150 --> 00:12:02,870 Now what we're going to do is make sure that we're in an MainActivity. Now 152 00:12:02,870 --> 00:12:08,100 sometimes when you right click in there, it doesn't give you the option to run MainActivity from the menu. 153 00:12:08,100 --> 00:12:13,340 You can see in this case I have got it to work but sometimes it doesn't work. If that doesn't work and you can't 154 00:12:13,340 --> 00:12:20,100 see it, come over here to MainActivity and right click it on the actual class name and select run MainActivity. 155 00:12:20,100 --> 00:12:23,940 And if that doesn't work you may need to come up to build, and actually rebuild the project. 156 00:12:23,940 --> 00:12:29,040 One of those methods, well you may have to rebuild and then either of those other two methods should actually work. 157 00:12:29,040 --> 00:12:36,040 So I'm just going to right click now and select run MainActivity, and I'm going to run it on my emulator. 158 00:12:36,040 --> 00:12:40,000 Alright, so you can see now that's our main screen with the two buttons, so that's working. 159 00:12:40,000 --> 00:12:46,100 I'm going to tap the PLAY A SINGLE VIDEO button now, and we get our YoutubeActivity launched, 160 00:12:46,100 --> 00:12:48,350 that's the one that we've been testing before. 161 00:12:48,350 --> 00:12:52,670 So when you want to start a new activity in your apps, this is one way to do it. 162 00:12:52,670 --> 00:12:57,740 So that's playing fine. We're getting our Toast messages as you can see, so 163 00:12:57,740 --> 00:13:03,360 that's all working good. I'm going to go back to the menu with the back button, 164 00:13:03,360 --> 00:13:09,060 and this time we're going to go and tap the standalone sub-menu button. That launches our Standalone Activity, 165 00:13:09,060 --> 00:13:14,640 and here's our sub-menu as you can see. Now the title says Standalone Activity, because that's the text we 166 00:13:14,640 --> 00:13:17,220 put in the label in the manifest. 167 00:13:17,220 --> 00:13:23,500 So let's check the single video first. I'm going to tap that button. You can see that our video 168 00:13:23,500 --> 00:13:26,450 got launched again. Now it doesn't start playing automatically, 169 00:13:26,450 --> 00:13:28,210 so you do have to tap the Play icon. 170 00:13:28,210 --> 00:13:33,470 You can you can see that it's running in landscape at the moment, on it's side, 171 00:13:33,470 --> 00:13:36,880 and that's because the Standalone Player's running at full screen. 172 00:13:36,880 --> 00:13:46,170 So I'm going to rotate the device, play it again. 173 00:13:46,170 --> 00:13:51,040 So the Google Standalone Player doesn't allow itself to be destroyed when the orientation changes, 174 00:13:51,040 --> 00:13:53,740 but it also doesn't handle the change itself. 175 00:13:53,740 --> 00:13:58,270 It makes sense in this case because a full screen video really has to run in landscape, 176 00:13:58,270 --> 00:13:59,950 otherwise it wouldn't be full screen. 177 00:13:59,950 --> 00:14:02,850 Now notice that when I'm pressing pause here, 178 00:14:02,850 --> 00:14:09,000 we're not actually getting any Toast notifications. With the Standalone Player there's no capability 179 00:14:09,000 --> 00:14:11,280 in the code for us to get those callbacks. 180 00:14:11,280 --> 00:14:16,500 It's only when we use the YouTubePlayer widget in the YoutubeActivity that enables you to do that. 181 00:14:16,500 --> 00:14:20,920 So that's also working now. So I'm going to go back to the menu. 182 00:14:20,920 --> 00:14:26,160 Let's have a look at the Playlist. 183 00:14:26,160 --> 00:14:30,880 Now notice these arrows, you can't quite see, you'll have to play it a little bit so we can actually see it, 184 00:14:30,880 --> 00:14:36,210 and we've actually got an ad appearing. So let's just wait for that to finish, 185 00:14:36,210 --> 00:14:38,220 and I'll just pause this when I can. 186 00:14:38,220 --> 00:14:44,440 OK, so notice this arrow here. This moves through the Playlist, onto the next video. 187 00:14:44,440 --> 00:14:48,670 Now once again the video doesn't start playing, or didn't start playing automatically, so you can tap on Play as 188 00:14:48,670 --> 00:14:54,380 you saw me do to get it to play. And if I click on next now, this arrow here, it 189 00:14:54,380 --> 00:15:02,730 actually goes to the next video in the Playlist sequence. We'll wait for the ad to finish, 190 00:15:02,730 --> 00:15:08,880 and that's a completely different video to what we saw previously, so I'm just going to pause that, and I 191 00:15:08,880 --> 00:15:13,180 can then go back to the previous video if I wanted to. Now what I wanted to show you, 192 00:15:13,180 --> 00:15:17,190 just wait til we go a little bit further here. Now you can see there it's fairly dull, 193 00:15:17,190 --> 00:15:21,720 but when we get to the start, to the first video of the Playlist, I can't click that anymore. So I'm actually 194 00:15:21,720 --> 00:15:23,520 clicking that but nothing's happening, 195 00:15:23,520 --> 00:15:31,810 as you'd expect because we're on the first video. And I can go forward multiple times, forward again, 196 00:15:31,810 --> 00:15:36,030 and notice it's helpfully telling us at the top there, once this ad finishes, 197 00:15:36,030 --> 00:15:44,000 which is becoming quite annoying, which video we're on, we're on three of seven. Now 198 00:15:44,000 --> 00:15:46,610 eventually by doing that I could get to the last video, 199 00:15:46,610 --> 00:15:50,960 then we wouldn't be able to go forward any further, then I could go back to the previous videos. 200 00:15:50,960 --> 00:15:55,790 So that functionality, in terms of playing the videos in the Playlists and skipping back and forward, 201 00:15:55,790 --> 00:16:01,250 that's actually part and parcel of the YouTube Standalone Player. So that's all working fine. 202 00:16:01,250 --> 00:16:06,630 And our YouTube app's finished. Now in this section we've actually covered quite a lot. 203 00:16:06,630 --> 00:16:12,520 So we saw how to include a third party library in our own apps, when we added the YouTube API jar file 204 00:16:12,520 --> 00:16:16,790 to the libs folder, and we created a reference to it in the build.gradle file. 205 00:16:16,790 --> 00:16:22,250 Now we also checked out the documentation for the API, and the Internet is an excellent resource, 206 00:16:22,250 --> 00:16:28,490 whenever you need any information on how something works or how to use various classes and functions. 207 00:16:28,490 --> 00:16:31,070 And it's not just for third party libraries either. 208 00:16:31,070 --> 00:16:36,740 The Google documentation on Android itself is also a very useful source of information, and they often 209 00:16:36,740 --> 00:16:39,860 supply guides as well as the reference documentation, 210 00:16:39,860 --> 00:16:43,760 so get in the habit of searching for documentation on the classes you use. 211 00:16:43,760 --> 00:16:49,790 We then implemented a couple of interfaces to allow the YouTubePlayer, the YouTubePlayer to call functions 212 00:16:49,790 --> 00:16:53,580 in our code, when something interesting happened during playback. 213 00:16:53,580 --> 00:16:58,010 We did that again as an alternative way of setting a listener on the buttons in our app. 214 00:16:58,010 --> 00:17:02,270 Now the app also used intents to start other activities, 215 00:17:02,270 --> 00:17:04,460 so now we can create more complex apps. 216 00:17:04,460 --> 00:17:06,500 that've got more than one screen. 217 00:17:06,500 --> 00:17:10,329 Now there are other ways to do that, and we're going to be looking at something called a fragment a bit 218 00:17:10,329 --> 00:17:15,680 later, but starting activities using intents is a crucial part of Android programming. 219 00:17:15,680 --> 00:17:17,690 So that's just about the end of this section, 220 00:17:17,690 --> 00:17:21,220 but I'm going to finish it off now with a challenge. 221 00:17:21,220 --> 00:17:27,339 So the challenge is to use the documentation on the YouTube Standalone Player to change the app, so that 222 00:17:27,339 --> 00:17:34,550 the video starts, or the videos start playing automatically after you've tapped the buttons on the Standalone menu. 223 00:17:34,550 --> 00:17:39,820 Now at the moment the videos are queued, and the player has to tap the Play icon to get them to play, 224 00:17:39,820 --> 00:17:45,040 as you saw me do in this video, so you want them to start playing automatically when the button's tapped. 225 00:17:45,040 --> 00:17:47,830 So do that for both the Video and the Playlist, 226 00:17:47,830 --> 00:17:50,620 and in the next video, I'll actually go through my solution. 227 00:17:50,620 --> 00:17:51,970 So I'll see you in the next video.