Material Design 3 theming

Material Design 3 (Material You) brings dynamic theming to Android. I define color schemes with primary, secondary, tertiary colors and their variants. MaterialTheme composable wraps the app with colorScheme, typography, and shapes. Dynamic colors use

WorkManager for background tasks

WorkManager schedules deferrable, guaranteed background work. I create Worker or CoroutineWorker subclasses with doWork() method. Constraints specify when work runs—network type, charging status, battery level. One-time requests use OneTimeWorkRequest

RecyclerView with DiffUtil for efficient lists

RecyclerView displays large datasets efficiently with view recycling. I create a ViewHolder to cache view references and an Adapter to bind data. DiffUtil calculates minimal updates using areItemsTheSame and areContentsTheSame callbacks, improving per

Navigation Component for app navigation

Navigation Component provides consistent navigation with type-safe argument passing. I define navigation graph in XML with destinations and actions. NavController handles navigation with navigate() and popBackStack(). Safe Args plugin generates type-s

Dependency injection with Hilt

Hilt simplifies dependency injection in Android with compile-time code generation. I annotate Application class with @HiltAndroidApp and activities/fragments with @AndroidEntryPoint. Modules marked with @Module and @InstallIn define how to provide dep

Retrofit for REST API networking

Retrofit simplifies HTTP networking with type-safe API definitions. I define service interfaces with annotated methods—@GET, @POST, @PUT, @DELETE. Path parameters use @Path, query params use @Query, and request bodies use @Body. Retrofit converts resp

Room database for local persistence

Room provides an abstraction layer over SQLite for compile-time verified database access. I define entities with @Entity annotation, specifying table structure and relationships. DAOs (Data Access Objects) marked with @Dao contain query methods using

MVVM architecture with ViewModel and LiveData

MVVM separates concerns in Android apps—Model holds data, View displays UI, ViewModel mediates with business logic. ViewModels survive configuration changes, preventing data loss during rotation. I use ViewModel class with viewModelScope for coroutine

Kotlin coroutines for async operations

Kotlin coroutines provide structured concurrency for asynchronous programming. I use suspend functions to mark async code, and launch or async to start coroutines. viewModelScope and lifecycleScope tie coroutines to component lifecycles, cancelling au

Jetpack Compose declarative UI fundamentals

Jetpack Compose revolutionizes Android UI development with declarative, Kotlin-first approach. Composable functions annotated with @Composable describe UI based on state. The runtime automatically updates UI when state changes using remember and mutab

Sign in with Apple authentication

Sign in with Apple provides secure, privacy-focused authentication required for apps with third-party login. Users create accounts with Face ID or Touch ID, and Apple generates unique identifiers per app. I use ASAuthorizationController to initiate th

Dark mode support and adaptive colors

Dark mode provides low-light interface that reduces eye strain and saves battery on OLED displays. iOS automatically switches based on system settings or user preference. I use semantic colors like .label, .secondaryLabel, and .systemBackground that a