How sayedmdsafwan/salattime works
Salat Time is an offline Android prayer-time and Qibla app whose WebView-hosted HTML/JS is the on-screen product, with native Kotlin services extending it for a persistent home-screen widget and compass. The main flow is location and settings in the web app, recipe sync through the bridge, then native time computation and widget scheduling. The README documents city/manual location, bilingual settings, and background GPS refresh; those capabilities are represented at their documented source locations. Sampled excerpts establish key bridge, scheduler, computation, widget, and compass links; unsampled web-app internals are shown only where README supports them.
Main entry points: AlarmScheduler.kt Schedule recompute · index.html Prayer UI & logic · MainActivity.kt WebView host · LocationRefreshReceiver.kt GPS refresh receiver
Components 26
Web App
- Prayer UI & logic
app/src/main/assets/index.html - Location inputs
app/src/main/assets/index.html - Offline city database
app/src/main/assets/index.html - Settings & language
app/src/main/assets/index.html - Web prayer math
app/src/main/assets/index.html
Android Native
- WebView host
app/src/main/java/com/safwan/prayertime/MainActivity.kt - JavaScript bridge
app/src/main/java/com/safwan/prayertime/NativeBridge.kt - Prayer recipe
app/src/main/java/com/safwan/prayertime/PrayerRecipe.kt - Timezone resolver
app/src/main/java/com/safwan/prayertime/TzResolver.kt - Native prayer math
app/src/main/java/com/safwan/prayertime/Astro.kt
Widget Runtime
- Schedule recompute
app/src/main/java/com/safwan/prayertime/AlarmScheduler.kt - Prayer state
app/src/main/java/com/safwan/prayertime/AlarmScheduler.kt - Widget lifecycle
app/src/main/java/com/safwan/prayertime/PrayerWidgetProvider.kt - Widget rendering
app/src/main/java/com/safwan/prayertime/WidgetUpdater.kt - Prayer tick
app/src/main/java/com/safwan/prayertime/WidgetTickReceiver.kt - Daily recompute
app/src/main/java/com/safwan/prayertime/DailyRecomputeReceiver.kt - Clock changes
app/src/main/java/com/safwan/prayertime/TimeChangeReceiver.kt - Boot recovery
app/src/main/java/com/safwan/prayertime/BootReceiver.kt - GPS refresh schedule
app/src/main/java/com/safwan/prayertime/LocationRefreshScheduler.kt - GPS refresh receiver
app/src/main/java/com/safwan/prayertime/LocationRefreshReceiver.kt
Qibla Compass
- Compass sensors
app/src/main/java/com/safwan/prayertime/QiblaSensorController.kt - Compass overlay
app/src/main/java/com/safwan/prayertime/QiblaCompassView.kt
Other components
- App user
- Android location
- Android OS
- Device sensors
Connections 38
- App user → Prayer UI & logic: uses
- Prayer UI & logic → Location inputs: selects location
- Location inputs → Offline city database: searches cities
- Prayer UI & logic → Settings & language: configures
- Prayer UI & logic → Web prayer math: computes times
- WebView host → Prayer UI & logic: loads
- Prayer UI & logic → JavaScript bridge: syncs recipe
- JavaScript bridge → Prayer recipe: builds
- JavaScript bridge → Schedule recompute: syncs schedule
- Schedule recompute → Prayer recipe: reads
- Schedule recompute → Timezone resolver: resolves offset
- Schedule recompute → Native prayer math: computes days
- Schedule recompute → Prayer state: writes times
- Schedule recompute → GPS refresh schedule: maintains
- Timezone resolver → Prayer recipe: reads
- Widget lifecycle → Schedule recompute: refreshes schedule
- Widget lifecycle → Widget rendering: renders widget
- Widget rendering → Prayer state: reads times
- Prayer tick → Schedule recompute: recomputes
- Prayer tick → Widget rendering: refreshes widget
- Daily recompute → Schedule recompute: recomputes
- Clock changes → Schedule recompute: recomputes
- Boot recovery → Schedule recompute: rearms
- GPS refresh schedule → GPS refresh receiver: schedules
- GPS refresh receiver → Android location: requests fix
- GPS refresh receiver → Schedule recompute: updates recipe
- Android OS → Widget lifecycle: drives lifecycle
- Android OS → Prayer tick: fires alarm
- Android OS → Daily recompute: fires alarm
- Android OS → Clock changes: broadcasts changes
- Android OS → Boot recovery: broadcasts boot
- Android OS → GPS refresh receiver: fires alarm
- Prayer UI & logic → WebView host: requests compass
- WebView host → Compass sensors: starts and locates
- Compass sensors → Device sensors: reads heading
- Compass sensors → Compass overlay: sends heading
- WebView host → Compass overlay: controls overlay
- Compass overlay → App user: shows bearing