
Explore row and column containers in Jetpack Compose, display five text elements, and apply padding, fill, and alignment to arrange content horizontally or vertically with space around and evenly.
Learn to build with Scaffold and custom composables in Jetpack Compose by creating a greeting function, applying modifiers, and using padding values to manage insets.
Preview composables with the Preview annotation and create a parameterless GreetingPreview to view parameters in a theme. Enable edge-to-edge on older API levels and use live edit for automatic updates.
Learn how Jetpack Compose uses the weight modifier in a column to allocate remaining space, handle wrap content, and apply padding and rounded corners with clip and per-corner radii.
Спец. символы для калькулятора: √ π ^ !
Learn to handle click events with the clickable modifier, log events via Logcat and log levels, and drive UI updates in Jetpack Compose with mutableStateOf and recomposition.
Explore clean architecture by building a notes app with presentation, domain, and data layers; use cases like GetAllNodesUseCase and AddNodeUseCase drive the app's business logic around the Node entity.
Finish the domain layer by defining the NodesRepository interface with addNode, deleteNode, edit, switchPinnedStatus; expose getAllNodes and search as flows, and getNodeById; use cases delegate to it.
Explore mvvm in clean architecture by building a nodes screen with a view model, using flatMapLatest to switch between all nodes and search results, and manage pin status.
//Colors:
import androidx.compose.ui.graphics.Color
val White = Color(0xFFFFFFFF)
val Yellow100 = Color(0xFFFDF2E1)
val Yellow200 = Color(0xFFFCE5C3)
val Blue100 = Color(0xFFE3EBF2)
val Blue200 = Color(0xFFC8D8E5)
val Green = Color(0xFFD1EAD1)
val Purple = Color(0xFFDACEE6)
val Grey100 = Color(0xFFF9F9F9)
val Grey200 = Color(0xFF868484)
val Grey300 = Color(0xFF3D3B3B)
val Brown = Color(0xFF703410)
val PinnedNotesColors = listOf(Yellow200, Purple, Blue200)
val OtherNotesColors = listOf(Yellow100, Green, Blue100)
//Color scheme for the Theme.kt file:
private val LightColorScheme = lightColorScheme(
primary = Brown,
onPrimary = White,
background = White,
onBackground = Grey300,
surface = Grey100,
onSurface = Grey300,
onSurfaceVariant = Grey200,
)
Create a node screen as a composable with scaffold and top app bar, including title and content fields, a date display, and a save button wired to the view model.
Implement a simple custom navigation in Jetpack Compose using a navgraph for nodes, createNode, and editNode, manage state with remember and mutableStateOf, and examine back button and viewmodel lifecycles.
Learn how to pass node ids during navigation in Jetpack Compose by building root strings with a slash, retrieving NodeID from the bundle, and using a dedicated getNodeId method.
Replace the test repository with persistent storage by using Room to create a nodes table and define id as a primary key with auto generate.
Create a Room database by declaring an abstract NodeDatabase with NodeDBModel as the entity, version 1, and exportSchema false. Implement a thread-safe getInstance using Room.databaseBuilder to obtain a NodesDEO DAO.
Explore how a component provides dependencies and enables property injection to supply the example viewModel in an activity, using lateinit vars and an inject method.
Set up image-ready content handling in the add and edit screens, implement text content and save logic, and explain database versioning and destructive migrations for development.
Learn to save images to the database and enhance the node creation screen with multi-field text and image inputs, managed by a view model with addImage and inputContent commands.
Process content for storage by saving new images to internal storage, keep text unchanged, and remove old images using dependence injection with an image file manager.
Explore database normalization and denormalization in a notes app, replacing a JSON content field with a separate content elements table linked by note id to optimize search.
Learn database normalization by linking notes and content with ContentItemDBModel, composite keys, and cascade delete; map notes with content using embedded and relational annotations, and implement multi-table search.
Explore a news app demo where you subscribe to topics, read and share articles, and apply filters. Configure background updates, notifications, and settings with datastore and Retrofit.
Define the domain layer with an article entity and a news repository, exposing flows for subscriptions and articles, and implement Room storage with tables, a composite key, and cascade deletes.
Build the SubscriptionScreen with scaffold and a lazy column to display subscriptions and articles, and handle refresh, clear, and settings actions via vModel and callbacks.
Explore how Android components (Activity, Services, Broadcast Receivers, and Content Providers) work with WorkManager to enable periodic background updates even when the app is closed.
Implement a datastore-based repository for settings, bind it for dependency injection, and read and write settings via flows using key-value pairs with domain layer defaults.
Apply worker constraints using the AndroidX WorkManager builder to start periodic refresh only when relevant settings change. Convert settings to a refreshConfig and react with distinctUntilChanged to trigger updates.
Implement StartRefreshDataUseCase in the domain layer that uses NewsRepository and SettingsRepository to start periodic data refreshing, wired to AppStartupManager at application onCreate.
Create and show new articles notifications with a NotificationHelper and NotificationManager, including a channel, icons, and string resources. Handle API level checks and request post notifications permission.
Design a reusable settings screen using card components and a parameterized exposed drop-down menu for language and interval selections.
Finish the Modern Android Development with Jetpack Compose course by mastering MVVM, clean architecture, Hilt, Room, Retrofit, Coil, and Datastore, plus navigation with Jetpack and Pulse.
This course is designed for learners who already know Kotlin and want to move into modern Android development with real-world tools and practices. Step by step, you will build complete Android applications and learn how to structure projects in a way that is clear, scalable, and aligned with professional development practices.
Throughout the course, you will work with the core technologies of the modern Android stack: Jetpack Compose for UI, MVVM and StateFlow for state management, Clean Architecture for project structure, Navigation for moving between screens, Room for local data storage, Hilt for dependency injection, and Coroutines and Flow for asynchronous programming.
You will also cover many practical topics that are essential in real Android projects, including working with images, content serialization, internal and external storage, the Activity Result API, side effects, theme customization, custom UI components, and how different layers of the app work together. Instead of learning these topics in isolation, you will study them as part of complete projects that grow in complexity as you progress.
This course is a good fit for Kotlin developers who want to start building Android apps with modern tools. It is also useful for Android developers who want to switch to Jetpack Compose and update their skills with current architectural approaches and modern project structure.
By the end of the course, you will have a solid understanding of modern Android development and hands-on experience building several applications that you can add to your portfolio, present in interviews, or use as a foundation for your own projects.