2025-11-13 19:59:43 +07:00
2025-11-12 22:15:48 +07:00
2025-11-12 22:15:48 +07:00
2025-11-12 22:15:48 +07:00
2025-11-12 22:15:48 +07:00
2025-11-12 22:15:48 +07:00
2025-11-13 19:59:43 +07:00
2025-11-12 22:15:48 +07:00

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:

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:

.\gradlew.bat clean :app:assembleDebug --rerun-tasks

Menjalankan unit tests

Unit tests yang ada fokus pada helper processResponseCode.

Dari root project:

# 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
Description
Panic Button Application
Readme 8.3 MiB
Languages
Kotlin 100%