# ConfiVoice Mobile

Flutter Android client untuk aplikasi ConfiVoice.

Mobile app ini tidak menyimpan dataset atau model. Audio dipilih dari perangkat Android, lalu dikirim ke API prediksi. API tetap bertugas membaca model dari:

```text
../ml/models/svm_voice_confidence_model.joblib
```

Audio bisa berasal dari file yang dipilih dari perangkat atau dari fitur rekam suara langsung di halaman `Prediksi`. Rekaman disimpan sementara sebagai WAV mono 22050 Hz di storage aplikasi.

## Menjalankan di Emulator

Jalankan API dari folder `cv_app`:

```bash
cd ml
uvicorn api_app:app --host 0.0.0.0 --port 8000
```

Lalu jalankan mobile app:

```bash
cd cv_app/mobile_app
flutter pub get
flutter run
```

Default endpoint di aplikasi:

```text
http://10.0.2.2:8000/predict
```

`10.0.2.2` adalah alamat khusus emulator Android untuk mengakses `localhost` komputer. Alamat ini tidak bisa dipakai dari HP fisik.

Saat prediksi, isi `Nama siswa/i` di halaman `Prediksi`. Nama dan hasil analisis
akan disimpan oleh API ke database SQLite:

```text
cv_web/data/confivoice.db
```

Admin dapat melihat hasil dari browser:

```text
http://localhost:8001/admin
```

## Menjalankan di HP Fisik

Ganti endpoint pada menu `Model` menjadi alamat IP komputer yang menjalankan API, misalnya:

```text
http://192.168.1.6:8000/predict
```

Pastikan HP dan komputer berada di jaringan yang sama.

## Build APK

```bash
cd cv_app/mobile_app
flutter build apk --release
```

Output APK biasanya berada di:

```text
build/app/outputs/flutter-apk/app-release.apk
```

## Format Response API

Aplikasi mengharapkan JSON:

```json
{
  "label": "PD",
  "description": "Percaya Diri",
  "confidence": 0.76,
  "probabilities": {
    "PD": 0.76,
    "TPD": 0.24
  }
}
```
