From 7f0bf8e022a1abf48d51078d79771f0b88ea6d4a Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 18:44:22 +0530 Subject: [PATCH 1/8] feat: migrate from com.passwordmanager to com.jeeldobariya.passcodes --- app/build.gradle | 4 ++-- .../passcodes}/database/MyDatabaseHelper.java | 2 +- .../passcodes}/models/PasswordModel.java | 2 +- .../passcodes}/ui/AboutUsActivity.java | 8 ++++---- .../passcodes}/ui/LoadPasswordActivity.java | 12 ++++++------ .../passcodes}/ui/MainActivity.java | 8 ++++---- .../passcodes}/ui/PasswordManagerActivity.java | 10 +++++----- .../passcodes}/ui/SavePasswordActivity.java | 8 ++++---- .../passcodes}/ui/UpdatePasswordActivity.java | 10 +++++----- .../passcodes}/ui/ViewPasswordActivity.java | 10 +++++----- .../passcodes}/ui/adapter/PasswordAdapter.java | 6 +++--- .../passcodes}/utils/Constant.java | 2 +- .../passcodes}/utils/Controller.java | 6 +++--- .../passcodes}/utils/ExampleTestableCode.java | 2 +- .../passcodes}/utils/Permissions.java | 2 +- .../passcodes}/utils/ExampleTestableCodeTest.java | 2 +- 16 files changed, 47 insertions(+), 47 deletions(-) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/database/MyDatabaseHelper.java (96%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/models/PasswordModel.java (98%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/AboutUsActivity.java (85%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/LoadPasswordActivity.java (83%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/MainActivity.java (92%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/PasswordManagerActivity.java (95%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/SavePasswordActivity.java (89%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/UpdatePasswordActivity.java (90%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/ViewPasswordActivity.java (91%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/ui/adapter/PasswordAdapter.java (89%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/utils/Constant.java (92%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/utils/Controller.java (97%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/utils/ExampleTestableCode.java (87%) rename app/src/main/java/com/{passwordmanager => jeeldobariya/passcodes}/utils/Permissions.java (97%) rename app/src/test/java/com/{passwordmanager => jeeldobariya/passcodes}/utils/ExampleTestableCodeTest.java (95%) diff --git a/app/build.gradle b/app/build.gradle index c6418701..0de49910 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,10 +4,10 @@ plugins { android { compileSdk 33 - namespace "com.passwordmanager" + namespace "com.jeeldobariya.passcodes" defaultConfig { - applicationId "com.passwordmanager" + applicationId "com.jeeldobariya.passcodes" minSdk 26 targetSdk 33 versionCode 1 diff --git a/app/src/main/java/com/passwordmanager/database/MyDatabaseHelper.java b/app/src/main/java/com/jeeldobariya/passcodes/database/MyDatabaseHelper.java similarity index 96% rename from app/src/main/java/com/passwordmanager/database/MyDatabaseHelper.java rename to app/src/main/java/com/jeeldobariya/passcodes/database/MyDatabaseHelper.java index 8d2f8022..754ba1c9 100644 --- a/app/src/main/java/com/passwordmanager/database/MyDatabaseHelper.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/database/MyDatabaseHelper.java @@ -1,4 +1,4 @@ -package com.passwordmanager.database; +package com.jeeldobariya.passcodes.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/passwordmanager/models/PasswordModel.java b/app/src/main/java/com/jeeldobariya/passcodes/models/PasswordModel.java similarity index 98% rename from app/src/main/java/com/passwordmanager/models/PasswordModel.java rename to app/src/main/java/com/jeeldobariya/passcodes/models/PasswordModel.java index e063c329..64400dc7 100644 --- a/app/src/main/java/com/passwordmanager/models/PasswordModel.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/models/PasswordModel.java @@ -1,4 +1,4 @@ -package com.passwordmanager.models; +package com.jeeldobariya.passcodes.models; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; diff --git a/app/src/main/java/com/passwordmanager/ui/AboutUsActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java similarity index 85% rename from app/src/main/java/com/passwordmanager/ui/AboutUsActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java index e15e2c5b..b79b2757 100644 --- a/app/src/main/java/com/passwordmanager/ui/AboutUsActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java @@ -1,13 +1,13 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.WindowCompat; -import com.passwordmanager.databinding.ActivityAboutUsBinding; -import com.passwordmanager.utils.Constant; -// import com.passwordmanager.utils.Permissions; +import com.jeeldobariya.passcodes.databinding.ActivityAboutUsBinding; +import com.jeeldobariya.passcodes.utils.Constant; +// import com.jeeldobariya.passcodes.utils.Permissions; public class AboutUsActivity extends AppCompatActivity { @Override diff --git a/app/src/main/java/com/passwordmanager/ui/LoadPasswordActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.java similarity index 83% rename from app/src/main/java/com/passwordmanager/ui/LoadPasswordActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.java index c7e72049..c918d6fe 100644 --- a/app/src/main/java/com/passwordmanager/ui/LoadPasswordActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.os.Bundle; import android.content.Intent; @@ -6,11 +6,11 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.WindowCompat; -import com.passwordmanager.R; -import com.passwordmanager.utils.Controller; -import com.passwordmanager.models.PasswordModel; -import com.passwordmanager.databinding.ActivityLoadPasswordBinding; -import com.passwordmanager.ui.adapter.PasswordAdapter; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.utils.Controller; +import com.jeeldobariya.passcodes.models.PasswordModel; +import com.jeeldobariya.passcodes.databinding.ActivityLoadPasswordBinding; +import com.jeeldobariya.passcodes.ui.adapter.PasswordAdapter; import java.util.List; diff --git a/app/src/main/java/com/passwordmanager/ui/MainActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java similarity index 92% rename from app/src/main/java/com/passwordmanager/ui/MainActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java index 4a7dbf47..93857d43 100644 --- a/app/src/main/java/com/passwordmanager/ui/MainActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.os.Bundle; import android.content.Intent; @@ -6,9 +6,9 @@ import androidx.core.view.WindowCompat; import android.view.LayoutInflater; -import com.passwordmanager.R; -import com.passwordmanager.databinding.ActivityMainBinding; -// import com.passwordmanager.utils.Permissions; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.databinding.ActivityMainBinding; +// import com.jeeldobariya.passcodes.utils.Permissions; public class MainActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/passwordmanager/ui/PasswordManagerActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.java similarity index 95% rename from app/src/main/java/com/passwordmanager/ui/PasswordManagerActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.java index cc761464..f9e2ef93 100644 --- a/app/src/main/java/com/passwordmanager/ui/PasswordManagerActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.net.Uri; import android.os.Bundle; @@ -14,10 +14,10 @@ import org.json.JSONException; import org.json.JSONObject; -import com.passwordmanager.R; -import com.passwordmanager.utils.Controller; -import com.passwordmanager.models.PasswordModel; -import com.passwordmanager.databinding.ActivityPasswordManagerBinding; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.utils.Controller; +import com.jeeldobariya.passcodes.models.PasswordModel; +import com.jeeldobariya.passcodes.databinding.ActivityPasswordManagerBinding; import java.util.List; import java.io.OutputStream; diff --git a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/SavePasswordActivity.java similarity index 89% rename from app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/SavePasswordActivity.java index 5a0283c3..ed1fc98c 100644 --- a/app/src/main/java/com/passwordmanager/ui/SavePasswordActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/SavePasswordActivity.java @@ -1,13 +1,13 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.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; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.utils.Controller; +import com.jeeldobariya.passcodes.databinding.ActivitySavePasswordBinding; public class SavePasswordActivity extends AppCompatActivity { private Controller controller; diff --git a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.java similarity index 90% rename from app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.java index b078dc41..0d4bbe47 100644 --- a/app/src/main/java/com/passwordmanager/ui/UpdatePasswordActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.os.Bundle; import android.content.Intent; @@ -7,10 +7,10 @@ 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; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.utils.Controller; +import com.jeeldobariya.passcodes.models.PasswordModel; +import com.jeeldobariya.passcodes.databinding.ActivityUpdatePasswordBinding; /* Activity expects id as intent parameters. diff --git a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.java similarity index 91% rename from app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.java index c732c7b8..bbcea5a6 100644 --- a/app/src/main/java/com/passwordmanager/ui/ViewPasswordActivity.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui; +package com.jeeldobariya.passcodes.ui; import android.os.Bundle; import android.content.Intent; @@ -7,10 +7,10 @@ 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; +import com.jeeldobariya.passcodes.R; +import com.jeeldobariya.passcodes.utils.Controller; +import com.jeeldobariya.passcodes.models.PasswordModel; +import com.jeeldobariya.passcodes.databinding.ActivityViewPasswordBinding; /* Activity expects id, domain, username, password, notes, createdat, updatedat as intent parameters. diff --git a/app/src/main/java/com/passwordmanager/ui/adapter/PasswordAdapter.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/adapter/PasswordAdapter.java similarity index 89% rename from app/src/main/java/com/passwordmanager/ui/adapter/PasswordAdapter.java rename to app/src/main/java/com/jeeldobariya/passcodes/ui/adapter/PasswordAdapter.java index 16f9bcdc..a33d2c37 100644 --- a/app/src/main/java/com/passwordmanager/ui/adapter/PasswordAdapter.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/ui/adapter/PasswordAdapter.java @@ -1,4 +1,4 @@ -package com.passwordmanager.ui.adapter; +package com.jeeldobariya.passcodes.ui.adapter; import android.content.Context; import android.view.View; @@ -6,8 +6,8 @@ import android.view.LayoutInflater; import android.widget.BaseAdapter; -import com.passwordmanager.models.PasswordModel; -import com.passwordmanager.databinding.PasswordListItemBinding; +import com.jeeldobariya.passcodes.models.PasswordModel; +import com.jeeldobariya.passcodes.databinding.PasswordListItemBinding; import java.util.List; diff --git a/app/src/main/java/com/passwordmanager/utils/Constant.java b/app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java similarity index 92% rename from app/src/main/java/com/passwordmanager/utils/Constant.java rename to app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java index 52e0edda..31127ae5 100644 --- a/app/src/main/java/com/passwordmanager/utils/Constant.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java @@ -1,4 +1,4 @@ -package com.passwordmanager.utils; +package com.jeeldobariya.passcodes.utils; public class Constant { public static final String REPO_URL = "https://github.com/JeelDobariya38/password-manager"; diff --git a/app/src/main/java/com/passwordmanager/utils/Controller.java b/app/src/main/java/com/jeeldobariya/passcodes/utils/Controller.java similarity index 97% rename from app/src/main/java/com/passwordmanager/utils/Controller.java rename to app/src/main/java/com/jeeldobariya/passcodes/utils/Controller.java index 255be291..04e741b9 100644 --- a/app/src/main/java/com/passwordmanager/utils/Controller.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/utils/Controller.java @@ -1,4 +1,4 @@ -package com.passwordmanager.utils; +package com.jeeldobariya.passcodes.utils; import android.content.ContentValues; import android.content.Context; @@ -8,8 +8,8 @@ import java.util.List; import java.util.ArrayList; -import com.passwordmanager.database.MyDatabaseHelper; -import com.passwordmanager.models.PasswordModel; +import com.jeeldobariya.passcodes.database.MyDatabaseHelper; +import com.jeeldobariya.passcodes.models.PasswordModel; public class Controller { private MyDatabaseHelper dbHelper; diff --git a/app/src/main/java/com/passwordmanager/utils/ExampleTestableCode.java b/app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java similarity index 87% rename from app/src/main/java/com/passwordmanager/utils/ExampleTestableCode.java rename to app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java index 32c57ae4..a36a0f29 100644 --- a/app/src/main/java/com/passwordmanager/utils/ExampleTestableCode.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java @@ -1,4 +1,4 @@ -package com.passwordmanager.utils; +package com.jeeldobariya.passcodes.utils; class ExampleTestableCode { int checkStrength(String password) { diff --git a/app/src/main/java/com/passwordmanager/utils/Permissions.java b/app/src/main/java/com/jeeldobariya/passcodes/utils/Permissions.java similarity index 97% rename from app/src/main/java/com/passwordmanager/utils/Permissions.java rename to app/src/main/java/com/jeeldobariya/passcodes/utils/Permissions.java index 030c8001..254479ea 100644 --- a/app/src/main/java/com/passwordmanager/utils/Permissions.java +++ b/app/src/main/java/com/jeeldobariya/passcodes/utils/Permissions.java @@ -1,4 +1,4 @@ -package com.passwordmanager.utils; +package com.jeeldobariya.passcodes.utils; import android.Manifest; import android.app.Activity; diff --git a/app/src/test/java/com/passwordmanager/utils/ExampleTestableCodeTest.java b/app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java similarity index 95% rename from app/src/test/java/com/passwordmanager/utils/ExampleTestableCodeTest.java rename to app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java index f983607b..591ed19b 100644 --- a/app/src/test/java/com/passwordmanager/utils/ExampleTestableCodeTest.java +++ b/app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java @@ -1,4 +1,4 @@ -package com.passwordmanager.utils; +package com.jeeldobariya.passcodes.utils; import org.junit.Test; import org.junit.Before; From b87b70c93c19546f11d85b180da72f6aea55d4b1 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 19:23:19 +0530 Subject: [PATCH 2/8] chore(deps): add support for kotlin --- app/build.gradle | 12 ++++++++++++ build.gradle | 1 + 2 files changed, 13 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 0de49910..b629f236 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'org.jetbrains.kotlin.android' } android { @@ -88,17 +89,28 @@ android { } } + // You can update these to Java 11 or higher if your project allows, + // but 1.8 is fine for basic Kotlin interop. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + // Add kotlinOptions for JVM target if you have specific requirements, + // though often not strictly necessary for simple cases as it defaults + // to Java 8 compatible bytecode. + kotlinOptions { + jvmTarget = '1.8' // Ensure Kotlin compiles to Java 8 bytecode + } + viewBinding { enabled = true } } dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0" + implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.databinding:viewbinding:7.4.1' diff --git a/build.gradle b/build.gradle index 44057941..4fc87010 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,7 @@ buildscript { } dependencies { classpath "com.android.tools.build:gradle:7.3.1" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 7768adb939639f0fa8d7b16ddf49cd292581b8e7 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 19:24:00 +0530 Subject: [PATCH 3/8] refactor: migrate mainactivity from java to kotlin --- .../passcodes/ui/MainActivity.java | 69 ------------------- .../jeeldobariya/passcodes/ui/MainActivity.kt | 68 ++++++++++++++++++ 2 files changed, 68 insertions(+), 69 deletions(-) delete mode 100644 app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java create mode 100644 app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt diff --git a/app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java deleted file mode 100644 index 93857d43..00000000 --- a/app/src/main/java/com/jeeldobariya/passcodes/ui/MainActivity.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jeeldobariya.passcodes.ui; - -import android.os.Bundle; -import android.content.Intent; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; -import android.view.LayoutInflater; - -import com.jeeldobariya.passcodes.R; -import com.jeeldobariya.passcodes.databinding.ActivityMainBinding; -// import com.jeeldobariya.passcodes.utils.Permissions; - -public class MainActivity extends AppCompatActivity { - - // private Permissions permissionsHandle; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - // Add event onclick listener - addOnClickListenerOnButton(binding); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - - /* Comment the code as permission is not need to write into app data dir. - // Check and request permission when the app is first opened - permissionsHandle = new Permissions(this); - if (!permissionsHandle.checkPermission()) permissionsHandle.requestPermission(); - */ - } - - /* Comment the code as permission is not need to write into app data dir. - @Override - public void onRequestPermissionsResult( - int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == Permissions.PERMISSION_REQUEST_CODE) { - if (permissionsHandle.isPermissionGranted(grantResults)) { - // Permission has been granted - Toast.makeText(this, getString(R.string.permission_granted), Toast.LENGTH_LONG).show(); - } else { - // Permission not granted - Toast.makeText(this, getString(R.string.permission_denied), Toast.LENGTH_LONG).show(); - } - } - } - */ - - // Added all the onclick event listiners - private void addOnClickListenerOnButton(ActivityMainBinding binding) { - binding.passwordManagerBtn.setOnClickListener(v -> { - Intent passwordmanagerintent = new Intent(MainActivity.this, PasswordManagerActivity.class); - startActivity(passwordmanagerintent); - }); - - binding.aboutUsBtn.setOnClickListener(v -> { - Intent aboutusintent = new Intent(MainActivity.this, AboutUsActivity.class); - startActivity(aboutusintent); - }); - - binding.quitBtn.setOnClickListener(v -> { - finishAndRemoveTask(); - }); - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt new file mode 100644 index 00000000..42015cbf --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt @@ -0,0 +1,68 @@ +package com.jeeldobariya.passcodes.ui + +import android.os.Bundle +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.WindowCompat +import android.view.LayoutInflater + +import com.jeeldobariya.passcodes.R +import com.jeeldobariya.passcodes.databinding.ActivityMainBinding +// import com.jeeldobariya.passcodes.utils.Permissions + +class MainActivity : AppCompatActivity() { + + // private lateinit var permissionsHandle: Permissions + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + // Add event onclick listener + addOnClickListenerOnButton(binding) + + // Make window fullscreen + WindowCompat.setDecorFitsSystemWindows(window, false) + + /* Comment the code as permission is not need to write into app data dir. + // Check and request permission when the app is first opened + permissionsHandle = Permissions(this) + if (!permissionsHandle.checkPermission()) permissionsHandle.requestPermission() + */ + } + + /* Comment the code as permission is not need to write into app data dir. + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == Permissions.PERMISSION_REQUEST_CODE) { + if (permissionsHandle.isPermissionGranted(grantResults)) { + // Permission has been granted + Toast.makeText(this, getString(R.string.permission_granted), Toast.LENGTH_LONG).show() + } else { + // Permission not granted + Toast.makeText(this, getString(R.string.permission_denied), Toast.LENGTH_LONG).show() + } + } + } + */ + + // Added all the onclick event listeners + private fun addOnClickListenerOnButton(binding: ActivityMainBinding) { + binding.passwordManagerBtn.setOnClickListener { + val passwordManagerIntent = Intent(this, PasswordManagerActivity::class.java) + startActivity(passwordManagerIntent) + } + + binding.aboutUsBtn.setOnClickListener { + val aboutUsIntent = Intent(this, AboutUsActivity::class.java) + startActivity(aboutUsIntent) + } + + binding.quitBtn.setOnClickListener { + finishAndRemoveTask() + } + } +} From 5e8a737afa6ee82409c6cb2ee8fb07ae0dba8b42 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 20:46:21 +0530 Subject: [PATCH 4/8] refactor: migrate utils package except controller --- .../passcodes/utils/Constant.java | 8 ---- .../jeeldobariya/passcodes/utils/Constants.kt | 8 ++++ .../passcodes/utils/ExampleTestableCode.kt} | 6 +-- .../utils/ExampleTestableCodeTest.java | 41 ------------------- .../utils/ExampleTestableCodeTest.kt | 41 +++++++++++++++++++ 5 files changed, 52 insertions(+), 52 deletions(-) delete mode 100644 app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java create mode 100644 app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt rename app/src/main/{java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java => kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt} (63%) delete mode 100644 app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java create mode 100644 app/src/test/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.kt diff --git a/app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java b/app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java deleted file mode 100644 index 31127ae5..00000000 --- a/app/src/main/java/com/jeeldobariya/passcodes/utils/Constant.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.jeeldobariya.passcodes.utils; - -public class Constant { - public static final String REPO_URL = "https://github.com/JeelDobariya38/password-manager"; - public static final String LICENSE_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/LICENSE.txt"; - public static final String CHANGELOG_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/changelog.md"; - public static final String SECURITY_GUIDE_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/docs/security_guide.md"; -} \ No newline at end of file diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt new file mode 100644 index 00000000..aaf1010d --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt @@ -0,0 +1,8 @@ +package com.jeeldobariya.passcodes.utils + +object Constant { + const val REPO_URL = "https://github.com/JeelDobariya38/password-manager" + const val LICENSE_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/LICENSE.txt" + const val CHANGELOG_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/changelog.md" + const val SECURITY_GUIDE_URL = "https://github.com/JeelDobariya38/password-manager/blob/main/docs/security_guide.md" +} diff --git a/app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt similarity index 63% rename from app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java rename to app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt index a36a0f29..d7097f4d 100644 --- a/app/src/main/java/com/jeeldobariya/passcodes/utils/ExampleTestableCode.java +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt @@ -1,12 +1,12 @@ -package com.jeeldobariya.passcodes.utils; +package com.jeeldobariya.passcodes.utils class ExampleTestableCode { - int checkStrength(String password) { + fun checkStrength(password: String): Int { if (password == null || password.isEmpty()) { return -1; } - int length = password.length(); + val length = password.length; if (length < 8) { return 0; diff --git a/app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java b/app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java deleted file mode 100644 index 591ed19b..00000000 --- a/app/src/test/java/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.jeeldobariya.passcodes.utils; - -import org.junit.Test; -import org.junit.Before; -import static com.google.common.truth.Truth.assertThat; - -public class ExampleTestableCodeTest { - private ExampleTestableCode testObj; - - @Before - public void setup() { - testObj = new ExampleTestableCode(); - } - - @Test - public void testCheckStrength_With_EmptyPassword() { - // Given - String password = ""; - - // When & Then - assertThat(testObj.checkStrength(password)).isEqualTo(-1); - } - - @Test - public void testCheckStrength_Weak_ShortPassword() { - // Given - String password = "short"; // Less than 8 characters - - // When & Then - assertThat(testObj.checkStrength(password)).isEqualTo(0); - } - - @Test - public void testCheckStrength_Strong_LongPassword() { - // Given - String password = "long password"; // More than 8 characters - - // When & Then - assertThat(testObj.checkStrength(password)).isEqualTo(1); - } -} diff --git a/app/src/test/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.kt b/app/src/test/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.kt new file mode 100644 index 00000000..95cc7d62 --- /dev/null +++ b/app/src/test/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCodeTest.kt @@ -0,0 +1,41 @@ +package com.jeeldobariya.passcodes.utils + +import org.junit.Test +import org.junit.Before +import com.google.common.truth.Truth.assertThat + +class ExampleTestableCodeTest { + private lateinit var testObj: ExampleTestableCode + + @Before + fun setup() { + testObj = ExampleTestableCode() + } + + @Test + fun `should handle empty passwords`() { + // Given + val password = "" + + // When & Then + assertThat(testObj.checkStrength(password)).isEqualTo(-1) + } + + @Test + fun `should detect short password as weak`() { + // Given + val password = "short" // Less than 8 characters + + // When & Then + assertThat(testObj.checkStrength(password)).isEqualTo(0) + } + + @Test + fun `should detect log password as weak`() { + // Given + val password = "long password" // More than 8 characters + + // When & Then + assertThat(testObj.checkStrength(password)).isEqualTo(1) + } +} From 439cc7c5effc4d6d11d9d5e5d18d1517585ac755 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 20:54:45 +0530 Subject: [PATCH 5/8] refactor: migrate About Us Activity --- .../passcodes/ui/AboutUsActivity.java | 48 ------------------- .../passcodes/ui/AboutUsActivity.kt | 44 +++++++++++++++++ 2 files changed, 44 insertions(+), 48 deletions(-) delete mode 100644 app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java create mode 100644 app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt diff --git a/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java deleted file mode 100644 index b79b2757..00000000 --- a/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.jeeldobariya.passcodes.ui; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; -import com.jeeldobariya.passcodes.databinding.ActivityAboutUsBinding; -import com.jeeldobariya.passcodes.utils.Constant; -// import com.jeeldobariya.passcodes.utils.Permissions; - -public class AboutUsActivity extends AppCompatActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActivityAboutUsBinding binding = ActivityAboutUsBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - // Add event onclick listener - addOnClickListenerOnButton(binding); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - private void openBrowser(String url) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - startActivity(browserIntent); - } - - // Added all the onclick event listiners - private void addOnClickListenerOnButton(ActivityAboutUsBinding binding) { - binding.viewSecurityGuidelinesBtn.setOnClickListener( - v -> { - openBrowser(Constant.SECURITY_GUIDE_URL); - }); - - binding.viewChangeLogBtn.setOnClickListener( - v -> { - openBrowser(Constant.CHANGELOG_URL); - }); - - binding.viewLicenseBtn.setOnClickListener( - v -> { - openBrowser(Constant.LICENSE_URL); - }); - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt new file mode 100644 index 00000000..6bdb7646 --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt @@ -0,0 +1,44 @@ +package com.jeeldobariya.passcodes.ui; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.view.WindowCompat; +import com.jeeldobariya.passcodes.databinding.ActivityAboutUsBinding; +import com.jeeldobariya.passcodes.utils.Constant; + +public class AboutUsActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState); + val binding = ActivityAboutUsBinding.inflate(layoutInflater); + setContentView(binding.root); + + // Add event onclick listener + addOnClickListenerOnButton(binding); + + // Make window fullscreen + WindowCompat.setDecorFitsSystemWindows(window, false); + } + + private fun openBrowser(url: String) { + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(browserIntent); + } + + // Added all the onclick event listiners + private fun addOnClickListenerOnButton(binding: ActivityAboutUsBinding) { + binding.viewSecurityGuidelinesBtn.setOnClickListener { + openBrowser(Constant.SECURITY_GUIDE_URL); + }; + + binding.viewChangeLogBtn.setOnClickListener { + openBrowser(Constant.CHANGELOG_URL); + }; + + binding.viewLicenseBtn.setOnClickListener { + openBrowser(Constant.LICENSE_URL); + }; + } +} From 80ae5d51a389a7615e9d89ffb71bb061288ac71b Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 20:54:45 +0530 Subject: [PATCH 6/8] refactor: migrate about us activity --- .../passcodes/ui/AboutUsActivity.java | 48 ------------------- .../passcodes/ui/AboutUsActivity.kt | 44 +++++++++++++++++ 2 files changed, 44 insertions(+), 48 deletions(-) delete mode 100644 app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java create mode 100644 app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt diff --git a/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java b/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java deleted file mode 100644 index b79b2757..00000000 --- a/app/src/main/java/com/jeeldobariya/passcodes/ui/AboutUsActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.jeeldobariya.passcodes.ui; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.view.WindowCompat; -import com.jeeldobariya.passcodes.databinding.ActivityAboutUsBinding; -import com.jeeldobariya.passcodes.utils.Constant; -// import com.jeeldobariya.passcodes.utils.Permissions; - -public class AboutUsActivity extends AppCompatActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActivityAboutUsBinding binding = ActivityAboutUsBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - // Add event onclick listener - addOnClickListenerOnButton(binding); - - // Make window fullscreen - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - private void openBrowser(String url) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - startActivity(browserIntent); - } - - // Added all the onclick event listiners - private void addOnClickListenerOnButton(ActivityAboutUsBinding binding) { - binding.viewSecurityGuidelinesBtn.setOnClickListener( - v -> { - openBrowser(Constant.SECURITY_GUIDE_URL); - }); - - binding.viewChangeLogBtn.setOnClickListener( - v -> { - openBrowser(Constant.CHANGELOG_URL); - }); - - binding.viewLicenseBtn.setOnClickListener( - v -> { - openBrowser(Constant.LICENSE_URL); - }); - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt new file mode 100644 index 00000000..6bdb7646 --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt @@ -0,0 +1,44 @@ +package com.jeeldobariya.passcodes.ui; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.view.WindowCompat; +import com.jeeldobariya.passcodes.databinding.ActivityAboutUsBinding; +import com.jeeldobariya.passcodes.utils.Constant; + +public class AboutUsActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState); + val binding = ActivityAboutUsBinding.inflate(layoutInflater); + setContentView(binding.root); + + // Add event onclick listener + addOnClickListenerOnButton(binding); + + // Make window fullscreen + WindowCompat.setDecorFitsSystemWindows(window, false); + } + + private fun openBrowser(url: String) { + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(browserIntent); + } + + // Added all the onclick event listiners + private fun addOnClickListenerOnButton(binding: ActivityAboutUsBinding) { + binding.viewSecurityGuidelinesBtn.setOnClickListener { + openBrowser(Constant.SECURITY_GUIDE_URL); + }; + + binding.viewChangeLogBtn.setOnClickListener { + openBrowser(Constant.CHANGELOG_URL); + }; + + binding.viewLicenseBtn.setOnClickListener { + openBrowser(Constant.LICENSE_URL); + }; + } +} From 9ffb8b8dc89e22fa2bc35744c814cb4f85e93ecb Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 20:58:22 +0530 Subject: [PATCH 7/8] chore: improve git hook to only allow lowercase --- git-hooks/commit-msg.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-hooks/commit-msg.sample b/git-hooks/commit-msg.sample index d94cc1ef..2e1105f3 100644 --- a/git-hooks/commit-msg.sample +++ b/git-hooks/commit-msg.sample @@ -11,7 +11,7 @@ fi # Read the commit message from the file. COMMIT_MSG=$(cat "$COMMIT_MSG_FILE") -CONVENTIONAL_COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\([a-zA-Z0-9_.-]+\))?(!)?:\s.*$' +CONVENTIONAL_COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\([a-z0-9_.-]+\))?(!)?:\s.*$' # Check if the commit message matches the regex. if ! [[ $COMMIT_MSG =~ $CONVENTIONAL_COMMIT_REGEX ]]; then From 18ca7eadbb89322986f53fb572e72a85e5978337 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Sun, 27 Jul 2025 21:23:09 +0530 Subject: [PATCH 8/8] chore(deps): add room lib --- app/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index b629f236..9bf30725 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' + id 'kotlin-kapt' } android { @@ -114,6 +115,10 @@ dependencies { implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.databinding:viewbinding:7.4.1' + + implementation 'androidx.room:room-ktx:2.5.0' + kapt 'androidx.room:room-compiler:2.5.0' + implementation 'org.json:json:20250517' testImplementation 'junit:junit:4.13.2'