110 lines
3.7 KiB
Markdown
110 lines
3.7 KiB
Markdown
# Panic Button
|
|
|
|
A simple Android app (Compose / Material3) that sends a panic alert to an ntfy-compatible endpoint. This repository includes a small accessible UI, a separated network sender (`AlertSender`), and unit tests for the sender logic.
|
|
|
|
---
|
|
|
|
## Ringkasan fitur
|
|
- Large, high-contrast circular panic button with accessibility labels
|
|
- Separated network logic in `AlertSender` using OkHttp (asynchronous)
|
|
- `processResponseCode` helper for easy unit testing
|
|
- Unit tests covering the response code logic
|
|
- `INTERNET` permission declared in `AndroidManifest.xml`
|
|
|
|
---
|
|
|
|
## Struktur penting
|
|
- `app/src/main/java/id/ac/ubharajaya/panicbutton/MainActivity.kt` — activity entry point
|
|
- `app/src/main/java/id/ac/ubharajaya/panicbutton/ui/theme/Theme.kt` — UI + theme + `MyApp` composable
|
|
- `app/src/main/java/id/ac/ubharajaya/panicbutton/data/AlertSender.kt` — OkHttp-based alert sender (async)
|
|
- `app/src/test/java/id/ac/ubharajaya/panicbutton/data/AlertSenderTest.kt` — unit tests
|
|
- Gradle version catalog: `gradle/libs.versions.toml`
|
|
|
|
---
|
|
|
|
## Persyaratan
|
|
- JDK 11
|
|
- Android Studio (direkomendasikan) atau Gradle wrapper
|
|
- Android SDK (compileSdk 36) sesuai konfigurasi module
|
|
|
|
---
|
|
|
|
## Cara membangun dan menjalankan
|
|
Rekomendasi: buka proyek ini di Android Studio lalu klik Run (atau pilih device/emulator).
|
|
|
|
Dari command line (Windows `cmd.exe`) di root proyek:
|
|
|
|
```cmd
|
|
cd /d E:\androidProject\Panic-Button
|
|
# build debug APK
|
|
.\gradlew.bat :app:assembleDebug
|
|
# atau build + jalankan unit tests
|
|
.\gradlew.bat :app:testDebugUnitTest
|
|
```
|
|
|
|
Jika ingin membersihkan dan memaksa rebuild:
|
|
|
|
```cmd
|
|
.\gradlew.bat clean :app:assembleDebug --rerun-tasks
|
|
```
|
|
|
|
---
|
|
|
|
## Menjalankan unit tests
|
|
Unit tests yang ada fokus pada helper `processResponseCode`.
|
|
|
|
Dari root project:
|
|
|
|
```cmd
|
|
# run all unit tests in app module
|
|
.\gradlew.bat :app:testDebugUnitTest
|
|
|
|
# run specific test class (Gradle yang lebih baru):
|
|
.\gradlew.bat :app:testDebugUnitTest --tests "id.ac.ubharajaya.panicbutton.data.AlertSenderTest"
|
|
|
|
# fallback: run single test by name
|
|
.\gradlew.bat :app:testDebugUnitTest -Dtest.single=AlertSenderTest
|
|
```
|
|
|
|
Report HTML dihasilkan di:
|
|
|
|
```
|
|
app/build/reports/tests/testDebugUnitTest/index.html
|
|
```
|
|
|
|
---
|
|
|
|
## Catatan implementasi penting
|
|
- `AlertSender`:
|
|
- Endpoint disimpan di `AlertSender.ENDPOINT` (mutable) sehingga mudah untuk testing atau mengalihkan ke server lain.
|
|
- Asynchronous HTTP dilakukan dengan OkHttp `OkHttpClient` dan `enqueue`.
|
|
- `processResponseCode(code, onResult)` mengekstrak logic sukses/gagal sehingga bisa diuji lokal tanpa jaringan.
|
|
|
|
- UI & theme:
|
|
- `PanicButtonTheme` menggunakan Material3 color scheme yang menonjolkan `PanicRed` untuk tombol.
|
|
- `MyApp` menampilkan tombol bundar besar, indicator loading, dan pesan status.
|
|
|
|
- Permissions: `AndroidManifest.xml` menyertakan `<uses-permission android:name="android.permission.INTERNET" />`.
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
- Jika Gradle tidak mengenali `--tests`, jalankan `.\gradlew.bat --version` untuk memeriksa versi Gradle wrapper; gunakan `:app:testDebugUnitTest` dan `-Dtest.single` jika perlu.
|
|
- Jika OkHttp class tidak ditemukan, lakukan Gradle sync di Android Studio atau jalankan `.\gradlew.bat --refresh-dependencies`.
|
|
- Untuk masalah jaringan saat mengirim alert, periksa:
|
|
- Endpoint `AlertSender.ENDPOINT` benar
|
|
- Perangkat/emulator punya koneksi internet
|
|
- Server ntfy menerima pesan tanpa autentikasi atau memerlukan header tambahan
|
|
|
|
---
|
|
|
|
## Next steps / ide peningkatan
|
|
- Tambah integration tests yang menggunakan `MockWebServer` (butuh dependency dan Gradle sync)
|
|
- Tambah retry/backoff dan rate-limiting pada `AlertSender`
|
|
- Tambah telemetry/logging dan optional authentication for endpoint
|
|
- Improve accessibility further (haptics, TalkBack announcements)
|
|
|
|
---
|
|
## Author
|
|
- Name: Rakha Adi Saaputro
|
|
- NPM: 202310715083 |