From 6b82b69caf7c5d58edfcd7ffdeffc059bf8efdbb Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Fri, 25 Jul 2025 21:49:01 +0530 Subject: [PATCH 01/28] feat: translate app in multiple languages Generate translation with Gemini 2.5 Flash --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 3 +- app/src/main/res/resources.properties | 1 + app/src/main/res/values-de/strings.xml | 63 +++++++++++++++++++++++++ app/src/main/res/values-in/strings.xml | 63 +++++++++++++++++++++++++ app/src/main/res/values-ja/strings.xml | 63 +++++++++++++++++++++++++ app/src/main/res/values-ko/string.xml | 63 +++++++++++++++++++++++++ app/src/main/res/xml/locales_config.xml | 8 ++++ 8 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/resources.properties create mode 100644 app/src/main/res/values-de/strings.xml create mode 100644 app/src/main/res/values-in/strings.xml create mode 100644 app/src/main/res/values-ja/strings.xml create mode 100644 app/src/main/res/values-ko/string.xml create mode 100644 app/src/main/res/xml/locales_config.xml diff --git a/app/build.gradle b/app/build.gradle index c6418701..b45ae2e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,7 @@ android { targetSdk 33 versionCode 1 versionName "0.1.0-Alpha" + resourceConfigurations += ["in", "de", "ja", "ko"] } signingConfigs { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c100584f..a18d473c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,7 +23,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/PasswordManagerTheme"> + android:theme="@style/PasswordManagerTheme" + android:localeConfig="@xml/locales_config"> diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties new file mode 100644 index 00000000..467b3efe --- /dev/null +++ b/app/src/main/res/resources.properties @@ -0,0 +1 @@ +unqualifiedResLocale=en-US diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 00000000..ba0ee368 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,63 @@ + + + Entwickelt von: Dobariya Jeel + UI/UX Design von: Hamada Issas (Native) + Code-Maintainer und Tester: Achmad Daniel (Kudanill) + + + Beenden + + + Eine Open-Source-Passwortverwaltungslösung, die Ihnen die Kopfschmerzen des Passwortmerkens abnimmt!! + Die App befindet sich derzeit in aktiver Entwicklung und wurde zu Spaß- und Bildungszwecken erstellt. Es ist möglicherweise nicht sicher, Ihre Authentifizierungsinformationen damit zu speichern. Weitere Informationen finden Sie in den Sicherheitsrichtlinien!!! + + + Domain + Benutzername + Passwort + Notizen + Passwort-Manager + Passwort speichern + Passwort laden + Passwort aktualisieren + Passwort löschen + Passwort importieren + Passwort exportieren + Sicherheit prüfen + Über uns + Lizenz anzeigen + Sicherheitsrichtlinien anzeigen + Änderungsprotokoll anzeigen + + + Passwort-Manager + Passwort laden + Passwort speichern + Passwort anzeigen + Passwort aktualisieren + Über uns + + + ID: + Domain: + Benutzername: + Passwort: + Notizen: + Erstellt am: + Zuletzt aktualisiert: + + + Berechtigung erteilt + Berechtigung verweigert + + + Funktion befindet sich in Entwicklung!! + 404: Nicht gefunden!! + Warnung: Bitte füllen Sie zuerst das Formular aus!! + Fehlgeschlagen: Bitte versuchen Sie es erneut!! + Erfolg: + Erfolgreich aktualisiert!! + Erfolgreich gelöscht!! + Etwas ist schief gelaufen!! + + diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml new file mode 100644 index 00000000..bb3ccc41 --- /dev/null +++ b/app/src/main/res/values-in/strings.xml @@ -0,0 +1,63 @@ + + + Dikembangkan oleh: Dobariya Jeel + Desain UI/UX oleh: Hamada Issas (Asli) + Pemelihara dan Penguji Kode: Achmad Daniel (Kudanill) + + + Keluar + + + Solusi pengelola kata sandi sumber terbuka yang menghilangkan pusing Anda mengingat kata sandi!! + Aplikasi saat ini dalam pengembangan aktif dan dibuat untuk tujuan hiburan dan pendidikan dan mungkin tidak aman untuk menyimpan info otentikasi Anda dengannya. Untuk info lebih lanjut, lihat panduan keamanan!!! + + + Domain + Nama Pengguna + Kata Sandi + Catatan + Pengelola Kata Sandi + Simpan Kata Sandi + Muat Kata Sandi + Perbarui Kata Sandi + Hapus Kata Sandi + Impor Kata Sandi + Ekspor Kata Sandi + Periksa Keamanan + Tentang Kami + Lihat Lisensi + Lihat Panduan Keamanan + Lihat Perubahan + + + Pengelola Kata Sandi + Muat Kata Sandi + Simpan Kata Sandi + Lihat Kata Sandi + Perbarui Kata Sandi + Tentang Kami + + + Id: + Domain: + Nama Pengguna: + Kata Sandi: + Catatan: + Dibuat pada: + Diperbarui pada: + + + Izin Diberikan + Izin Ditolak + + + Fitur sedang dalam pengembangan!! + 404: Tidak Ditemukan!! + Peringatan: harap isi formulir terlebih dahulu!! + Gagal: coba lagi!! + Berhasil: + Berhasil Diperbarui!! + Berhasil Dihapus!! + Terjadi Kesalahan!! + + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000..f29880a1 --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,63 @@ + + + 開発者:Dobariya Jeel + UI/UX デザイン:Hamada Issas (Native) + コードメンテナー兼テスター:Achmad Daniel (Kudanill) + + + 終了 + + + パスワードを覚える手間を省くオープンソースのパスワード管理ソリューションです!! + このアプリは現在開発中で、娯楽および教育目的で作成されています。認証情報を保存するのは安全ではない場合があります。詳細については、セキュリティガイドラインをご覧ください!!! + + + ドメイン + ユーザー名 + パスワード + メモ + パスワードマネージャー + パスワードを保存 + パスワードを読み込む + パスワードを更新 + パスワードを削除 + パスワードをインポート + パスワードをエクスポート + セキュリティチェック + について + ライセンスを表示 + セキュリティガイドラインを表示 + 変更履歴を表示 + + + パスワードマネージャー + パスワードを読み込む + パスワードを保存 + パスワードを表示 + パスワードを更新 + について + + + ID: + ドメイン: + ユーザー名: + パスワード: + メモ: + 作成日時: + 更新日時: + + + 権限が付与されました + 権限が拒否されました + + + 機能は開発中です!! + 404: 見つかりません!! + 警告:まずフォームに入力してください!! + 失敗しました:もう一度お試しください!! + 成功: + 正常に更新されました!! + 正常に削除されました!! + 何かがうまくいきませんでした!! + + diff --git a/app/src/main/res/values-ko/string.xml b/app/src/main/res/values-ko/string.xml new file mode 100644 index 00000000..b66c3f80 --- /dev/null +++ b/app/src/main/res/values-ko/string.xml @@ -0,0 +1,63 @@ + + + + 개발: Dobariya Jeel + UI/UX 디자인: Hamada Issas (Native) + 코드 관리 및 테스터: Achmad Daniel (Kudanill) + + + 종료 + + + 비밀번호를 기억하는 골칫거리를 해결해 줄 오픈 소스 비밀번호 관리 솔루션입니다!! + 앱은 현재 활발히 개발 중이며 재미와 교육 목적으로 만들어졌으므로 인증 정보를 저장하는 것이 안전하지 않을 수 있습니다. 자세한 내용은 보안 가이드라인을 참조하십시오!!! + + + 도메인 + 사용자 이름 + 비밀번호 + 메모 + 비밀번호 관리자 + 비밀번호 저장 + 비밀번호 불러오기 + 비밀번호 업데이트 + 비밀번호 삭제 + 비밀번호 가져오기 + 비밀번호 내보내기 + 보안 확인 + 정보 + 라이선스 보기 + 보안 가이드라인 보기 + 변경 로그 보기 + + + 비밀번호 관리자 + 비밀번호 불러오기 + 비밀번호 저장 + 비밀번호 보기 + 비밀번호 업데이트 + 정보 + + + ID: + 도메인: + 사용자 이름: + 비밀번호: + 메모: + 생성일: + 업데이트일: + + + 권한 부여됨 + 권한 거부됨 + + + 기능 개발 중!! + 404: 찾을 수 없음!! + 경고: 먼저 양식을 작성하십시오!! + 실패: 다시 시도하십시오!! + 성공: + 성공적으로 업데이트됨!! + 성공적으로 삭제됨!! + 문제가 발생했습니다!! + diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 00000000..2f995f10 --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,8 @@ + + + + + + + + From 3fd507b62d50bed7987736894a6367fdd1eb142e Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sat, 26 Jul 2025 20:31:31 +0530 Subject: [PATCH 02/28] fix: button size on PasswordManagerActivity --- .../res/layout/activity_password_manager.xml | 91 ++++++++++--------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/app/src/main/res/layout/activity_password_manager.xml b/app/src/main/res/layout/activity_password_manager.xml index 848650a5..7867a90a 100644 --- a/app/src/main/res/layout/activity_password_manager.xml +++ b/app/src/main/res/layout/activity_password_manager.xml @@ -8,50 +8,57 @@ android:padding="4sp" > - - - - - - + + + android:gravity="center" + android:orientation="vertical" + android:layout_margin="16sp"> - - - - + + + + + + + + + + From b1e293dae769bb8b827c0c5fc6e79b4d54a66812 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sat, 26 Jul 2025 22:30:15 +0530 Subject: [PATCH 03/28] feat: improve ui/ux --- .../ui/ViewPasswordActivity.java | 33 ++++++++++++++----- .../res/layout/activity_save_password.xml | 13 +++++--- .../res/layout/activity_view_password.xml | 4 ++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java index c732c7b8..d1ab8c24 100644 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java @@ -3,6 +3,7 @@ import android.os.Bundle; import android.content.Intent; import android.widget.Toast; +import android.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.WindowCompat; import android.view.LayoutInflater; @@ -66,18 +67,32 @@ private void addOnClickListenerOnButton() { }); binding.deletePasswordBtn.setOnClickListener(v -> { - controller = new Controller(ViewPasswordActivity.this); - int res = controller.deletePassword(passwordEnitityId); + AlertDialog confirmDialog =new AlertDialog.Builder(ViewPasswordActivity.this) + .setTitle("Delete Password?") + .setMessage("This action is irreverseable") + .setPositiveButton("Confirm", (dialog, which) -> { + performDeletePasswordAction(); + }) + .setNegativeButton("Discard", (dialog, which) -> { + // Do Nothing + }) + .create(); - if (res == 1) { - Toast.makeText(ViewPasswordActivity.this, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show(); - - finish(); - } else { - Toast.makeText(ViewPasswordActivity.this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); - } + confirmDialog.show(); }); } + + private void performDeletePasswordAction() { + int res = controller.deletePassword(passwordEnitityId); + + if (res == 1) { + Toast.makeText(ViewPasswordActivity.this, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show(); + + finish(); + } else { + Toast.makeText(ViewPasswordActivity.this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); + } + } @Override protected void onResume() { diff --git a/app/src/main/res/layout/activity_save_password.xml b/app/src/main/res/layout/activity_save_password.xml index fa1ceb26..3bd43117 100644 --- a/app/src/main/res/layout/activity_save_password.xml +++ b/app/src/main/res/layout/activity_save_password.xml @@ -1,5 +1,6 @@ + android:hint="@string/hint_domain" + app:helperTextEnabled="true" + app:helperText="@string/helper_text_domain_filed"> + + android:hint="@string/hint_password" + app:endIconMode="password_toggle"> + android:minLines="2" + android:maxLines="5" /> diff --git a/app/src/main/res/layout/activity_view_password.xml b/app/src/main/res/layout/activity_view_password.xml index 21bed510..8a8cdc6a 100644 --- a/app/src/main/res/layout/activity_view_password.xml +++ b/app/src/main/res/layout/activity_view_password.xml @@ -1,5 +1,6 @@ - Domain + enter associated website Username Password Notes From cbac1198df157118e587daa20a723fa950df18f8 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 13:07:26 +0530 Subject: [PATCH 04/28] feat: add placeholders --- .../ui/SavePasswordActivity.java | 24 +++++++++++++++++++ .../res/layout/activity_save_password.xml | 2 +- app/src/main/res/values/strings.xml | 5 +++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java index 5a0283c3..ab61e1d5 100644 --- a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java @@ -27,6 +27,30 @@ protected void onCreate(Bundle savedInstanceState) { // Added all the onclick event listiners private void addOnClickListenerOnButton(ActivitySavePasswordBinding binding) { + binding.inputDomain.setOnFocusChangeListener((v, hasFocus) -> { + if (hasFocus) { + binding.inputDomain.setHint(R.string.placeholder_domain_field); + } else { + binding.inputDomain.setHint(""); + } + }); + + binding.inputUsername.setOnFocusChangeListener((v, hasFocus) -> { + if (hasFocus) { + binding.inputUsername.setHint(R.string.placeholder_username_field); + } else { + binding.inputUsername.setHint(""); + } + }); + + binding.inputPassword.setOnFocusChangeListener((v, hasFocus) -> { + if (hasFocus) { + binding.inputPassword.setHint(R.string.placeholder_password_field); + } else { + binding.inputPassword.setHint(""); + } + }); + binding.savePasswordBtn.setOnClickListener(v -> { String domain = binding.inputDomain.getText().toString(); String username = binding.inputUsername.getText().toString(); diff --git a/app/src/main/res/layout/activity_save_password.xml b/app/src/main/res/layout/activity_save_password.xml index 3bd43117..68dc1977 100644 --- a/app/src/main/res/layout/activity_save_password.xml +++ b/app/src/main/res/layout/activity_save_password.xml @@ -36,7 +36,7 @@ android:layout_margin="4dp" android:hint="@string/hint_domain" app:helperTextEnabled="true" - app:helperText="@string/helper_text_domain_filed"> + app:helperText="@string/helper_text_domain_field"> Domain - enter associated website + name of website or domain associated Username Password Notes + e.g. Google, Instagram, Whatapp etc.. + e.g. Liam15, Noha, Olivia, Ava_25 etc... + e.g. 12345, abc123xyz, qwerty etc... Password Manager Save Password Load Password From c2135d3a3f0bc4cfde714af274a9b37857fb70c2 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 13:08:05 +0530 Subject: [PATCH 05/28] feat: improve colors --- app/src/main/res/layout/activity_about_us.xml | 6 ++++++ app/src/main/res/layout/activity_view_password.xml | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/activity_about_us.xml b/app/src/main/res/layout/activity_about_us.xml index ebd2678d..f502745d 100644 --- a/app/src/main/res/layout/activity_about_us.xml +++ b/app/src/main/res/layout/activity_about_us.xml @@ -71,6 +71,8 @@ - \ No newline at end of file + From 6d7d1c3e7430a47da69856212f5e5a1f5210c91a Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 13:16:23 +0530 Subject: [PATCH 06/28] feat: support for light & dark theme --- app/src/main/res/values-night/theme.xml | 40 ++++++++++++++++ app/src/main/res/values/themes.xml | 64 ++++++++++++------------- 2 files changed, 71 insertions(+), 33 deletions(-) create mode 100644 app/src/main/res/values-night/theme.xml diff --git a/app/src/main/res/values-night/theme.xml b/app/src/main/res/values-night/theme.xml new file mode 100644 index 00000000..29e0422e --- /dev/null +++ b/app/src/main/res/values-night/theme.xml @@ -0,0 +1,40 @@ + + + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index eafb2406..8ea04c32 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,41 +1,39 @@ - From cf01e935f0b8873cbc44e88af2a10dd630ae6f11 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 13:35:18 +0530 Subject: [PATCH 07/28] feat: improve alert dialogs --- .../ui/UpdatePasswordActivity.java | 45 ++++++++++++------- .../ui/ViewPasswordActivity.java | 12 ++--- app/src/main/res/values/strings.xml | 8 +++- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java index b078dc41..885af29b 100644 --- a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java @@ -3,6 +3,7 @@ import android.os.Bundle; import android.content.Intent; import android.widget.Toast; +import android.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.WindowCompat; import android.view.LayoutInflater; @@ -53,23 +54,37 @@ protected void onCreate(Bundle savedInstanceState) { // Added all the onclick event listiners private void addOnClickListenerOnButton(ActivityUpdatePasswordBinding binding) { binding.updatePasswordBtn.setOnClickListener(v -> { - // TODO: implement password update logic. - String newDomain = binding.inputDomain.getText().toString(); - String newUsername = binding.inputUsername.getText().toString(); - String newPassword = binding.inputPassword.getText().toString(); - String newNotes = binding.inputNotes.getText().toString(); - - int res = controller.updatePassword(passwordEnitityId, newDomain, newUsername, newPassword, newNotes); + AlertDialog confirmDialog =new AlertDialog.Builder(UpdatePasswordActivity.this) + .setTitle(R.string.update_password_dialog_title) + .setMessage(R.string.irreverseable_dialog_desc) + .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { + String newDomain = binding.inputDomain.getText().toString(); + String newUsername = binding.inputUsername.getText().toString(); + String newPassword = binding.inputPassword.getText().toString(); + String newNotes = binding.inputNotes.getText().toString(); + + performUpdatePasswordAction(newDomain, newUsername, newPassword, newNotes); + }) + .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { + // Do Nothing + }) + .create(); - if (res == 1) { - Toast.makeText(UpdatePasswordActivity.this, getString(R.string.update_sucess_msg), Toast.LENGTH_SHORT).show(); - - finish(); - } else { - Toast.makeText(UpdatePasswordActivity.this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); - } + confirmDialog.show(); + }); + } + + private void performUpdatePasswordAction(String newDomain, String newUsername, String newPassword, String newNotes) { + int res = controller.updatePassword(passwordEnitityId, newDomain, newUsername, newPassword, newNotes); + + if (res == 1) { + Toast.makeText(this, getString(R.string.update_sucess_msg), Toast.LENGTH_SHORT).show(); finish(); - }); + } else { + Toast.makeText(this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); + } + + finish(); } } diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java index d1ab8c24..96097598 100644 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java @@ -68,12 +68,12 @@ private void addOnClickListenerOnButton() { binding.deletePasswordBtn.setOnClickListener(v -> { AlertDialog confirmDialog =new AlertDialog.Builder(ViewPasswordActivity.this) - .setTitle("Delete Password?") - .setMessage("This action is irreverseable") - .setPositiveButton("Confirm", (dialog, which) -> { + .setTitle(R.string.delete_password_dialog_title) + .setMessage(R.string.irreverseable_dialog_desc) + .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { performDeletePasswordAction(); }) - .setNegativeButton("Discard", (dialog, which) -> { + .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { // Do Nothing }) .create(); @@ -86,11 +86,11 @@ private void performDeletePasswordAction() { int res = controller.deletePassword(passwordEnitityId); if (res == 1) { - Toast.makeText(ViewPasswordActivity.this, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show(); finish(); } else { - Toast.makeText(ViewPasswordActivity.this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4a3dc2cd..bb678b63 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,4 +68,10 @@ Deleted Successfully!! Something Went Wrong!! - \ No newline at end of file + + Update Password? + Delete Password? + This action is irreverseable + Confirm + Discard + From 7e5843dc175b307e5c13fa6163e8f03356025571 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 13:37:36 +0530 Subject: [PATCH 08/28] feat: add a action discard toast --- .../java/com/passwordmanager/ui/UpdatePasswordActivity.java | 2 +- .../main/java/com/passwordmanager/ui/ViewPasswordActivity.java | 2 +- app/src/main/res/values/strings.xml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java index 885af29b..85869f55 100644 --- a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java @@ -66,7 +66,7 @@ private void addOnClickListenerOnButton(ActivityUpdatePasswordBinding binding) { performUpdatePasswordAction(newDomain, newUsername, newPassword, newNotes); }) .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { - // Do Nothing + Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); }) .create(); diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java index 96097598..11274b7d 100644 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java @@ -74,7 +74,7 @@ private void addOnClickListenerOnButton() { performDeletePasswordAction(); }) .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { - // Do Nothing + Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); }) .create(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb678b63..6209cdd7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,6 +67,7 @@ Updated Successfully!! Deleted Successfully!! Something Went Wrong!! + Action Discard! Update Password? From 46ee01ab6c3a69b2fe9f9749639d99ebab49d864 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 14:02:22 +0530 Subject: [PATCH 09/28] fix: typo in res/value/strings --- .../java/com/passwordmanager/ui/SavePasswordActivity.java | 2 +- .../com/passwordmanager/ui/UpdatePasswordActivity.java | 4 ++-- .../java/com/passwordmanager/ui/ViewPasswordActivity.java | 4 ++-- app/src/main/res/values-de/strings.xml | 6 +++--- app/src/main/res/values-in/strings.xml | 6 +++--- app/src/main/res/values-ja/strings.xml | 6 +++--- app/src/main/res/values-ko/string.xml | 6 +++--- app/src/main/res/values/strings.xml | 8 ++++---- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java index ab61e1d5..42f07509 100644 --- a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java @@ -66,7 +66,7 @@ private void addOnClickListenerOnButton(ActivitySavePasswordBinding binding) { else if (res == -1) { Toast.makeText(SavePasswordActivity.this, getString(R.string.fail_msg), Toast.LENGTH_SHORT).show(); } else { - Toast.makeText(SavePasswordActivity.this, getString(R.string.sucess_clause) + res, Toast.LENGTH_SHORT).show(); + Toast.makeText(SavePasswordActivity.this, getString(R.string.success_clause) + res, Toast.LENGTH_SHORT).show(); } }); } diff --git a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java index 85869f55..4e973b06 100644 --- a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java @@ -56,7 +56,7 @@ private void addOnClickListenerOnButton(ActivityUpdatePasswordBinding binding) { binding.updatePasswordBtn.setOnClickListener(v -> { AlertDialog confirmDialog =new AlertDialog.Builder(UpdatePasswordActivity.this) .setTitle(R.string.update_password_dialog_title) - .setMessage(R.string.irreverseable_dialog_desc) + .setMessage(R.string.irreversible_dialog_desc) .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { String newDomain = binding.inputDomain.getText().toString(); String newUsername = binding.inputUsername.getText().toString(); @@ -78,7 +78,7 @@ private void performUpdatePasswordAction(String newDomain, String newUsername, S int res = controller.updatePassword(passwordEnitityId, newDomain, newUsername, newPassword, newNotes); if (res == 1) { - Toast.makeText(this, getString(R.string.update_sucess_msg), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.update_success_msg), Toast.LENGTH_SHORT).show(); finish(); } else { diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java index 11274b7d..9af98562 100644 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java @@ -69,7 +69,7 @@ private void addOnClickListenerOnButton() { binding.deletePasswordBtn.setOnClickListener(v -> { AlertDialog confirmDialog =new AlertDialog.Builder(ViewPasswordActivity.this) .setTitle(R.string.delete_password_dialog_title) - .setMessage(R.string.irreverseable_dialog_desc) + .setMessage(R.string.irreversible_dialog_desc) .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { performDeletePasswordAction(); }) @@ -86,7 +86,7 @@ private void performDeletePasswordAction() { int res = controller.deletePassword(passwordEnitityId); if (res == 1) { - Toast.makeText(this, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.delete_success_msg), Toast.LENGTH_SHORT).show(); finish(); } else { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ba0ee368..ab7c428f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -55,9 +55,9 @@ 404: Nicht gefunden!! Warnung: Bitte füllen Sie zuerst das Formular aus!! Fehlgeschlagen: Bitte versuchen Sie es erneut!! - Erfolg: - Erfolgreich aktualisiert!! - Erfolgreich gelöscht!! + Erfolg: + Erfolgreich aktualisiert!! + Erfolgreich gelöscht!! Etwas ist schief gelaufen!! diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index bb3ccc41..22df9296 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -55,9 +55,9 @@ 404: Tidak Ditemukan!! Peringatan: harap isi formulir terlebih dahulu!! Gagal: coba lagi!! - Berhasil: - Berhasil Diperbarui!! - Berhasil Dihapus!! + Berhasil: + Berhasil Diperbarui!! + Berhasil Dihapus!! Terjadi Kesalahan!! diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f29880a1..b9b8954b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -55,9 +55,9 @@ 404: 見つかりません!! 警告:まずフォームに入力してください!! 失敗しました:もう一度お試しください!! - 成功: - 正常に更新されました!! - 正常に削除されました!! + 成功: + 正常に更新されました!! + 正常に削除されました!! 何かがうまくいきませんでした!! diff --git a/app/src/main/res/values-ko/string.xml b/app/src/main/res/values-ko/string.xml index b66c3f80..0ac18fc0 100644 --- a/app/src/main/res/values-ko/string.xml +++ b/app/src/main/res/values-ko/string.xml @@ -56,8 +56,8 @@ 404: 찾을 수 없음!! 경고: 먼저 양식을 작성하십시오!! 실패: 다시 시도하십시오!! - 성공: - 성공적으로 업데이트됨!! - 성공적으로 삭제됨!! + 성공: + 성공적으로 업데이트됨!! + 성공적으로 삭제됨!! 문제가 발생했습니다!! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6209cdd7..b54c65c6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,16 +63,16 @@ 404: Not Found!! Warning: please fill the form first!! Failed: please try again!! - Success: - Updated Successfully!! - Deleted Successfully!! + Success: + Updated Successfully!! + Deleted Successfully!! Something Went Wrong!! Action Discard! Update Password? Delete Password? - This action is irreverseable + This action is irreversible Confirm Discard From 591d770d8db962a3b044d3ee9ae94ed0abff6484 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 14:18:59 +0530 Subject: [PATCH 10/28] feat: Improve Translation Use ChatGPT 4o for translation.. There could be errors --- app/src/main/res/values-de/strings.xml | 53 +++++++++-------- app/src/main/res/values-es/strings.xml | 68 ++++++++++++++++++++++ app/src/main/res/values-hi/strings.xml | 79 ++++++++++++++++++++++++++ app/src/main/res/values-in/strings.xml | 48 ++++++++++------ app/src/main/res/values-ja/strings.xml | 58 ++++++++++++------- app/src/main/res/values-ko/string.xml | 55 ++++++++++-------- app/src/main/res/values-vi/string.xml | 68 ++++++++++++++++++++++ app/src/main/res/values-zh/strings.xml | 79 ++++++++++++++++++++++++++ app/src/main/res/values/strings.xml | 51 +++++++++-------- 9 files changed, 448 insertions(+), 111 deletions(-) create mode 100644 app/src/main/res/values-es/strings.xml create mode 100644 app/src/main/res/values-hi/strings.xml create mode 100644 app/src/main/res/values-vi/string.xml create mode 100644 app/src/main/res/values-zh/strings.xml diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ab7c428f..4df02fd4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,35 +1,37 @@ - + Passwort-Manager + v0.1.0-Alpha + Entwickelt von: Dobariya Jeel - UI/UX Design von: Hamada Issas (Native) - Code-Maintainer und Tester: Achmad Daniel (Kudanill) + UI/UX-Design von: Hamada Issas (Native) + Codebetreuer und Tester: Achmad Daniel (Kudanill) - Beenden - - Eine Open-Source-Passwortverwaltungslösung, die Ihnen die Kopfschmerzen des Passwortmerkens abnimmt!! - Die App befindet sich derzeit in aktiver Entwicklung und wurde zu Spaß- und Bildungszwecken erstellt. Es ist möglicherweise nicht sicher, Ihre Authentifizierungsinformationen damit zu speichern. Weitere Informationen finden Sie in den Sicherheitsrichtlinien!!! + Eine Open-Source-Lösung zur Passwortverwaltung, die das Merken von Passwörtern erleichtert. + Diese App befindet sich derzeit in aktiver Entwicklung und dient zu Lern- und Testzwecken. Sie ist möglicherweise nicht sicher für sensible Informationen. - Domain + Name der zugehörigen Website oder Domain Benutzername Passwort Notizen + z. B. Google, Instagram, WhatsApp usw. + z. B. Liam15, Noha, Olivia, Ava_25 usw. + z. B. 12345, abc123xyz, qwerty usw. Passwort-Manager Passwort speichern Passwort laden Passwort aktualisieren Passwort löschen - Passwort importieren - Passwort exportieren - Sicherheit prüfen + Passwörter importieren + Passwörter exportieren + Sicherheitsprüfung Über uns Lizenz anzeigen Sicherheitsrichtlinien anzeigen Änderungsprotokoll anzeigen - Passwort-Manager Passwort laden Passwort speichern @@ -37,27 +39,30 @@ Passwort aktualisieren Über uns - ID: Domain: Benutzername: Passwort: Notizen: Erstellt am: - Zuletzt aktualisiert: + Aktualisiert am: - Berechtigung erteilt Berechtigung verweigert - - Funktion befindet sich in Entwicklung!! - 404: Nicht gefunden!! - Warnung: Bitte füllen Sie zuerst das Formular aus!! - Fehlgeschlagen: Bitte versuchen Sie es erneut!! - Erfolg: - Erfolgreich aktualisiert!! - Erfolgreich gelöscht!! - Etwas ist schief gelaufen!! + Diese Funktion wird derzeit entwickelt. + 404: Nicht gefunden + Warnung: Bitte füllen Sie zuerst das Formular aus. + Fehler: Bitte versuchen Sie es erneut. + Erfolg: + Erfolgreich aktualisiert. + Erfolgreich gelöscht. + Etwas ist schiefgelaufen. + Aktion verworfen. + Passwort aktualisieren? + Passwort löschen? + Diese Aktion kann nicht rückgängig gemacht werden. + Bestätigen + Verwerfen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 00000000..6cac1da8 --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,68 @@ + + Administrador de Contraseñas + v0.1.0-Alpha + + Desarrollado por: Dobariya Jeel + Diseño UI/UX por: Hamada Issas (Native) + Mantenimiento y pruebas del código: Achmad Daniel (Kudanill) + + Salir + + Una solución de código abierto para gestionar contraseñas sin tener que recordarlas todas. + Esta aplicación está en desarrollo activo y fue creada con fines de aprendizaje y experimentación. No se recomienda para datos sensibles. + + Dominio + Nombre del sitio web o dominio relacionado + Nombre de usuario + Contraseña + Notas + ej. Google, Instagram, WhatsApp + ej. Liam15, Noha, Olivia, Ava_25 + ej. 12345, abc123xyz, qwerty + Administrador de Contraseñas + Guardar Contraseña + Cargar Contraseña + Actualizar Contraseña + Eliminar Contraseña + Importar Contraseñas + Exportar Contraseñas + Revisar Seguridad + Sobre Nosotros + Ver Licencia + Ver Guías de Seguridad + Ver Registro de Cambios + + Administrador de Contraseñas + Cargar Contraseña + Guardar Contraseña + Ver Contraseña + Actualizar Contraseña + Sobre Nosotros + + ID: + Dominio: + Usuario: + Contraseña: + Notas: + Creado el: + Actualizado el: + + Permiso Concedido + Permiso Denegado + + Esta función está en desarrollo. + 404: No Encontrado + Advertencia: Rellene el formulario primero. + Error: Inténtelo de nuevo. + Éxito: + Actualizado con éxito. + Eliminado con éxito. + Algo salió mal. + Acción descartada. + + ¿Actualizar contraseña? + ¿Eliminar contraseña? + Esta acción no se puede deshacer. + Confirmar + Cancelar + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml new file mode 100644 index 00000000..bf013f18 --- /dev/null +++ b/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,79 @@ + + + पासवर्ड प्रबंधक + v0.1.0-Alpha + + + डेवलपर: डोबारिया जील + UI/UX डिज़ाइन: हामदा इस्सास (Native) + कोड मेंटेनेंस और परीक्षण: अचमद डैनियल (Kudanill) + + + बाहर निकलें + + + एक ओपन-सोर्स पासवर्ड प्रबंधक जो पासवर्ड याद रखने की परेशानी को दूर करता है। + यह ऐप अभी विकास के चरण में है और केवल शैक्षिक व प्रयोगात्मक उद्देश्यों के लिए है। कृपया इसमें संवेदनशील जानकारी संग्रहीत करने से बचें। अधिक जानकारी के लिए सुरक्षा दिशानिर्देश देखें। + + + डोमेन + संबंधित वेबसाइट या डोमेन का नाम + उपयोगकर्ता नाम + पासवर्ड + टिप्पणियाँ + e.g. Google, Instagram, WhatsApp, etc. + e.g. Liam15, Noha, Olivia, Ava_25, etc. + e.g. 12345, abc123xyz, qwerty, etc. + पासवर्ड प्रबंधक + पासवर्ड सहेजें + पासवर्ड लोड करें + पासवर्ड अपडेट करें + पासवर्ड हटाएं + पासवर्ड आयात करें + पासवर्ड निर्यात करें + सुरक्षा जांच + हमारे बारे में + लाइसेंस देखें + सुरक्षा दिशानिर्देश देखें + परिवर्तन लॉग देखें + + + पासवर्ड प्रबंधक + पासवर्ड लोड करें + पासवर्ड सहेजें + पासवर्ड देखें + पासवर्ड अपडेट करें + हमारे बारे में + + + आईडी: + डोमेन: + उपयोगकर्ता नाम: + पासवर्ड: + टिप्पणियाँ: + बनाया गया: + अपडेट किया गया: + + + अनुमति स्वीकृत + अनुमति अस्वीकृत + + + यह सुविधा अभी विकास में है। + 404: नहीं मिला। + चेतावनी: कृपया पहले फ़ॉर्म भरें। + विफल: कृपया पुनः प्रयास करें। + सफलता: + सफलतापूर्वक अपडेट किया गया। + सफलतापूर्वक हटाया गया। + कुछ गलत हो गया। + क्रिया रद्द कर दी गई। + + + क्या आप पासवर्ड अपडेट करना चाहते हैं? + क्या आप पासवर्ड हटाना चाहते हैं? + यह क्रिया अपरिवर्तनीय है। + पुष्टि करें + रद्द करें + + diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 22df9296..547df78d 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,21 +1,29 @@ + + Pengelola Kata Sandi + v0.1.0-Alpha + Dikembangkan oleh: Dobariya Jeel - Desain UI/UX oleh: Hamada Issas (Asli) - Pemelihara dan Penguji Kode: Achmad Daniel (Kudanill) + Desain UI/UX oleh: Hamada Issas (Native) + Pemeliharaan & Pengujian Kode: Achmad Daniel (Kudanill) Keluar - Solusi pengelola kata sandi sumber terbuka yang menghilangkan pusing Anda mengingat kata sandi!! - Aplikasi saat ini dalam pengembangan aktif dan dibuat untuk tujuan hiburan dan pendidikan dan mungkin tidak aman untuk menyimpan info otentikasi Anda dengannya. Untuk info lebih lanjut, lihat panduan keamanan!!! + Sebuah pengelola kata sandi sumber terbuka yang membantu menghilangkan kerepotan mengingat kata sandi Anda. + Aplikasi ini masih dalam tahap pengembangan aktif dan ditujukan untuk tujuan pembelajaran dan eksperimental. Jangan gunakan untuk menyimpan informasi sensitif. Lihat panduan keamanan untuk detail lebih lanjut. Domain + Nama situs web atau domain terkait Nama Pengguna Kata Sandi Catatan + e.g. Google, Instagram, WhatsApp, etc. + e.g. Liam15, Noha, Olivia, Ava_25, etc. + e.g. 12345, abc123xyz, qwerty, etc. Pengelola Kata Sandi Simpan Kata Sandi Muat Kata Sandi @@ -27,7 +35,7 @@ Tentang Kami Lihat Lisensi Lihat Panduan Keamanan - Lihat Perubahan + Lihat Riwayat Perubahan Pengelola Kata Sandi @@ -38,26 +46,34 @@ Tentang Kami - Id: + ID: Domain: Nama Pengguna: Kata Sandi: Catatan: - Dibuat pada: - Diperbarui pada: + Dibuat Pada: + Diperbarui Pada: Izin Diberikan Izin Ditolak - Fitur sedang dalam pengembangan!! - 404: Tidak Ditemukan!! - Peringatan: harap isi formulir terlebih dahulu!! - Gagal: coba lagi!! - Berhasil: - Berhasil Diperbarui!! - Berhasil Dihapus!! - Terjadi Kesalahan!! + Fitur ini sedang dalam pengembangan. + 404: Tidak Ditemukan. + Peringatan: Silakan lengkapi formulir terlebih dahulu. + Gagal: Silakan coba lagi. + Berhasil: + Berhasil diperbarui. + Berhasil dihapus. + Terjadi kesalahan. + Tindakan dibatalkan. + + + Perbarui kata sandi? + Hapus kata sandi? + Tindakan ini tidak dapat dibatalkan. + Konfirmasi + Batalkan diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b9b8954b..29c2c246 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,21 +1,29 @@ + + パスワードマネージャー + v0.1.0-Alpha + - 開発者:Dobariya Jeel - UI/UX デザイン:Hamada Issas (Native) - コードメンテナー兼テスター:Achmad Daniel (Kudanill) + 開発者: Dobariya Jeel + UI/UXデザイン: Hamada Issas(Native) + コード管理・テスト: Achmad Daniel(Kudanill) 終了 - パスワードを覚える手間を省くオープンソースのパスワード管理ソリューションです!! - このアプリは現在開発中で、娯楽および教育目的で作成されています。認証情報を保存するのは安全ではない場合があります。詳細については、セキュリティガイドラインをご覧ください!!! + オープンソースのパスワード管理アプリで、パスワードを覚える手間を軽減します。 + このアプリは現在開発中であり、学習や実験目的で提供されています。機密情報の保存には適していません。詳細はセキュリティガイドラインをご覧ください。 ドメイン + 関連するウェブサイトやドメイン名 ユーザー名 パスワード メモ + e.g. Google, Instagram, WhatsApp, etc. + e.g. Liam15, Noha, Olivia, Ava_25, etc. + e.g. 12345, abc123xyz, qwerty, etc. パスワードマネージャー パスワードを保存 パスワードを読み込む @@ -24,10 +32,10 @@ パスワードをインポート パスワードをエクスポート セキュリティチェック - について + 私たちについて ライセンスを表示 - セキュリティガイドラインを表示 - 変更履歴を表示 + セキュリティガイドラインを見る + 変更履歴を見る パスワードマネージャー @@ -35,7 +43,7 @@ パスワードを保存 パスワードを表示 パスワードを更新 - について + 私たちについて ID: @@ -43,21 +51,29 @@ ユーザー名: パスワード: メモ: - 作成日時: - 更新日時: + 作成日: + 更新日: - 権限が付与されました - 権限が拒否されました + 許可されました + 許可されませんでした - 機能は開発中です!! - 404: 見つかりません!! - 警告:まずフォームに入力してください!! - 失敗しました:もう一度お試しください!! - 成功: - 正常に更新されました!! - 正常に削除されました!! - 何かがうまくいきませんでした!! + この機能は現在開発中です。 + 404: 見つかりません。 + 警告: まずフォームに入力してください。 + 失敗しました: もう一度お試しください。 + 成功: + 正常に更新されました。 + 正常に削除されました。 + 問題が発生しました。 + 操作がキャンセルされました。 + + + パスワードを更新しますか? + パスワードを削除しますか? + この操作は取り消せません。 + 確認 + キャンセル diff --git a/app/src/main/res/values-ko/string.xml b/app/src/main/res/values-ko/string.xml index 0ac18fc0..c3d22327 100644 --- a/app/src/main/res/values-ko/string.xml +++ b/app/src/main/res/values-ko/string.xml @@ -1,22 +1,24 @@ - - - 개발: Dobariya Jeel - UI/UX 디자인: Hamada Issas (Native) - 코드 관리 및 테스터: Achmad Daniel (Kudanill) + 비밀번호 관리자 + v0.1.0-알파 + + 개발자: Dobariya Jeel + UI/UX 디자이너: Hamada Issas (Native) + 코드 관리자 및 테스터: Achmad Daniel (Kudanill) - 종료 - - 비밀번호를 기억하는 골칫거리를 해결해 줄 오픈 소스 비밀번호 관리 솔루션입니다!! - 앱은 현재 활발히 개발 중이며 재미와 교육 목적으로 만들어졌으므로 인증 정보를 저장하는 것이 안전하지 않을 수 있습니다. 자세한 내용은 보안 가이드라인을 참조하십시오!!! + 비밀번호 기억의 번거로움을 덜어주는 오픈 소스 비밀번호 관리 솔루션입니다. + 이 앱은 현재 활발히 개발 중이며 학습 및 실험용으로 만들어졌습니다. 민감한 정보를 저장하기에는 안전하지 않을 수 있습니다. - 도메인 + 관련된 웹사이트 또는 도메인의 이름 사용자 이름 비밀번호 메모 + e.g. Google, Instagram, WhatsApp 등 + e.g. Liam15, Noha, Olivia, Ava_25 등 + e.g. 12345, abc123xyz, qwerty 등 비밀번호 관리자 비밀번호 저장 비밀번호 불러오기 @@ -25,20 +27,18 @@ 비밀번호 가져오기 비밀번호 내보내기 보안 확인 - 정보 + 회사 소개 라이선스 보기 - 보안 가이드라인 보기 + 보안 지침 보기 변경 로그 보기 - 비밀번호 관리자 비밀번호 불러오기 비밀번호 저장 비밀번호 보기 비밀번호 업데이트 - 정보 + 회사 소개 - ID: 도메인: 사용자 이름: @@ -47,17 +47,22 @@ 생성일: 업데이트일: - - 권한 부여됨 + 권한 허용됨 권한 거부됨 - - 기능 개발 중!! - 404: 찾을 수 없음!! - 경고: 먼저 양식을 작성하십시오!! - 실패: 다시 시도하십시오!! + 이 기능은 현재 개발 중입니다. + 404: 찾을 수 없습니다. + 경고: 먼저 양식을 작성해 주세요. + 실패: 다시 시도해 주세요. 성공: - 성공적으로 업데이트됨!! - 성공적으로 삭제됨!! - 문제가 발생했습니다!! + 성공적으로 업데이트되었습니다. + 성공적으로 삭제되었습니다. + 문제가 발생했습니다. + 작업이 취소되었습니다. + + 비밀번호를 업데이트하시겠습니까? + 비밀번호를 삭제하시겠습니까? + 이 작업은 되돌릴 수 없습니다. + 확인 + 취소 diff --git a/app/src/main/res/values-vi/string.xml b/app/src/main/res/values-vi/string.xml new file mode 100644 index 00000000..52615e30 --- /dev/null +++ b/app/src/main/res/values-vi/string.xml @@ -0,0 +1,68 @@ + + Trình Quản Lý Mật Khẩu + v0.1.0-Alpha + + Phát triển bởi: Dobariya Jeel + Thiết kế UI/UX: Hamada Issas (Native) + Bảo trì và kiểm thử mã: Achmad Daniel (Kudanill) + + Thoát + + Giải pháp mã nguồn mở để quản lý mật khẩu mà bạn không cần phải ghi nhớ. + Ứng dụng đang được phát triển tích cực, dành cho mục đích học tập và thử nghiệm. Không nên dùng để lưu trữ dữ liệu nhạy cảm. + + Tên miền + Tên của website hoặc tên miền liên quan + Tên người dùng + Mật khẩu + Ghi chú + vd. Google, Instagram, WhatsApp + vd. Liam15, Noha, Olivia, Ava_25 + vd. 12345, abc123xyz, qwerty + Trình Quản Lý Mật Khẩu + Lưu Mật Khẩu + Tải Mật Khẩu + Cập Nhật Mật Khẩu + Xoá Mật Khẩu + Nhập Mật Khẩu + Xuất Mật Khẩu + Kiểm Tra Bảo Mật + Về Chúng Tôi + Xem Giấy Phép + Xem Hướng Dẫn Bảo Mật + Xem Nhật Ký Thay Đổi + + Trình Quản Lý Mật Khẩu + Tải Mật Khẩu + Lưu Mật Khẩu + Xem Mật Khẩu + Cập Nhật Mật Khẩu + Về Chúng Tôi + + ID: + Tên miền: + Tên người dùng: + Mật khẩu: + Ghi chú: + Tạo lúc: + Cập nhật lúc: + + Đã cấp quyền + Từ chối quyền + + Tính năng này đang được phát triển. + 404: Không tìm thấy + Cảnh báo: Vui lòng điền vào biểu mẫu trước. + Thất bại: Vui lòng thử lại. + Thành công: + Cập nhật thành công. + Xoá thành công. + Đã xảy ra lỗi. + Hành động đã bị hủy. + + Cập nhật mật khẩu? + Xoá mật khẩu? + Hành động này không thể hoàn tác. + Xác nhận + Huỷ + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml new file mode 100644 index 00000000..f4777a51 --- /dev/null +++ b/app/src/main/res/values-zh/strings.xml @@ -0,0 +1,79 @@ + + + 密码管理器 + v0.1.0-Alpha + + + 开发者:Dobariya Jeel + UI/UX 设计:Hamada Issas(Native) + 代码维护与测试:Achmad Daniel(Kudanill) + + + 退出 + + + 一个开源的密码管理器,帮助你轻松应对记住密码的烦恼。 + 本应用仍在积极开发中,仅供学习与实验用途。它可能不适合用于存储敏感的认证信息。详情请查看安全指南。 + + + 网站 + 与密码关联的网站或域名 + 用户名 + 密码 + 备注 + e.g. Google, Instagram, WhatsApp, etc. + e.g. Liam15, Noha, Olivia, Ava_25, etc. + e.g. 12345, abc123xyz, qwerty, etc. + 密码管理器 + 保存密码 + 读取密码 + 更新密码 + 删除密码 + 导入密码 + 导出密码 + 安全检测 + 关于我们 + 查看许可证 + 查看安全指南 + 查看更新日志 + + + 密码管理器 + 读取密码 + 保存密码 + 查看密码 + 更新密码 + 关于我们 + + + 编号: + 网站: + 用户名: + 密码: + 备注: + 创建时间: + 更新时间: + + + 权限已授予 + 权限被拒绝 + + + 此功能正在开发中。 + 404:未找到。 + 警告:请先填写表单。 + 失败:请重试。 + 成功: + 更新成功。 + 删除成功。 + 发生了错误。 + 操作已取消。 + + + 确认更新密码? + 确认删除密码? + 此操作无法撤销。 + 确认 + 取消 + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b54c65c6..ebef6e62 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,25 +5,25 @@ Developed by: Dobariya Jeel - UI/UX Designed by: Hamada Issas (Native) - Code Maintainer and Tester: Achmad Daniel (Kudanill) + UI/UX Design by: Hamada Issas (Native) + Code Maintenance & Testing: Achmad Daniel (Kudanill) Quit - An open source password managing solution that take down you headace of remembering password!! - App is currently under active development and it is made for fun and educational purpose and it might not be safe to save your auth info with it. For more info, view security guidelines!!! + An open-source password manager that helps eliminate the headache of remembering your passwords. + This app is currently under active development and is intended for educational and experimental purposes. It may not be secure for storing sensitive authentication information. Please review the security guidelines for more details. Domain - name of website or domain associated + The name of the website or domain associated Username Password Notes - e.g. Google, Instagram, Whatapp etc.. - e.g. Liam15, Noha, Olivia, Ava_25 etc... - e.g. 12345, abc123xyz, qwerty etc... + e.g. Google, Instagram, WhatsApp, etc. + e.g. Liam15, Noha, Olivia, Ava_25, etc. + e.g. 12345, abc123xyz, qwerty, etc. Password Manager Save Password Load Password @@ -46,33 +46,34 @@ About Us - Id: + ID: Domain: Username: Password: Notes: - CreatedAt: - UpdatedAt: + Created At: + Updated At: - Permission Granted - Permission Denied + Permission granted + Permission denied - Feature is under development!! - 404: Not Found!! - Warning: please fill the form first!! - Failed: please try again!! - Success: - Updated Successfully!! - Deleted Successfully!! - Something Went Wrong!! - Action Discard! + This feature is currently under development. + 404: Not found. + Warning: Please fill out the form first. + Failed: Please try again. + Success: + Updated successfully. + Deleted successfully. + Something went wrong. + Action discarded. - Update Password? - Delete Password? - This action is irreversible + Update password? + Delete password? + This action cannot be undone. Confirm Discard + From f31a105236a8df5a1a338d7fcf2d364db4359d11 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 14:45:56 +0530 Subject: [PATCH 11/28] docs: Update changelog.md --- changelog.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index c7c890e8..7b9f88bf 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## Added + +- **Localized App**: add language support for English, Chinese, Hindi, Indonesian, Japanese, Korean, German, Spanish, Vietnamese. Contributed by [@JeelDobariya]. +- **Improved UI/UX**: add confirmation dialogs, support for light & dark theme with additional minor changes. Contributed by [@JeelDobariya]. + ## v0.1.0-Alpha ### Added @@ -17,4 +22,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Notes - This is the initial alpha release, focused on setting up the basic structure and key visual elements of the app. - From 8be018356124ad41cc9a0d2ba03b69ccf174872c Mon Sep 17 00:00:00 2001 From: Jeel Dobariya <136002730+JeelDobariya38@users.noreply.github.com> Date: Wed, 30 Jul 2025 22:27:52 +0530 Subject: [PATCH 12/28] docs: Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 34a330ab..418f1bdb 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ A android app that take down the headace of remember passwords. It is open sourc > [!WARNING] > It is just a open source project. An is under active development please, consider using it for fun and not for real password managment. (untill, we offically release a stable release) +> What we think of passcodes? +> Password management is one such thing that is as simple as remember a password yet, it very important topic in term of security. So, we as developer of passcode think to streamline and securing the process as much as possible. [Read more](docs/project-overview.md) + ## Features - [X] Intuitive UI. From d91d443b58e83f154fd0de7efa7e2b4dc814f39d Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Thu, 31 Jul 2025 15:38:06 +0530 Subject: [PATCH 13/28] fix: missing language bug --- app/src/main/res/xml/locales_config.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml index 2f995f10..a7f2430b 100644 --- a/app/src/main/res/xml/locales_config.xml +++ b/app/src/main/res/xml/locales_config.xml @@ -5,4 +5,8 @@ + + + + From fb08508ce1464d92afcd722ccc99579354c40ffd Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Fri, 1 Aug 2025 18:12:03 +0530 Subject: [PATCH 14/28] fix: resource not found error after merge from main --- .../com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt | 2 +- .../com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt | 2 +- .../com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt index 109a42d0..3df2311d 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt @@ -47,7 +47,7 @@ class SavePasswordActivity : AppCompatActivity() { val rowId = controller.savePasswordEntity(domain, username, password, notes) // Switch back to Main dispatcher for UI updates withContext(Dispatchers.Main) { - Toast.makeText(this@SavePasswordActivity, "${getString(R.string.sucess_clause)} $rowId", Toast.LENGTH_SHORT).show() + Toast.makeText(this@SavePasswordActivity, "${getString(R.string.success_clause)} $rowId", Toast.LENGTH_SHORT).show() finish() } } catch (e: InvalidInputException) { diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt index aff95953..527aca51 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt @@ -98,7 +98,7 @@ class UpdatePasswordActivity : AppCompatActivity() { val rowsAffected = controller.updatePassword(passwordEntityId, newDomain, newUsername, newPassword, newNotes) withContext(Dispatchers.Main) { if (rowsAffected > 0) { - Toast.makeText(this@UpdatePasswordActivity, getString(R.string.update_sucess_msg), Toast.LENGTH_SHORT).show() + Toast.makeText(this@UpdatePasswordActivity, getString(R.string.update_success_msg), Toast.LENGTH_SHORT).show() finish() } else { Toast.makeText(this@UpdatePasswordActivity, getString(R.string.something_went_wrong_msg) + ": No changes applied or password not found.", Toast.LENGTH_SHORT).show() diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt index 2801cfaa..1ff828fb 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt @@ -96,7 +96,7 @@ class ViewPasswordActivity : AppCompatActivity() { val rowsDeleted = controller.deletePassword(passwordEntityId) withContext(Dispatchers.Main) { if (rowsDeleted > 0) { - Toast.makeText(this@ViewPasswordActivity, getString(R.string.delete_sucess_msg), Toast.LENGTH_SHORT).show() + Toast.makeText(this@ViewPasswordActivity, getString(R.string.delete_success_msg), Toast.LENGTH_SHORT).show() finish() } else { Toast.makeText(this@ViewPasswordActivity, getString(R.string.something_went_wrong_msg) + ": Password not found for deletion or no rows affected.", Toast.LENGTH_SHORT).show() From 05f0f354f741d507f8c5cdb8d3ef102ce821485f Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sat, 2 Aug 2025 16:25:44 +0530 Subject: [PATCH 15/28] refactor: merge both branch and apply migration --- .../ui/SavePasswordActivity.java | 73 ------------- .../ui/UpdatePasswordActivity.java | 90 ---------------- .../ui/ViewPasswordActivity.java | 102 ------------------ .../passcodes/ui/SavePasswordActivity.kt | 76 +++++++++---- .../passcodes/ui/UpdatePasswordActivity.kt | 76 +++++++------ .../passcodes/ui/ViewPasswordActivity.kt | 58 ++++++---- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-night/theme.xml | 2 +- 8 files changed, 138 insertions(+), 341 deletions(-) delete mode 100644 app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java delete mode 100644 app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java delete mode 100644 app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java diff --git a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java deleted file mode 100644 index 42f07509..00000000 --- a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.passwordmanager.ui; - -import android.os.Bundle; -import android.widget.Toast; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; - -import com.passwordmanager.R; -import com.passwordmanager.utils.Controller; -import com.passwordmanager.databinding.ActivitySavePasswordBinding; - -public class SavePasswordActivity extends AppCompatActivity { - private Controller controller; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActivitySavePasswordBinding binding = ActivitySavePasswordBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - // Add event onclick listener - addOnClickListenerOnButton(binding); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - // Added all the onclick event listiners - private void addOnClickListenerOnButton(ActivitySavePasswordBinding binding) { - binding.inputDomain.setOnFocusChangeListener((v, hasFocus) -> { - if (hasFocus) { - binding.inputDomain.setHint(R.string.placeholder_domain_field); - } else { - binding.inputDomain.setHint(""); - } - }); - - binding.inputUsername.setOnFocusChangeListener((v, hasFocus) -> { - if (hasFocus) { - binding.inputUsername.setHint(R.string.placeholder_username_field); - } else { - binding.inputUsername.setHint(""); - } - }); - - binding.inputPassword.setOnFocusChangeListener((v, hasFocus) -> { - if (hasFocus) { - binding.inputPassword.setHint(R.string.placeholder_password_field); - } else { - binding.inputPassword.setHint(""); - } - }); - - binding.savePasswordBtn.setOnClickListener(v -> { - String domain = binding.inputDomain.getText().toString(); - String username = binding.inputUsername.getText().toString(); - String password = binding.inputPassword.getText().toString(); - String notes = binding.inputNotes.getText().toString(); - - controller = new Controller(SavePasswordActivity.this); - int res = controller.savePasswordEntity(domain, username, password, notes); - - if (res == -2) { - Toast.makeText(SavePasswordActivity.this, getString(R.string.warn_fill_form), Toast.LENGTH_SHORT).show(); - } - else if (res == -1) { - Toast.makeText(SavePasswordActivity.this, getString(R.string.fail_msg), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(SavePasswordActivity.this, getString(R.string.success_clause) + res, Toast.LENGTH_SHORT).show(); - } - }); - } -} diff --git a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java deleted file mode 100644 index 4e973b06..00000000 --- a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.passwordmanager.ui; - -import android.os.Bundle; -import android.content.Intent; -import android.widget.Toast; -import android.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; -import android.view.LayoutInflater; - -import com.passwordmanager.R; -import com.passwordmanager.utils.Controller; -import com.passwordmanager.models.PasswordModel; -import com.passwordmanager.databinding.ActivityUpdatePasswordBinding; - -/* - Activity expects id as intent parameters. -*/ - -public class UpdatePasswordActivity extends AppCompatActivity { - private int passwordEnitityId = 0; - private Controller controller; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActivityUpdatePasswordBinding binding = ActivityUpdatePasswordBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - Intent intent = getIntent(); - passwordEnitityId = intent.getIntExtra("id", -1); // -1 is a invalid id. - - if (passwordEnitityId == -1) { //invalid enitity - finish(); - } - - controller = new Controller(UpdatePasswordActivity.this); - PasswordModel passwordmodel = controller.getPasswordById(passwordEnitityId); - - // Put value in text view & edit texts - binding.tvId.setText(getString(R.string.id_prefix) + " " + passwordEnitityId); - binding.inputDomain.setText(passwordmodel.getDomain()); - binding.inputUsername.setText(passwordmodel.getUsername()); - binding.inputPassword.setText(passwordmodel.getPassword()); - binding.inputNotes.setText(passwordmodel.getNotes()); - - // Add event onclick listener - addOnClickListenerOnButton(binding); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - // Added all the onclick event listiners - private void addOnClickListenerOnButton(ActivityUpdatePasswordBinding binding) { - binding.updatePasswordBtn.setOnClickListener(v -> { - AlertDialog confirmDialog =new AlertDialog.Builder(UpdatePasswordActivity.this) - .setTitle(R.string.update_password_dialog_title) - .setMessage(R.string.irreversible_dialog_desc) - .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { - String newDomain = binding.inputDomain.getText().toString(); - String newUsername = binding.inputUsername.getText().toString(); - String newPassword = binding.inputPassword.getText().toString(); - String newNotes = binding.inputNotes.getText().toString(); - - performUpdatePasswordAction(newDomain, newUsername, newPassword, newNotes); - }) - .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { - Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); - }) - .create(); - - confirmDialog.show(); - }); - } - - private void performUpdatePasswordAction(String newDomain, String newUsername, String newPassword, String newNotes) { - int res = controller.updatePassword(passwordEnitityId, newDomain, newUsername, newPassword, newNotes); - - if (res == 1) { - Toast.makeText(this, getString(R.string.update_success_msg), Toast.LENGTH_SHORT).show(); - - finish(); - } else { - Toast.makeText(this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); - } - - finish(); - } -} diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java deleted file mode 100644 index 9af98562..00000000 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.passwordmanager.ui; - -import android.os.Bundle; -import android.content.Intent; -import android.widget.Toast; -import android.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; -import android.view.LayoutInflater; - -import com.passwordmanager.R; -import com.passwordmanager.utils.Controller; -import com.passwordmanager.models.PasswordModel; -import com.passwordmanager.databinding.ActivityViewPasswordBinding; - -/* - Activity expects id, domain, username, password, notes, createdat, updatedat as intent parameters. -*/ - -public class ViewPasswordActivity extends AppCompatActivity { - private int passwordEnitityId = 0; - private ActivityViewPasswordBinding binding; - private Controller controller; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - binding = ActivityViewPasswordBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - Intent intent = getIntent(); - passwordEnitityId = intent.getIntExtra("id", 1); // -1 is a invalid id. - - if (passwordEnitityId == -1) { //invalid enitity - finish(); - } - - controller = new Controller(ViewPasswordActivity.this); - - // Filling the textviews with data - // fillDataInTextview(); - - // Add event onclick listener - addOnClickListenerOnButton(); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - private void fillDataInTextview() { - PasswordModel passwordmodel = controller.getPasswordById(passwordEnitityId); - - binding.tvDomain.setText(getString(R.string.domain_prefix) + " " + passwordmodel.getDomain()); - binding.tvUsername.setText(getString(R.string.username_prefix) + " " + passwordmodel.getUsername()); - binding.tvPassword.setText(getString(R.string.password_prefix) + " " + passwordmodel.getPassword()); - binding.tvNotes.setText(getString(R.string.notes_prefix) + " " + passwordmodel.getNotes()); - binding.tvCreatedAt.setText(getString(R.string.createdat_prefix) + " " + passwordmodel.getCreatedAt()); - binding.tvUpdatedAt.setText(getString(R.string.updatedat_prefix) + " " + passwordmodel.getUpdatedAt()); - } - - // Added all the onclick event listiners - private void addOnClickListenerOnButton() { - binding.updatePasswordBtn.setOnClickListener(v -> { - Intent viewpasswordintent = new Intent(ViewPasswordActivity.this, UpdatePasswordActivity.class); - viewpasswordintent.putExtra("id", passwordEnitityId); - startActivity(viewpasswordintent); - }); - - binding.deletePasswordBtn.setOnClickListener(v -> { - AlertDialog confirmDialog =new AlertDialog.Builder(ViewPasswordActivity.this) - .setTitle(R.string.delete_password_dialog_title) - .setMessage(R.string.irreversible_dialog_desc) - .setPositiveButton(R.string.confirm_dialog_button_text, (dialog, which) -> { - performDeletePasswordAction(); - }) - .setNegativeButton(R.string.discard_dialog_button_text, (dialog, which) -> { - Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); - }) - .create(); - - confirmDialog.show(); - }); - } - - private void performDeletePasswordAction() { - int res = controller.deletePassword(passwordEnitityId); - - if (res == 1) { - Toast.makeText(this, getString(R.string.delete_success_msg), Toast.LENGTH_SHORT).show(); - - finish(); - } else { - Toast.makeText(this, getString(R.string.something_went_wrong_msg), Toast.LENGTH_SHORT).show(); - } - } - - @Override - protected void onResume() { - super.onResume(); - fillDataInTextview(); - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt index 3df2311d..f2d2fe74 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt @@ -1,5 +1,6 @@ package com.jeeldobariya.passcodes.ui +import android.util.Log import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -23,6 +24,7 @@ class SavePasswordActivity : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivitySavePasswordBinding.inflate(layoutInflater) setContentView(binding.root) + Log.i("Passcodes", "Save Password") controller = Controller(this) // Initialize controller @@ -35,35 +37,63 @@ class SavePasswordActivity : AppCompatActivity() { // Added all the onclick event listeners private fun addOnClickListenerOnButton() { + binding.inputDomain.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + binding.inputDomain.setHint(getString(R.string.placeholder_domain_field)); + } else { + binding.inputDomain.setHint(""); + } + }; + + binding.inputUsername.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + binding.inputUsername.setHint(getString(R.string.placeholder_username_field)); + } else { + binding.inputUsername.setHint(""); + } + }; + + binding.inputPassword.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + binding.inputPassword.setHint(getString(R.string.placeholder_password_field)); + } else { + binding.inputPassword.setHint(""); + } + }; + binding.savePasswordBtn.setOnClickListener { val domain = binding.inputDomain.text.toString() val username = binding.inputUsername.text.toString() val password = binding.inputPassword.text.toString() val notes = binding.inputNotes.text.toString() - // Launch a coroutine to call the suspend function - lifecycleScope.launch { - try { - val rowId = controller.savePasswordEntity(domain, username, password, notes) - // Switch back to Main dispatcher for UI updates - withContext(Dispatchers.Main) { - Toast.makeText(this@SavePasswordActivity, "${getString(R.string.success_clause)} $rowId", Toast.LENGTH_SHORT).show() - finish() - } - } catch (e: InvalidInputException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@SavePasswordActivity, getString(R.string.warn_fill_form), Toast.LENGTH_SHORT).show() - } - } catch (e: DatabaseOperationException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@SavePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() - } - } catch (e: Exception) { - withContext(Dispatchers.Main) { - Toast.makeText(this@SavePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() - } + performSavePasswordAction(domain, username, password, notes) + } + } + + fun performSavePasswordAction(domain: String, username: String, password: String, notes: String) { + // Launch a coroutine to call the suspend function + lifecycleScope.launch { + try { + val rowId = controller.savePasswordEntity(domain, username, password, notes) + // Switch back to Main dispatcher for UI updates + withContext(Dispatchers.Main) { + Toast.makeText(this@SavePasswordActivity, "${getString(R.string.success_clause)} $rowId", Toast.LENGTH_SHORT).show() + finish() + } + } catch (e: InvalidInputException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@SavePasswordActivity, getString(R.string.warn_fill_form), Toast.LENGTH_SHORT).show() + } + } catch (e: DatabaseOperationException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@SavePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(this@SavePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() } } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt index 527aca51..84cd51b9 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt @@ -3,6 +3,7 @@ package com.jeeldobariya.passcodes.ui import android.content.Intent import android.os.Bundle import android.widget.Toast +import android.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope @@ -93,38 +94,53 @@ class UpdatePasswordActivity : AppCompatActivity() { val newPassword = binding.inputPassword.text.toString() val newNotes = binding.inputNotes.text.toString() - lifecycleScope.launch { - try { - val rowsAffected = controller.updatePassword(passwordEntityId, newDomain, newUsername, newPassword, newNotes) - withContext(Dispatchers.Main) { - if (rowsAffected > 0) { - Toast.makeText(this@UpdatePasswordActivity, getString(R.string.update_success_msg), Toast.LENGTH_SHORT).show() - finish() - } else { - Toast.makeText(this@UpdatePasswordActivity, getString(R.string.something_went_wrong_msg) + ": No changes applied or password not found.", Toast.LENGTH_SHORT).show() - finish() - } - } - } catch (e: InvalidInputException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@UpdatePasswordActivity, getString(R.string.warn_fill_form), Toast.LENGTH_SHORT).show() - } - } catch (e: PasswordNotFoundException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@UpdatePasswordActivity, e.message, Toast.LENGTH_LONG).show() - e.printStackTrace() + val confirmDialog = AlertDialog.Builder(this@UpdatePasswordActivity) + .setTitle(R.string.update_password_dialog_title) + .setMessage(R.string.irreversible_dialog_desc) + .setPositiveButton(R.string.confirm_dialog_button_text) { dialog, which -> + performUpdatePasswordAction(newDomain, newUsername, newPassword, newNotes); + } + .setNegativeButton(R.string.discard_dialog_button_text) { dialog, which -> + Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); + } + .create(); + + confirmDialog.show(); + } + } + + fun performUpdatePasswordAction(newDomain: String, newUsername: String, newPassword: String, newNotes: String) { + lifecycleScope.launch { + try { + val rowsAffected = controller.updatePassword(passwordEntityId, newDomain, newUsername, newPassword, newNotes) + withContext(Dispatchers.Main) { + if (rowsAffected > 0) { + Toast.makeText(this@UpdatePasswordActivity, getString(R.string.update_success_msg), Toast.LENGTH_SHORT).show() + finish() + } else { + Toast.makeText(this@UpdatePasswordActivity, getString(R.string.something_went_wrong_msg) + ": No changes applied or password not found.", Toast.LENGTH_SHORT).show() finish() } - } catch (e: DatabaseOperationException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@UpdatePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() - } - } catch (e: Exception) { - withContext(Dispatchers.Main) { - Toast.makeText(this@UpdatePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() - } + } + } catch (e: InvalidInputException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@UpdatePasswordActivity, getString(R.string.warn_fill_form), Toast.LENGTH_SHORT).show() + } + } catch (e: PasswordNotFoundException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@UpdatePasswordActivity, e.message, Toast.LENGTH_LONG).show() + e.printStackTrace() + finish() + } + } catch (e: DatabaseOperationException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@UpdatePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(this@UpdatePasswordActivity, "${getString(R.string.fail_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() } } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt index 1ff828fb..4321d9b3 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt @@ -3,6 +3,7 @@ package com.jeeldobariya.passcodes.ui import android.content.Intent import android.os.Bundle import android.widget.Toast +import android.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope @@ -91,29 +92,44 @@ class ViewPasswordActivity : AppCompatActivity() { } binding.deletePasswordBtn.setOnClickListener { - lifecycleScope.launch { - try { - val rowsDeleted = controller.deletePassword(passwordEntityId) - withContext(Dispatchers.Main) { - if (rowsDeleted > 0) { - Toast.makeText(this@ViewPasswordActivity, getString(R.string.delete_success_msg), Toast.LENGTH_SHORT).show() - finish() - } else { - Toast.makeText(this@ViewPasswordActivity, getString(R.string.something_went_wrong_msg) + ": Password not found for deletion or no rows affected.", Toast.LENGTH_SHORT).show() - finish() - } - } - } catch (e: DatabaseOperationException) { - withContext(Dispatchers.Main) { - Toast.makeText(this@ViewPasswordActivity, "${getString(R.string.something_went_wrong_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() - } - } catch (e: Exception) { - withContext(Dispatchers.Main) { - Toast.makeText(this@ViewPasswordActivity, "${getString(R.string.something_went_wrong_msg)}: ${e.message}", Toast.LENGTH_LONG).show() - e.printStackTrace() + val confirmDialog = AlertDialog.Builder(this@ViewPasswordActivity) + .setTitle(R.string.delete_password_dialog_title) + .setMessage(R.string.irreversible_dialog_desc) + .setPositiveButton(R.string.confirm_dialog_button_text) { dialog, which -> + performDeletePasswordAction(); + } + .setNegativeButton(R.string.discard_dialog_button_text) { dialog, which -> + Toast.makeText(this, getString(R.string.action_discard), Toast.LENGTH_SHORT).show(); + } + .create(); + + confirmDialog.show(); + } + } + + fun performDeletePasswordAction() { + lifecycleScope.launch { + try { + val rowsDeleted = controller.deletePassword(passwordEntityId) + withContext(Dispatchers.Main) { + if (rowsDeleted > 0) { + Toast.makeText(this@ViewPasswordActivity, getString(R.string.delete_success_msg), Toast.LENGTH_SHORT).show() + finish() + } else { + Toast.makeText(this@ViewPasswordActivity, getString(R.string.something_went_wrong_msg) + ": Password not found for deletion or no rows affected.", Toast.LENGTH_SHORT).show() + finish() } } + } catch (e: DatabaseOperationException) { + withContext(Dispatchers.Main) { + Toast.makeText(this@ViewPasswordActivity, "${getString(R.string.something_went_wrong_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(this@ViewPasswordActivity, "${getString(R.string.something_went_wrong_msg)}: ${e.message}", Toast.LENGTH_LONG).show() + e.printStackTrace() + } } } } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4df02fd4..c4116ed5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -54,7 +54,7 @@ 404: Nicht gefunden Warnung: Bitte füllen Sie zuerst das Formular aus. Fehler: Bitte versuchen Sie es erneut. - Erfolg: + Erfolg: Erfolgreich aktualisiert. Erfolgreich gelöscht. Etwas ist schiefgelaufen. diff --git a/app/src/main/res/values-night/theme.xml b/app/src/main/res/values-night/theme.xml index 29e0422e..fb3855cc 100644 --- a/app/src/main/res/values-night/theme.xml +++ b/app/src/main/res/values-night/theme.xml @@ -1,6 +1,6 @@ - + + + + + + + + + + + + + + + + + + +