diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/flags/FeatureFlagManager.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/flags/FeatureFlagManager.kt
index e4dcf6c1..1bd2445b 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/flags/FeatureFlagManager.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/flags/FeatureFlagManager.kt
@@ -2,18 +2,16 @@ package com.jeeldobariya.passcodes.flags
import android.content.Context
import androidx.core.content.edit
+import com.jeeldobariya.passcodes.utils.Constant
class FeatureFlagManager private constructor(context: Context) {
- private val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
+ private val prefs = context.getSharedPreferences(Constant.FEATURE_FLAGS_PREFS_NAME, Context.MODE_PRIVATE)
var latestFeaturesEnabled: Boolean
- get() = prefs.getBoolean(KEY_LATEST_FEATURES, false)
- set(value) { prefs.edit { putBoolean(KEY_LATEST_FEATURES, value) } }
+ get() = prefs.getBoolean(Constant.LATEST_FEATURES_KEY, false)
+ set(value) { prefs.edit { putBoolean(Constant.LATEST_FEATURES_KEY, value) } }
companion object {
- private const val PREFS_NAME = "feature_flags"
- private const val KEY_LATEST_FEATURES = "latest_features_enabled"
-
@Volatile private var INSTANCE: FeatureFlagManager? = null
fun get(context: Context): FeatureFlagManager {
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt
index 1d4d9964..b8824ab8 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutUsActivity.kt
@@ -6,12 +6,14 @@ import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri
+import com.jeeldobariya.passcodes.utils.CommonUtils
class AboutUsActivity : AppCompatActivity() {
private lateinit var binding: ActivityAboutUsBinding
override fun onCreate(savedInstanceState: Bundle?) {
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityAboutUsBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LicenseActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LicenseActivity.kt
index 512e7b71..7cb9ad01 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LicenseActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LicenseActivity.kt
@@ -5,12 +5,14 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
import com.jeeldobariya.passcodes.databinding.ActivityLicenseBinding
+import com.jeeldobariya.passcodes.utils.CommonUtils
import java.io.BufferedReader
import java.io.InputStreamReader
class LicenseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
var binding = ActivityLicenseBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt
index f4c4527c..e53687ce 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt
@@ -11,6 +11,7 @@ import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.database.Password
import com.jeeldobariya.passcodes.databinding.ActivityLoadPasswordBinding
import com.jeeldobariya.passcodes.ui.adapter.PasswordAdapter
+import com.jeeldobariya.passcodes.utils.CommonUtils
import com.jeeldobariya.passcodes.utils.Controller
import com.jeeldobariya.passcodes.utils.DatabaseOperationException
import kotlinx.coroutines.Dispatchers
@@ -25,10 +26,7 @@ class LoadPasswordActivity : AppCompatActivity() {
private lateinit var controller: Controller
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityLoadPasswordBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt
index 587a4a31..f1fe9825 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt
@@ -9,6 +9,8 @@ import android.view.LayoutInflater
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.databinding.ActivityMainBinding
+import com.jeeldobariya.passcodes.utils.CommonUtils
+
// import com.jeeldobariya.passcodes.utils.Permissions
class MainActivity : AppCompatActivity() {
@@ -18,10 +20,7 @@ class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.kt
index fb366b63..5ff2b07b 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/PasswordManagerActivity.kt
@@ -1,12 +1,15 @@
package com.jeeldobariya.passcodes.ui
import android.content.Intent
+import android.view.View.GONE
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.databinding.ActivityPasswordManagerBinding
+import com.jeeldobariya.passcodes.flags.FeatureFlagManager
+import com.jeeldobariya.passcodes.utils.CommonUtils
class PasswordManagerActivity : AppCompatActivity() {
@@ -14,14 +17,16 @@ class PasswordManagerActivity : AppCompatActivity() {
private lateinit var binding: ActivityPasswordManagerBinding // Use late init for binding
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityPasswordManagerBinding.inflate(layoutInflater)
setContentView(binding.root)
+ if (!FeatureFlagManager.get(this).latestFeaturesEnabled) {
+ binding.importPasswordBtn.visibility = GONE
+ binding.exportPasswordBtn.visibility = GONE
+ }
+
// Add event onclick listener
addOnClickListenerOnButton(binding)
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 7404bdf0..2f2c846b 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt
@@ -1,6 +1,5 @@
package com.jeeldobariya.passcodes.ui
-import android.content.Context
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
@@ -8,6 +7,7 @@ import androidx.core.view.WindowCompat
import androidx.lifecycle.lifecycleScope
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.databinding.ActivitySavePasswordBinding
+import com.jeeldobariya.passcodes.utils.CommonUtils
import com.jeeldobariya.passcodes.utils.Controller
import com.jeeldobariya.passcodes.utils.DatabaseOperationException
import com.jeeldobariya.passcodes.utils.InvalidInputException
@@ -21,10 +21,7 @@ class SavePasswordActivity : AppCompatActivity() {
private lateinit var binding: ActivitySavePasswordBinding
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivitySavePasswordBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SettingsActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SettingsActivity.kt
index 54e0a6a7..e83f3ef6 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SettingsActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SettingsActivity.kt
@@ -15,15 +15,12 @@ import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.databinding.ActivitySettingsBinding
import com.jeeldobariya.passcodes.flags.FeatureFlagManager
import androidx.core.content.edit
+import com.jeeldobariya.passcodes.utils.CommonUtils
+import com.jeeldobariya.passcodes.utils.Constant
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
-
- companion object {
- const val THEME_PREFS_NAME = "theme_prefs"
- const val THEME_KEY = "selected_theme"
- }
// List of available themes to cycle through
@@ -36,10 +33,7 @@ class SettingsActivity : AppCompatActivity() {
)
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
@@ -86,15 +80,15 @@ class SettingsActivity : AppCompatActivity() {
}
binding.toggleThemeBtn.setOnClickListener {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val currentThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
+ val sharedPrefs = getSharedPreferences(Constant.APP_PREFS_NAME, Context.MODE_PRIVATE)
+ val currentThemeStyle = sharedPrefs.getInt(Constant.THEME_KEY, R.style.PasscodesTheme_Default)
val currentIndex = THEMES.indexOf(currentThemeStyle)
val nextIndex = (currentIndex + 1) % THEMES.size
val newThemeStyle = THEMES[nextIndex]
// Save the new theme and restart the application to apply it
- sharedPrefs.edit { putInt(THEME_KEY, newThemeStyle) }
+ sharedPrefs.edit { putInt(Constant.THEME_KEY, newThemeStyle) }
recreate()
Toast.makeText(this@SettingsActivity, getString(R.string.restart_app_require), Toast.LENGTH_SHORT).show()
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 2a1af6b5..8f0f7288 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt
@@ -11,6 +11,7 @@ import androidx.lifecycle.lifecycleScope
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.database.Password
import com.jeeldobariya.passcodes.databinding.ActivityUpdatePasswordBinding
+import com.jeeldobariya.passcodes.utils.CommonUtils
import com.jeeldobariya.passcodes.utils.Controller
import com.jeeldobariya.passcodes.utils.DatabaseOperationException
import com.jeeldobariya.passcodes.utils.InvalidInputException
@@ -29,10 +30,7 @@ class UpdatePasswordActivity : AppCompatActivity() {
private lateinit var binding: ActivityUpdatePasswordBinding
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityUpdatePasswordBinding.inflate(layoutInflater)
setContentView(binding.root)
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 d41bfe2f..54d54150 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt
@@ -14,6 +14,7 @@ import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.database.Password
import com.jeeldobariya.passcodes.databinding.ActivityViewPasswordBinding
import com.jeeldobariya.passcodes.flags.FeatureFlagManager
+import com.jeeldobariya.passcodes.utils.CommonUtils
import com.jeeldobariya.passcodes.utils.Controller
import com.jeeldobariya.passcodes.utils.DatabaseOperationException
import com.jeeldobariya.passcodes.utils.DateTimeUtils
@@ -33,10 +34,7 @@ class ViewPasswordActivity : AppCompatActivity() {
private lateinit var passwordEntity: Password
override fun onCreate(savedInstanceState: Bundle?) {
- val sharedPrefs = getSharedPreferences(SettingsActivity.THEME_PREFS_NAME, Context.MODE_PRIVATE)
- val savedThemeStyle = sharedPrefs.getInt(SettingsActivity.THEME_KEY, R.style.PasscodesTheme_Default)
- setTheme(savedThemeStyle)
-
+ CommonUtils.updateCurrTheme(this)
super.onCreate(savedInstanceState)
binding = ActivityViewPasswordBinding.inflate(layoutInflater)
setContentView(binding.root)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/CommonUtils.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/CommonUtils.kt
new file mode 100644
index 00000000..c0644414
--- /dev/null
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/CommonUtils.kt
@@ -0,0 +1,19 @@
+package com.jeeldobariya.passcodes.utils
+
+import android.content.Context
+import android.content.Context.MODE_PRIVATE
+import com.jeeldobariya.passcodes.R
+
+class CommonUtils {
+ companion object {
+ fun getCurrTheme(context: Context): Int {
+ val sharedPrefs = context.getSharedPreferences(Constant.APP_PREFS_NAME, MODE_PRIVATE)
+ val savedThemeStyle = sharedPrefs.getInt(Constant.THEME_KEY, R.style.PasscodesTheme_Default)
+ return savedThemeStyle
+ }
+
+ fun updateCurrTheme(context: Context) {
+ context.setTheme(getCurrTheme(context.applicationContext))
+ }
+ }
+}
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt
index 3b062c31..5dc959bd 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/utils/Constants.kt
@@ -1,9 +1,18 @@
package com.jeeldobariya.passcodes.utils
object Constant {
+ // Url Constants
const val REPO_URL = "https://github.com/JeelDobariya38/Passcodes"
const val REPORT_BUG_URL = "https://github.com/JeelDobariya38/password-manager/issues/new?template=bug-report.md"
const val RELEASE_NOTE_URL = "https://github.com/JeelDobariya38/Passcodes/blob/main/docs/release-notes.md"
const val SECURITY_GUIDE_URL = "https://github.com/JeelDobariya38/Passcodes/blob/main/docs/security-guide.md"
const val TELEGRAM_COMMUNITY_URL = "https://t.me/passcodescommunity"
+
+
+ // Shared Preferences Constants
+ const val APP_PREFS_NAME = "app_prefs"
+ const val THEME_KEY = "selected_theme"
+
+ const val FEATURE_FLAGS_PREFS_NAME = "feature_flags_prefs"
+ const val LATEST_FEATURES_KEY = "latest_features_enabled"
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 90dacb61..67998b5f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -47,6 +47,7 @@
Username
Password
Notes
- Copied Successfully
+ Copied Successfully
e.g. Google, Instagram, WhatsApp, etc.
e.g. Liam15, Noha, Olivia, Ava_25, etc.
e.g. 12345, abc123xyz, qwerty, etc.
Password Manager
- Copy Password
+ Copy Password
Save Password
Load Password
Update Password
@@ -39,7 +39,7 @@
Language:
Contributor:
Themes:
- Preview Features:
+ Preview Features:
About Us
@@ -47,8 +47,8 @@
Security Guidelines
View Release Notes
View License
- Third Party License
- Passcodes Telegram Community
+ Third Party License
+ Passcodes Telegram Community
Password Manager
@@ -86,11 +86,11 @@
Something Went Wrong: Invalid ID!!
- Copy to Clipboard?
+ Copy to Clipboard?
Update password?
Delete password?
This action cannot be undone.
- Copying sensitive data like passwords to clipboard is not so good for security!!!
+ Copying sensitive data like passwords to clipboard is not so good for security!!!
Confirm
Discard
diff --git a/lint.xml b/lint.xml
index e1452c37..f6db615e 100644
--- a/lint.xml
+++ b/lint.xml
@@ -3,4 +3,6 @@
-
\ No newline at end of file
+
+
+