From e3207d62a34dae7c9a6c3a83ec54d6434f08559d Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 12 Dec 2023 19:13:24 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.4][View=E7=82=B9=E5=87=BB=E6=80=81]=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lancet/ViewPressedStateLancet.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java index 3ebd92187f..4fa3bdd617 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java +++ b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java @@ -32,6 +32,9 @@ public class ViewPressedStateLancet { @TargetMethod(methodName = "setOnClickListener") @ReplaceInvoke public static void setOnClickListener(View view, View.OnClickListener listener) { + if (view == null) { + return; + } Object tag = view.getTag(R.id.click_pressed_attr_id); checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); view.setOnClickListener(listener); @@ -41,6 +44,9 @@ public class ViewPressedStateLancet { @TargetMethod(methodName = "setOnLongClickListener") @ReplaceInvoke public static void setOnLongClickListener(View view, View.OnLongClickListener listener) { + if (view == null) { + return; + } Object tag = view.getTag(R.id.click_pressed_attr_id); checkSetBgIfNeed(view, tag == null ? null : (AttributeSet) tag); view.setOnLongClickListener(listener); @@ -86,8 +92,8 @@ public class ViewPressedStateLancet { return; } alpha = t.getFloat(R.styleable.ClickPressedStyle_pressed_alpha, 0.6f); - if (alpha > 1.0f) { - throw new AssertionError("view custom attr: alpha > 1.0f, must be in [0.0, 1.0]"); + if (alpha < 0.0f || alpha > 1.0f) { + throw new AssertionError("view custom attr \\'alpha\\' must be in [0.0, 1.0]"); } view.setTag(R.id.click_pressed_attr_id, attr); } finally { @@ -107,6 +113,7 @@ public class ViewPressedStateLancet { image.setImageDrawable(replaced); return; } + return; } if (view instanceof TextView) { TextView text = (TextView) view; @@ -121,11 +128,38 @@ public class ViewPressedStateLancet { if (pressed != Integer.MIN_VALUE) { return; } - int defaultColor = textColor.getDefaultColor(); + int color = textColor.getColorForState(new int[] { android.R.attr.state_enabled }, Integer.MIN_VALUE); + int defaultColor = color; + if (color == Integer.MIN_VALUE) { + defaultColor = textColor.getDefaultColor(); + } int pressedColor = Color.argb((int)(Color.alpha(defaultColor) * alpha), Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); - ColorStateList newColor = new ColorStateList(new int[][] { new int[] { -android.R.attr.state_pressed }, new int[] { android.R.attr.state_pressed }}, new int[] { defaultColor, pressedColor }); + int disableColor = textColor.getColorForState(new int[] { -android.R.attr.state_enabled }, Integer.MIN_VALUE); + int size = 2; + if (disableColor != Integer.MIN_VALUE) { + size += 1; + } + int[][] states = new int[size][1]; + int[] colors = new int[size]; + states[0] = new int[] { android.R.attr.state_pressed }; + colors[0] = pressedColor; + if (size > 2) { + states[1] = new int[] { -android.R.attr.state_enabled }; + colors[1] = disableColor; + states[2] = new int[] { android.R.attr.state_enabled }; + colors[2] = defaultColor; + } else { + states[1] = new int[] { -android.R.attr.state_pressed }; + colors[1] = defaultColor; + } + ColorStateList newColor = new ColorStateList(states, colors); text.setTextColor(newColor); } + return; + } + Drawable replaced = checkAndReplaceDrawable(view.getBackground(), alpha); + if (replaced != null) { + ViewCompat.setBackground(view, replaced); } } catch (Throwable t) { t.printStackTrace();