
design a scalable android login screen with registration, forgot password, and remember me, demonstrating dependency injection, immutable models, local state preservation, and clean architecture.
Learn to initialize git correctly, make clean commits with a proper .gitignore, and manage a project history using commits, branches, and a Bitbucket repository for a consistent Android project setup.
Learn how to manage gradle builds by centralizing versions in a single ext block across project and app gradle files, ensuring a clean, conflict-free build.
Explore dependency injection as the foundation of solid, testable, and reusable Android architecture, using hilt to manage dependencies across activities and fragments, with constructor and field injection.
Explore Hilt, an Android dependency injection library that reduces boilerplate by generating code. Learn to configure cradle, apply the cradle plugin to bootstrap your project.
Build a local android database with Room by defining a user entity with email and password, and set up a local module and application database using dependency injection.
Create a login use case that queries the database by email, compares passwords, and returns a sealed success or failure result.
The lecture refactors the login user use case by adding a get user by email use case and a data store workflow, with Timber logging and dependency injection.
Finish the add user to database use case by inserting a new user detail (email and password) after checking if the user already exists, with constructor injection and result-based logging.
Create and test Android use cases through a new activity, validating register and login flows on an emulator, using dependency injection, Room with suspend functions, and lifecycle scope.
Configure day and night themes to automatically switch colors across the app. Remove the action bar and define teal, pink, yellow, and gray in the colors file to guide theming.
Explore adding the fragment navigation library, create a login fragment and fragment container view, and define a navigation graph to manage in-app navigation and theming setup.
Learn to build a themed login fragment layout with a pink card-backed background, responsive scrolling via a nested scroll view, and material card shapes for polished corners.
Build a login screen layout using constraint layout with padding, text views, colored headings, and material design text input layouts for username and password, plus sign‑up and forgot password actions.
Align the login layout with vertical bias, tune text input styles and colors for focus, and implement a splash screen using a dedicated theme to improve cold start visuals.
Create a lifecycle-aware login view model with Android's view model and Hilt, sharing state. Validate email and password, trigger the login use case, and manage navigation with mutable state flow.
Connect the login fragment to the login view using binding, bind username and password to a view model, implement input validation, and manage lifecycle with safe binding cleanup.
Implement user registration by wiring the login and sign up flows to a view model, emit events with a mutable shared flow, and display error or registration success snackbars.
Implement a forgot password flow with a sliding bottom sheet dialog, a custom layout, and material design, wired to a view model and get user by email use case.
Create and split Android login flow into login and locked in fragments, wire navigation to the logged in area, and implement a top app bar with logout and gradient styling.
Implement a persistent authentication flow by observing the login state with a data store and an observe user use case, then navigate back to the login screen on logout.
Finish the deregister use case by improving the signup flow with a snackbar at callback, using a base transient bottom bar, and log in the user on dismissal.
Finish the lockout use case by implementing a suspend remove function in DataStore and wiring it into the logout flow, with a logged-in view model and timber logging.
Add slide in top and slide out top animations for the bottom sheet. Refactor the login flow with a login error type and a password use case.
Explore writing the first unit test for a login view model using dependency injection, coroutine testing, and mock dependencies, with state emissions tested via Turbine.
Learn to structure and validate Android login flows with unit tests for login, sign up, and forgot password using view models, use cases, mocks, and verification.
Create and run unit tests for a login use case, including not found user, password mismatch, and success scenarios, using mocks and run blocking tests.
This final lecture reviews the Android login app, highlighting a functional login and sign-up flow, local data store usage, error handling, and a clear layered architecture with use cases.
Have you been coding Android for a while and want to apply for your first job? Are you an employer and want to find ideas what to look for in test assignments? Then welcome to this course!
We will be taking an Android test assignment and coding it out together. You will learn about the newest and hottest topics in the Android world!
Kotlin
Coroutines, Kotlin flows
Material Design
SQLite Room database
Datastore
ViewModels
Dagger Hilt dependency injection
Unit testing
You will learn that maintainable architecture gives the best way to know our view's state. This state will be kept in the ViewModel and can always be rebuilt. The ViewModel will communicate with use case classes that handle mixing the persisted data that we hold in our app's database or any other source of data.
Learn to utilize the power of logcat by logging all that the viewModel and use cases are doing. This can come especially handy if you want to trace how a crash happened in an application or why something did not behave as planned.
We will be focusing on building a maintainable and scalable codebase. This code will become a reference for any upcoming projects you do in the future and will certainly help you gain more confidence in Android development.
Let's get to it!