diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b69a469..6496833 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,6 +2,7 @@
activity = "1.7.2"
activity-compose = "1.8.0"
agp = "8.10.1"
+encryptedprefs-ktx = "1.1.0"
java = "21"
annotation = "1.9.1"
appcompat = "1.6.1"
@@ -81,6 +82,7 @@ androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref =
androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
androidx-sqlite-ktx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "sqlite-ktx" }
androidx-startup-runtime = { group = "androidx.startup", name = "startup-runtime", version.ref = "startup" }
+encryptedprefs-ktx = { module = "dev.spght:encryptedprefs-ktx", version.ref = "encryptedprefs-ktx" }
google-android-material = { group = "com.google.android.material", name = "material", version.ref = "material" }
google-gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
jetbrains-kotlin-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" }
diff --git a/libraries/sharedpref-manager/build.gradle.kts b/libraries/sharedpref-manager/build.gradle.kts
index d123592..d76d141 100644
--- a/libraries/sharedpref-manager/build.gradle.kts
+++ b/libraries/sharedpref-manager/build.gradle.kts
@@ -38,7 +38,7 @@ android {
}
group = "com.trendyol.android.devtools"
-version = "0.2.0"
+version = "0.3.0"
publishConfig {
defaultConfiguration(
diff --git a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/SharedPrefManager.kt b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/SharedPrefManager.kt
index f14358e..9ed591d 100644
--- a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/SharedPrefManager.kt
+++ b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/SharedPrefManager.kt
@@ -2,7 +2,9 @@ package com.trendyol.android.devtools.sharedprefmanager
import android.app.Application
import android.content.Intent
+import android.content.SharedPreferences
import com.trendyol.android.devtools.sharedprefmanager.di.ContextContainer
+import com.trendyol.android.devtools.sharedprefmanager.di.SharedPreferencesProvider
import com.trendyol.android.devtools.sharedprefmanager.ui.SharedPrefManagerActivity
object SharedPrefManager {
@@ -18,7 +20,18 @@ object SharedPrefManager {
}
fun show(sharedPrefName: String) {
- ContextContainer.setSharedPrefName(sharedPrefName)
+ ContextContainer.setSharedPreferencesProvider(
+ SharedPreferencesProvider.ByName(sharedPrefName)
+ )
+ ContextContainer.getContext().startActivity(intent)
+ }
+
+ fun show(sharedPreferences: SharedPreferences) {
+ ContextContainer.setSharedPreferencesProvider(
+ SharedPreferencesProvider.ProvidedSharedPreferences(
+ sharedPreferences,
+ ),
+ )
ContextContainer.getContext().startActivity(intent)
}
}
diff --git a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/ContextContainer.kt b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/ContextContainer.kt
index afc4ef7..37c2a59 100644
--- a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/ContextContainer.kt
+++ b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/ContextContainer.kt
@@ -2,6 +2,7 @@ package com.trendyol.android.devtools.sharedprefmanager.di
import android.app.Application
import android.content.Context
+import android.content.SharedPreferences
import com.trendyol.android.devtools.sharedprefmanager.domain.SharedPrefUpdateTypeValidator
internal object ContextContainer {
@@ -14,14 +15,13 @@ internal object ContextContainer {
}
private val sharedPrefUseCaseContainer by lazy {
- SharedPrefUseCaseContainer(application.applicationContext, sharedPrefName)
+ SharedPrefUseCaseContainer(application.applicationContext, sharedPreferencesProvider)
}
private val sharedPrefUpdateTypeValidator by lazy {
SharedPrefUpdateTypeValidator()
}
private lateinit var application: Application
- private lateinit var sharedPrefName: String
-
+ private lateinit var sharedPreferencesProvider: SharedPreferencesProvider
fun getContext(): Context =
if (::application.isInitialized) {
application.applicationContext
@@ -33,7 +33,22 @@ internal object ContextContainer {
this.application = application
}
- fun setSharedPrefName(sharedPrefName: String) {
- this.sharedPrefName = sharedPrefName
+ fun setSharedPreferencesProvider(provider: SharedPreferencesProvider) {
+ this.sharedPreferencesProvider = provider
+ }
+}
+
+sealed class SharedPreferencesProvider {
+ abstract fun provide(context: Context): SharedPreferences
+ class ByName(val name: String) : SharedPreferencesProvider() {
+ override fun provide(context: Context): SharedPreferences {
+ return context.getSharedPreferences(name, Context.MODE_PRIVATE)
+ }
+ }
+
+ class ProvidedSharedPreferences(val sharedPreferences: SharedPreferences) : SharedPreferencesProvider() {
+ override fun provide(context: Context): SharedPreferences {
+ return sharedPreferences
+ }
}
}
diff --git a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/SharedPrefUseCaseContainer.kt b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/SharedPrefUseCaseContainer.kt
index d36131f..041ad2f 100644
--- a/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/SharedPrefUseCaseContainer.kt
+++ b/libraries/sharedpref-manager/src/main/java/com/trendyol/android/devtools/sharedprefmanager/di/SharedPrefUseCaseContainer.kt
@@ -9,11 +9,11 @@ import com.trendyol.android.devtools.sharedprefmanager.domain.SharedPrefManagerU
internal class SharedPrefUseCaseContainer(
private val context: Context,
- private val sharedPrefName: String
+ private val provider: SharedPreferencesProvider,
) {
private val sharedPref: SharedPreferences by lazy {
- context.getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE)
+ provider.provide(context)
}
private val sharedPrefManagerRepository: SharedPrefManagerRepository by lazy {
diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts
index 2530731..18df118 100644
--- a/sample/build.gradle.kts
+++ b/sample/build.gradle.kts
@@ -14,7 +14,7 @@ android {
defaultConfig {
applicationId = "com.trendyol.android.devtools"
- minSdk = 21
+ minSdk = 23
versionCode = 1
versionName = "1.0"
@@ -58,6 +58,7 @@ dependencies {
implementation(project(":libraries:debug-toast"))
implementation(project(":libraries:deeplink-launcher"))
implementation(project(":libraries:sharedpref-manager"))
+ implementation(libs.encryptedprefs.ktx)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
diff --git a/sample/src/main/java/com/trendyol/android/devtools/App.kt b/sample/src/main/java/com/trendyol/android/devtools/App.kt
index 6c66edd..28999d6 100644
--- a/sample/src/main/java/com/trendyol/android/devtools/App.kt
+++ b/sample/src/main/java/com/trendyol/android/devtools/App.kt
@@ -2,9 +2,9 @@ package com.trendyol.android.devtools
import android.app.Application
import com.trendyol.android.devtools.analyticslogger.AnalyticsLogger
+import com.trendyol.android.devtools.debugactionitem.AnalyticsLoggerDebugActionItem
import com.trendyol.android.devtools.debugactionitem.DummyClickDebugActionItem
import com.trendyol.android.devtools.debugactionitem.DummySwitchDebugActionItem
-import com.trendyol.android.devtools.debugactionitem.AnalyticsLoggerDebugActionItem
import com.trendyol.android.devtools.debugmenu.DebugMenu
import com.trendyol.android.devtools.debugtoast.DebugToast
import com.trendyol.android.devtools.sharedprefmanager.SharedPrefManager
@@ -19,7 +19,6 @@ class App : Application() {
// Environment Manager
EnvironmentManager.init(this)
-
// Debug Menu
DebugMenu.init(this)
val debugMenuItems = listOf(
diff --git a/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt b/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt
index b32ee97..5896837 100644
--- a/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt
+++ b/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt
@@ -1,10 +1,12 @@
package com.trendyol.android.devtools.ui.main
import android.content.Context
+import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.core.content.edit
import androidx.fragment.app.Fragment
import com.trendyol.android.devtools.MainActivity
import com.trendyol.android.devtools.R
@@ -15,6 +17,8 @@ import com.trendyol.android.devtools.sharedprefmanager.SharedPrefManager
import com.trendyol.android.devtools.ui.login.LoginFragment
import com.trendyol.devtools.deeplinklauncher.DeepLinkLauncher
import com.trendyol.devtools.environmentmanager.EnvironmentManager
+import dev.spght.encryptedprefs.EncryptedSharedPreferences
+import dev.spght.encryptedprefs.MasterKey
import kotlin.random.Random
class MainFragment : Fragment() {
@@ -56,7 +60,9 @@ class MainFragment : Fragment() {
loadDummySharedPrefValues(sharedPrefName)
SharedPrefManager.show(sharedPrefName)
}
-
+ binding.buttonEncryptedSharedPrefManager.setOnClickListener {
+ SharedPrefManager.show(getEncryptedSharedPreferences())
+ }
binding.switchAnalyticsLogger.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
AnalyticsLogger.showNotification()
@@ -86,6 +92,24 @@ class MainFragment : Fragment() {
)
}
+ private fun getEncryptedSharedPreferences(): SharedPreferences {
+ return EncryptedSharedPreferences(
+ requireContext(),
+ "encrypted_shared_pref",
+ MasterKey(requireContext())
+ ).apply {
+ // Clear previous values
+ this.edit(commit = true) { clear() }
+
+ // Add new values
+ this.edit {
+ putString("key_shared_pref_short_string", "Super secret string")
+ putInt("key_shared_pref_int", 123456)
+ putBoolean("key_shared_pref_boolean", true)
+ }
+ }
+ }
+
private fun loadDummySharedPrefValues(sharedPrefName: String) {
val sharedPref = requireContext().getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE)
val edit = sharedPref.edit()
diff --git a/sample/src/main/res/layout/main_fragment.xml b/sample/src/main/res/layout/main_fragment.xml
index 1ffac29..4f4ef02 100644
--- a/sample/src/main/res/layout/main_fragment.xml
+++ b/sample/src/main/res/layout/main_fragment.xml
@@ -16,9 +16,19 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+