From 45779f0bce187eabd97909cf80ab0bcda3e2e5a5 Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Wed, 6 May 2026 01:13:22 +0300 Subject: [PATCH] add material you color --- .../java/xyz/zarazaex/olc/AngApplication.kt | 10 +++++++--- .../main/java/xyz/zarazaex/olc/AppConfig.kt | 1 + .../java/xyz/zarazaex/olc/ui/BaseActivity.kt | 6 ++++-- .../xyz/zarazaex/olc/ui/SettingsActivity.kt | 18 ++++++++++++++++++ V2rayNG/app/src/main/res/values-ru/strings.xml | 3 +++ V2rayNG/app/src/main/res/values/strings.xml | 3 +++ V2rayNG/app/src/main/res/xml/pref_settings.xml | 6 ++++++ 7 files changed, 42 insertions(+), 5 deletions(-) diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AngApplication.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AngApplication.kt index b2509754..af330b9c 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AngApplication.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AngApplication.kt @@ -2,11 +2,13 @@ package xyz.zarazaex.olc import android.app.Application import android.content.Context +import android.os.Build import androidx.work.Configuration import androidx.work.WorkManager import com.google.android.material.color.DynamicColors import com.tencent.mmkv.MMKV import xyz.zarazaex.olc.AppConfig.ANG_PACKAGE +import xyz.zarazaex.olc.handler.MmkvManager import xyz.zarazaex.olc.handler.SettingsManager class AngApplication : Application() { @@ -32,9 +34,6 @@ class AngApplication : Application() { */ override fun onCreate() { super.onCreate() - // DynamicColors отключён — на Android 12-15 он красит статус-бар в акцент ОС - // и это нельзя переопределить через statusBarColor - // DynamicColors.applyToActivitiesIfAvailable(this) val mmkvDir = java.io.File(filesDir, "mmkv") if (!java.io.File(mmkvDir, "MAIN").exists()) { @@ -54,6 +53,11 @@ class AngApplication : Application() { MMKV.initialize(this) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && + MmkvManager.decodeSettingsBool(AppConfig.PREF_DYNAMIC_COLORS, false)) { + DynamicColors.applyToActivitiesIfAvailable(this) + } + // Initialize WorkManager with the custom configuration WorkManager.initialize(this, workManagerConfiguration) diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt index ea74c854..9755e53a 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/AppConfig.kt @@ -74,6 +74,7 @@ object AppConfig { const val PREF_HEV_TUNNEL_RW_TIMEOUT = "pref_hev_tunnel_rw_timeout_v2" const val PREF_AUTO_SORT_AFTER_TEST = "pref_auto_sort_after_test" const val PREF_SHOW_COPY_BUTTON = "pref_show_copy_button" + const val PREF_DYNAMIC_COLORS = "pref_dynamic_colors" /** Cache keys. */ const val CACHE_SUBSCRIPTION_ID = "cache_subscription_id" diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/BaseActivity.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/BaseActivity.kt index ac9ba288..c1df4fe0 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/BaseActivity.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/BaseActivity.kt @@ -2,6 +2,7 @@ package xyz.zarazaex.olc.ui import android.content.Context import android.os.Bundle +import android.util.TypedValue import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -185,8 +186,9 @@ abstract class BaseActivity : AppCompatActivity() { } private fun syncStatusBarWithToolbar(toolbar: Toolbar) { - // Статус-бар прозрачный (задан в теме). Управляем только цветом иконок. - val bgColor = ContextCompat.getColor(this, R.color.md_theme_surface) + val tv = TypedValue() + theme.resolveAttribute(com.google.android.material.R.attr.colorSurface, tv, true) + val bgColor = tv.data WindowCompat.getInsetsController(window, window.decorView)?.isAppearanceLightStatusBars = ColorUtils.calculateLuminance(bgColor) > 0.5 } diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/SettingsActivity.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/SettingsActivity.kt index f77211ff..7e6c065b 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/SettingsActivity.kt @@ -1,7 +1,10 @@ package xyz.zarazaex.olc.ui +import android.content.Intent +import android.os.Build import android.os.Bundle import android.view.View +import android.widget.Toast import androidx.preference.CheckBoxPreference import androidx.preference.EditTextPreference import androidx.preference.ListPreference @@ -28,6 +31,7 @@ class SettingsActivity : BaseActivity() { class SettingsFragment : PreferenceFragmentCompat() { + private val dynamicColors by lazy { findPreference(AppConfig.PREF_DYNAMIC_COLORS) } private val localDns by lazy { findPreference(AppConfig.PREF_LOCAL_DNS_ENABLED) } private val fakeDns by lazy { findPreference(AppConfig.PREF_FAKE_DNS_ENABLED) } private val appendHttpProxy by lazy { findPreference(AppConfig.PREF_APPEND_HTTP_PROXY) } @@ -63,8 +67,22 @@ class SettingsActivity : BaseActivity() { addPreferencesFromResource(R.xml.pref_settings) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { + dynamicColors?.isVisible = false + } + initPreferenceSummaries() + dynamicColors?.setOnPreferenceChangeListener { _, _ -> + Toast.makeText(context, R.string.restart_required, Toast.LENGTH_SHORT).show() + val intent = requireActivity().packageManager + .getLaunchIntentForPackage(requireActivity().packageName) + ?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) + requireActivity().finish() + intent?.let { startActivity(it) } + true + } + localDns?.setOnPreferenceChangeListener { _, any -> updateLocalDns(any as Boolean) true diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 2d50d9cb..81a1355f 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -263,6 +263,9 @@ Язык Настройки интерфейса Тема интерфейса + Динамические цвета (Material You) + Использовать цвета обоев (Android 12+). Требует перезапуска. + Требуется перезапуск приложения Использовать Hev TUN Если включено, TUN будет использовать hev-socks5-tunnel; иначе будет использован xray-core Подробность журнала HevTun diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index de0e8cd0..7dd1445b 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -270,11 +270,14 @@ Language UI settings UI mode settings + Dynamic colors (Material You) + Use wallpaper-based colors (Android 12+). Requires app restart. Enable Hev TUN Feature When enabled, TUN will use hev-socks5-tunnel; otherwise, it will use xray-core. Hev Tun Log Level Hev Tun read/write timeout (seconds) (tcp,udp default 300,60) + Restart required to apply changes Logcat Copy Clear diff --git a/V2rayNG/app/src/main/res/xml/pref_settings.xml b/V2rayNG/app/src/main/res/xml/pref_settings.xml index ac481018..1bc0fa32 100644 --- a/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -50,6 +50,12 @@ android:summary="%s" android:title="@string/title_pref_ui_mode_night" /> + +