From f7f2cf3e58cdf0a7885dd803058ab4e4633af153 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Thu, 8 Dec 2022 13:01:22 +0300 Subject: [PATCH] color cursor --- .../lite/themes/hooks/TextViewHook.java | 6 ++++ .../ru/vtosters/lite/utils/ThemesUtils.java | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java b/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java index feeac0a1f..ea67e5ecb 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java +++ b/app/src/main/java/ru/vtosters/lite/themes/hooks/TextViewHook.java @@ -4,10 +4,12 @@ import android.annotation.SuppressLint; import android.content.res.ColorStateList; import android.os.Build; import android.view.View; +import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.widget.AppCompatCheckedTextView; +import com.vk.core.extensions.EditTextExt; import com.vk.core.view.OverlayTextView; import com.vk.core.view.TintTextView; import com.vk.core.view.links.LinkedTextView; @@ -100,6 +102,10 @@ public class TextViewHook implements BaseHook { } } + if (view instanceof EditText) { + ThemesUtils.setCursorColor((EditText) view); + } + VkUiThemer.autoThemeVkuiButtons(textView); ThemesHacks.fixProfileSelector(textView); ThemesHacks.fixThemedFeed(textView, i); diff --git a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java index ef3b2ecb2..023ff5aa9 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java @@ -1,5 +1,6 @@ package ru.vtosters.lite.utils; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.ColorStateList; import android.graphics.Color; @@ -10,11 +11,13 @@ import android.util.Log; import android.view.View; import android.view.Window; import android.webkit.WebView; +import android.widget.EditText; import android.widget.ImageView; import android.widget.Switch; import android.widget.TextView; import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.widget.SwitchCompat; +import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.graphics.drawable.DrawableCompat; import com.vk.articles.preload.WebCachePreloader; @@ -29,6 +32,8 @@ import ru.vtosters.lite.hooks.VKUIHook; import ru.vtosters.lite.themes.ThemesHacks; import ru.vtosters.lite.ui.wallpapers.WallpapersHooks; +import java.lang.reflect.Field; + import static ru.vtosters.lite.utils.AndroidUtils.*; import static ru.vtosters.lite.utils.Preferences.*; @@ -97,6 +102,36 @@ public class ThemesUtils { return getMutedColor(getAccentColor()); } + @SuppressLint("DiscouragedPrivateApi") + public static void setCursorColor(EditText view) { + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + view.setTextCursorDrawable(recolorDrawable(view.getTextCursorDrawable())); + } else { + Field field = TextView.class.getDeclaredField("mCursorDrawableRes"); + field.setAccessible(true); + int drawableResId = field.getInt(view); + + field = TextView.class.getDeclaredField("mEditor"); + field.setAccessible(true); + Object editor = field.get(view); + + Drawable drawable = ContextCompat.getDrawable(view.getContext(), drawableResId); + drawable.setColorFilter(getAccentColor(), PorterDuff.Mode.SRC_IN); + Drawable[] drawables = {drawable, drawable}; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + field = editor.getClass().getDeclaredField("mCursorDrawable"); + } else { + field = editor.getClass().getDeclaredField("mDrawableForCursor"); + } + field.setAccessible(true); + field.set(editor, drawables); + } + } catch (Exception ignored) { + } + } + public static int getMutedColor(int color) { return ColorUtils.blendARGB(color, (isDarkTheme() ? Color.BLACK : Color.WHITE), 0.5f); }