diff --git a/README.md b/README.md index fc8d9c6..973d2cd 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,21 @@ Aplikasi Flutter untuk menyimpan **login & data pribadi** di database lokal Android. Semua data tersimpan di perangkat (offline-first, tanpa server). - Minimum Android: **10 (API 29)** -- Target SDK: 34 +- Compile / Target SDK: 36 - Package: `com.omahcitra.loginvault` --- ## Fitur -- **Autentikasi lokal** — registrasi/login pertama kali via **email + password** - aplikasi, atau **Google Sign-In**. Email disimpan di local storage sebagai identitas. +- **Autentikasi lokal** — registrasi/login via **email + password aplikasi**. + Email disimpan di secure storage sebagai identitas. +- **Login dengan sidik jari (biometric)** — setelah registrasi, kamu dapat + mengaktifkan fingerprint di Pengaturan. Saat membuka aplikasi, dialog + sidik jari muncul otomatis dan **mem-bypass** form email/password bila + verifikasi sukses. Bila dibatalkan, tetap bisa login manual. +- **Session timeout** — login otomatis logout setelah periode tanpa aktivitas + (default 3 menit, bisa diubah: 5/10/15/30/60 menit atau Selamanya). - **Penyimpanan lokal terenkripsi** — tiap entri punya: - `id` : `String`, **unik** (primary key) - `content` : `String`, disimpan terenkripsi (XOR + base64) menggunakan @@ -25,6 +31,8 @@ Android. Semua data tersimpan di perangkat (offline-first, tanpa server). 4. Tombol **edit** di tiap list untuk ubah konten - **Menu Pengaturan**: - Ubah password aplikasi + - Aktifkan/nonaktifkan login sidik jari (dengan dialog konfirmasi) + - Atur session timeout - Ganti tema: **Gelap (Dark)** atau **Sistem (System)** - **Menu Exit** — keluar dari aplikasi @@ -34,14 +42,14 @@ Android. Semua data tersimpan di perangkat (offline-first, tanpa server). ``` lib/ -├── constants.dart # AppConstants: encryptionKey (constant), db name +├── constants.dart # AppConstants: encryptionKey (constant), session keys ├── encryptor.dart # XOR + base64 obfuscation (constant key) ├── database_helper.dart # sqflite: tabel 'vault' (id PK, content) -├── auth_service.dart # register/login, simpan email + app password (secure storage) +├── auth_service.dart # register/login, secure storage, biometric, session ├── theme_provider.dart # theme mode (system/dark), persist via SharedPreferences -├── auth_screen.dart # registrasi/login (email atau Google) +├── auth_screen.dart # login/registrasi adaptif (email+password, bypass fingerprint) ├── dashboard_screen.dart # search live, list, expand, swipe-delete, edit -├── settings_screen.dart # ubah password, tema, exit +├── settings_screen.dart # ubah password, tema, fingerprint, timeout, exit ├── vault_entry_dialogs.dart# dialog add/edit/confirm └── main.dart # entrypoint + routing + ThemeProvider ``` @@ -55,14 +63,15 @@ lib/ > Keystore). Email & password aplikasi disimpan via `flutter_secure_storage` (ter-enkripsi di -Android Keystore). +Android Keystore). Sidik jari menggunakan plugin `local_auth` (dialog biometric +bawaan Android, memerlukan `FlutterFragmentActivity`). --- ## Cara build APK -Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34, platforms -29 & 34). +Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34+, platforms +29 & 36). ```bash flutter pub get @@ -71,10 +80,13 @@ flutter build apk --release ``` ### Konfigurasi Android -- `android/app/build.gradle.kts`: `minSdk = 29`, `targetSdk = 36`, - `applicationId = com.omahcitra.loginvault` +- `android/app/build.gradle.kts`: `minSdk = 29`, `compileSdk = 36`, + `targetSdk = 36`, `applicationId = com.omahcitra.loginvault` - `android/local.properties`: `sdk.dir=/path/to/android-sdk` -- `AndroidManifest.xml`: permission `INTERNET` (untuk Google Sign-In) +- `android/app/src/main/kotlin/.../MainActivity.kt`: extends + `FlutterFragmentActivity` (wajib untuk `local_auth`) +- `AndroidManifest.xml`: permission `INTERNET` (tidak wajib untuk fitur inti, + aman dihapus bila tidak ada panggilan jaringan) > APK release di-build dengan **debug keystore** (signingConfig debug) agar > bisa dihasilkan tanpa upload key. Untuk distribusi Play Store, ganti dengan @@ -96,15 +108,18 @@ adb install build/app/outputs/flutter-apk/app-release.apk ## Alur penggunaan -1. **Pertama install** → layar registrasi: isi email + password aplikasi, atau - "Lanjut dengan Google". +1. **Pertama install** → layar registrasi: isi email + password aplikasi. 2. Setelah login → **Dashboard**: - Ketik di kolom pencarian untuk filter `id` secara live. - Tap sebuah `id` → kontennya muncul di bawah. - Swipe kiri pada item → konfirmasi hapus. - Tap ikon edit → ubah konten. - Tombol `+` (FAB) → tambah entri baru (id unik + konten). -3. **Pengaturan** (ikon gear): ubah password, ganti tema, atau Exit. +3. **Pengaturan** (ikon gear): + - Ubah password aplikasi + - Aktifkan "Login dengan sidik jari" (muncul dialog konfirmasi; batal = tetap off) + - Atur session timeout + - Ganti tema, atau Exit. --- @@ -114,9 +129,9 @@ adb install build/app/outputs/flutter-apk/app-release.apk |-------|--------| | `sqflite` | local database SQLite | | `flutter_secure_storage` | simpan email & password aplikasi (Keystore) | -| `google_sign_in` | login dengan Google | +| `local_auth` | login dengan sidik jari (biometric Android) | | `provider` | state management (theme) | -| `shared_preferences` | persist tema | +| `shared_preferences` | persist tema & session timeout | | `crypto` | utilitas (tidak wajib, tersedia) | ---