diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 00000000..0c0c3383 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 217e5c51..f8467b45 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 00000000..f8051a6f --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 25634594..8cecff3a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,6 +31,7 @@ android { buildFeatures { viewBinding = true dataBinding = true + buildConfig = true } lint { disable += "MissingTranslation" diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ActivityCommonModule.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ActivityCommonModule.kt index 5835b504..75bf4189 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ActivityCommonModule.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ActivityCommonModule.kt @@ -11,6 +11,7 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.components.ActivityComponent import dagger.hilt.android.scopes.ActivityScoped +import sk.styk.martin.apkanalyzer.core.common.coroutines.DispatcherProvider import sk.styk.martin.apkanalyzer.manager.analytics.AnalyticsTracker import sk.styk.martin.apkanalyzer.manager.analytics.FragmentScreenTracker import sk.styk.martin.apkanalyzer.manager.navigationdrawer.ForegroundFragmentWatcher @@ -18,8 +19,6 @@ import sk.styk.martin.apkanalyzer.manager.permission.PermissionManager import sk.styk.martin.apkanalyzer.manager.permission.PermissionsManagerImpl import sk.styk.martin.apkanalyzer.manager.promo.UserReviewManager import sk.styk.martin.apkanalyzer.manager.resources.ActivityColorThemeManager -import sk.styk.martin.apkanalyzer.manager.resources.ColorThemeManager -import sk.styk.martin.apkanalyzer.core.common.coroutines.DispatcherProvider @InstallIn(ActivityComponent::class) @Module @@ -51,14 +50,14 @@ class ActivityCommonModule { @Provides @ActivityScoped - fun provideColorThemeManager(activity: AppCompatActivity, applicationColorThemeManager: ColorThemeManager): ActivityColorThemeManager { + fun provideColorThemeManager(activity: AppCompatActivity): ActivityColorThemeManager { val activityColorThemeManager: ActivityColorThemeManager = ViewModelProvider( activity, object : ViewModelProvider.Factory { override fun create(modelClass: Class): T { @Suppress("UNCHECKED_CAST") - return ActivityColorThemeManager(applicationColorThemeManager) as T + return ActivityColorThemeManager() as T } }, )[ActivityColorThemeManager::class.java] diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ApplicationModule.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ApplicationModule.kt index d281f4f7..c43f0ff2 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ApplicationModule.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ApplicationModule.kt @@ -5,7 +5,6 @@ import android.app.NotificationManager import android.content.ContentResolver import android.content.Context import android.content.SharedPreferences -import android.content.pm.PackageManager import androidx.preference.PreferenceManager import com.google.android.play.core.review.ReviewManager import com.google.android.play.core.review.ReviewManagerFactory @@ -15,8 +14,6 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import sk.styk.martin.apkanalyzer.manager.resources.ColorThemeManager -import sk.styk.martin.apkanalyzer.manager.resources.ColorThemeManagerImpl import javax.inject.Singleton @InstallIn(SingletonComponent::class) @@ -35,9 +32,6 @@ class ApplicationModule { fun provideNotificationManager(@ApplicationContext context: Context): NotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - @Provides - fun provideColorThemeManagerImpl(colorThemeManagerImpl: ColorThemeManagerImpl): ColorThemeManager = colorThemeManagerImpl - @Provides fun provideFirebaseAnalytics(@ApplicationContext context: Context): FirebaseAnalytics = FirebaseAnalytics.getInstance(context) diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/PersistenceManager.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/PersistenceManager.kt index 974169e0..41fb984f 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/PersistenceManager.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/PersistenceManager.kt @@ -10,7 +10,6 @@ private const val APP_START_NUMBER = "app_start_number" class PersistenceManager @Inject constructor( private val sharedPreferences: SharedPreferences, ) { - var isOnboardingRequired: Boolean get() = sharedPreferences.getBoolean(FIRST_APP_START, true) set(value) = sharedPreferences.edit().putBoolean(FIRST_APP_START, value).apply() diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/SettingsManager.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/SettingsManager.kt index 54e3a467..e9492e4e 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/SettingsManager.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/persistence/SettingsManager.kt @@ -3,7 +3,7 @@ package sk.styk.martin.apkanalyzer.manager.persistence import android.content.SharedPreferences import javax.inject.Inject -private const val DAY_NIGHT_KEY = "dayNightPref" +const val DAY_NIGHT_KEY = "dayNightPref" class SettingsManager @Inject constructor( private val sharedPreferences: SharedPreferences, @@ -17,7 +17,7 @@ class SettingsManager @Inject constructor( fun persist() = persisted companion object { - fun from(persisted: String) = values() + fun from(persisted: String) = entries .firstOrNull { it.persisted == persisted } ?: DEFAULT } diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ActivityColorThemeManager.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ActivityColorThemeManager.kt index c314981b..d323b4c2 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ActivityColorThemeManager.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ActivityColorThemeManager.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel import java.lang.ref.WeakReference import javax.inject.Inject -class ActivityColorThemeManager @Inject constructor(private val colorThemeManager: ColorThemeManager) : ViewModel(), ColorThemeManager by colorThemeManager { +class ActivityColorThemeManager @Inject constructor() : ViewModel() { private var activity: WeakReference? = null diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManager.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManager.kt index 5bff65d6..70fb0f29 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManager.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManager.kt @@ -1,6 +1,19 @@ package sk.styk.martin.apkanalyzer.manager.resources -interface ColorThemeManager { +import androidx.appcompat.app.AppCompatDelegate +import sk.styk.martin.apkanalyzer.manager.persistence.SettingsManager +import javax.inject.Inject +import javax.inject.Singleton - fun setTheme() +@Singleton +class ColorThemeManager @Inject constructor( + private val settingsManager: SettingsManager, +) { + fun setTheme() { + when (settingsManager.colorScheme) { + SettingsManager.ColorScheme.LIGHT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + SettingsManager.ColorScheme.DARK -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + SettingsManager.ColorScheme.DEFAULT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + } + } } diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManagerImpl.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManagerImpl.kt deleted file mode 100644 index a127f0da..00000000 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/manager/resources/ColorThemeManagerImpl.kt +++ /dev/null @@ -1,16 +0,0 @@ -package sk.styk.martin.apkanalyzer.manager.resources - -import androidx.appcompat.app.AppCompatDelegate -import sk.styk.martin.apkanalyzer.manager.persistence.SettingsManager -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -class ColorThemeManagerImpl @Inject constructor(private val settingsManager: SettingsManager) : ColorThemeManager { - - override fun setTheme() = when (settingsManager.colorScheme) { - SettingsManager.ColorScheme.LIGHT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - SettingsManager.ColorScheme.DARK -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - SettingsManager.ColorScheme.DEFAULT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) - } -} diff --git a/app/src/main/java/sk/styk/martin/apkanalyzer/ui/settings/MainSettingsFragment.kt b/app/src/main/java/sk/styk/martin/apkanalyzer/ui/settings/MainSettingsFragment.kt index f918647a..f74508a0 100644 --- a/app/src/main/java/sk/styk/martin/apkanalyzer/ui/settings/MainSettingsFragment.kt +++ b/app/src/main/java/sk/styk/martin/apkanalyzer/ui/settings/MainSettingsFragment.kt @@ -2,15 +2,21 @@ package sk.styk.martin.apkanalyzer.ui.settings import android.content.SharedPreferences import android.os.Bundle +import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import dagger.hilt.android.AndroidEntryPoint import sk.styk.martin.apkanalyzer.R +import sk.styk.martin.apkanalyzer.manager.persistence.DAY_NIGHT_KEY +import sk.styk.martin.apkanalyzer.manager.persistence.SettingsManager import sk.styk.martin.apkanalyzer.manager.resources.ColorThemeManager import javax.inject.Inject @AndroidEntryPoint class MainSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { + @Inject + lateinit var settingsManager: SettingsManager + @Inject lateinit var colorThemeManager: ColorThemeManager @@ -21,6 +27,7 @@ class MainSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSha override fun onStart() { super.onStart() preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) + (findPreference(DAY_NIGHT_KEY) as? ListPreference)?.setDefaultValue(settingsManager.colorScheme.persist()) } override fun onStop() { @@ -28,7 +35,7 @@ class MainSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSha super.onStop() } - override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { colorThemeManager.setTheme() } } diff --git a/app/src/main/res/layout/list_item_application.xml b/app/src/main/res/layout/list_item_application.xml index ad952394..91063c02 100644 --- a/app/src/main/res/layout/list_item_application.xml +++ b/app/src/main/res/layout/list_item_application.xml @@ -15,6 +15,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:colorBackground" + android:gravity="center_vertical" android:clickable="true" android:focusable="true" android:foreground="?android:selectableItemBackground" diff --git a/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/AndroidSdk.kt b/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/AndroidSdk.kt index 21999d21..82ee0c7f 100644 --- a/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/AndroidSdk.kt +++ b/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/AndroidSdk.kt @@ -1,4 +1,4 @@ package sk.styk.martin.apkanalyzer -const val TargetSdk = 33 +const val TargetSdk = 34 const val MinSdk = 21 \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/Kotlin.kt b/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/Kotlin.kt index 8eedd673..c21a2216 100644 --- a/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/Kotlin.kt +++ b/build-logic/convention/src/main/kotlin/sk/styk/martin/apkanalyzer/Kotlin.kt @@ -8,7 +8,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile internal fun Project.configureKotlin( - commonExtension: CommonExtension<*, *, *, *> + commonExtension: CommonExtension<*, *, *, *, *>, ) { commonExtension.compileOptions { sourceCompatibility = JavaVersion.VERSION_11 diff --git a/gradle.properties b/gradle.properties index 7395219a..2610e15f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,5 @@ org.gradle.jvmargs=-Xmx2g android.useAndroidX=true android.enableJetifier=true -android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 02b41ecd..c3472e2d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -kotlin = "1.8.21" -gradle-plugin = "8.0.2" +kotlin = "1.9.10" +gradle-plugin = "8.2.0" hilt = "2.46.1" lifecycle = "2.6.1" coroutines = "1.7.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 28a51c4a..21bba0d4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Apr 17 20:31:51 CEST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME