 Okay, so Victor. Yeah, so, okay, let me share the screen. Yeah, so hi, hi, everyone. My name is Victor. Mr. Garcia, I'm part of the Android SDK team. And first of all, maybe for moving to the first session, the Android overview, I just want to check with all of you that you can, you have access and you are in this channel, can you see my screen, right? And can you see the Slack Academy 2021 Android? Okay, so I just want to be sure that all of you are here. So in case you are not in this channel, just write a comment in the chat, please. And also in this channel, there is a pinned comment with a link to a drive folder. So in this folder, we are going to upload all the resources for the session. So just for you to know before. Okay, so let's move to the first session. The first session is about, it's just an overview about the Android SDK, about what it is, because this development track is about how to use the Android SDK to build your own application. It's not so much about Android development itself, it's more about how to use the Android SDK to build custom applications. So in first place, what is the purpose of the Android SDK? So the SDK is a common good, it's a library that aims to make easier the development of Android applications. And one of the main things that it deals with is the capability to work offline. I mean, it deals with all the synchronization with the server. So you don't have to care about working with the different DSS2 instances. In the big picture, in the big picture of our implementations, we have here the DSS2 API, I mean, the server, the instance. Here is the Android SDK, and the SDK interacts continuously with the API of the server. So it means that the Android application, in this case, this box represents the official Android application, interact with the SDK. But the Android application does not interact with the API directly. So the SDK is between the API and the Android applications. All this is what is offered by the University of Oslo. All of this is open source, and it's available for you. So what we are going to learn here is how to build your own custom applications using the Android SDK to be at the same level of the official Android app. OK, so yeah, the SDK is quite new product. The first version was released in December 2019, less than one year and a half ago. In the meanwhile, we have had three versions, 1.1, 1.2, and 1.3. Since 1.3, we have aligned the release cycle with the official Android application and with the backend team. So in this case, the 1.3 was compatible and was released more or less at the same time that the 2.35 version of this S2. And what is coming is the 1.4, that is scheduled for next month for April. This SDK will be used by the 2.4 Android application. And we'll be compatible with 2.36. So all these products will be released more or less at the same time in April. OK, so this is the big picture of the SDK. So let's talk about the functionalities, the features that it offers. So the very basic thing that the SDK does is to keep the metadata synchronized in the device. So you can use the metadata and data when you are offline in the device. So to do that, the SDK has a copy of the metadata, not the whole metadata in the server, just a small half set of the metadata. The metadata is relevant to the user to do the data entry. So the SDK downloads the metadata to work offline. The SDK also handles the synchronization of the data in both ways. It downloads the data, and also it uploads the data. So you can download TI's, events, data values, do any modification, and then upload back to the server. Yeah, yeah, the number of TI's that are downloaded, or data values, or events are parametricized. And they can be configured using the Android setting up. We'll talk about that later. Yeah, so we have all this information, metadata, and data in the device. The next layer is the data access layer. So the SDK offers, exposes, the information to the application in this way, how you can see in the screen. So the SDK exposes the model, exposes convenient methods to access the data. So you have type safety in the information. Also, yeah, the SDK is between the server, the test-to-instance, and the Android application. So when there are small modifications in the web API, or there are changes in the model, the application does not have to care about that. It is the SDK who cares about that. And the SDK is really compatible with the current version and at least the two previous ones. In this graphic, you can see that, for example, the version 1.3 was compatible with 2.35, and then all the way down to 2.30. Even with 2.29, it was partially compatible. What else? Error management, yeah, because the offline nature of the Android application, it is more likely to have some errors, I think. Integrity check, because I said that we don't download all the metadata in the server, but just as I've said. So this may cause that there are some misconfigurations in the server, for example, there is a program rule or a program action pointing to a data element that is not in the program. Things like that are handled by the SDK. We show that everything makes sense. And I mentioned that you always work with the data that is offline in the device, but there are some functionalities like the online search, where you can query the server directly. For example, if you don't want to download an alert list of TI to work offline, you can search online if you have connection. Another one, the uniqueness of the attribute values. If you know, the attribute values can be configured to be unique and also to be generated by the backend. So this becomes an issue when you are offline and you don't have access to the backend. There is a functionality to download to pre-generate these values by the backend and reserve those values to be used in the SDK when you are offline. When all the changes in the model in different DS2 versions, all the changes are managed by the SDK. So you don't have to worry very much about that. Well, I know that some of you have attended an academy last year or even the previous year. So until this point, there are the functionalities that were included in the first version. I mean, since the very beginning. And now I am going to mention some functionalities that were included in the other releases, 1.1, 1.2, 1.3. Like this one, SMS. In 1.1, the SDK includes support for SMS internalization, for ESDIs, events, and aggregated data. The Android Settings app. And this is an application that is becoming more and more important. This is an application that is available in the app store or app app. The SDK is compatible since version 1.1. And this is great because this application allows you to configure, for example, the number of TI that you want to download in the first download or the number of events. Or, for example, the number of research values and the SDK reads those values and consumes those values directly. So yeah, this is a really nice app too. I'm just going to take a look at Encryption. It was introduced in 1.2. This is a feature that was highly requested by the community. And also, this can be configured in the Android Settings app as well. And what it does is to encrypt the local database into your device for more security. And it introduces a small overhead in performance as around 5% to 15%. Another important thing is the expression parsed. That you know that historically, the expression in Cloud Indicators, Validation Rules indicators, they usually have different parsers and different evaluators in different clients, for example, in web, in Android, or in the backend. So now there is a library that is shared with the backend. So the backend on the Android uses the same library to parse the expression, which is great because you would expect the same result from the parsing. And this is used in the Prom Indicators and in the Validation Rules. And then some utility classes, because there is a lot of logic that is pure VSS2 logic. Like for example, if you want to know if you can edit an event or add a new enrollment, and it depends on the access of the users, things like that, all that logic is gradually being included in the SDK. So just to sum up this overview, what the SDK does is to make the development of Android application easier. This is a product for Android developers. I mean, this is a library. This is not for end users. And the SDK is written in Java, but we are moving to Kotlin. But you know that Kotlin is now the recommended language for Android, recommended by Cooker. So we are moving to Kotlin. But in your Android application, you can use Java. It doesn't mind, because Java and Kotlin are interoperable. So you can still use Java, although I would recommend to take a look at Kotlin. You have not done that yet. The database is in SQLite. And just to mention that this is not an isolated product. This is a common effort between the SDK team and the backend team to agree and to make efficient calls. And yeah, to be as efficient as possible in the development. Yeah, so well, before moving to the next session, I just want to show you a slide about the resources of the SDK. Yeah, the SDK is available in GitHub. The source code is there. The documentation is in this link, this one. So yeah, I would recommend you at some point to go to the documentation and take a look at this just to know what is included in the documentation. Yeah, because in this workshop, we don't have time to go through all the functionalities and everything in the SDK. So yeah, at least we want that you are able to, with information in this workshop and the information in the documentation, to start building your own app with the SDK. So yeah, just take a look at this. The skeleton application is the skeleton, the application that we're going to use in the workshop. Marco is going to talk about this in the next session. If you want to report a part or request any feature, the community. In the community, you can ask everything you want. I mean, from functional questions or more technical stuff, whatever you want. So yeah, this is all from my side. If you have any questions about this, I think it's better to use the Slack channel. So if you have any questions, please use the Slack channel. Who will answer them. And then the session is about the skeleton app. There is a question actually. Maybe we should stop now the recording.