From 40b33c81f4db8a48de5ecc291d97aa8504aaa84f Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 00:11:04 +0600 Subject: [PATCH 01/29] Improvements to surface colors and brightness modification --- .../drdisagree/colorblendr/utils/ColorUtil.kt | 35 +++++ .../colorblendr/utils/DynamicColors.kt | 8 +- .../colorblendr/utils/FabricatedUtil.kt | 121 +++++++++--------- 3 files changed, 103 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt index 7e3b5db9..60ff9e55 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt @@ -158,6 +158,41 @@ object ColorUtil { return ColorUtils.HSLToColor(hsl) } + fun modifyBrightness(color: Int, brightnessPercentage: Int): Int { + // Ensure brightnessPercentage is within -100 to 100 + val clampedPercentage = brightnessPercentage.coerceIn(-100, 100) + + // Convert brightness percentage to a factor + val factor = 1.0f + (clampedPercentage / 100f) + + // Extract RGB components + val r = (color shr 16 and 0xFF) / 255f + val g = (color shr 8 and 0xFF) / 255f + val b = (color and 0xFF) / 255f + + // Calculate current brightness + val currentBrightness = 0.2126f * r + 0.7152f * g + 0.0722f * b + + // Determine the adjustment factor to achieve the desired brightness + val adjustedFactor = if (currentBrightness == 0f) 0f else factor + + // Adjust RGB components by the factor + val newR = (r * adjustedFactor).coerceIn(0f, 1f) + val newG = (g * adjustedFactor).coerceIn(0f, 1f) + val newB = (b * adjustedFactor).coerceIn(0f, 1f) + + // Convert back to color integer + val newRInt = (newR * 255).toInt() + val newGInt = (newG * 255).toInt() + val newBInt = (newB * 255).toInt() + + // Return the adjusted color, preserving the alpha channel + return (color and 0xFF000000.toInt()) or + (newRInt shl 16) or + (newGInt shl 8) or + newBInt + } + fun getHue(color: Int): Float { val hsl = FloatArray(3) ColorUtils.colorToHSL(color, hsl) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 40aac85c..8cd78766 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -12,7 +12,9 @@ data class ColorMapping( val lightModeColorCode: Int? = null, val colorCode: Int? = null, val darkModeColorCode: Int? = null, - val lightnessAdjustment: Int? = null + val lightnessAdjustment: Int? = null, + val lightModeLightnessAdjustment: Int? = null, + val darkModeLightnessAdjustment: Int? = null ) enum class TonalPalette(val index: Int) { @@ -195,7 +197,9 @@ object DynamicColors { resourceName = "surface_container", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, - darkModeColorIndex = 10 + darkModeColorIndex = 10, + lightModeLightnessAdjustment = -2, + darkModeLightnessAdjustment = -20 ) ) add( diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index 1d779cfe..45768e83 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -5,6 +5,8 @@ import android.content.pm.PackageManager import android.graphics.Color import androidx.annotation.ColorInt import androidx.core.util.Pair +import androidx.core.util.component1 +import androidx.core.util.component2 import com.drdisagree.colorblendr.common.Const import com.drdisagree.colorblendr.config.RPrefs import com.drdisagree.colorblendr.utils.fabricated.FabricatedOverlayResource @@ -47,32 +49,27 @@ object FabricatedUtil { val isPitchBlackTheme = RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false) DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.forEach { colorMapping -> - val pair = extractResourceFromColorMapping( + val (resourceName, colorValue) = extractResourceFromColorMapping( colorMapping = colorMapping, prefix = "system_", suffix = suffix, palette = palette, isDark = isDark ) - val resourceName = pair.first - var colorValue: Int = pair.second - if (colorMapping.tonalPalette != null) { - val colorIndex = colorMapping.colorIndex ?: if (isDark) { - colorMapping.darkModeColorIndex - } else { - colorMapping.lightModeColorIndex - }!! - - colorValue = replaceColorForPitchBlackTheme( - pitchBlackTheme = isPitchBlackTheme, - resourceName = resourceName, - colorValue = colorValue, - colorIndex = colorIndex + val adjustedColorValue = adjustColorForPitchBlackThemeIfRequired( + pitchBlackTheme = isPitchBlackTheme, + resourceName = resourceName, + colorValue = colorValue + ).let { value -> + adjustColorBrightnessIfRequired( + colorValue = value, + colorMapping = colorMapping, + isDark = isDark ) } - overlay.setColor(resourceName, colorValue) + overlay.setColor(resourceName, adjustedColorValue) } } @@ -81,13 +78,11 @@ object FabricatedUtil { paletteLight: ArrayList> ) { DynamicColors.FIXED_COLORS_MAPPED.forEach { colorMapping -> - val pair = extractResourceFromColorMapping( + val (resourceName, colorValue) = extractResourceFromColorMapping( colorMapping = colorMapping, prefix = "system_", palette = paletteLight ) - val resourceName = pair.first - val colorValue = pair.second overlay.setColor(resourceName, colorValue) } @@ -100,36 +95,25 @@ object FabricatedUtil { val pitchBlackTheme = RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false) DynamicColors.M3_REF_PALETTE.forEach { colorMapping -> - val pair = extractResourceFromColorMapping( + val (resourceName, colorValue) = extractResourceFromColorMapping( colorMapping = colorMapping, palette = palette ) - val resourceName = pair.first - var colorValue = pair.second - - if (colorMapping.colorIndex != null) { - val colorIndex = colorMapping.colorIndex - - if (colorMapping.lightnessAdjustment != null) { - val lightnessAdjustment = colorMapping.lightnessAdjustment + 100 - colorValue = ColorUtil.modifyLightness( - colorValue, - lightnessAdjustment, - colorIndex - ) - } - - colorValue = replaceColorForPitchBlackTheme( - pitchBlackTheme = pitchBlackTheme, - resourceName = resourceName, - colorValue = colorValue, - colorIndex = colorIndex + val adjustedColorValue = adjustColorForPitchBlackThemeIfRequired( + pitchBlackTheme = pitchBlackTheme, + resourceName = resourceName, + colorValue = colorValue + ).let { value -> + adjustColorBrightnessIfRequired( + colorValue = value, + colorMapping = colorMapping, + isDark = false ) } - overlay.setColor(resourceName, colorValue) - overlay.setColor("g$resourceName", colorValue) + overlay.setColor(resourceName, adjustedColorValue) + overlay.setColor("g$resourceName", adjustedColorValue) } for (i in 0..4) { @@ -169,41 +153,35 @@ object FabricatedUtil { } @ColorInt - fun replaceColorForPitchBlackTheme( + fun adjustColorForPitchBlackThemeIfRequired( pitchBlackTheme: Boolean, resourceName: String, - colorValue: Int, - colorIndex: Int + colorValue: Int ): Int { if (pitchBlackTheme) { - val lightness = RPrefs.getInt(Const.MONET_BACKGROUND_LIGHTNESS, 100) - return when (resourceName) { "m3_ref_palette_dynamic_neutral_variant6", "gm3_ref_palette_dynamic_neutral_variant6", "system_background_dark", "system_surface_dark" -> { Color.BLACK } "m3_ref_palette_dynamic_neutral_variant12", "gm3_ref_palette_dynamic_neutral_variant12" -> { - ColorUtil.modifyLightness( - colorValue, - lightness - 40, - colorIndex + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -40 ) } "m3_ref_palette_dynamic_neutral_variant17", "gm3_ref_palette_dynamic_neutral_variant17", "gm3_system_bar_color_night" -> { - ColorUtil.modifyLightness( - colorValue, - lightness - 60, - colorIndex + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -60 ) } "system_surface_container_dark" -> { - ColorUtil.modifyLightness( - colorValue, - lightness - 20, - colorIndex + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -20 ) } @@ -364,4 +342,29 @@ object FabricatedUtil { return Pair(resourceName, colorValue) } + + private fun adjustColorBrightnessIfRequired( + colorValue: Int, + colorMapping: ColorMapping, + isDark: Boolean + ): Int { + return if (colorMapping.lightnessAdjustment != null) { + ColorUtil.modifyBrightness( + colorValue, + colorMapping.lightnessAdjustment + ) + } else if (colorMapping.darkModeLightnessAdjustment != null && isDark) { + ColorUtil.modifyBrightness( + colorValue, + colorMapping.darkModeLightnessAdjustment + ) + } else if (colorMapping.lightModeLightnessAdjustment != null && !isDark) { + ColorUtil.modifyBrightness( + colorValue, + colorMapping.lightModeLightnessAdjustment + ) + } else { + colorValue + } + } } From 4cc001168af244efc03ddc7f9ffcbf6a1fd16789 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 00:55:55 +0600 Subject: [PATCH 02/29] Start notification service only if conditions met --- .../colorblendr/ui/activities/MainActivity.kt | 16 +++++++++--- .../ui/activities/SplashActivity.kt | 1 + .../colorblendr/ui/fragments/HomeFragment.kt | 25 +++++++------------ .../ui/fragments/OnboardingFragment.kt | 9 ++++++- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt index b2e97710..03418bdd 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt @@ -41,11 +41,18 @@ class MainActivity : AppCompatActivity() { if (savedInstanceState == null) { if (getBoolean(FIRST_RUN, true) || workingMethod == Const.WorkMethod.NULL || - !intent.getBooleanExtra("success", false) + intent?.getBooleanExtra("success", false) == false ) { replaceFragment(OnboardingFragment(), false) } else { - replaceFragment(HomeFragment(), false) + replaceFragment( + HomeFragment().apply { + arguments = Bundle().apply { + putBoolean("success", true) + } + }, + false + ) } } } @@ -89,7 +96,10 @@ class MainActivity : AppCompatActivity() { override fun onResume() { super.onResume() - scheduleJob(applicationContext) + + if (intent?.getBooleanExtra("success", false) == true) { + scheduleJob(applicationContext) + } } companion object { diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/SplashActivity.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/SplashActivity.kt index 0d91b2a8..ca51cd84 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/SplashActivity.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/SplashActivity.kt @@ -92,6 +92,7 @@ class SplashActivity : AppCompatActivity() { countDownLatch.countDown() } } else { + success.set(false) keepShowing = false countDownLatch.countDown() } diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/HomeFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/HomeFragment.kt index 68315fb7..35010259 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/HomeFragment.kt @@ -1,6 +1,5 @@ package com.drdisagree.colorblendr.ui.fragments -import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper @@ -17,8 +16,8 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import com.drdisagree.colorblendr.R import com.drdisagree.colorblendr.databinding.FragmentHomeBinding -import com.drdisagree.colorblendr.service.AutoStartService import com.drdisagree.colorblendr.service.AutoStartService.Companion.isServiceNotRunning +import com.drdisagree.colorblendr.service.RestartBroadcastReceiver.Companion.scheduleJob import com.drdisagree.colorblendr.utils.AppUtil import com.drdisagree.colorblendr.utils.AppUtil.hasStoragePermission import com.drdisagree.colorblendr.utils.AppUtil.openAppSettings @@ -56,13 +55,10 @@ class HomeFragment : Fragment() { Handler(Looper.getMainLooper()).postDelayed({ try { if (permissionsGranted(requireContext())) { - if (isServiceNotRunning) { - requireContext().startForegroundService( - Intent( - requireContext(), - AutoStartService::class.java - ) - ) + if (isServiceNotRunning && + arguments?.getBoolean("success", false) == true + ) { + scheduleJob(requireContext()) } } else { requestPermissionsLauncher.launch(AppUtil.REQUIRED_PERMISSIONS) @@ -170,13 +166,10 @@ class HomeFragment : Fragment() { return } - if (isServiceNotRunning) { - requireContext().startForegroundService( - Intent( - requireContext(), - AutoStartService::class.java - ) - ) + if (isServiceNotRunning && + arguments?.getBoolean("success", false) == true + ) { + scheduleJob(requireContext()) } } diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt index c98cb117..8aaa479a 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt @@ -153,7 +153,14 @@ class OnboardingFragment : Fragment() { updateFabricatedAppList(requireContext()) putBoolean(FIRST_RUN, false) saveWorkingMethod(Const.WORKING_METHOD) - MainActivity.replaceFragment(HomeFragment(), true) + MainActivity.replaceFragment( + HomeFragment().apply { + arguments = Bundle().apply { + putBoolean("success", true) + } + }, + true + ) } catch (_: Exception) { } } From 1522edab61b17105fd31f9b2ef4bdf90636e44f9 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 01:41:36 +0600 Subject: [PATCH 03/29] Make permissions scrollable #106 --- .../layout-land/fragment_onboarding_item2.xml | 59 +++++++++++------- .../layout-land/fragment_onboarding_item3.xml | 45 ++++++++------ .../res/layout/fragment_onboarding_item2.xml | 61 +++++++++++-------- .../res/layout/fragment_onboarding_item3.xml | 47 ++++++++------ 4 files changed, 130 insertions(+), 82 deletions(-) diff --git a/app/src/main/res/layout-land/fragment_onboarding_item2.xml b/app/src/main/res/layout-land/fragment_onboarding_item2.xml index c4c5fb2a..7dc78b17 100644 --- a/app/src/main/res/layout-land/fragment_onboarding_item2.xml +++ b/app/src/main/res/layout-land/fragment_onboarding_item2.xml @@ -17,40 +17,53 @@ app:layout_constraintStart_toStartOf="@id/guidelineLeft" app:layout_constraintTop_toTopOf="@id/guidelineTop" /> - - + android:layout_height="match_parent" + android:layout_marginStart="16dp" + android:layout_marginEnd="14dp" + android:gravity="center" + android:orientation="vertical"> - + - + + + - + + + app:layout_constraintGuide_percent="0.88" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_onboarding_item3.xml b/app/src/main/res/layout-land/fragment_onboarding_item3.xml index d5c46655..db5c7622 100644 --- a/app/src/main/res/layout-land/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout-land/fragment_onboarding_item3.xml @@ -17,33 +17,44 @@ app:layout_constraintStart_toStartOf="@id/guidelineLeft" app:layout_constraintTop_toTopOf="@id/guidelineTop" /> - - + android:layout_height="match_parent" + android:layout_marginStart="16dp" + android:layout_marginEnd="14dp" + android:gravity="center" + android:orientation="vertical"> - + + + - + + + app:layout_constraintGuide_percent="0.88" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_onboarding_item2.xml b/app/src/main/res/layout/fragment_onboarding_item2.xml index 45f22f61..de67aac5 100644 --- a/app/src/main/res/layout/fragment_onboarding_item2.xml +++ b/app/src/main/res/layout/fragment_onboarding_item2.xml @@ -16,40 +16,53 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/guidelineTop" /> - - + android:layout_height="match_parent" + android:layout_marginHorizontal="12dp" + android:layout_marginTop="16dp" + android:gravity="center" + android:orientation="vertical"> - + - + + + - + + + app:layout_constraintGuide_percent="0.13" /> + app:layout_constraintGuide_percent="0.87" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_onboarding_item3.xml b/app/src/main/res/layout/fragment_onboarding_item3.xml index 5623def8..b20f1b93 100644 --- a/app/src/main/res/layout/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout/fragment_onboarding_item3.xml @@ -16,33 +16,44 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/guidelineTop" /> - - + android:layout_height="match_parent" + android:layout_marginHorizontal="12dp" + android:layout_marginTop="16dp" + android:gravity="center" + android:orientation="vertical"> - + + + - + + + app:layout_constraintGuide_percent="0.13" /> + app:layout_constraintGuide_percent="0.87" /> \ No newline at end of file From 456ef423f71c75c19766c2aff04593eb00dd6c09 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 01:51:50 +0600 Subject: [PATCH 04/29] Add id for scrollview --- app/src/main/res/layout-land/fragment_onboarding_item2.xml | 2 +- app/src/main/res/layout-land/fragment_onboarding_item3.xml | 3 ++- app/src/main/res/layout/fragment_onboarding_item2.xml | 2 +- app/src/main/res/layout/fragment_onboarding_item3.xml | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout-land/fragment_onboarding_item2.xml b/app/src/main/res/layout-land/fragment_onboarding_item2.xml index 7dc78b17..4d421743 100644 --- a/app/src/main/res/layout-land/fragment_onboarding_item2.xml +++ b/app/src/main/res/layout-land/fragment_onboarding_item2.xml @@ -18,6 +18,7 @@ app:layout_constraintTop_toTopOf="@id/guidelineTop" /> diff --git a/app/src/main/res/layout-land/fragment_onboarding_item3.xml b/app/src/main/res/layout-land/fragment_onboarding_item3.xml index db5c7622..bdaedb8e 100644 --- a/app/src/main/res/layout-land/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout-land/fragment_onboarding_item3.xml @@ -18,6 +18,7 @@ app:layout_constraintTop_toTopOf="@id/guidelineTop" /> @@ -49,7 +51,6 @@ android:id="@+id/shizuku" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp" app:descriptionText="@string/mode_two_desc" app:titleText="@string/mode_two_title" /> diff --git a/app/src/main/res/layout/fragment_onboarding_item2.xml b/app/src/main/res/layout/fragment_onboarding_item2.xml index de67aac5..239bc70a 100644 --- a/app/src/main/res/layout/fragment_onboarding_item2.xml +++ b/app/src/main/res/layout/fragment_onboarding_item2.xml @@ -17,6 +17,7 @@ app:layout_constraintTop_toTopOf="@id/guidelineTop" /> diff --git a/app/src/main/res/layout/fragment_onboarding_item3.xml b/app/src/main/res/layout/fragment_onboarding_item3.xml index b20f1b93..3acfc013 100644 --- a/app/src/main/res/layout/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout/fragment_onboarding_item3.xml @@ -17,6 +17,7 @@ app:layout_constraintTop_toTopOf="@id/guidelineTop" /> Date: Mon, 19 Aug 2024 15:47:13 +0600 Subject: [PATCH 05/29] Add prompt to disable battery optimization --- app/src/main/AndroidManifest.xml | 1 + .../ui/fragments/OnboardingFragment.kt | 1 + .../ui/fragments/OnboardingItem3Fragment.kt | 108 ++++++++++++++++-- .../ui/fragments/OnboardingItem4Fragment.kt | 34 ++++++ .../ui/widgets/SelectableViewWidget.kt | 8 +- .../res/drawable/ic_battery_landscape_bg.xml | 18 +++ .../res/drawable/ic_battery_landscape_fg.xml | 18 +++ .../layout-land/fragment_onboarding_item3.xml | 23 ++-- .../layout-land/fragment_onboarding_item4.xml | 95 +++++++++++++++ .../res/layout/fragment_onboarding_item3.xml | 30 +++-- .../res/layout/fragment_onboarding_item4.xml | 87 ++++++++++++++ app/src/main/res/values/strings.xml | 4 + 12 files changed, 395 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem4Fragment.kt create mode 100644 app/src/main/res/drawable/ic_battery_landscape_bg.xml create mode 100644 app/src/main/res/drawable/ic_battery_landscape_fg.xml create mode 100644 app/src/main/res/layout-land/fragment_onboarding_item4.xml create mode 100644 app/src/main/res/layout/fragment_onboarding_item4.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7b66aed..fc1f3e02 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,6 +22,7 @@ + diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt index 8aaa479a..c5db9548 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingFragment.kt @@ -52,6 +52,7 @@ class OnboardingFragment : Fragment() { adapter.addFragment(OnboardingItem1Fragment()) adapter.addFragment(OnboardingItem2Fragment()) adapter.addFragment(OnboardingItem3Fragment()) + adapter.addFragment(OnboardingItem4Fragment()) binding.viewPager.adapter = adapter binding.viewPager.offscreenPageLimit = adapter.itemCount diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem3Fragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem3Fragment.kt index 2f98903b..3528639d 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem3Fragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem3Fragment.kt @@ -1,11 +1,23 @@ package com.drdisagree.colorblendr.ui.fragments +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.content.res.ColorStateList +import android.content.res.Configuration +import android.graphics.PorterDuff +import android.net.Uri import android.os.Bundle +import android.os.PowerManager +import android.provider.Settings +import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView +import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.ColorInt import androidx.fragment.app.Fragment -import com.drdisagree.colorblendr.common.Const import com.drdisagree.colorblendr.databinding.FragmentOnboardingItem3Binding class OnboardingItem3Fragment : Fragment() { @@ -19,16 +31,96 @@ class OnboardingItem3Fragment : Fragment() { ): View { binding = FragmentOnboardingItem3Binding.inflate(inflater, container, false) - binding.root.setOnClickListener { - Const.WORKING_METHOD = Const.WorkMethod.ROOT - binding.shizuku.isSelected = false - } + binding.batteryOptimization.setOnClickListener { + binding.batteryOptimization.isSelected = false - binding.shizuku.setOnClickListener { - Const.WORKING_METHOD = Const.WorkMethod.SHIZUKU - binding.root.isSelected = false + if (!isBatteryOptimizationDisabled()) { + requestDisableBatteryOptimization() + } } + updateUI() + return binding.getRoot() } + + override fun onResume() { + super.onResume() + + updateUI() + } + + private fun isBatteryOptimizationDisabled(): Boolean { + return (requireContext() + .getSystemService(Context.POWER_SERVICE) as PowerManager) + .isIgnoringBatteryOptimizations(requireContext().packageName) + } + + @SuppressLint("BatteryLife") + private fun requestDisableBatteryOptimization() { + batteryOptimizationLauncher.launch( + Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = Uri.parse("package:" + requireContext().packageName) + } + ) + } + + private val batteryOptimizationLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { _ -> + updateUI() + } + + private fun updateUI() { + val batteryOptimizationDisabled = isBatteryOptimizationDisabled() + binding.batteryOptimization.isSelected = batteryOptimizationDisabled + binding.batteryView.setBatteryImageViewColor(batteryOptimizationDisabled) + } + + private fun ImageView.setBatteryImageViewColor(selected: Boolean) { + val context = requireContext() + val typedValue = TypedValue() + val theme = context.theme + @ColorInt val backgroundColor: Int + @ColorInt val foregroundColor: Int + val isDarkMode = (context.resources.configuration.uiMode and + Configuration.UI_MODE_NIGHT_YES) == Configuration.UI_MODE_NIGHT_YES + + if (selected) { + theme.resolveAttribute( + if (isDarkMode) { + com.google.android.material.R.attr.colorSurfaceContainerHigh + } else { + com.google.android.material.R.attr.colorSurfaceContainerHighest + }, + typedValue, + true + ) + backgroundColor = typedValue.data + + theme.resolveAttribute( + com.google.android.material.R.attr.colorPrimary, + typedValue, + true + ) + foregroundColor = typedValue.data + } else { + theme.resolveAttribute( + com.google.android.material.R.attr.colorErrorContainer, + typedValue, + true + ) + backgroundColor = typedValue.data + + theme.resolveAttribute( + com.google.android.material.R.attr.colorError, + typedValue, + true + ) + foregroundColor = typedValue.data + } + + setColorFilter(backgroundColor, PorterDuff.Mode.SRC_IN) + foreground.setTintList(ColorStateList.valueOf(foregroundColor)) + } } \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem4Fragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem4Fragment.kt new file mode 100644 index 00000000..662cd66e --- /dev/null +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/OnboardingItem4Fragment.kt @@ -0,0 +1,34 @@ +package com.drdisagree.colorblendr.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.drdisagree.colorblendr.common.Const +import com.drdisagree.colorblendr.databinding.FragmentOnboardingItem4Binding + +class OnboardingItem4Fragment : Fragment() { + + private lateinit var binding: FragmentOnboardingItem4Binding + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentOnboardingItem4Binding.inflate(inflater, container, false) + + binding.root.setOnClickListener { + Const.WORKING_METHOD = Const.WorkMethod.ROOT + binding.shizuku.isSelected = false + } + + binding.shizuku.setOnClickListener { + Const.WORKING_METHOD = Const.WorkMethod.SHIZUKU + binding.root.isSelected = false + } + + return binding.getRoot() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/SelectableViewWidget.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/SelectableViewWidget.kt index 99da796c..41fc2bc9 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/SelectableViewWidget.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/SelectableViewWidget.kt @@ -23,7 +23,6 @@ import com.google.android.material.color.MaterialColors class SelectableViewWidget : RelativeLayout { - private var context: Context? = null private var container: MaterialCardView? = null private var titleTextView: TextView? = null private var descriptionTextView: TextView? = null @@ -47,7 +46,6 @@ class SelectableViewWidget : RelativeLayout { } private fun init(context: Context, attrs: AttributeSet?) { - this.context = context inflate(context, R.layout.view_widget_selectable, this) initializeId() @@ -108,7 +106,7 @@ class SelectableViewWidget : RelativeLayout { if (enabled) { val typedValue: TypedValue = TypedValue() - val a: TypedArray = getContext().obtainStyledAttributes( + val a: TypedArray = context.obtainStyledAttributes( typedValue.data, intArrayOf(com.google.android.material.R.attr.colorPrimary) ) @@ -188,8 +186,8 @@ class SelectableViewWidget : RelativeLayout { val isLandscape: Boolean = config.orientation == Configuration.ORIENTATION_LANDSCAPE if (isLandscape) { - val screenWidth: Int = context!!.resources.displayMetrics.widthPixels - val screenHeight: Int = context!!.resources.displayMetrics.heightPixels + val screenWidth: Int = resources.displayMetrics.widthPixels + val screenHeight: Int = resources.displayMetrics.heightPixels val isSmallHeightDevice: Boolean = screenWidth >= screenHeight * 1.8 diff --git a/app/src/main/res/drawable/ic_battery_landscape_bg.xml b/app/src/main/res/drawable/ic_battery_landscape_bg.xml new file mode 100644 index 00000000..4c53ab11 --- /dev/null +++ b/app/src/main/res/drawable/ic_battery_landscape_bg.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_battery_landscape_fg.xml b/app/src/main/res/drawable/ic_battery_landscape_fg.xml new file mode 100644 index 00000000..4cc99e8e --- /dev/null +++ b/app/src/main/res/drawable/ic_battery_landscape_fg.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_onboarding_item3.xml b/app/src/main/res/layout-land/fragment_onboarding_item3.xml index bdaedb8e..f90a4bc3 100644 --- a/app/src/main/res/layout-land/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout-land/fragment_onboarding_item3.xml @@ -11,7 +11,7 @@ style="@style/TextAppearance.Material3.HeadlineLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/choose_method" + android:text="@string/optimization" app:layout_constraintBottom_toBottomOf="@id/guidelineBottom" app:layout_constraintEnd_toEndOf="@id/guidelineMiddle" app:layout_constraintStart_toStartOf="@id/guidelineLeft" @@ -39,20 +39,23 @@ android:gravity="center" android:orientation="vertical"> - + android:adjustViewBounds="true" + android:foreground="@drawable/ic_battery_landscape_fg" + android:importantForAccessibility="no" + android:src="@drawable/ic_battery_landscape_bg" /> + android:layout_marginBottom="16dp" + app:descriptionText="@string/perm_four_desc" + app:titleText="@string/perm_four_title" /> diff --git a/app/src/main/res/layout-land/fragment_onboarding_item4.xml b/app/src/main/res/layout-land/fragment_onboarding_item4.xml new file mode 100644 index 00000000..82c5a0d4 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_onboarding_item4.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_onboarding_item3.xml b/app/src/main/res/layout/fragment_onboarding_item3.xml index 3acfc013..2717c2b3 100644 --- a/app/src/main/res/layout/fragment_onboarding_item3.xml +++ b/app/src/main/res/layout/fragment_onboarding_item3.xml @@ -4,14 +4,14 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragments.OnboardingItem3Fragment"> + tools:context=".ui.fragments.OnboardingItem2Fragment"> @@ -38,20 +38,32 @@ android:gravity="center" android:orientation="vertical"> - + + + android:alpha="0.5" + android:text="@string/disable_battery_optimization_hint" + android:textAlignment="center" /> + app:descriptionText="@string/perm_four_desc" + app:titleText="@string/perm_four_title" /> diff --git a/app/src/main/res/layout/fragment_onboarding_item4.xml b/app/src/main/res/layout/fragment_onboarding_item4.xml new file mode 100644 index 00000000..ddc7014b --- /dev/null +++ b/app/src/main/res/layout/fragment_onboarding_item4.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f7ed9cc3..607d79fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,6 +101,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -124,6 +126,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -159,4 +162,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization \ No newline at end of file From 8b1333a66cd0ad18a7d0ab6672bc4437bc8d9a2a Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 18:29:30 +0600 Subject: [PATCH 06/29] Fix keyguard circle drawable color --- .../com/drdisagree/colorblendr/utils/DynamicColors.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 8cd78766..c642df15 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -1,7 +1,6 @@ package com.drdisagree.colorblendr.utils import android.graphics.Color -import android.os.Build data class ColorMapping( val resourceName: String, @@ -206,12 +205,10 @@ object DynamicColors { ColorMapping( resourceName = "surface_container_high", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - 1 - } else { - 2 - }, - darkModeColorIndex = 10 + lightModeColorIndex = 2, + darkModeColorIndex = 10, + lightModeLightnessAdjustment = -2, + darkModeLightnessAdjustment = 8 ) ) add( From 0dead7e93e3005f013f875d2b70beb9b6f56fb63 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 19 Aug 2024 18:49:56 +0600 Subject: [PATCH 07/29] Make notification scrim darker in light mode --- .../java/com/drdisagree/colorblendr/utils/DynamicColors.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index c642df15..54bb9c28 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -232,7 +232,8 @@ object DynamicColors { resourceName = "surface_dim", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, - darkModeColorIndex = 11 + darkModeColorIndex = 11, + lightModeLightnessAdjustment = -8 ) ) add( From 98c625d9c1e200a37d7a4dbee25745a4880b5f8a Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 25 Aug 2024 01:13:39 +0000 Subject: [PATCH 08/29] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 4 ++++ app/src/main/res/values-ar-rSA/strings.xml | 4 ++++ app/src/main/res/values-ca-rES/strings.xml | 4 ++++ app/src/main/res/values-cs-rCZ/strings.xml | 4 ++++ app/src/main/res/values-da-rDK/strings.xml | 4 ++++ app/src/main/res/values-de-rDE/strings.xml | 4 ++++ app/src/main/res/values-el-rGR/strings.xml | 4 ++++ app/src/main/res/values-es-rES/strings.xml | 4 ++++ app/src/main/res/values-fi-rFI/strings.xml | 4 ++++ app/src/main/res/values-fr-rFR/strings.xml | 4 ++++ app/src/main/res/values-hu-rHU/strings.xml | 4 ++++ app/src/main/res/values-it-rIT/strings.xml | 4 ++++ app/src/main/res/values-iw-rIL/strings.xml | 4 ++++ app/src/main/res/values-ja-rJP/strings.xml | 4 ++++ app/src/main/res/values-ko-rKR/strings.xml | 4 ++++ app/src/main/res/values-nl-rNL/strings.xml | 4 ++++ app/src/main/res/values-no-rNO/strings.xml | 4 ++++ app/src/main/res/values-pl-rPL/strings.xml | 4 ++++ app/src/main/res/values-pt-rBR/strings.xml | 4 ++++ app/src/main/res/values-pt-rPT/strings.xml | 4 ++++ app/src/main/res/values-ro-rRO/strings.xml | 4 ++++ app/src/main/res/values-ru-rRU/strings.xml | 6 +++++- app/src/main/res/values-sr-rSP/strings.xml | 4 ++++ app/src/main/res/values-sv-rSE/strings.xml | 4 ++++ app/src/main/res/values-tr-rTR/strings.xml | 4 ++++ app/src/main/res/values-uk-rUA/strings.xml | 4 ++++ app/src/main/res/values-vi-rVN/strings.xml | 4 ++++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++++ 29 files changed, 117 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index f7ad1bdd..c4b6c09c 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -89,6 +89,8 @@ هذا الإذن مطلوب لاسترداد الخلفية الرئيسية وشاشة القفل. الوصول إلى كل الملفات هذا الإذن مطلوب لاسترداد الخلفية الرئيسية وشاشة القفل. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. إبدأ استمر باقة ألوان حية ومنعشة مستوحاة من نشاط المشروبات المثلجة. @@ -112,6 +114,7 @@ تطبيق ألوان مخصصة على تطبيقات محددة لا تتبع Monet الخاص بالنظام عودة صلاحيات + Optimization اختر طريقة تشغيل تلقائي بدء الخدمة عند الإقلاع @@ -147,4 +150,5 @@ تطبيقات المستخدم تطبيقات قابلة للتشغيل كل التطبيقات + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 731f8ef8..bdb7954a 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -89,6 +89,8 @@ Toto oprávnění je vyžadováno pro načtení tapety domovské a zamykací obrazovky. Přístup ke všem souborům Toto oprávnění je vyžadováno pro načtení tapety domovské a zamykací obrazovky. + Optimalizace baterie + Neomezená optimalizace baterie je nutná k běhu na pozadí. Začít Pokračovat Osvěžující barevná paleta inspirovaná šumivostí spritzových nápojů. @@ -112,6 +114,7 @@ Použít vlastní barvy pro konkrétní aplikace, které nepodporují Monet systém Zpět Oprávnění + Optimalizace Vyberte metodu Automatické spuštění Spustit službu po startu @@ -147,4 +150,5 @@ Uživatelské aplikace Spustitelné aplikace Všechny aplikace + Není povinné, ale doporučuje se zakázat optimalizaci baterie diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 1d92018b..c70687b5 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -89,6 +89,8 @@ Diese Berechtigung ist erforderlich, um das Hintergrundbild für den Startbildschirm und den Sperrbildschirm abzurufen. Zugriff auf alle Dateien Diese Berechtigung ist erforderlich, um das Hintergrundbild für den Startbildschirm und den Sperrbildschirm abzurufen. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Starten Fortsetzen Lebendige und erfrischende Farbpalette, inspiriert von der Spritzigkeit von Getränken. @@ -112,6 +114,7 @@ Benutzerdefinierte Farben für bestimmte Apps anwenden, die das System-Monet nicht benutzen Zurück Berechtigungen + Optimization Methode wählen Automatischer Start Starte den Dienst bei Systemstart @@ -147,4 +150,5 @@ Vom Benutzer installierte Apps Startfähige Apps Alle Apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index af91a5f5..f200277a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -89,6 +89,8 @@ Este permiso es necesario para acceder a los fondos de pantalla del inicio y la pantalla de bloqueo. Acceso a Todos los Archivos Este permiso es necesario para acceder a los fondos de pantalla del inicio y la pantalla de bloqueo. + Optimización de la batería + Se requiere una optimización sin restricciones de la batería para permitir la ejecución en segundo plano. Iniciar Continuar Paleta de colores vivaz y refrescante inspirada en la efervescencia de las bebidas spritz. @@ -112,6 +114,7 @@ Aplica colores personalizados a aplicaciones específicas las cuales no siguen el sistema Monet Atrás Permisos + Optimización Seleccionar método Inicio automático Iniciar servicio al arrancar @@ -147,4 +150,5 @@ Aplicaciones del usuario Aplicaciones lanzables Todas las aplicaciones + No es obligatorio pero se recomienda desactivar la optimización de la batería diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bec35234..15fd129d 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -89,6 +89,8 @@ Cette permission est nécessaire pour récupérer le fond d\'écran d\'accueil et de l\'écran de verrouillage. Accès à tous les fichiers Cette permission est nécessaire pour récupérer le fond d\'écran d\'accueil et de l\'écran de verrouillage. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Démarrer Continuer Palette de couleurs vives et rafraîchissantes inspirée de l\'effervescence des boissons au spritz. @@ -112,6 +114,7 @@ Appliquer des couleurs personnalisées à des applications spécifiques qui ne suivent pas le système monet Précédent Permissions + Optimization Choisissez un mode Démarrage automatique Lancement du service au démarrage @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 73be29a1..9306dab7 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -89,6 +89,8 @@ Ez a jogosultság kell a zár- és főképernyő háttérkép eléréséhez. Hozzáférés minden fájlhoz Ez a jogosultság kell a zár- és főképernyő háttérkép eléréséhez. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Kezdés Folytatás Élénk és felfrissítő színpaletta, amelyet a fröccsös italok pezsgése ihletett. @@ -112,6 +114,7 @@ Alkalmazz egyedi színeket specifikus alkalmazásoknak, amik nem követik a rendszer témát Vissza Engedélyek + Optimization Válassz módszert Automatikus indítás Szolgáltatás indítása bootnál @@ -147,4 +150,5 @@ Felhasználói alkalmazások Indítható alkalmazások Összes Alkalmazás + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index af63895a..2eb61acf 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -89,6 +89,8 @@ Questa autorizzazione è necessaria per recuperare lo sfondo home e lockscreen. Accesso a tutti i file Questa autorizzazione è necessaria per recuperare lo sfondo home e lockscreen. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Inizio Continua Tavolozza di colori vivace e rinfrescante ispirata all\'effervescenza delle bevande spritz. @@ -112,6 +114,7 @@ Applica colori personalizzati a specifiche applicazioni che non seguono monet di sistema Indietro Permessi + Optimization Scegli il metodo Avvio automatico Avvia il servizio all\'avvio @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 823ad78e..eb182d57 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -89,6 +89,8 @@ ホーム画面とロック画面の壁紙を取得するためにこの権限が必要です。 すべてのファイルへのアクセス ホーム画面とロック画面の壁紙を取得するためにこの権限が必要です。 + Battery Optimization + Unrestricted battery optimization is required to allow running in background. 開始 続行 スプリッツの飲み物にインスパイアされた、生き生きとした爽やかなカラーパレットです。 @@ -112,6 +114,7 @@ Monetに従わないアプリにテーマを適用する 戻る 権限 + Optimization 選択の方式 自動起動 システムの起動時に自動で起動する @@ -147,4 +150,5 @@ ユーザーアプリ 起動可能なアプリ すべてのアプリ + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index e38978ea..8b2cadfa 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -89,6 +89,8 @@ To uprawnienie jest wymagane do pobrania tapety ekranu głównego i ekranu blokady. Dostęp do wszystkich plików To uprawnienie jest wymagane do pobrania tapety ekranu głównego i ekranu blokady. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Kontynuuj Ożywiająca i odświeżająca paleta kolorów inspirowana musujami napojów spirytusowych. @@ -112,6 +114,7 @@ Zastosuj niestandardowe kolory do określonych aplikacji, które nie śledzą systemu monet Wstecz Uprawnienia + Optimization Wybierz metodę Startuj wraz z systemem Uruchom usługę przy starcie @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 7505c4aa..d427a04b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -89,6 +89,8 @@ Esta permissão é necessária para recuperar o plano de fundo inicial e da tela de bloqueio. Acesso a todos os arquivos Esta permissão é necessária para recuperar o plano de fundo inicial e da tela de bloqueio. + Otimização de bateria + A otimização irrestrita da bateria é necessária para permitir a execução em segundo plano. Começar Continuar Paleta de cores vivas e refrescantes inspiradas na efervescência das bebidas spritz. @@ -112,6 +114,7 @@ Aplique cores personalizadas a apps específicos que não seguem o sistema monet Voltar Permissões + Otimização Escolha o método Inicialização automática Iniciar serviço na inicialização @@ -147,4 +150,5 @@ Apps do usuário Apps iniciáveis Todos os apps + Não é obrigatório, mas é recomendado desativar a otimização de bateria. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index b07b0c9f..f82a0fe1 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 3d88711f..20989c3e 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -25,7 +25,7 @@ Учащийся | Разработчик | Дизайнер Новости Поддержка - Github + GitHub Версия Кромешно черная тема Черный фон в темном режиме @@ -89,6 +89,8 @@ Это разрешение требуется для получения обоев домашнего экрана и экрана блокировки. Доступ ко всем файлам Это разрешение требуется для получения обоев домашнего экрана и экрана блокировки. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Начать Продолжить Яркая и освежающая цветовая палитра вдохновлённая шипучими напитками. @@ -112,6 +114,7 @@ Применяйте собственные цвета к определенным приложениям которые не соответствуют системным monet Назад Разрешения + Optimization Выберите метод Автозапуск Запустить службу при загрузке @@ -147,4 +150,5 @@ Пользовательские приложения Запускаемые приложения Все приложения + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 5bfe4e29..5f92cc75 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -89,6 +89,8 @@ Bu izin, ev ve kilit ekranı duvar kağıdını almak için gereklidir. Tüm Dosyalara Eriş Bu izin, ev ve kilit ekranı duvar kağıdını almak için gereklidir. + Pil Optimizasyonu + Arka planda çalışması için tam pil optimizasyonu gereklidir. Başlat Devam et Spritz içeceklerinin kabarcıklı özünden ilham alınan canlı ve ferahlatıcı renk paleti. @@ -112,6 +114,7 @@ Sistem monetini takip etmeyen belirli uygulamalara özel renkler uygulayın Geri İzinler + Optimizasyon Yöntem seçin Otomatik başlat Sistem açılırken hizmeti başlat @@ -147,4 +150,5 @@ Kullanıcı Uygulamaları Başlatılabilir Uygulamalar Tüm Uygulamalar + Pil optimizasyonunu devre dışı bırakmak zorunlu değildir ancak önerilir diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index a9d7ff9c..d6a74566 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -89,6 +89,8 @@ Цей дозвіл потрібен для отримання шпалер для головного екрана та екрана блокування. Доступ до всіх файлів Цей дозвіл потрібен для отримання шпалер для головного екрана та екрана блокування. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Почати Продовжити Жива та освіжаюча кольорова палітра, натхненна шипучістю газованих напоїв. @@ -112,6 +114,7 @@ Застосовуйте власні кольори до певних застосунків, які не дотримуються системної monet-теми Назад Дозволи + Optimization Оберіть метод Автозапуск Запускати службу при завантажені @@ -147,4 +150,5 @@ Користувацькі застосунки Застосунки, що запускаються Всі застосунки + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 3b623ee1..1917a371 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -89,6 +89,8 @@ Cần có quyền này để biết hình nền màn hình chính và màn hình khóa. Truy cập tất cả các tệp Cần có quyền này để biết hình nền màn hình chính và màn hình khóa. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Bắt đầu Tiếp tục Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Áp dụng màu tùy chỉnh cho ứng dụng không theo monet hệ thống Quay lại Quyền + Optimization Chọn phương pháp Tự khởi động Khởi động dịch vụ khi bật nguồn @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 06e60066..f7fa2e1b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -89,6 +89,8 @@ 检索主屏幕和锁屏壁纸需要此权限。 所有文件访问 检索主屏幕和锁屏壁纸需要此权限。 + Battery Optimization + Unrestricted battery optimization is required to allow running in background. 开始 继续 活泼清爽的调色板,灵感来自汽水饮料的泡腾。 @@ -112,6 +114,7 @@ 将自定义颜色应用于不遵循系统 monet 的特定应用程序 返回 权限 + Optimization 选择方法 自动启动 启动时启动服务 @@ -147,4 +150,5 @@ 用户应用 可启动的应用 所有应用 + It\'s not mandatory but recommended to disable the battery optimization diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 2ba11307..07ffbc83 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -89,6 +89,8 @@ This permission is required to retrieve home and lockscreen wallpaper. All Files Access This permission is required to retrieve home and lockscreen wallpaper. + Battery Optimization + Unrestricted battery optimization is required to allow running in background. Start Continue Lively and refreshing color palette inspired by the effervescence of spritz beverages. @@ -112,6 +114,7 @@ Apply custom colors to specific apps which do not follow system monet Back Permissions + Optimization Choose method Auto startup Start service on boot @@ -147,4 +150,5 @@ User apps Launchable apps All apps + It\'s not mandatory but recommended to disable the battery optimization From 00e1ec4ee0d0edd73a9a1e51f8665160ee37b8e0 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 8 Sep 2024 01:16:44 +0000 Subject: [PATCH 09/29] New Crowdin translations by GitHub Action --- app/src/main/res/values-it-rIT/strings.xml | 26 +++++++++++----------- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 8 +++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 2eb61acf..2ccb1166 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -89,8 +89,8 @@ Questa autorizzazione è necessaria per recuperare lo sfondo home e lockscreen. Accesso a tutti i file Questa autorizzazione è necessaria per recuperare lo sfondo home e lockscreen. - Battery Optimization - Unrestricted battery optimization is required to allow running in background. + Ottimizzazione batteria + Per consentire l\'esecuzione in background è richiesta l\'ottimizzazione illimitata della batteria. Inizio Continua Tavolozza di colori vivace e rinfrescante ispirata all\'effervescenza delle bevande spritz. @@ -114,7 +114,7 @@ Applica colori personalizzati a specifiche applicazioni che non seguono monet di sistema Indietro Permessi - Optimization + Ottimizzazione Scegli il metodo Avvio automatico Avvia il servizio all\'avvio @@ -141,14 +141,14 @@ Usa l\'accesso root per cambiare colori. Tutte le opzioni di personalizzazione saranno disponibili. Shizuku Usa shizuku per utilizzare l\'app senza permessi root. Le personalizzazioni saranno limitate. - Color palette - Explore all the colors of your material palette - Tap on any color in the palette to customize its appearance; long press to reset to the default color. - Tap on any color in the palette to copy its hexadecimal color code. - Select app category - System apps - User apps - Launchable apps - All apps - It\'s not mandatory but recommended to disable the battery optimization + Tavolozza dei colori + Esplora tutti i colori della tua tavolozza + Tocca qualsiasi colore nella tavolozza per personalizzare il suo aspetto; premere a lungo per reimpostare al colore predefinito. + Tocca qualsiasi colore nella tavolozza per copiare il suo codice di colore esadecimale. + Seleziona categoria app + App di sistema + App utente + Applicazioni lanciabili + Tutte le app + Non è obbligatorio, ma si consiglia di disabilitare l\'ottimizzazione della batteria diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d427a04b..a19de74d 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -150,5 +150,5 @@ Apps do usuário Apps iniciáveis Todos os apps - Não é obrigatório, mas é recomendado desativar a otimização de bateria. + Não é obrigatório, mas é recomendado desativar a otimização de bateria diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 20989c3e..5287f4d6 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -89,8 +89,8 @@ Это разрешение требуется для получения обоев домашнего экрана и экрана блокировки. Доступ ко всем файлам Это разрешение требуется для получения обоев домашнего экрана и экрана блокировки. - Battery Optimization - Unrestricted battery optimization is required to allow running in background. + Оптимизация батареи + Для работы в фоновом режиме требуется неограниченная оптимизация расхода заряда батареи. Начать Продолжить Яркая и освежающая цветовая палитра вдохновлённая шипучими напитками. @@ -114,7 +114,7 @@ Применяйте собственные цвета к определенным приложениям которые не соответствуют системным monet Назад Разрешения - Optimization + Оптимизация Выберите метод Автозапуск Запустить службу при загрузке @@ -150,5 +150,5 @@ Пользовательские приложения Запускаемые приложения Все приложения - It\'s not mandatory but recommended to disable the battery optimization + Это не обязательно, но рекомендуется отключить оптимизацию батареи From 1fc08830cc7a7f7e298bc210a504e7344fca713d Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 17 Sep 2024 20:46:15 +0600 Subject: [PATCH 10/29] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 11d21dc0..55a581f6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,5 @@ local.properties /app/debug/ /app/release/ /*.hprof -/.idea/deploymentTargetDropDown.xml +/.idea/* /.kotlin/sessions/*.salive From c8bde7dd43f8e8fdceb49f20e3d5f949d9e5732d Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 17 Sep 2024 20:47:06 +0600 Subject: [PATCH 11/29] Fix keyguard buttons background color not visible on some custom ROMs --- .../colorblendr/utils/DynamicColors.kt | 72 ++++++++++--------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 54bb9c28..7b0ab686 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -164,7 +164,9 @@ object DynamicColors { resourceName = "surface", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, - darkModeColorIndex = 11 + darkModeColorIndex = 11, + lightModeLightnessAdjustment = -2, + darkModeLightnessAdjustment = 8 ) ) add( @@ -268,34 +270,34 @@ object DynamicColors { darkModeColorIndex = 9 ) ) -// add( -// ColorMapping( -// resourceName = "error", -// lightModeColorCode = Color.parseColor("#1EB326"), -// darkModeColorCode = Color.parseColor("#B5F2B8") -// ) -// ) -// add( -// ColorMapping( -// resourceName = "on_error", -// lightModeColorCode = Color.parseColor("#FFFFFF"), -// darkModeColorCode = Color.parseColor("#106014") -// ) -// ) -// add( -// ColorMapping( -// resourceName = "error_container", -// lightModeColorCode = Color.parseColor("#DCF9DE"), -// darkModeColorCode = Color.parseColor("#188C1D") -// ) -// ) -// add( -// ColorMapping( -// resourceName = "on_error_container", -// lightModeColorCode = Color.parseColor("#0B410E"), -// darkModeColorCode = Color.parseColor("#DCF9DE") -// ) -// ) + // add( + // ColorMapping( + // resourceName = "error", + // lightModeColorCode = Color.parseColor("#1EB326"), + // darkModeColorCode = Color.parseColor("#B5F2B8") + // ) + // ) + // add( + // ColorMapping( + // resourceName = "on_error", + // lightModeColorCode = Color.parseColor("#FFFFFF"), + // darkModeColorCode = Color.parseColor("#106014") + // ) + // ) + // add( + // ColorMapping( + // resourceName = "error_container", + // lightModeColorCode = Color.parseColor("#DCF9DE"), + // darkModeColorCode = Color.parseColor("#188C1D") + // ) + // ) + // add( + // ColorMapping( + // resourceName = "on_error_container", + // lightModeColorCode = Color.parseColor("#0B410E"), + // darkModeColorCode = Color.parseColor("#DCF9DE") + // ) + // ) add( ColorMapping( resourceName = "control_activated", @@ -304,7 +306,7 @@ object DynamicColors { darkModeColorIndex = 4 ) ) -// add(ColorMapping(resourceName = "control_normal")) + // add(ColorMapping(resourceName = "control_normal")) add( ColorMapping( resourceName = "control_highlight", @@ -312,11 +314,11 @@ object DynamicColors { darkModeColorCode = Color.parseColor("#33FFFFFF") ) ) -// add(ColorMapping(resourceName = "text_primary_inverse")) -// add(ColorMapping(resourceName = "text_secondary_and_tertiary_inverse")) -// add(ColorMapping(resourceName = "text_primary_inverse_disable_only")) -// add(ColorMapping(resourceName = "text_secondary_and_tertiary_inverse_disabled")) -// add(ColorMapping(resourceName = "text_hint_inverse")) + // add(ColorMapping(resourceName = "text_primary_inverse")) + // add(ColorMapping(resourceName = "text_secondary_and_tertiary_inverse")) + // add(ColorMapping(resourceName = "text_primary_inverse_disable_only")) + // add(ColorMapping(resourceName = "text_secondary_and_tertiary_inverse_disabled")) + // add(ColorMapping(resourceName = "text_hint_inverse")) add( ColorMapping( resourceName = "palette_key_color_primary", From fe695570413c4119336570e42f6763d2bd599bce Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 17 Sep 2024 21:12:54 +0600 Subject: [PATCH 12/29] Bump AGP & dependencies --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7333773e..7a9573df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.5.2" +agp = "8.6.0" androidUtils = "0.0.5" annotation = "1.8.2" appcompat = "1.7.0" @@ -12,8 +12,8 @@ flexbox = "3.0.0" glide = "4.16.0" gson = "2.11.0" hiddenapibypassVersion = "4.3" -kapt = "2.0.0-RC1" -kotlin = "1.9.23" +kapt = "2.0.0" +kotlin = "2.0.0" libsuVersion = "5.2.2" material = "1.12.0" palette = "1.0.0" From 40fc25e4726bc5d67ba6f55e94ab13575ba16539 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 17 Sep 2024 21:25:58 +0600 Subject: [PATCH 13/29] Improve a few dynamic colors --- .../colorblendr/utils/DynamicColors.kt | 58 +++++-------------- 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 7b0ab686..c84fd204 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -34,18 +34,6 @@ object DynamicColors { * This is a list of all the dynamic and fixed colors that are available in the system. */ init { - /* - * **Dynamic colors:** - * -> First item is the name of the color. - * -> Second item is the tonal palette index. - * 0 = primary - * 1 = secondary - * 2 = tertiary - * 3 = neutral - * 4 = neutral variant - * -> Third item is the color index in light mode. - * -> Fourth item is the color index in dark mode. - */ ALL_DYNAMIC_COLORS_MAPPED.apply { add( ColorMapping( @@ -182,15 +170,19 @@ object DynamicColors { resourceName = "surface_container_low", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, - darkModeColorIndex = 10 + darkModeColorIndex = 10, + lightModeLightnessAdjustment = 1, + darkModeLightnessAdjustment = -22 ) ) add( ColorMapping( resourceName = "surface_container_lowest", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = 1, - darkModeColorIndex = 11 + lightModeColorIndex = 2, + darkModeColorIndex = 10, + lightModeLightnessAdjustment = 4, + darkModeLightnessAdjustment = -26 ) ) add( @@ -209,16 +201,18 @@ object DynamicColors { tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, darkModeColorIndex = 10, - lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = 8 + lightModeLightnessAdjustment = -4, + darkModeLightnessAdjustment = -16 ) ) add( ColorMapping( resourceName = "surface_container_highest", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = 3, - darkModeColorIndex = 9 + lightModeColorIndex = 2, + darkModeColorIndex = 10, + lightModeLightnessAdjustment = -6, + darkModeLightnessAdjustment = -12 ) ) add( @@ -361,17 +355,6 @@ object DynamicColors { ) } - /* - * **Fixed colors:** - * -> First item is the name of the color. - * -> Second item is the tonal palette index. - * 0 = primary - * 1 = secondary - * 2 = tertiary - * 3 = neutral - * 4 = neutral variant - * -> Third item is the color index. - */ FIXED_COLORS_MAPPED.apply { add( ColorMapping( @@ -460,19 +443,8 @@ object DynamicColors { } /* - * **M3 ref colors:** - * -> First item is the name of the color. - * -> Second item is the lightness percentage to increase or decrease - * from the base color given by the second item of the inner pair. - * -> Third item is the tonal palette index. - * 0 = primary - * 1 = secondary - * 2 = tertiary - * 3 = neutral - * 4 = neutral variant - * -> Fourth item is the color index. - * - * Google uses "gm3" prefix for these resources, MaterialComponents uses "m3" instead. + * Google uses the "gm3" prefix for these resources, + * while MaterialComponents uses "m3" instead. */ M3_REF_PALETTE.apply { add( From cdbf0753e38397dc4de26a97b0bf60aa115b6db5 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 00:01:00 +0600 Subject: [PATCH 14/29] Add support for custom secondary and tertiary colors (closes #45) Available in Settings > 3 dot menu > Advanced --- app/build.gradle.kts | 1 + .../drdisagree/colorblendr/common/Const.kt | 4 +- .../ui/fragments/SettingsAdvancedFragment.kt | 131 ++++++++++++++++++ .../ui/fragments/SettingsFragment.kt | 48 +++++-- .../ui/widgets/ColorPickerWidget.kt | 52 +++---- .../drdisagree/colorblendr/utils/ColorUtil.kt | 23 +++ .../colorblendr/utils/FragmentUtil.kt | 2 + .../colorblendr/utils/OverlayManager.kt | 32 +++-- app/src/main/res/drawable/ic_light_dark.xml | 10 ++ .../res/layout/fragment_settings_advanced.xml | 50 +++++++ app/src/main/res/menu/settings_menu.xml | 6 + app/src/main/res/values/strings.xml | 5 + gradle/libs.versions.toml | 4 +- 13 files changed, 319 insertions(+), 49 deletions(-) create mode 100644 app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsAdvancedFragment.kt create mode 100644 app/src/main/res/drawable/ic_light_dark.xml create mode 100644 app/src/main/res/layout/fragment_settings_advanced.xml create mode 100644 app/src/main/res/menu/settings_menu.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cbd7aa0f..dfdb3c75 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -98,5 +98,6 @@ dependencies { implementation(libs.recyclerview) implementation(libs.recyclerview.selection) implementation(libs.blurView) + implementation(libs.lifecycle.common.jvm) annotationProcessor(libs.glide.compiler) } \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/colorblendr/common/Const.kt b/app/src/main/java/com/drdisagree/colorblendr/common/Const.kt index 0fb58f7a..ea0554d2 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/common/Const.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/common/Const.kt @@ -24,8 +24,10 @@ object Const { const val MONET_BACKGROUND_LIGHTNESS: String = "monetBackgroundLightnessValue" const val MONET_ACCURATE_SHADES: String = "monetAccurateShades" const val MONET_PITCH_BLACK_THEME: String = "monetPitchBlackTheme" - const val MONET_SEED_COLOR: String = "monetSeedColor" const val MONET_SEED_COLOR_ENABLED: String = "monetSeedColorEnabled" + const val MONET_SEED_COLOR: String = "monetSeedColor" + const val MONET_SECONDARY_COLOR: String = "monetSecondaryColor" + const val MONET_TERTIARY_COLOR: String = "monetTertiaryColor" const val MANUAL_OVERRIDE_COLORS: String = "manualOverrideColors" const val MONET_LAST_UPDATED: String = "monetLastUpdated" const val MONET_STYLE_ORIGINAL_NAME: String = "monetStyleOriginalName" diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsAdvancedFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsAdvancedFragment.kt new file mode 100644 index 00000000..81b35df6 --- /dev/null +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsAdvancedFragment.kt @@ -0,0 +1,131 @@ +package com.drdisagree.colorblendr.ui.fragments + +import android.graphics.Color +import android.os.Bundle +import android.view.LayoutInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import com.drdisagree.colorblendr.R +import com.drdisagree.colorblendr.common.Const +import com.drdisagree.colorblendr.common.Const.MONET_LAST_UPDATED +import com.drdisagree.colorblendr.common.Const.MONET_SECONDARY_COLOR +import com.drdisagree.colorblendr.common.Const.MONET_SEED_COLOR_ENABLED +import com.drdisagree.colorblendr.common.Const.MONET_TERTIARY_COLOR +import com.drdisagree.colorblendr.common.Const.workingMethod +import com.drdisagree.colorblendr.config.RPrefs.getBoolean +import com.drdisagree.colorblendr.config.RPrefs.getInt +import com.drdisagree.colorblendr.config.RPrefs.putInt +import com.drdisagree.colorblendr.config.RPrefs.putLong +import com.drdisagree.colorblendr.databinding.FragmentSettingsAdvancedBinding +import com.drdisagree.colorblendr.ui.viewmodels.SharedViewModel +import com.drdisagree.colorblendr.utils.MiscUtil.setToolbarTitle +import com.drdisagree.colorblendr.utils.OverlayManager.applyFabricatedColors +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import me.jfenn.colorpickerdialog.dialogs.ColorPickerDialog +import me.jfenn.colorpickerdialog.views.picker.ImagePickerView + +class SettingsAdvancedFragment : Fragment() { + + private lateinit var binding: FragmentSettingsAdvancedBinding + private var sharedViewModel: SharedViewModel? = null + private val notShizukuMode: Boolean = workingMethod != Const.WorkMethod.SHIZUKU + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + sharedViewModel = ViewModelProvider(requireActivity())[SharedViewModel::class.java] + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentSettingsAdvancedBinding.inflate(inflater, container, false) + + setToolbarTitle(requireContext(), R.string.advanced_settings, true, binding.header.toolbar) + + // Secondary color + var monetSecondaryColor = getInt(MONET_SECONDARY_COLOR, Color.WHITE) + binding.secondaryColorPicker.isEnabled = + getBoolean(MONET_SEED_COLOR_ENABLED, false) && notShizukuMode + binding.secondaryColorPicker.previewColor = + getInt(MONET_SECONDARY_COLOR, monetSecondaryColor) + binding.secondaryColorPicker.setOnClickListener { + ColorPickerDialog() + .withCornerRadius(10f) + .withColor(monetSecondaryColor) + .withAlphaEnabled(false) + .withPicker(ImagePickerView::class.java) + .withListener { _: ColorPickerDialog?, color: Int -> + if (monetSecondaryColor != color) { + monetSecondaryColor = color + binding.secondaryColorPicker.previewColor = color + putInt(MONET_SECONDARY_COLOR, monetSecondaryColor) + + applyFabricatedColors() + } + } + .show(getChildFragmentManager(), "secondaryColorPicker") + } + + // Tertiary color + var monetTertiaryColor = getInt(MONET_TERTIARY_COLOR, Color.WHITE) + binding.tertiaryColorPicker.isEnabled = + getBoolean(MONET_SEED_COLOR_ENABLED, false) && notShizukuMode + binding.tertiaryColorPicker.previewColor = monetTertiaryColor + binding.tertiaryColorPicker.setOnClickListener { + ColorPickerDialog() + .withCornerRadius(10f) + .withColor(monetTertiaryColor) + .withAlphaEnabled(false) + .withPicker(ImagePickerView::class.java) + .withListener { _: ColorPickerDialog?, color: Int -> + if (monetTertiaryColor != color) { + monetTertiaryColor = color + binding.tertiaryColorPicker.previewColor = color + putInt(MONET_TERTIARY_COLOR, monetTertiaryColor) + + applyFabricatedColors() + } + } + .show(getChildFragmentManager(), "tertiaryColorPicker") + } + + return binding.getRoot() + } + + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + getParentFragmentManager().popBackStackImmediate() + return true + } + return super.onOptionsItemSelected(item) + } + + private fun applyFabricatedColors() { + CoroutineScope(Dispatchers.Main).launch { + putLong(MONET_LAST_UPDATED, System.currentTimeMillis()) + delay(300) + withContext(Dispatchers.IO) { + try { + applyFabricatedColors(requireContext()) + } catch (ignored: Exception) { + } + } + } + } + + companion object { + private val TAG: String = SettingsAdvancedFragment::class.java.simpleName + } +} \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsFragment.kt index 23f04520..84350047 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/SettingsFragment.kt @@ -8,6 +8,8 @@ import android.content.Intent import android.os.Bundle import android.util.Log import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup @@ -16,7 +18,10 @@ import android.widget.Toast import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.view.MenuHost +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.ViewModelProvider import com.drdisagree.colorblendr.ColorBlendr.Companion.appContext import com.drdisagree.colorblendr.R @@ -108,6 +113,12 @@ class SettingsFragment : Fragment() { } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + sharedViewModel = ViewModelProvider(requireActivity())[SharedViewModel::class.java] + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -235,17 +246,38 @@ class SettingsFragment : Fragment() { return binding.getRoot() } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) - sharedViewModel = ViewModelProvider(requireActivity())[SharedViewModel::class.java] + val menuHost: MenuHost = requireActivity() + menuHost.addMenuProvider(object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + menu.clear() + menuInflater.inflate(R.menu.settings_menu, menu) + } + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean { + return when (menuItem.itemId) { + R.id.advanced_settings -> { + HomeFragment.replaceFragment( + SettingsAdvancedFragment() + ) + true + } + + else -> { + false + } + } + } + }, viewLifecycleOwner, Lifecycle.State.RESUMED) } private fun crossfade(view: View) { try { val animTime: Int = resources.getInteger(android.R.integer.config_mediumAnimTime) if (view.visibility == View.GONE) { - view.setAlpha(0f) + view.alpha = 0f view.visibility = View.VISIBLE view.animate() .alpha(1f) @@ -259,7 +291,7 @@ class SettingsFragment : Fragment() { override fun onAnimationEnd(animation: Animator) { super.onAnimationEnd(animation) try { - view.setAlpha(0f) + view.alpha = 0f view.visibility = View.GONE } catch (ignored: Exception) { } @@ -272,8 +304,8 @@ class SettingsFragment : Fragment() { private fun backupRestoreSettings(isBackingUp: Boolean) { val fileIntent = Intent().apply { - setAction(if (isBackingUp) Intent.ACTION_CREATE_DOCUMENT else Intent.ACTION_GET_CONTENT) - setType("*/*") + action = if (isBackingUp) Intent.ACTION_CREATE_DOCUMENT else Intent.ACTION_GET_CONTENT + type = "*/*" putExtra(Intent.EXTRA_TITLE, "theme_config" + ".colorblendr") } if (isBackingUp) { @@ -416,7 +448,7 @@ class SettingsFragment : Fragment() { } companion object { - private val TAG: String = SettingsFragment::class.java.getSimpleName() + private val TAG: String = SettingsFragment::class.java.simpleName private val colorNames: Array> = ColorUtil.colorNames fun clearCustomColors() { diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/ColorPickerWidget.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/ColorPickerWidget.kt index 1023bcae..e0305340 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/ColorPickerWidget.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/widgets/ColorPickerWidget.kt @@ -70,7 +70,7 @@ class ColorPickerWidget : RelativeLayout { } if (!iconSpaceReserved) { - iconImageView!!.setVisibility(GONE) + iconImageView!!.visibility = GONE } if (colorResId != Int.MIN_VALUE) { @@ -88,24 +88,28 @@ class ColorPickerWidget : RelativeLayout { fun setSummary(summaryResId: Int) { summaryTextView!!.setText(summaryResId) + + summaryTextView!!.visibility = if (summaryResId == 0) GONE else VISIBLE } fun setSummary(summary: String?) { summaryTextView!!.text = summary + + summaryTextView!!.visibility = if (summary == null) GONE else VISIBLE } fun setIcon(icon: Int) { iconImageView!!.setImageResource(icon) - iconImageView!!.setVisibility(VISIBLE) + iconImageView!!.visibility = VISIBLE } fun setIcon(drawable: Drawable?) { iconImageView!!.setImageDrawable(drawable) - iconImageView!!.setVisibility(VISIBLE) + iconImageView!!.visibility = VISIBLE } fun setIconVisibility(visibility: Int) { - iconImageView!!.setVisibility(visibility) + iconImageView!!.visibility = visibility } @get:ColorInt @@ -129,7 +133,7 @@ class ColorPickerWidget : RelativeLayout { GradientDrawable.Orientation.LEFT_RIGHT, intArrayOf(colorTemp, colorTemp) ) - drawable.setShape(GradientDrawable.OVAL) + drawable.shape = GradientDrawable.OVAL colorView!!.background = drawable } @@ -145,25 +149,25 @@ class ColorPickerWidget : RelativeLayout { val color: Int = a.getColor(0, 0) a.recycle() - iconImageView!!.setImageTintList(ColorStateList.valueOf(color)) + iconImageView!!.imageTintList = ColorStateList.valueOf(color) - titleTextView!!.setAlpha(1.0f) - summaryTextView!!.setAlpha(0.8f) + titleTextView!!.alpha = 1.0f + summaryTextView!!.alpha = 0.8f } else { if (isDarkMode) { - iconImageView!!.setImageTintList(ColorStateList.valueOf(Color.DKGRAY)) + iconImageView!!.imageTintList = ColorStateList.valueOf(Color.DKGRAY) } else { - iconImageView!!.setImageTintList(ColorStateList.valueOf(Color.LTGRAY)) + iconImageView!!.imageTintList = ColorStateList.valueOf(Color.LTGRAY) } - titleTextView!!.setAlpha(0.6f) - summaryTextView!!.setAlpha(0.4f) + titleTextView!!.alpha = 0.6f + summaryTextView!!.alpha = 0.4f } - container!!.setEnabled(enabled) - titleTextView!!.setEnabled(enabled) - summaryTextView!!.setEnabled(enabled) - iconImageView!!.setEnabled(enabled) + container!!.isEnabled = enabled + titleTextView!!.isEnabled = enabled + summaryTextView!!.isEnabled = enabled + iconImageView!!.isEnabled = enabled previewColor = if (enabled) previewColor else Color.GRAY } @@ -175,17 +179,17 @@ class ColorPickerWidget : RelativeLayout { summaryTextView = findViewById(R.id.summary) colorView = findViewById(R.id.color_widget) - container!!.setId(generateViewId()) - iconImageView!!.setId(generateViewId()) - titleTextView!!.setId(generateViewId()) - summaryTextView!!.setId(generateViewId()) - colorView!!.setId(generateViewId()) + container!!.id = generateViewId() + iconImageView!!.id = generateViewId() + titleTextView!!.id = generateViewId() + summaryTextView!!.id = generateViewId() + colorView!!.id = generateViewId() - val layoutParams: LayoutParams = - findViewById(R.id.text_container).layoutParams as LayoutParams + val textContainer = findViewById(R.id.text_container) + val layoutParams: LayoutParams = textContainer.layoutParams as LayoutParams layoutParams.addRule(START_OF, colorView!!.id) layoutParams.addRule(END_OF, iconImageView!!.id) - findViewById(R.id.text_container).setLayoutParams(layoutParams) + textContainer.layoutParams = layoutParams } override fun setOnClickListener(l: OnClickListener?) { diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt index 60ff9e55..7c8832b9 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/ColorUtil.kt @@ -9,7 +9,10 @@ import androidx.core.content.ContextCompat import androidx.core.graphics.ColorUtils import com.drdisagree.colorblendr.ColorBlendr.Companion.appContext import com.drdisagree.colorblendr.common.Const +import com.drdisagree.colorblendr.common.Const.MONET_SECONDARY_COLOR +import com.drdisagree.colorblendr.common.Const.MONET_TERTIARY_COLOR import com.drdisagree.colorblendr.config.RPrefs +import com.drdisagree.colorblendr.config.RPrefs.getInt import com.drdisagree.colorblendr.utils.ColorSchemeUtil.MONET import com.drdisagree.colorblendr.utils.ColorSchemeUtil.generateColorPalette import com.drdisagree.colorblendr.utils.cam.Cam @@ -84,6 +87,26 @@ object ColorUtil { isDark ) + // Set custom secondary accent color + val secondaryAccent = getInt(MONET_SECONDARY_COLOR, Color.WHITE) + if (secondaryAccent != Color.WHITE) { + palette[1] = generateColorPalette( + style, + secondaryAccent, + isDark + )[0] + } + + // Set custom tertiary accent color + val tertiaryAccent = getInt(MONET_TERTIARY_COLOR, Color.WHITE) + if (tertiaryAccent != Color.WHITE) { + palette[2] = generateColorPalette( + style, + tertiaryAccent, + isDark + )[0] + } + // Modify colors for (i in palette.indices) { val modifiedShades = ColorModifiers.modifyColors( diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FragmentUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FragmentUtil.kt index b9e2db6a..d4fa84ef 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FragmentUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FragmentUtil.kt @@ -7,6 +7,7 @@ import com.drdisagree.colorblendr.ui.fragments.AboutFragment import com.drdisagree.colorblendr.ui.fragments.ColorPaletteFragment import com.drdisagree.colorblendr.ui.fragments.ColorsFragment import com.drdisagree.colorblendr.ui.fragments.PerAppThemeFragment +import com.drdisagree.colorblendr.ui.fragments.SettingsAdvancedFragment import com.drdisagree.colorblendr.ui.fragments.SettingsFragment import com.drdisagree.colorblendr.ui.fragments.StylesFragment import com.drdisagree.colorblendr.ui.fragments.ThemeFragment @@ -94,6 +95,7 @@ object FragmentUtil { private fun isInGroup4(fragment: Fragment): Boolean { return fragment is SettingsFragment || + fragment is SettingsAdvancedFragment || fragment is AboutFragment } diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt index 4c961bf2..381790fc 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt @@ -9,6 +9,8 @@ import com.drdisagree.colorblendr.ColorBlendr.Companion.shizukuConnection import com.drdisagree.colorblendr.R import com.drdisagree.colorblendr.common.Const import com.drdisagree.colorblendr.config.RPrefs +import com.drdisagree.colorblendr.config.RPrefs.getBoolean +import com.drdisagree.colorblendr.config.RPrefs.getInt import com.drdisagree.colorblendr.extension.ThemeOverlayPackage import com.drdisagree.colorblendr.utils.ColorUtil.generateModifiedColors import com.drdisagree.colorblendr.utils.fabricated.FabricatedOverlayResource @@ -190,8 +192,8 @@ object OverlayManager { } suspend fun applyFabricatedColors(context: Context) { - if (!RPrefs.getBoolean(Const.THEMING_ENABLED, true) && - !RPrefs.getBoolean(Const.SHIZUKU_THEMING_ENABLED, true) + if (!getBoolean(Const.THEMING_ENABLED, true) && + !getBoolean(Const.SHIZUKU_THEMING_ENABLED, true) ) { return } @@ -204,13 +206,13 @@ object OverlayManager { context, RPrefs.getString(Const.MONET_STYLE, context.getString(R.string.monet_tonalspot))!! ) - val monetAccentSaturation = RPrefs.getInt(Const.MONET_ACCENT_SATURATION, 100) - val monetBackgroundSaturation = RPrefs.getInt(Const.MONET_BACKGROUND_SATURATION, 100) - val monetBackgroundLightness = RPrefs.getInt(Const.MONET_BACKGROUND_LIGHTNESS, 100) - val pitchBlackTheme = RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false) - val accurateShades = RPrefs.getBoolean(Const.MONET_ACCURATE_SHADES, true) + val monetAccentSaturation = getInt(Const.MONET_ACCENT_SATURATION, 100) + val monetBackgroundSaturation = getInt(Const.MONET_BACKGROUND_SATURATION, 100) + val monetBackgroundLightness = getInt(Const.MONET_BACKGROUND_LIGHTNESS, 100) + val pitchBlackTheme = getBoolean(Const.MONET_PITCH_BLACK_THEME, false) + val accurateShades = getBoolean(Const.MONET_ACCURATE_SHADES, true) - val paletteLight = ColorUtil.generateModifiedColors( + val paletteLight = generateModifiedColors( style = style, accentSaturation = monetAccentSaturation, backgroundSaturation = monetBackgroundSaturation, @@ -221,7 +223,7 @@ object OverlayManager { isDark = false ) - val paletteDark = ColorUtil.generateModifiedColors( + val paletteDark = generateModifiedColors( style = style, accentSaturation = monetAccentSaturation, backgroundSaturation = monetBackgroundSaturation, @@ -301,7 +303,7 @@ object OverlayManager { ) } - if (!RPrefs.getBoolean(Const.TINT_TEXT_COLOR, true)) { + if (!getBoolean(Const.TINT_TEXT_COLOR, true)) { fabricatedOverlays[0].setColor("text_color_primary_device_default_dark", Color.WHITE) fabricatedOverlays[0].setColor("text_color_secondary_device_default_dark", -0x4c000001) fabricatedOverlays[0].setColor("text_color_primary_device_default_light", Color.BLACK) @@ -379,11 +381,11 @@ object OverlayManager { context.getString(R.string.monet_tonalspot) )!! ), - RPrefs.getInt(Const.MONET_ACCENT_SATURATION, 100), - RPrefs.getInt(Const.MONET_BACKGROUND_SATURATION, 100), - RPrefs.getInt(Const.MONET_BACKGROUND_LIGHTNESS, 100), - RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false), - RPrefs.getBoolean(Const.MONET_ACCURATE_SHADES, true), + getInt(Const.MONET_ACCENT_SATURATION, 100), + getInt(Const.MONET_BACKGROUND_SATURATION, 100), + getInt(Const.MONET_BACKGROUND_LIGHTNESS, 100), + getBoolean(Const.MONET_PITCH_BLACK_THEME, false), + getBoolean(Const.MONET_ACCURATE_SHADES, true), modifyPitchBlack = false ) } diff --git a/app/src/main/res/drawable/ic_light_dark.xml b/app/src/main/res/drawable/ic_light_dark.xml new file mode 100644 index 00000000..7052f703 --- /dev/null +++ b/app/src/main/res/drawable/ic_light_dark.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_settings_advanced.xml b/app/src/main/res/layout/fragment_settings_advanced.xml new file mode 100644 index 00000000..7115e78d --- /dev/null +++ b/app/src/main/res/layout/fragment_settings_advanced.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/settings_menu.xml b/app/src/main/res/menu/settings_menu.xml new file mode 100644 index 00000000..e83503e5 --- /dev/null +++ b/app/src/main/res/menu/settings_menu.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 607d79fd..52454c9b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -163,4 +163,9 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7a9573df..e14a6a39 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,6 +23,7 @@ recyclerviewSelection = "1.1.0" remotepreferences = "0.8" shizuku = "12.1.0" workRuntime = "2.9.1" +lifecycleCommonJvm = "2.8.5" [plugins] agp-app = { id = "com.android.application", version.ref = "agp" } @@ -54,4 +55,5 @@ recyclerview-selection = { module = "androidx.recyclerview:recyclerview-selectio remotepreferences = { module = "com.crossbowffs.remotepreferences:remotepreferences", version.ref = "remotepreferences" } shizuku-api = { module = "dev.rikka.shizuku:api", version.ref = "shizuku" } shizuku-provider = { module = "dev.rikka.shizuku:provider", version.ref = "shizuku" } -work-runtime = { module = "androidx.work:work-runtime", version.ref = "workRuntime" } \ No newline at end of file +work-runtime = { module = "androidx.work:work-runtime", version.ref = "workRuntime" } +lifecycle-common-jvm = { group = "androidx.lifecycle", name = "lifecycle-common-jvm", version.ref = "lifecycleCommonJvm" } \ No newline at end of file From f9011fb4d8989a6b5f58dd79bb0d58e355847edb Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 00:29:39 +0600 Subject: [PATCH 15/29] Fix gboard key colors --- .../com/drdisagree/colorblendr/utils/DynamicColors.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index c84fd204..19d9c6fd 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -172,7 +172,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 1, - darkModeLightnessAdjustment = -22 + darkModeLightnessAdjustment = -36 ) ) add( @@ -182,7 +182,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 4, - darkModeLightnessAdjustment = -26 + darkModeLightnessAdjustment = -48 ) ) add( @@ -202,7 +202,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -4, - darkModeLightnessAdjustment = -16 + darkModeLightnessAdjustment = -4 ) ) add( @@ -212,7 +212,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -6, - darkModeLightnessAdjustment = -12 + darkModeLightnessAdjustment = 16 ) ) add( From d45c562c073f597ebecc53db852fb1419902d2cb Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 12:17:25 +0600 Subject: [PATCH 16/29] Add mode-specific theme toggle (closes #108) --- app/src/main/AndroidManifest.xml | 1 + .../drdisagree/colorblendr/common/Const.kt | 25 +- .../ui/fragments/SettingsAdvancedFragment.kt | 20 +- .../colorblendr/ui/fragments/ThemeFragment.kt | 271 ++++++++++-------- .../colorblendr/utils/SystemUtil.kt | 6 +- .../res/layout/fragment_settings_advanced.xml | 8 + app/src/main/res/values/strings.xml | 2 + 7 files changed, 204 insertions(+), 129 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fc1f3e02..3f7abd65 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,6 +58,7 @@ + putBoolean(MODE_SPECIFIC_THEMES, isChecked) + applyFabricatedColors() + } + return binding.getRoot() } diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/ThemeFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/ThemeFragment.kt index 499c60f3..5248c47d 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/ThemeFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/ThemeFragment.kt @@ -1,5 +1,6 @@ package com.drdisagree.colorblendr.ui.fragments +import android.content.res.Configuration import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -48,6 +49,7 @@ class ThemeFragment : Fragment() { private val monetBackgroundLightness: IntArray = intArrayOf( getInt(MONET_BACKGROUND_LIGHTNESS, 100) ) + private var wasDarkMode: Boolean = isDarkMode private val notShizukuMode: Boolean = workingMethod != Const.WorkMethod.SHIZUKU override fun onCreateView( @@ -60,98 +62,99 @@ class ThemeFragment : Fragment() { setToolbarTitle(requireContext(), R.string.theme, true, binding.header.toolbar) // Color preview titles - binding.colorAccent1.title.setText(R.string.primary) - binding.colorAccent2.title.setText(R.string.secondary) - binding.colorAccent3.title.setText(R.string.tertiary) - binding.colorNeutral1.title.setText(R.string.neutral_1) - binding.colorNeutral2.title.setText(R.string.neutral_2) - - // Monet primary accent saturation - binding.accentSaturation.seekbarProgress = getInt(MONET_ACCENT_SATURATION, 100) - binding.accentSaturation.setOnSeekbarChangeListener(object : OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - binding.accentSaturation.setSelectedProgress() - monetAccentSaturation[0] = progress - updatePreviewColors() - } + binding.apply { + colorAccent1.title.setText(R.string.primary) + colorAccent2.title.setText(R.string.secondary) + colorAccent3.title.setText(R.string.tertiary) + colorNeutral1.title.setText(R.string.neutral_1) + colorNeutral2.title.setText(R.string.neutral_2) - override fun onStartTrackingTouch(seekBar: SeekBar) { - } + // Monet primary accent saturation + accentSaturation.seekbarProgress = getInt(MONET_ACCENT_SATURATION, 100) + accentSaturation.setOnSeekbarChangeListener(object : OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + accentSaturation.setSelectedProgress() + monetAccentSaturation[0] = progress + updatePreviewColors() + } - override fun onStopTrackingTouch(seekBar: SeekBar) { - monetAccentSaturation[0] = seekBar.progress - putInt(MONET_ACCENT_SATURATION, monetAccentSaturation[0]) - applyFabricatedColors() - } - }) - - // Long Click Reset - binding.accentSaturation.setResetClickListener { - monetAccentSaturation[0] = 100 - updatePreviewColors() - clearPref(MONET_ACCENT_SATURATION) - applyFabricatedColors() - true - } - binding.accentSaturation.setEnabled(notShizukuMode) - - // Monet background saturation - binding.backgroundSaturation.seekbarProgress = getInt(MONET_BACKGROUND_SATURATION, 100) - binding.backgroundSaturation.setOnSeekbarChangeListener(object : OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - binding.backgroundSaturation.setSelectedProgress() - monetBackgroundSaturation[0] = progress - updatePreviewColors() - } + override fun onStartTrackingTouch(seekBar: SeekBar) {} - override fun onStartTrackingTouch(seekBar: SeekBar) { - } + override fun onStopTrackingTouch(seekBar: SeekBar) { + monetAccentSaturation[0] = seekBar.progress + putInt(MONET_ACCENT_SATURATION, monetAccentSaturation[0]) + applyFabricatedColors() + } + }) - override fun onStopTrackingTouch(seekBar: SeekBar) { - monetBackgroundSaturation[0] = seekBar.progress - putInt(MONET_BACKGROUND_SATURATION, monetBackgroundSaturation[0]) + // Long Click Reset + accentSaturation.setResetClickListener { + monetAccentSaturation[0] = 100 + updatePreviewColors() + clearPref(MONET_ACCENT_SATURATION) applyFabricatedColors() + true } - }) - - // Reset button - binding.backgroundSaturation.setResetClickListener { - monetBackgroundSaturation[0] = 100 - updatePreviewColors() - clearPref(MONET_BACKGROUND_SATURATION) - applyFabricatedColors() - true - } - binding.backgroundSaturation.setEnabled(notShizukuMode) - - // Monet background lightness - binding.backgroundLightness.seekbarProgress = getInt(MONET_BACKGROUND_LIGHTNESS, 100) - binding.backgroundLightness.setOnSeekbarChangeListener(object : OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - binding.backgroundLightness.setSelectedProgress() - monetBackgroundLightness[0] = progress + accentSaturation.setEnabled(notShizukuMode) + + // Monet background saturation + backgroundSaturation.seekbarProgress = getInt(MONET_BACKGROUND_SATURATION, 100) + backgroundSaturation.setOnSeekbarChangeListener(object : + OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + backgroundSaturation.setSelectedProgress() + monetBackgroundSaturation[0] = progress + updatePreviewColors() + } + + override fun onStartTrackingTouch(seekBar: SeekBar) {} + + override fun onStopTrackingTouch(seekBar: SeekBar) { + monetBackgroundSaturation[0] = seekBar.progress + putInt(MONET_BACKGROUND_SATURATION, monetBackgroundSaturation[0]) + applyFabricatedColors() + } + }) + + // Reset button + backgroundSaturation.setResetClickListener { + monetBackgroundSaturation[0] = 100 updatePreviewColors() + clearPref(MONET_BACKGROUND_SATURATION) + applyFabricatedColors() + true } + backgroundSaturation.setEnabled(notShizukuMode) - override fun onStartTrackingTouch(seekBar: SeekBar) { - } + // Monet background lightness + backgroundLightness.seekbarProgress = getInt(MONET_BACKGROUND_LIGHTNESS, 100) + backgroundLightness.setOnSeekbarChangeListener(object : + OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + backgroundLightness.setSelectedProgress() + monetBackgroundLightness[0] = progress + updatePreviewColors() + } + + override fun onStartTrackingTouch(seekBar: SeekBar) {} - override fun onStopTrackingTouch(seekBar: SeekBar) { - monetBackgroundLightness[0] = seekBar.progress - putInt(MONET_BACKGROUND_LIGHTNESS, monetBackgroundLightness[0]) + override fun onStopTrackingTouch(seekBar: SeekBar) { + monetBackgroundLightness[0] = seekBar.progress + putInt(MONET_BACKGROUND_LIGHTNESS, monetBackgroundLightness[0]) + applyFabricatedColors() + } + }) + + // Long Click Reset + backgroundLightness.setResetClickListener { + monetBackgroundLightness[0] = 100 + updatePreviewColors() + clearPref(MONET_BACKGROUND_LIGHTNESS) applyFabricatedColors() + true } - }) - - // Long Click Reset - binding.backgroundLightness.setResetClickListener { - monetBackgroundLightness[0] = 100 - updatePreviewColors() - clearPref(MONET_BACKGROUND_LIGHTNESS) - applyFabricatedColors() - true + backgroundLightness.setEnabled(notShizukuMode) } - binding.backgroundLightness.setEnabled(notShizukuMode) return binding.getRoot() } @@ -162,6 +165,36 @@ class ThemeFragment : Fragment() { updatePreviewColors() } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + val isDarkMode = + newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES + + if (isDarkMode != wasDarkMode) { + updateProgressBars() + wasDarkMode = isDarkMode + } + } + + private fun updateProgressBars() { + binding.apply { + monetAccentSaturation[0] = getInt(MONET_ACCENT_SATURATION, 100) + monetBackgroundSaturation[0] = getInt(MONET_BACKGROUND_SATURATION, 100) + monetBackgroundLightness[0] = getInt(MONET_BACKGROUND_LIGHTNESS, 100) + + accentSaturation.post { + accentSaturation.seekbarProgress = monetAccentSaturation[0] + } + backgroundSaturation.post { + backgroundSaturation.seekbarProgress = monetBackgroundSaturation[0] + } + backgroundLightness.post { + backgroundLightness.seekbarProgress = monetBackgroundLightness[0] + } + } + } + private fun applyFabricatedColors() { CoroutineScope(Dispatchers.Main).launch { putLong( @@ -190,40 +223,50 @@ class ThemeFragment : Fragment() { if (colorPalette != null) { val isDarkMode: Boolean = isDarkMode - binding.colorAccent1.colorContainer.setHalfCircleColor(colorPalette[0][4]) - binding.colorAccent1.colorContainer.setFirstQuarterCircleColor(colorPalette[0][5]) - binding.colorAccent1.colorContainer.setSecondQuarterCircleColor(colorPalette[0][6]) - binding.colorAccent1.colorContainer.setSquareColor(colorPalette[0][if (!isDarkMode) 3 else 9]) - binding.colorAccent1.colorContainer.setPadding(8f) - binding.colorAccent1.colorContainer.invalidateColors() - - binding.colorAccent2.colorContainer.setHalfCircleColor(colorPalette[1][4]) - binding.colorAccent2.colorContainer.setFirstQuarterCircleColor(colorPalette[1][5]) - binding.colorAccent2.colorContainer.setSecondQuarterCircleColor(colorPalette[1][6]) - binding.colorAccent2.colorContainer.setSquareColor(colorPalette[1][if (!isDarkMode) 3 else 9]) - binding.colorAccent2.colorContainer.setPadding(8f) - binding.colorAccent2.colorContainer.invalidateColors() - - binding.colorAccent3.colorContainer.setHalfCircleColor(colorPalette[2][4]) - binding.colorAccent3.colorContainer.setFirstQuarterCircleColor(colorPalette[2][5]) - binding.colorAccent3.colorContainer.setSecondQuarterCircleColor(colorPalette[2][6]) - binding.colorAccent3.colorContainer.setSquareColor(colorPalette[2][if (!isDarkMode) 3 else 9]) - binding.colorAccent3.colorContainer.setPadding(8f) - binding.colorAccent3.colorContainer.invalidateColors() - - binding.colorNeutral1.colorContainer.setHalfCircleColor(colorPalette[3][4]) - binding.colorNeutral1.colorContainer.setFirstQuarterCircleColor(colorPalette[3][5]) - binding.colorNeutral1.colorContainer.setSecondQuarterCircleColor(colorPalette[3][6]) - binding.colorNeutral1.colorContainer.setSquareColor(colorPalette[3][if (!isDarkMode) 3 else 9]) - binding.colorNeutral1.colorContainer.setPadding(8f) - binding.colorNeutral1.colorContainer.invalidateColors() - - binding.colorNeutral2.colorContainer.setHalfCircleColor(colorPalette[4][4]) - binding.colorNeutral2.colorContainer.setFirstQuarterCircleColor(colorPalette[4][5]) - binding.colorNeutral2.colorContainer.setSecondQuarterCircleColor(colorPalette[4][6]) - binding.colorNeutral2.colorContainer.setSquareColor(colorPalette[4][if (!isDarkMode) 3 else 9]) - binding.colorNeutral2.colorContainer.setPadding(8f) - binding.colorNeutral2.colorContainer.invalidateColors() + binding.colorAccent1.colorContainer.apply { + setHalfCircleColor(colorPalette[0][4]) + setFirstQuarterCircleColor(colorPalette[0][5]) + setSecondQuarterCircleColor(colorPalette[0][6]) + setSquareColor(colorPalette[0][if (!isDarkMode) 3 else 9]) + setPadding(8f) + invalidateColors() + } + + binding.colorAccent2.colorContainer.apply { + setHalfCircleColor(colorPalette[1][4]) + setFirstQuarterCircleColor(colorPalette[1][5]) + setSecondQuarterCircleColor(colorPalette[1][6]) + setSquareColor(colorPalette[1][if (!isDarkMode) 3 else 9]) + setPadding(8f) + invalidateColors() + } + + binding.colorAccent3.colorContainer.apply { + setHalfCircleColor(colorPalette[2][4]) + setFirstQuarterCircleColor(colorPalette[2][5]) + setSecondQuarterCircleColor(colorPalette[2][6]) + setSquareColor(colorPalette[2][if (!isDarkMode) 3 else 9]) + setPadding(8f) + invalidateColors() + } + + binding.colorNeutral1.colorContainer.apply { + setHalfCircleColor(colorPalette[3][4]) + setFirstQuarterCircleColor(colorPalette[3][5]) + setSecondQuarterCircleColor(colorPalette[3][6]) + setSquareColor(colorPalette[3][if (!isDarkMode) 3 else 9]) + setPadding(8f) + invalidateColors() + } + + binding.colorNeutral2.colorContainer.apply { + setHalfCircleColor(colorPalette[4][4]) + setFirstQuarterCircleColor(colorPalette[4][5]) + setSecondQuarterCircleColor(colorPalette[4][6]) + setSquareColor(colorPalette[4][if (!isDarkMode) 3 else 9]) + setPadding(8f) + invalidateColors() + } } } @@ -253,6 +296,6 @@ class ThemeFragment : Fragment() { } companion object { - private val TAG: String = ThemeFragment::class.java.getSimpleName() + private val TAG: String = ThemeFragment::class.java.simpleName } } \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/SystemUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/SystemUtil.kt index fbbfe2c1..cac40f7f 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/SystemUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/SystemUtil.kt @@ -13,13 +13,13 @@ import com.drdisagree.colorblendr.common.Const import kotlin.math.abs object SystemUtil { + val isDarkMode: Boolean - get() = (appContext!!.resources - .configuration.uiMode and Configuration.UI_MODE_NIGHT_YES) == Configuration.UI_MODE_NIGHT_YES + get() = (appContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_YES) == Configuration.UI_MODE_NIGHT_YES fun isAppInstalled(packageName: String): Boolean { try { - appContext!! + appContext .packageManager .getPackageInfo(packageName, PackageManager.GET_META_DATA) return true diff --git a/app/src/main/res/layout/fragment_settings_advanced.xml b/app/src/main/res/layout/fragment_settings_advanced.xml index 7115e78d..f64677f1 100644 --- a/app/src/main/res/layout/fragment_settings_advanced.xml +++ b/app/src/main/res/layout/fragment_settings_advanced.xml @@ -40,6 +40,14 @@ app:summaryText="@string/custom_tertiary_color_desc" app:titleText="@string/custom_tertiary_color_title" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52454c9b..ca8bbad4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -168,4 +168,6 @@ Select pure white color to disable Custom tertiary color Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes \ No newline at end of file From 5f14cbbae17801deb4f5276d68623e6011cb8e23 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 12:33:59 +0600 Subject: [PATCH 17/29] Retain per-app theme list when ColorBlendr service is disabled (fix #66) --- .../colorblendr/ui/fragments/PerAppThemeFragment.kt | 11 +++++++---- .../drdisagree/colorblendr/utils/FabricatedUtil.kt | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/PerAppThemeFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/PerAppThemeFragment.kt index f03cf751..cb88a5aa 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/PerAppThemeFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/PerAppThemeFragment.kt @@ -19,6 +19,7 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.recyclerview.widget.LinearLayoutManager +import com.drdisagree.colorblendr.ColorBlendr.Companion.appContext import com.drdisagree.colorblendr.R import com.drdisagree.colorblendr.common.Const.APP_LIST_FILTER_METHOD import com.drdisagree.colorblendr.common.Const.AppType @@ -31,6 +32,7 @@ import com.drdisagree.colorblendr.config.RPrefs.putInt import com.drdisagree.colorblendr.databinding.FragmentPerAppThemeBinding import com.drdisagree.colorblendr.ui.adapters.AppListAdapter import com.drdisagree.colorblendr.ui.models.AppInfoModel +import com.drdisagree.colorblendr.utils.FabricatedUtil.updateFabricatedAppList import com.drdisagree.colorblendr.utils.MiscUtil.setToolbarTitle import com.drdisagree.colorblendr.utils.OverlayManager.isOverlayEnabled import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -122,11 +124,12 @@ class PerAppThemeFragment : Fragment() { binding.searchBox.search.removeTextChangedListener(textWatcher) CoroutineScope(Dispatchers.IO).launch { + updateFabricatedAppList(appContext) appList = getAllInstalledApps(requireContext(), appType) adapter = AppListAdapter(appList!!) - try { - withContext(Dispatchers.Main) { + withContext(Dispatchers.Main) { + try { binding.recyclerView.adapter = adapter binding.searchBox.search.addTextChangedListener(textWatcher) @@ -140,9 +143,9 @@ class PerAppThemeFragment : Fragment() { if (binding.searchBox.search.text.toString().trim().isNotEmpty()) { filterList(binding.searchBox.search.text.toString().trim { it <= ' ' }) } + } catch (ignored: Exception) { + // Fragment was not attached to activity } - } catch (ignored: Exception) { - // Fragment was not attached to activity } } } diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index 45768e83..5fa499a9 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -9,6 +9,7 @@ import androidx.core.util.component1 import androidx.core.util.component2 import com.drdisagree.colorblendr.common.Const import com.drdisagree.colorblendr.config.RPrefs +import com.drdisagree.colorblendr.config.RPrefs.getBoolean import com.drdisagree.colorblendr.utils.fabricated.FabricatedOverlayResource object FabricatedUtil { @@ -133,6 +134,10 @@ object FabricatedUtil { } fun updateFabricatedAppList(context: Context) { + if (Const.workingMethod != Const.WorkMethod.ROOT || + !getBoolean(Const.THEMING_ENABLED, true) + ) return + val packageManager = context.packageManager val applications = packageManager.getInstalledApplications(PackageManager.GET_META_DATA) val selectedApps = HashMap() From 372dfa460e182ea9986fc15be882798f7e27aaba Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 15:01:12 +0600 Subject: [PATCH 18/29] Fix handling activity theme change --- .../colorblendr/ui/activities/MainActivity.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt index 03418bdd..ffcab0f8 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/activities/MainActivity.kt @@ -102,6 +102,17 @@ class MainActivity : AppCompatActivity() { } } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + if (newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES || + newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_NO + ) { + recreate() + } + } + + companion object { private lateinit var myFragmentManager: FragmentManager From 950eb06a9b9894c1d689e16a18025bef268b1cd6 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 16:20:09 +0600 Subject: [PATCH 19/29] Fix some dynamic colors --- .../colorblendr/utils/DynamicColors.kt | 86 +++++++++---------- .../colorblendr/utils/FabricatedUtil.kt | 51 +++++++++-- .../colorblendr/utils/OverlayManager.kt | 13 --- 3 files changed, 85 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 19d9c6fd..bee29dff 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -152,9 +152,7 @@ object DynamicColors { resourceName = "surface", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, - darkModeColorIndex = 11, - lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = 8 + darkModeColorIndex = 11 ) ) add( @@ -167,22 +165,22 @@ object DynamicColors { ) add( ColorMapping( - resourceName = "surface_container_low", + resourceName = "surface_container_lowest", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, darkModeColorIndex = 10, - lightModeLightnessAdjustment = 1, - darkModeLightnessAdjustment = -36 + lightModeLightnessAdjustment = 4, + darkModeLightnessAdjustment = -44 ) ) add( ColorMapping( - resourceName = "surface_container_lowest", + resourceName = "surface_container_low", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 2, darkModeColorIndex = 10, - lightModeLightnessAdjustment = 4, - darkModeLightnessAdjustment = -48 + lightModeLightnessAdjustment = 1, + darkModeLightnessAdjustment = -36 ) ) add( @@ -192,17 +190,16 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = -20 + darkModeLightnessAdjustment = -28 ) ) add( ColorMapping( resourceName = "surface_container_high", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = 2, + lightModeColorIndex = 1, darkModeColorIndex = 10, - lightModeLightnessAdjustment = -4, - darkModeLightnessAdjustment = -4 + darkModeLightnessAdjustment = -12 // android 14+ notification bg color ) ) add( @@ -212,7 +209,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -6, - darkModeLightnessAdjustment = 16 + darkModeLightnessAdjustment = -2 ) ) add( @@ -220,16 +217,19 @@ object DynamicColors { resourceName = "surface_bright", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, - darkModeColorIndex = 10 + darkModeColorIndex = 10, + lightModeLightnessAdjustment = -2, + darkModeLightnessAdjustment = -20 ) ) add( ColorMapping( resourceName = "surface_dim", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = 2, + lightModeColorIndex = 1, darkModeColorIndex = 11, - lightModeLightnessAdjustment = -8 + lightModeLightnessAdjustment = -5, + darkModeLightnessAdjustment = 8 // android 14+ notification scrim color ) ) add( @@ -450,7 +450,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral4", - lightnessAdjustment = -60, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 11 ) @@ -458,7 +458,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral6", - lightnessAdjustment = -40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 11 ) @@ -466,7 +466,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral12", - lightnessAdjustment = 20, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 10 ) @@ -474,7 +474,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral17", - lightnessAdjustment = 70, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 10 ) @@ -482,23 +482,23 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral22", - lightnessAdjustment = 20, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL, - colorIndex = 11 + colorIndex = 9 ) ) add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral24", - lightnessAdjustment = 40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL, - colorIndex = 11 + colorIndex = 9 ) ) add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral87", - lightnessAdjustment = 70, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 4 ) @@ -506,7 +506,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral92", - lightnessAdjustment = 20, + lightnessAdjustment = -6, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 3 ) @@ -514,7 +514,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral94", - lightnessAdjustment = 40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 3 ) @@ -522,7 +522,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral96", - lightnessAdjustment = 10, + lightnessAdjustment = -14, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 2 ) @@ -530,7 +530,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral98", - lightnessAdjustment = 30, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL, colorIndex = 2 ) @@ -538,7 +538,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant4", - lightnessAdjustment = -60, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 11 ) @@ -546,7 +546,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant6", - lightnessAdjustment = -40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 11 ) @@ -554,7 +554,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant12", - lightnessAdjustment = 20, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 10 ) @@ -562,7 +562,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant17", - lightnessAdjustment = 70, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 10 ) @@ -570,23 +570,23 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant22", - lightnessAdjustment = 20, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL_VARIANT, - colorIndex = 11 + colorIndex = 9 ) ) add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant24", - lightnessAdjustment = 40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL_VARIANT, - colorIndex = 11 + colorIndex = 9 ) ) add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant87", - lightnessAdjustment = 70, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 4 ) @@ -594,7 +594,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant92", - lightnessAdjustment = 20, + lightnessAdjustment = -6, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 3 ) @@ -602,7 +602,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant94", - lightnessAdjustment = 40, + lightnessAdjustment = -10, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 3 ) @@ -610,7 +610,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant96", - lightnessAdjustment = 10, + lightnessAdjustment = -14, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 2 ) @@ -618,7 +618,7 @@ object DynamicColors { add( ColorMapping( resourceName = "m3_ref_palette_dynamic_neutral_variant98", - lightnessAdjustment = 30, + lightnessAdjustment = -20, tonalPalette = TonalPalette.NEUTRAL_VARIANT, colorIndex = 2 ) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index 5fa499a9..edc32953 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -8,7 +8,6 @@ import androidx.core.util.Pair import androidx.core.util.component1 import androidx.core.util.component2 import com.drdisagree.colorblendr.common.Const -import com.drdisagree.colorblendr.config.RPrefs import com.drdisagree.colorblendr.config.RPrefs.getBoolean import com.drdisagree.colorblendr.utils.fabricated.FabricatedOverlayResource @@ -47,13 +46,13 @@ object FabricatedUtil { palette: ArrayList> ) { val suffix = if (isDark) "dark" else "light" - val isPitchBlackTheme = RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false) + val isPitchBlackTheme = getBoolean(Const.MONET_PITCH_BLACK_THEME, false) DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.forEach { colorMapping -> val (resourceName, colorValue) = extractResourceFromColorMapping( colorMapping = colorMapping, prefix = "system_", - suffix = suffix, + suffix = "_${suffix}", palette = palette, isDark = isDark ) @@ -93,7 +92,7 @@ object FabricatedUtil { overlay: FabricatedOverlayResource, palette: ArrayList> ) { - val pitchBlackTheme = RPrefs.getBoolean(Const.MONET_PITCH_BLACK_THEME, false) + val pitchBlackTheme = getBoolean(Const.MONET_PITCH_BLACK_THEME, false) DynamicColors.M3_REF_PALETTE.forEach { colorMapping -> val (resourceName, colorValue) = extractResourceFromColorMapping( @@ -128,7 +127,7 @@ object FabricatedUtil { replaceColorsPerPackageName(overlay, palette, pitchBlackTheme) - if (!RPrefs.getBoolean(Const.TINT_TEXT_COLOR, true)) { + if (!getBoolean(Const.TINT_TEXT_COLOR, true)) { addTintlessTextColors(overlay) } } @@ -165,24 +164,44 @@ object FabricatedUtil { ): Int { if (pitchBlackTheme) { return when (resourceName) { - "m3_ref_palette_dynamic_neutral_variant6", "gm3_ref_palette_dynamic_neutral_variant6", "system_background_dark", "system_surface_dark" -> { + "m3_ref_palette_dynamic_neutral_variant6", + "gm3_ref_palette_dynamic_neutral_variant6", + "system_background_dark", + "system_surface_dark" -> { Color.BLACK } - "m3_ref_palette_dynamic_neutral_variant12", "gm3_ref_palette_dynamic_neutral_variant12" -> { + "m3_ref_palette_dynamic_neutral_variant12", + "gm3_ref_palette_dynamic_neutral_variant12" -> { ColorUtil.modifyBrightness( color = colorValue, brightnessPercentage = -40 ) } - "m3_ref_palette_dynamic_neutral_variant17", "gm3_ref_palette_dynamic_neutral_variant17", "gm3_system_bar_color_night" -> { + "m3_ref_palette_dynamic_neutral_variant17", + "gm3_ref_palette_dynamic_neutral_variant17", + "gm3_system_bar_color_night" -> { ColorUtil.modifyBrightness( color = colorValue, brightnessPercentage = -60 ) } + "system_surface_container_lowest_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -36 + ) + } + + "system_surface_container_low_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -28 + ) + } + "system_surface_container_dark" -> { ColorUtil.modifyBrightness( color = colorValue, @@ -190,6 +209,20 @@ object FabricatedUtil { ) } + "system_surface_container_high_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -12 + ) + } + + "system_surface_container_highest_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -4 + ) + } + else -> { colorValue } @@ -325,7 +358,7 @@ object FabricatedUtil { palette: ArrayList>, isDark: Boolean = false ): Pair { - val resourceName = prefix + colorMapping.resourceName + "_" + suffix + val resourceName = prefix + colorMapping.resourceName + suffix val colorValue: Int = if (colorMapping.tonalPalette != null) { if (colorMapping.colorIndex != null) { diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt index 381790fc..8431a0ec 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/OverlayManager.kt @@ -273,19 +273,6 @@ object OverlayManager { } } - fabricatedOverlays[0].setColor( - "system_surface_dim_dark", - fabricatedOverlays[0].getColor( - colorNames[3][11] - ) // system_neutral1_900 - ) // A14 notification scrim color - fabricatedOverlays[0].setColor( - "system_surface_container_high_dark", - fabricatedOverlays[0].getColor( - colorNames[3][10] - ) // system_neutral1_800 - ) // A14 notification background color - if (pitchBlackTheme) { fabricatedOverlays[0].setColor( "surface_header_dark_sysui", From 5216da534db7385b48b8aa4b52b6c34c3ac8c695 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 18:30:07 +0600 Subject: [PATCH 20/29] Add new dynamic colors --- .../colorblendr/utils/FabricatedUtil.kt | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index edc32953..b0551eb5 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -47,29 +47,38 @@ object FabricatedUtil { ) { val suffix = if (isDark) "dark" else "light" val isPitchBlackTheme = getBoolean(Const.MONET_PITCH_BLACK_THEME, false) + val prefixSuffix = arrayOf( + "system_" to "_${suffix}", + "m3_sys_color_${suffix}_" to "", + "m3_sys_color_dynamic_${suffix}_" to "", + "gm3_sys_color_${suffix}_" to "", + "gm3_sys_color_dynamic_${suffix}_" to "" + ) DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.forEach { colorMapping -> - val (resourceName, colorValue) = extractResourceFromColorMapping( - colorMapping = colorMapping, - prefix = "system_", - suffix = "_${suffix}", - palette = palette, - isDark = isDark - ) - - val adjustedColorValue = adjustColorForPitchBlackThemeIfRequired( - pitchBlackTheme = isPitchBlackTheme, - resourceName = resourceName, - colorValue = colorValue - ).let { value -> - adjustColorBrightnessIfRequired( - colorValue = value, + for ((tempPrefix, tempSuffix) in prefixSuffix) { + val (resourceName, colorValue) = extractResourceFromColorMapping( colorMapping = colorMapping, + prefix = tempPrefix, + suffix = tempSuffix, + palette = palette, isDark = isDark ) - } - overlay.setColor(resourceName, adjustedColorValue) + val adjustedColorValue = adjustColorForPitchBlackThemeIfRequired( + pitchBlackTheme = isPitchBlackTheme, + resourceName = resourceName, + colorValue = colorValue + ).let { value -> + adjustColorBrightnessIfRequired( + colorValue = value, + colorMapping = colorMapping, + isDark = isDark + ) + } + + overlay.setColor(resourceName, adjustedColorValue) + } } } From c8c45fcff8d6c107b5b84f963991aaeef4b988de Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 19:38:49 +0600 Subject: [PATCH 21/29] Add pitch black theme for settings services (fix #124) --- .../colorblendr/utils/FabricatedUtil.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index b0551eb5..e0ac169d 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -357,6 +357,29 @@ object FabricatedUtil { overlay.setColor("gm_ref_palette_grey600", palette[4][8]) overlay.setColor("gm_ref_palette_grey500", palette[3][1]) overlay.setColor("replay__pal_games_dark_300", palette[0][5]) + } else if (overlay.targetPackage == "com.google.android.settings.intelligence" && + pitchBlackTheme + ) { // Settings search + overlay.setColor("m3_sys_color_dark_surface_container_lowest", Color.BLACK) + overlay.setColor("gm3_sys_color_dark_surface_container_lowest", Color.BLACK) + overlay.setColor("m3_sys_color_dynamic_dark_surface_container_lowest", Color.BLACK) + overlay.setColor("gm3_sys_color_dynamic_dark_surface_container_lowest", Color.BLACK) + overlay.setColor("m3_sys_color_dark_surface_container_low", Color.BLACK) + overlay.setColor("gm3_sys_color_dark_surface_container_low", Color.BLACK) + overlay.setColor("m3_sys_color_dynamic_dark_surface_container_low", Color.BLACK) + overlay.setColor("gm3_sys_color_dynamic_dark_surface_container_low", Color.BLACK) + overlay.setColor("m3_sys_color_dark_surface_container", Color.BLACK) + overlay.setColor("gm3_sys_color_dark_surface_container", Color.BLACK) + overlay.setColor("m3_sys_color_dynamic_dark_surface_container", Color.BLACK) + overlay.setColor("gm3_sys_color_dynamic_dark_surface_container", Color.BLACK) + overlay.setColor("m3_sys_color_dark_surface_container_high", Color.BLACK) + overlay.setColor("gm3_sys_color_dark_surface_container_high", Color.BLACK) + overlay.setColor("m3_sys_color_dynamic_dark_surface_container_high", Color.BLACK) + overlay.setColor("gm3_sys_color_dynamic_dark_surface_container_high", Color.BLACK) + overlay.setColor("m3_sys_color_dark_surface_container_highest", Color.BLACK) + overlay.setColor("gm3_sys_color_dark_surface_container_highest", Color.BLACK) + overlay.setColor("m3_sys_color_dynamic_dark_surface_container_highest", Color.BLACK) + overlay.setColor("gm3_sys_color_dynamic_dark_surface_container_highest", Color.BLACK) } } From 7306535d16a8168226385e089c2c59ca44dc643f Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 18 Sep 2024 19:44:56 +0600 Subject: [PATCH 22/29] Avoid crash when clicking on link if browser unavailable --- .../colorblendr/ui/fragments/AboutFragment.kt | 73 ++++++++++++------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/AboutFragment.kt b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/AboutFragment.kt index 40ed815e..f3dd9bb5 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/AboutFragment.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/ui/fragments/AboutFragment.kt @@ -49,45 +49,68 @@ class AboutFragment : Fragment() { ) binding.btnNews.setOnClickListener { - startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://t.me/IconifyOfficial") + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://t.me/IconifyOfficial") + ) ) - ) + } catch (e: Exception) { + e.printStackTrace() + } } + binding.btnSupport.setOnClickListener { - startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://t.me/IconifyDiscussion") + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://t.me/IconifyDiscussion") + ) ) - ) + } catch (e: Exception) { + e.printStackTrace() + } } + binding.btnGithub.setOnClickListener { - startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://github.com/Mahmud0808/ColorBlendr") + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://github.com/Mahmud0808/ColorBlendr") + ) ) - ) + } catch (e: Exception) { + e.printStackTrace() + } } binding.developer.setOnClickListener { - startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://github.com/Mahmud0808") + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://github.com/Mahmud0808") + ) ) - ) + } catch (e: Exception) { + e.printStackTrace() + } } + binding.buymeacoffee.setOnClickListener { - startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://buymeacoffee.com/drdisagree") + try { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("https://buymeacoffee.com/drdisagree") + ) ) - ) + } catch (e: Exception) { + e.printStackTrace() + } } return binding.root From a7a164e72a5705c21f083db98f4e41c0a619762f Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Thu, 19 Sep 2024 19:15:56 +0600 Subject: [PATCH 23/29] Make surface container colors lighter --- .../com/drdisagree/colorblendr/utils/DynamicColors.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index bee29dff..15d0718d 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -170,7 +170,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 4, - darkModeLightnessAdjustment = -44 + darkModeLightnessAdjustment = -36 ) ) add( @@ -180,7 +180,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 1, - darkModeLightnessAdjustment = -36 + darkModeLightnessAdjustment = -28 ) ) add( @@ -190,7 +190,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = -28 + darkModeLightnessAdjustment = -20 ) ) add( @@ -219,7 +219,7 @@ object DynamicColors { lightModeColorIndex = 1, darkModeColorIndex = 10, lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = -20 + darkModeLightnessAdjustment = -6 ) ) add( From eefb303bae97f1e20ae4a1d14a0de147c01b3ab4 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Fri, 20 Sep 2024 00:33:41 +0600 Subject: [PATCH 24/29] Make surfaces more distinguishable from background --- .../colorblendr/utils/DynamicColors.kt | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt index 15d0718d..d3988ec3 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/DynamicColors.kt @@ -136,7 +136,9 @@ object DynamicColors { resourceName = "background", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, - darkModeColorIndex = 11 + darkModeColorIndex = 11, + lightModeLightnessAdjustment = -1, + darkModeLightnessAdjustment = -18 ) ) add( @@ -152,7 +154,9 @@ object DynamicColors { resourceName = "surface", tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, - darkModeColorIndex = 11 + darkModeColorIndex = 11, + lightModeLightnessAdjustment = -1, + darkModeLightnessAdjustment = -18 ) ) add( @@ -170,7 +174,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 4, - darkModeLightnessAdjustment = -36 + darkModeLightnessAdjustment = -42 ) ) add( @@ -180,7 +184,7 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = 1, - darkModeLightnessAdjustment = -28 + darkModeLightnessAdjustment = -38 ) ) add( @@ -190,26 +194,26 @@ object DynamicColors { lightModeColorIndex = 2, darkModeColorIndex = 10, lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = -20 + darkModeLightnessAdjustment = -34 ) ) add( ColorMapping( - resourceName = "surface_container_high", + resourceName = "surface_container_high", // android 14+ notification bg color tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, darkModeColorIndex = 10, - darkModeLightnessAdjustment = -12 // android 14+ notification bg color + lightModeLightnessAdjustment = -4 ) ) add( ColorMapping( resourceName = "surface_container_highest", tonalPalette = TonalPalette.NEUTRAL, - lightModeColorIndex = 2, + lightModeColorIndex = 1, darkModeColorIndex = 10, lightModeLightnessAdjustment = -6, - darkModeLightnessAdjustment = -2 + darkModeLightnessAdjustment = 4 ) ) add( @@ -219,17 +223,17 @@ object DynamicColors { lightModeColorIndex = 1, darkModeColorIndex = 10, lightModeLightnessAdjustment = -2, - darkModeLightnessAdjustment = -6 + darkModeLightnessAdjustment = 12 ) ) add( ColorMapping( - resourceName = "surface_dim", + resourceName = "surface_dim", // android 14+ notification scrim color tonalPalette = TonalPalette.NEUTRAL, lightModeColorIndex = 1, darkModeColorIndex = 11, - lightModeLightnessAdjustment = -5, - darkModeLightnessAdjustment = 8 // android 14+ notification scrim color + lightModeLightnessAdjustment = -10, + darkModeLightnessAdjustment = 8 ) ) add( From fc8f66ca1ebd3d5cfa0ccf341721e939d6cf996d Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Fri, 20 Sep 2024 14:16:12 +0600 Subject: [PATCH 25/29] Make pitch black theme surfaces darker --- .../colorblendr/utils/FabricatedUtil.kt | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt index e0ac169d..884e8ec9 100644 --- a/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt +++ b/app/src/main/java/com/drdisagree/colorblendr/utils/FabricatedUtil.kt @@ -171,74 +171,74 @@ object FabricatedUtil { resourceName: String, colorValue: Int ): Int { - if (pitchBlackTheme) { - return when (resourceName) { - "m3_ref_palette_dynamic_neutral_variant6", - "gm3_ref_palette_dynamic_neutral_variant6", - "system_background_dark", - "system_surface_dark" -> { - Color.BLACK - } + if (!pitchBlackTheme) return colorValue + + return when (resourceName) { + "m3_ref_palette_dynamic_neutral_variant6", + "gm3_ref_palette_dynamic_neutral_variant6", + "system_background_dark", + "system_surface_dark" -> { + Color.BLACK + } - "m3_ref_palette_dynamic_neutral_variant12", - "gm3_ref_palette_dynamic_neutral_variant12" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -40 - ) - } + "m3_ref_palette_dynamic_neutral_variant12", + "gm3_ref_palette_dynamic_neutral_variant12" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -40 + ) + } - "m3_ref_palette_dynamic_neutral_variant17", - "gm3_ref_palette_dynamic_neutral_variant17", - "gm3_system_bar_color_night" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -60 - ) - } + "m3_ref_palette_dynamic_neutral_variant17", + "gm3_ref_palette_dynamic_neutral_variant17", + "gm3_system_bar_color_night" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -60 + ) + } - "system_surface_container_lowest_dark" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -36 - ) - } + "system_surface_container_lowest_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -44 + ) + } - "system_surface_container_low_dark" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -28 - ) - } + "system_surface_container_low_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -36 + ) + } - "system_surface_container_dark" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -20 - ) - } + "system_surface_container_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -28 + ) + } - "system_surface_container_high_dark" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -12 - ) - } + "system_surface_container_high_dark", + "system_surface_dim_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -20 + ) + } - "system_surface_container_highest_dark" -> { - ColorUtil.modifyBrightness( - color = colorValue, - brightnessPercentage = -4 - ) - } + "system_surface_container_highest_dark", + "system_surface_bright_dark" -> { + ColorUtil.modifyBrightness( + color = colorValue, + brightnessPercentage = -12 + ) + } - else -> { - colorValue - } + else -> { + colorValue } } - - return colorValue } private fun addTintlessTextColors(overlay: FabricatedOverlayResource) { From bedde36c91dbdb61d59c75f34e9adf623332db88 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Fri, 20 Sep 2024 09:14:43 +0000 Subject: [PATCH 26/29] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 7 +++++++ app/src/main/res/values-ar-rSA/strings.xml | 7 +++++++ app/src/main/res/values-ca-rES/strings.xml | 7 +++++++ app/src/main/res/values-cs-rCZ/strings.xml | 7 +++++++ app/src/main/res/values-da-rDK/strings.xml | 7 +++++++ app/src/main/res/values-de-rDE/strings.xml | 7 +++++++ app/src/main/res/values-el-rGR/strings.xml | 7 +++++++ app/src/main/res/values-es-rES/strings.xml | 7 +++++++ app/src/main/res/values-fi-rFI/strings.xml | 7 +++++++ app/src/main/res/values-fr-rFR/strings.xml | 7 +++++++ app/src/main/res/values-hu-rHU/strings.xml | 7 +++++++ app/src/main/res/values-it-rIT/strings.xml | 7 +++++++ app/src/main/res/values-iw-rIL/strings.xml | 7 +++++++ app/src/main/res/values-ja-rJP/strings.xml | 7 +++++++ app/src/main/res/values-ko-rKR/strings.xml | 7 +++++++ app/src/main/res/values-nl-rNL/strings.xml | 7 +++++++ app/src/main/res/values-no-rNO/strings.xml | 7 +++++++ app/src/main/res/values-pl-rPL/strings.xml | 7 +++++++ app/src/main/res/values-pt-rBR/strings.xml | 7 +++++++ app/src/main/res/values-pt-rPT/strings.xml | 7 +++++++ app/src/main/res/values-ro-rRO/strings.xml | 7 +++++++ app/src/main/res/values-ru-rRU/strings.xml | 7 +++++++ app/src/main/res/values-sr-rSP/strings.xml | 7 +++++++ app/src/main/res/values-sv-rSE/strings.xml | 7 +++++++ app/src/main/res/values-tr-rTR/strings.xml | 7 +++++++ app/src/main/res/values-uk-rUA/strings.xml | 7 +++++++ app/src/main/res/values-vi-rVN/strings.xml | 7 +++++++ app/src/main/res/values-zh-rCN/strings.xml | 7 +++++++ app/src/main/res/values-zh-rTW/strings.xml | 7 +++++++ 29 files changed, 203 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index c4b6c09c..795a6b2e 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -151,4 +151,11 @@ تطبيقات قابلة للتشغيل كل التطبيقات It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index bdb7954a..b2f75ebb 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -151,4 +151,11 @@ Spustitelné aplikace Všechny aplikace Není povinné, ale doporučuje se zakázat optimalizaci baterie + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c70687b5..043b843e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -151,4 +151,11 @@ Startfähige Apps Alle Apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f200277a..c806cc4f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -151,4 +151,11 @@ Aplicaciones lanzables Todas las aplicaciones No es obligatorio pero se recomienda desactivar la optimización de la batería + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 15fd129d..d9a03d2b 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 9306dab7..f7fa9968 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -151,4 +151,11 @@ Indítható alkalmazások Összes Alkalmazás It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 2ccb1166..d5d488d2 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -151,4 +151,11 @@ Applicazioni lanciabili Tutte le app Non è obbligatorio, ma si consiglia di disabilitare l\'ottimizzazione della batteria + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index eb182d57..9cfcc486 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -151,4 +151,11 @@ 起動可能なアプリ すべてのアプリ It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 8b2cadfa..6583fbea 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a19de74d..0fe25391 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -151,4 +151,11 @@ Apps iniciáveis Todos os apps Não é obrigatório, mas é recomendado desativar a otimização de bateria + Avançado + Cor secundária personalizada + Selecione a cor branca pura para desativar + Cor terciária personalizada + Selecione a cor branca pura para desativar + Tema específico do modo + Aplique saturação e luminosidade diferentes para modos claro e escuro diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f82a0fe1..f652b2c3 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5287f4d6..11a7f13c 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -151,4 +151,11 @@ Запускаемые приложения Все приложения Это не обязательно, но рекомендуется отключить оптимизацию батареи + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 5f92cc75..687b28cb 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -151,4 +151,11 @@ Başlatılabilir Uygulamalar Tüm Uygulamalar Pil optimizasyonunu devre dışı bırakmak zorunlu değildir ancak önerilir + Gelişmiş + Özel ikincil renk + Devre dışı bırakmak için saf beyaz rengi seçin + Özel üçüncül renk + Devre dışı bırakmak için saf beyaz rengi seçin + Moda özgü tema + Açık ve koyu modlar için farklı doygunluk ve açıklık uygulayın diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index d6a74566..8a6905ce 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -151,4 +151,11 @@ Застосунки, що запускаються Всі застосунки It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 1917a371..17d7a2c3 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f7fa2e1b..b14cf6b7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -151,4 +151,11 @@ 可启动的应用 所有应用 It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 07ffbc83..a49b90b4 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -151,4 +151,11 @@ Launchable apps All apps It\'s not mandatory but recommended to disable the battery optimization + Advanced + Custom secondary color + Select pure white color to disable + Custom tertiary color + Select pure white color to disable + Mode-specific theme + Apply different saturation and lightness for light and dark modes From 81477423c906993a82826474ec8d54758935d5ec Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Fri, 20 Sep 2024 15:23:44 +0600 Subject: [PATCH 27/29] Bump targetSdk, AGP & dependencies --- app/build.gradle.kts | 2 +- gradle/libs.versions.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dfdb3c75..e91192bd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,7 +12,7 @@ android { defaultConfig { minSdk = 31 - targetSdk = 34 + targetSdk = 35 versionCode = 15 versionName = "v1.7" } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e14a6a39..39075c9f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.6.0" +agp = "8.6.1" androidUtils = "0.0.5" annotation = "1.8.2" appcompat = "1.7.0" @@ -23,7 +23,7 @@ recyclerviewSelection = "1.1.0" remotepreferences = "0.8" shizuku = "12.1.0" workRuntime = "2.9.1" -lifecycleCommonJvm = "2.8.5" +lifecycleCommonJvm = "2.8.6" [plugins] agp-app = { id = "com.android.application", version.ref = "agp" } From b1623f4d7948a3e9c7c58a927693c708e793d444 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Fri, 20 Sep 2024 15:26:47 +0600 Subject: [PATCH 28/29] Update JDK compiler --- .idea/compiler.xml | 2 +- .idea/gradle.xml | 3 +-- .idea/misc.xml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b86273d9..b589d56e 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index eec2b7bb..26dd5c6e 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,9 +4,8 @@