diff --git a/app/build.gradle b/app/build.gradle index c6418701..9bf30725 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,15 @@ plugins { id 'com.android.application' + id 'org.jetbrains.kotlin.android' + id 'kotlin-kapt' } android { compileSdk 33 - namespace "com.passwordmanager" + namespace "com.jeeldobariya.passcodes" defaultConfig { - applicationId "com.passwordmanager" + applicationId "com.jeeldobariya.passcodes" minSdk 26 targetSdk 33 versionCode 1 @@ -88,20 +90,35 @@ 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' + + 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' 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/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/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/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/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/main/java/com/passwordmanager/ui/AboutUsActivity.java b/app/src/main/java/com/passwordmanager/ui/AboutUsActivity.java deleted file mode 100644 index e15e2c5b..00000000 --- a/app/src/main/java/com/passwordmanager/ui/AboutUsActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.passwordmanager.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; - -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/java/com/passwordmanager/ui/MainActivity.java b/app/src/main/java/com/passwordmanager/ui/MainActivity.java deleted file mode 100644 index 4a7dbf47..00000000 --- a/app/src/main/java/com/passwordmanager/ui/MainActivity.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.passwordmanager.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.passwordmanager.R; -import com.passwordmanager.databinding.ActivityMainBinding; -// import com.passwordmanager.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/java/com/passwordmanager/utils/Constant.java b/app/src/main/java/com/passwordmanager/utils/Constant.java deleted file mode 100644 index 52e0edda..00000000 --- a/app/src/main/java/com/passwordmanager/utils/Constant.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.passwordmanager.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/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); + }; + } +} 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() + } + } +} 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/passwordmanager/utils/ExampleTestableCode.java b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt similarity index 63% rename from app/src/main/java/com/passwordmanager/utils/ExampleTestableCode.java rename to app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt index 32c57ae4..d7097f4d 100644 --- a/app/src/main/java/com/passwordmanager/utils/ExampleTestableCode.java +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/ExampleTestableCode.kt @@ -1,12 +1,12 @@ -package com.passwordmanager.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/passwordmanager/utils/ExampleTestableCodeTest.java b/app/src/test/java/com/passwordmanager/utils/ExampleTestableCodeTest.java deleted file mode 100644 index f983607b..00000000 --- a/app/src/test/java/com/passwordmanager/utils/ExampleTestableCodeTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.passwordmanager.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) + } +} 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 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