 I'm going to share my screen again. Can you see my screen? Yes. Anything that we are recording? Yes. Okay, nice. Hello everyone again. How are you having fun coding today? Now I'm going to introduce you a bit more on the SDK and let's try to understand what would be a typical workflow using the SDK. So we come to this slide again. Luis has taught us how to initiate a D2 and how to make a login. And now I'm going to try to show you how to sync the metadata, how to sync the data, and how to fetch the data. And then we call start working and load data and so the flow could be repeated. But now we're going to focus on the data synchronization and the metadata synchronization. Okay, then how is the SDK composed? I'm going to present you the SDK data access layer. So the SDK provides a bunch of classes that uses the access and the operation with the database and the API. So it will hide to the developer all the complexity of accessing and synchronization. And the developer will only work with the two, the modules and the repositories. So the SDK will hide the database and API access. So what's the first thing a developer will do? Well, instantiate D2. This is what just Luis has explained. And just remember, for this transition, we need an Android contest, this optional configuration parameters like the app name, a version, etc. that we just made this exercise. Once D2 is instantiated, directly from D2, it's possible to access the modules. And they are used as a wrapper for related functionality. So a module will contain some repositories, like for example, the program module will have the program repository. But access and services and helpers, it will have a pretty helper or a geometric helper, image helper, and so on. So if you enter D2, you're going to see a lot of modules. And you can find some of the different modules here in this slide, like the enrollment modules, event module, program module, relationship module, and so on. So these are some of the modules that the SDK will present to you. Okay. And then a repository. When we enter a repository from a module, we can see that our repository is a half a shade for the database where you can read the metadata, you can read the data, and they also offer a builder composition with a compiler validation. One of the advantages of a builder composition is that if you want to access the database and you write an SQL centers and write a typo in a file name, probably you will then know it until runtime. But with this kind of composition, it's less likely to make a mistake and you can detect it when you're writing the code. Repository also has similar syntax to the Web API, like filters, nested threads, and paging, but still through the SDK queries can still be performed. So for example, here in the track entity module, we will find something like the track entity types, track entity instances, the track entity data value repository, and also a reserve value manager, which is a helper. So now we're going to get into some code with some samples. As Luis just explained, the first thing to do is to configure the SDK, which is that line that we just did. And after distanciation, following the typical workflow, we will be logging in. So this one is just a reminder slide. Now that we are logging, we can start using the D2. The first step we are going to do is download the metadata. So for that, we are going to be able to enter to the metadata module and then just call the method blocking download or download if you want to do it in a reactive way. So once we just sync the metadata, now we can start downloading our data. For that, we have some other modules. For example, the track entity module will allow us to download the track entities. The event module will allow us to download a single event. And the related module will allow us to download some aggregated data. So after that, when we just download and synchronize all our metadata and data, we are maybe want to show the data in the application. So we want to fetch that data. So for fetching the data, we can do, for example, in this event module, call to the event repository, and then just call the get method. So that will return all the events that we have in our database. But if we wanted just to have some of them or we wanted page, we can call this method, get page, we will return our live data, which is an Android observable data holder class that will help you to show the data inside our recycler view. Repository also have another method like count to know the number of events that you have stored in your database. But what if you don't want all the events? So then you can filter. And the filter could be one of them like the organization unit. So you are going to be able to filter by organization unit and you pass the organization unit UID or, for example, by event date, calling the after operator and then passing a date. So in this case, you are going to have all the events from this organization unit that is after the event date. And then you go get the filter operators depend of the type. So all the operators will have the generic ones, like equals, not equals, in, not in, null, not null. But if there is a Boolean, you are going to have also the is true or is false. The strings we are going to have also the like for numbers, we're going to have a smaller than or greater than. And for dates, we're going to have something like before, after, or in period, which is an operator which accepts the period scheme that we provide on the repository in order to filter dates inside this period. Also, we can order. For example, if we want to order by event date, we could just call the method ordered by, in this case, the event date. We have the ability to order by the sending or sending. If you want to get some nested fields, you're going to have to call a method like this one, starting with width. Because in the database, we are just a return the entities that are stored in the table. But you want, for example, to have the track entity data values for the events, you should do something like that. And they will be nested in the object that you are retrieving with the get method. And also the SDK provides some utility classes. Like one of them are to evaluate some logic, other of them are helpers, the brand indicator in giant, the validation rules. But we are going to see that more deeply in, I guess, tomorrow, Victor will tell us. So, okay, now we are going to see two exercises. The first of them is to send the metadata and to send the data. So, we are going to want to send the metadata, send the 10 TI's, 10 events, and the aggregated data. So, for that, the initial branch is that one. And the class that we are going to be, in where we are going to be coding is the main activity. So, for that, remember that before checking out to this branch, you have to commit your changes in the branch before. After this exercise, we are going to do another one, which is list the programs in the registration data capture scope and order them by the display name. And for this exercise, we are going to use this initial branch and we're going to use this program activity class. So, I think that's everything. Do you miss anything? Do you have any questions? I will say that we can stop recording now.