Kembali ke portofolio

Android Showcase

Prayer Reminder

Aplikasi Android native untuk jadwal salat berbasis lokasi, kalender Hijriah, personal schedule, dan reminder lokal dengan pendekatan offline-first.

Kotlin Jetpack Compose Room DataStore Firebase

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.

Buka di Figma

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

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 Diagram Arsitektur
Sync logic diagram Sync Logic

Teknologi yang digunakan

Android UIKotlin, Jetpack Compose, Material 3, Navigation Compose
ArchitectureViewModel, StateFlow, Coroutines, Hilt
Local DataRoom, Preferences DataStore
NetworkingRetrofit, OkHttp, Gson, Aladhan API
Android APIsFused Location Provider, AlarmManager, BroadcastReceiver
FirebaseRemote Config, Crashlytics, Performance Monitoring, Analytics

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.

PrayerRepository.kt
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,
)
Lihat kode lengkap di GitHub

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+

Download APK
← Kembali ke semua proyek