A festive Android application built with Jetpack Compose, showcasing modern Android architecture, animations, and lifecycle-aware media handling.
This Christmas Card is a high-fidelity digital greeting app designed to demonstrate modern Android development practices.
Rather than a static card, the app delivers an immersive experience through:
- Animated UI elements
- Automated slideshow transitions
- Lifecycle-aware audio playback
-
Twinkle Effect Custom
FadingImagecomponent usingrememberInfiniteTransitionandkeyframesto simulate holiday lights with non-linear alpha animation. -
State-Driven Slideshow Uses
LaunchedEffectwith coroutine-based timers to control UI state transitions for a smooth image carousel.
-
SoundManager Utility A custom wrapper around the Android
MediaPlayerAPI:- Handles
onPause,onDestroy, and error states - Prevents memory leaks and orphaned threads
- Handles
-
Contextual Audio Transitions Seamlessly switches audio between Splash Screen and Home Screen using controlled playback logic.
-
Navigation Component Clean implementation of Jetpack Navigation Compose with structured routing.
-
Material 3 Theming
- Custom color palette (Christmas Red/Gold)
- Dynamic color support
- Custom typography system
-
Splash Screen API Integrated
androidx.core:core-splashscreenfor a professional launch experience.
- Language: Kotlin
- UI Framework: Jetpack Compose
- Navigation: Jetpack Navigation Compose
- Concurrency: Kotlin Coroutines
- Media: MediaPlayer API
- Design System: Material Design 3
com.example.rodavia_christmascard
├── components # Reusable UI components (stateless)
├── data # Business logic & utilities (e.g., SoundManager)
├── ui.screens # Screen-level composables (stateful)
├── ui.theme # Colors, typography, and theming
└── MainActivity # Entry point and navigation graph
-
Efficient Infinite Animations Used
infiniteRepeatablespecs to ensure smooth animations without unnecessary recompositions. -
Audio Lifecycle Management Prevented overlapping audio between screens using a controlled
stop()beforeplay()strategy. -
State Persistence Managed splash screen state across lifecycle events to ensure proper initialization before UI transition.
- Android Studio Iguana or newer
- Android SDK (API 31+ recommended)
git clone <repo-url>- Open the project in Android Studio
- Sync Gradle
- Run on emulator or physical device
This project demonstrates:
- Modern Android UI development with Compose
- Animation systems and state management
- Lifecycle-aware resource handling
- Clean and modular architecture