
Backend Server - Source Code | https://github.com/stevdza-san/BorutoServer
Android App - Source Code | https://github.com/stevdza-san/BorutoApp
Backend Server - Source Code | https://github.com/stevdza-san/BorutoServer
Android App - Source Code | https://github.com/stevdza-san/BorutoApp
Manually create a Kotlin Ktor project in IntelliJ with Gradle Kotlin DSL, add Netty and Logback dependencies, and expose a hello world route.
Learn how to serve static content such as html, text, and images using a static function and a resources directory, with optional remote paths like assets.
Auto-Reload feature does not work well. Sometimes it might work and sometimes might not. I've searched for an answer but it appears that this feature is still not stable. My suggestion would be not to use it for now. I'll make a new video however when something changes regarding that issue.
Install and configure Ktor plugins, including call logging, content negotiation with json serialization, and routing via application class extension functions, plus coin and default headers with a cache control header.
Create the all heroes endpoint for the boruto app using Koin for dependency injection, with a cache-control header, and implement page query validation and API responses.
I've made an update video in the last section, about migrating from an old withTestApplication() function.
I've made an update video in the last section, about migrating from an old withTestApplication() function.
I've made an update video in the last section, about migrating from an old withTestApplication() function.
I've made an update video in the last section, about migrating from an old withTestApplication() function.
Define hero dao with dao and query annotations to read all heroes, fetch by id, and support insert and delete via burrito database using room and paging source.
Accompanist Pager library has been DEPRECATED. You can check out the last section of this course where I've showcased how to migrate away from that library. If you have any questions, feel free to comment below. :)
Accompanist Pager library has been DEPRECATED. You can check out the last section of this course where I've showcased how to migrate away from that library. If you have any questions, feel free to comment below. :)
Accompanist Pager library has been DEPRECATED. You can check out the last section of this course where I've showcased how to migrate away from that library. If you have any questions, feel free to comment below. :)
Save the onboarding state when the user finishes the welcome flow. Navigate from splash to home or welcome screens using a welcome view model, Hilt, and use cases.
Create the API response model with serializable annotation and implement Boruto API endpoints for getting all heroes with a page parameter and for searching by name.
Okay so here I've made a mistake, instead of using 'TimeUnit.SECONDS', I've used 'TimeUnit.MINUTES'. This mistake will be fixed in lecture under the name of 'Display Shimmer Effect' (#59)
Explore the paging three library for Android, paginate data from room databases or APIs, load pages on scroll, and apply paging config, pager, and map and filter operations.
In this video I've made one mistake. In the provideDatabase() function in DatabaseModule, as a return type, instead of "BorutoDatabase" I've added RoomDatabase. That will be fixed in the 'Create GetAllHeroes Use Case' video. :)
I have updated the code for Coil, from now on we are no longer using rememberImagePainter, now we are using an AsyncImage composable, which is the part of a Coil library. I've made a video about that update in the last section of this course.
Implement a lazy column that displays two animated shimmer items during data loading and then renders the hero list when loading completes.
Implement initialize() in the remote mediator to use local cache when data is fresh and trigger a remote refresh after the cache timeout, based on last updated.
Here we haven't actually implemented a paging when searching heroes on our backend server. When searching we will receive all hero results in a single page. Because if you recall when sending a response from the server (Search Heroes endpoint), we are not including prevPage/nextPage values. I have decided not to use paging with our endpoint for searching heroes, because in most cases when searching items like that, you just expect to receive a single result matching the query.
However at the end of this course this will be actually your homework. After you complete this whole course you will gather the knowledge necessary to complete this homework, and properly implement paging with our search heroes endpoint as well. The solution will include modifying both server and android app project. It's gonna be fun! I will not upload a solution for that, instead you will have to send that homework directly to me, so I can check it out and maybe give you some hints. :)
By doing this kind of homework you will prove to not just me, but more importantly to yourself that you are capable of resolving this kind of issues directly with the real working projects.
And as I already said, I will make a new video at the end of this course explaining this homework. Best of luck!
SwipeRefresh() composable has been deprecated. I've updated the source code in my Github repository. Check the latest branch (#10).
Demonstrates a details screen that uses a palette API to color the UI from hero images. Builds two custom components: info box and ordered list for a compose-based android app.
Design a background content composable for the details screen that loads a hero image from a base URL with an error placeholder and a top-right close icon.
Animate the bottom sheet radius with a value tied to the current sheet fraction, applying 40 dp to the top corners when collapsed and 0 when expanded via rounded corners.
Explore the palette API to extract colors into a palette with six profiles. Use swatches, the builder, and color helpers such as body text color and title text color.
Create a palette generator object to convert image URLs to bitmaps and extract vibrant, dark vibrant, and body colors for text, using coil's image loader and the palette API.
Create a fake burrito api to mock backend responses for testing the search heroes paging source, overriding search heroes logic with predefined heroes.
Test the search heroes paging source using a fake burrito API, validating single and multiple results, empty queries, and non existing heroes with JUnit and run blocking tests.
Create a second fake Boruto api for Android tests to support remote mediator testing, implementing get all heroes with paging logic and a calculate function for 1–5 pages.
Learn how to test a rating widget in Jetpack Compose by adding semantics, creating a compose test rule, and validating empty, half, and filled stars across multiple values.
Clean up the Android app and server, update dependencies, and resolve library conflicts. Refactor the splash screen, fix side effects, and simplify navigation and paging logic.
Learn to migrate a Ktor server from 1.6 to 2.0, updating dependencies and imports. Adjust Gradle and tests using testApplication and body as text.
Migrate from the deprecated accompanist swipe refresh and system ui controller by implementing pull refresh with a refresh state, updating status bar color via activity window, and noting deprecated dependencies.
Hello there and welcome to my course!
This course will be special. Why? Well because I'm going to teach you how to build not just another android application, but also a backend server, your own REST API!
The main purpose of that server will be to provide the data to our Android Application. You will learn how to successfully establish a quality communication between client, or in this case our Android App, and a backend server.
For the backend we will use ktor framework which is built primarily on Kotlin and Coroutines! You will learn everything about that framework, how to create your own endpoints, how to work with client requests, receive query parameters, process that same request on your backend, and finally send a fully prepared response to your clients, or in this case an Android App which we are going to develop as well.
Now, our Android Application will use the newest API's and libraries. For designing our Application layout we will use a modern UI toolkit called jetpack compose. For communicating with our backend we will use a retrofit, and paging 3 library along with remote mediator, so we can automatically store and cache that data from the server into our Local ROOM database. That way we will be able to load the data into our Application, even if we don't have an internet connection.
And that's not all, I will also teach you how to test your Backend Server as well as your Android App. We are going to test all our server endpoints, the most important parts of our Android application and few custom UI components which we are going to build using Jetpack Compose! I'm going to teach you how to create a custom UI component called Rating Widget, using Jetpack Compose, it will look amazing!
Next you will learn how to implement a swipe to refresh functionality in your app, how to implement a palette API so you can display dynamic colors into your layout depending on the image we load into our Screen. And many other different things Bottom Line, there is a lot of work to do, so get ready, because this will be quite of a journey!
So what are you waiting for developers. Let's get started!