Android Showcase
Prayer Reminder
Aplikasi Android native untuk jadwal salat berbasis lokasi, kalender Hijriah, personal schedule, dan reminder lokal dengan pendekatan offline-first.
Konteks & masalah
Prayer Reminder dibuat sebagai proyek showcase untuk memperdalam pengembangan Android native menggunakan Kotlin dan Jetpack Compose. Fokusnya bukan hanya menampilkan jadwal salat, tetapi juga mengelola sinkronisasi data, penyimpanan lokal, lokasi perangkat, background reminder, localization, dan preference pengguna.
Jadwal salat dan kalender Islam diambil dari Aladhan API. Setelah sinkronisasi berhasil, data disimpan ke Room sehingga UI dapat membaca data lokal tanpa bergantung pada request API setiap kali layar dibuka.
UI / UX Design
Figma Design
Desain antarmuka Prayer Reminder dirancang di Figma sebelum diimplementasikan menggunakan Jetpack Compose.
Preview interaktif desain Prayer Reminder di Figma.
Fitur utama
Jadwal salat berbasis lokasi
Menampilkan waktu Subuh, Zuhur, Asar, Magrib, dan Isya berdasarkan koordinat perangkat.
Kalender Hijriah
Menampilkan tanggal Hijriah, event Islam, dan personal schedule dalam satu kalender.
Offline-first cache
Jadwal salat dan kalender disimpan dengan Room agar data tetap tersedia setelah sinkronisasi.
Reminder lokal
AlarmManager menangani reminder salat dan personal schedule, termasuk penjadwalan ulang setelah reboot.
Prayer settings
Calculation method, mazhab Asar, reminder offset, dan status reminder dapat disesuaikan.
Bahasa Indonesia & English
Localization menggunakan Android string resources dengan pilihan bahasa tersimpan di DataStore.
Peran saya
- — Merancang struktur aplikasi, alur data, dan pembagian feature untuk aplikasi Android native.
- — Mengimplementasikan UI Jetpack Compose serta state management menggunakan ViewModel dan StateFlow.
- — Mengintegrasikan Aladhan API, Room, DataStore, Fused Location Provider, AlarmManager, dan Firebase.
- — Menangani sinkronisasi, local caching, permission, localization, reminder, dan konfigurasi release.
Arsitektur & pendekatan
Alur utama menggunakan pendekatan offline-first. API berfungsi sebagai sumber sinkronisasi, sementara Room menjadi penyimpanan lokal yang dibaca oleh aplikasi. Preference pengguna seperti bahasa dan konfigurasi jadwal disimpan melalui DataStore.
Diagram Arsitektur
Sync Logic
Teknologi yang digunakan
Cuplikan kode
Pada proses sinkronisasi, response API dipetakan dan divalidasi sebelum cache Room diganti. Tujuannya agar response kosong atau tidak lengkap tidak langsung menghapus cache lokal yang masih valid.
val schedules = result.data.mapNotNull { prayerData ->
prayerData.toEntity(
latitude = latitude,
longitude = longitude,
)
}
if (schedules.isEmpty() || schedules.size != result.data.size) {
return NetworkResult.Error(
message = "Prayer schedule data is incomplete.",
)
}
prayerDao.replaceAll(schedules)
dataStoreManager.save(
key = PreferenceKeys.LATITUDE,
value = latitude,
)
Android Release
Coba Prayer Reminder
Download APK release untuk mencoba aplikasi secara langsung di perangkat Android. Minimum Android 8.0 (API 26).
Version 1.0 · Android 8.0+