From 1dc12c1495a43d31eee26184c42c08f462e7180d Mon Sep 17 00:00:00 2001 From: "mert.yuksel" Date: Wed, 9 Jul 2025 11:36:10 +0200 Subject: [PATCH 1/4] Add signAllPublications and remove instrumented test part --- .github/workflows/feature-branch.yml | 27 ------------------- .../publish/PublishConventionPlugin.kt | 1 + 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/.github/workflows/feature-branch.yml b/.github/workflows/feature-branch.yml index 5f84744..e32577d 100644 --- a/.github/workflows/feature-branch.yml +++ b/.github/workflows/feature-branch.yml @@ -50,30 +50,3 @@ jobs: with: name: unit-test-report path: ./**/build/reports/tests/testDebugUnitTest/** - androidTests: - name: Instrumentation Tests - needs: tests - runs-on: macos-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v4 - - name: Setup JDK 21 - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: 'zulu' - # step 1 - - name: Run Instrumentation Tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 29 - profile: pixel_3a - target: google_apis - script: ./gradlew connectedDebugAndroidTest --continue - # step 2 - - name: Upload results - if: always() - uses: actions/upload-artifact@v4 - with: - name: instrumentation-test-results - path: build/androidTest-results diff --git a/convention-plugins/plugins/src/main/kotlin/com/trendyol/android/devtools/plugins/publish/PublishConventionPlugin.kt b/convention-plugins/plugins/src/main/kotlin/com/trendyol/android/devtools/plugins/publish/PublishConventionPlugin.kt index efcd1e2..46cb7bf 100644 --- a/convention-plugins/plugins/src/main/kotlin/com/trendyol/android/devtools/plugins/publish/PublishConventionPlugin.kt +++ b/convention-plugins/plugins/src/main/kotlin/com/trendyol/android/devtools/plugins/publish/PublishConventionPlugin.kt @@ -47,6 +47,7 @@ class PublishConventionPlugin : Plugin { } } } + signAllPublications() } } } From ddfb275e9fd356990127acd1edf865cc23692600 Mon Sep 17 00:00:00 2001 From: "mert.yuksel" Date: Wed, 27 Aug 2025 05:12:25 +0200 Subject: [PATCH 2/4] Add a new way to pass shared pref --- gradle/libs.versions.toml | 2 ++ libraries/sharedpref-manager/build.gradle.kts | 2 +- .../sharedprefmanager/SharedPrefManager.kt | 15 +++++++++- .../sharedprefmanager/di/ContextContainer.kt | 26 +++++++++++++---- .../di/SharedPrefUseCaseContainer.kt | 4 +-- sample/build.gradle.kts | 3 +- .../java/com/trendyol/android/devtools/App.kt | 3 +- .../android/devtools/ui/main/MainFragment.kt | 28 ++++++++++++++++++- sample/src/main/res/layout/main_fragment.xml | 12 +++++++- sample/src/main/res/values/strings.xml | 2 ++ 10 files changed, 83 insertions(+), 14 deletions(-) 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..8511875 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,23 @@ 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..efe0311 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,11 @@ class MainFragment : Fragment() { loadDummySharedPrefValues(sharedPrefName) SharedPrefManager.show(sharedPrefName) } - + binding.buttonEncryptedSharedPrefManager.isSelected = true + binding.buttonSharedPrefManager.isSelected = true + binding.buttonEncryptedSharedPrefManager.setOnClickListener { + SharedPrefManager.show(getEncryptedSharedPreferences()) + } binding.switchAnalyticsLogger.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { AnalyticsLogger.showNotification() @@ -86,6 +94,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" /> +