
Build a two-screen Android app that lists animals and shows details, using Retrofit, Glide, and Palette with data binding for a scalable, testable architecture.
Code along with the lectures, run tests on your device, and fix errors to deepen understanding. Do not modify the course code during building; experiment after finishing.
Explore the Udemy review system, the impact of 5-star reviews on course visibility, and how to share feedback to help improve the course.
Access the attached GitHub repository and ZIP archive for the final Android Kotlin project code, and refer to that final code if you need guidance on fixes.
Install Android Studio on a Mac, download and launch it, then create a virtual device such as Nexus 6 with Oreo or Lollipop images for testing.
Install Android Studio on a Windows PC by downloading from developer.android.com/studio and using default setup. Create a virtual device emulator with Oreo and Lollipop images, then rebuild to fix issues.
Learn to test your Android app on a real device by enabling developer options, USB debugging, and connecting Android Studio to your phone, instead of relying on emulators.
Create a new Android Studio project in Kotlin with an empty activity and minimum API 15 using Android X artifacts. Locate key files and run on an emulator or device.
Configure the Android manifest for internet access, set up the project and module build.gradle files, and add dependencies for lifecycle, retrofit, glide, dagger, navigation, and data binding.
Explore android navigation with the jetpack component that uses one activity and multiple fragments to move between screens, replacing intent-based flows, while handling back stack, arguments, transitions, and deep linking.
Structure an android app with model, view, and view model architecture in kotlin, organizing code into packages, and implement navigation with fragments, a nav graph, and the navigation library.
learn to implement navigation between fragments using the android navigation component in kotlin, wiring floating action buttons to actions, configuring nav controller, and handling up and back navigation.
Clean up the app by removing buttons, icons, and views from the list and detail fragments, preserve navigation actions, and prepare a clean architecture for defining screens in next section.
Explore Android lifecycles across activities, fragments, and view models, and apply live data to emit up-to-date values in an MVVM-driven, lifecycle-aware way.
Apply an Android model–view–viewmodel approach in Kotlin to display a list, then enrich it with live data, lazy initialization, and an application context view model for API-backed data.
Build the animal list screen with a swipe-to-refresh layout, a constraint layout, and a recycler view. Create an animal item layout with an image and title overlay.
Create an adapter class to convert a list of animals into recycler view items using a custom animal view holder, inflating layouts, binding names and images, and updating the list.
Instantiate and observe the list view model in the fragment, wiring live data for animals, loading, and errors to drive the recycler view using a two-column grid layout.
Implement a swipe refresh layout with an on refresh listener to refresh data via the view model, showing a spinner during refresh, in an MVVM architecture with Jetpack navigation.
Explore how Retrofit simplifies Android API communication by retrieving data from a backend, handling JSON or XML, and mapping it into POJO objects via a service class and interface.
Create data classes to model the API key, taxonomy, speed, and animal data, and map JSON fields with serialized names so Retrofit can parse endpoint responses.
Craft a retrofit service to fetch an api key and animals list via get and post endpoints, returning singles and observable results with gson converter factory and rxjava2 adapter factory.
Obtain an API key and fetch animals with that key using retrofit and RxJava. Manage disposables and thread switching to show results on the main thread with loading states.
Load animal images from the Bakken API using Glide, with a progress drawable placeholder and an error image, while extending image view to auto load and cache images.
Use shared preferences to store and retrieve the API key as key-value data, reducing unnecessary network calls. Explain refresh and hard refresh flows, key invalidation, and safeguards against endless loops.
Design the detail screen layout with a vertical linear layout, an image view for the animal, and text views for name, location, lifespan, and diet.
Pass a complex animal object via the navigation framework using a custom parcelable, then display its image, name, location, lifespan, and diet in the detail fragment.
Explore how the Palette library from Android Jetpack extracts vibrant and muted colors from images to drive app styling, and apply them to backgrounds in the detail fragment.
Use the palette library to extract a light muted swatch from an image and dynamically set the fragment detail background color based on each animal image.
Learn data binding in Android by attaching variables and methods to layouts, reducing boilerplate, and using binding adapters to load image URLs, strengthening separation of concerns between logic and views.
Refactor the detail fragment to use data binding by updating the layout, defining an animal data variable, binding name, location, lifespan, and image via a binding adapter in the layout.
tackle a practical data binding challenge by removing an id, binding the background color automatically, and introducing a new object type to support binding in Kotlin Android app development.
Create an animal palette data class with a color property, bind the background color using data binding, and remove view IDs to separate code from XML.
Bind the animal list items with data binding, wiring image and name via a binding adapter and a click listener interface to navigate to detail using the animal name tag.
Explore dependency injection in Android using Dagger 2 to separate object creation from usage, enabling easier testing and configuration through modules, components, and annotations like @Inject, ATTFIELD, singleton, and qualifier.
Learn to implement dependency injection with Dagger to inject the API service into the list view model and enable mock data for unit testing, via an API module and component.
Explore how to inject a shared preferences helper into a view model using Dagger, creating an app module, a preferences module, and a singleton, to manage shared preferences safely.
Define qualifiers to distinguish different shared preferences contexts in Dagger; inject activity versus application context, and use provides and singleton annotations to configure context-specific helpers.
Understand unit testing as automated checks that preserve existing functionality by testing business logic with mocking enabled by dependency injection, using the mosquito library.
Configure unit testing in the Android Kotlin project by setting up a unit test package, mocking the API service, and forcing immediate execution with InstantTaskExecutorRule and schedulers.
Create a dagger test module that provides mock shared preferences and a mock API service, then use a test component to inject mocks in tests.
Create a unit test for animals API success path by mocking the animal service, validating the view model refresh returns a list with size one and no loading or errors.
Advance state of the art android app development in kotlin by examining the animals api failure path, including key retrieval, loading state, and error handling in unit tests.
Implement testing for the get key function by adding tests for key success and key failure, then run refresh and verify the resulting information.
Implement unit tests for the key API by setting up preferences and the animal service responses, validating get key success and get animals with dependency injection using the Marquito framework.
Practice what you learned by applying concepts to your projects, refactor to MVM architecture, implement dependency injection, and add unit tests to future-proof development, using the provided resources.
Celebrate completing the course by implementing the code, building the app locally, and mastering Android development in Kotlin; continue applying these concepts in future projects and day-to-day work.
Build a State of the Art Android App with this new course on Android development and Kotlin.
Most tutorials and how to's show you the basics of app building, but they don't show you how to use the latest technologies and libraries.
Most projects and jobs require you to know how to use the latest libraries. This is what this course is all about.
The purpose of this course is to give you a practical example of how to use these technologies, all while building a simple example app.
We will learn about:
MVVM architecture using the Google recommended Android Lifecycle Extensions
Retrofit and JSON for remote server communication
RxJava as a reactive framework
Dagger2 for dependency injection
Jetpack navigation for navigating the user through the app screens
Jetpack Data Binding for building UI screens
Glide for seamless image loading
Jetpack Palette for extracting colors from images
Unit tests to test the application and make it stable and robust
And we will build everything in Kotlin, the shiny new language that Google recommends
If you want to become an expert Android Developer, you need to know how to use these technologies.
If you want to build an app that scales and is robust, these technologies will make your life easy in the long term.
Sign up today, and let's learn how to properly build a State of the Art Android Application.