Skip to content

Commit 2a70daf

Browse files
graycreateclaude
andcommitted
fix: Replace deprecated DrawableWrapper with custom implementation
- DrawableWrapper was removed from androidx.appcompat in newer Material library versions - Implemented SimpleDrawableWrapper as a drop-in replacement - This fixes compilation errors when updating Material library to 1.12.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 207fed2 commit 2a70daf

File tree

1 file changed

+66
-4
lines changed

1 file changed

+66
-4
lines changed

app/src/main/java/me/ghui/v2er/widget/richtext/GlideImageGetter.java

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import android.graphics.drawable.Drawable;
55
import androidx.annotation.NonNull;
66
import androidx.annotation.Nullable;
7-
import androidx.appcompat.graphics.drawable.DrawableWrapper;
7+
import androidx.core.graphics.drawable.DrawableCompat;
8+
import android.graphics.Canvas;
9+
import android.graphics.ColorFilter;
10+
import android.graphics.PixelFormat;
811
import android.text.Html;
912
import android.widget.TextView;
1013

@@ -77,19 +80,19 @@ public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
7780

7881
private class WrapperTarget extends SimpleTarget<Drawable> {
7982
private int mMaxWidth;
80-
private DrawableWrapper wrapperDrawable;
83+
private SimpleDrawableWrapper wrapperDrawable;
8184

8285
@SuppressLint("RestrictedApi")
8386
public WrapperTarget(int maxWidth) {
8487
//这里只缩小不放大
8588
super(maxWidth, TexureUtil.fitMaxHeight());
8689
this.mMaxWidth = maxWidth;
87-
wrapperDrawable = new DrawableWrapper(null);
90+
wrapperDrawable = new SimpleDrawableWrapper();
8891
wrapperDrawable.setCallback(GlideImageGetter.this);
8992
updateWrapperedDrawable(mLoadingDrawable);
9093
}
9194

92-
public DrawableWrapper getWrapperDrawable() {
95+
public SimpleDrawableWrapper getWrapperDrawable() {
9396
return wrapperDrawable;
9497
}
9598

@@ -128,4 +131,63 @@ public void updateWrapperedDrawable(Drawable drawable) {
128131
}
129132
}
130133

134+
// Simple replacement for DrawableWrapper which was removed in newer Material library
135+
private static class SimpleDrawableWrapper extends Drawable {
136+
private Drawable wrappedDrawable;
137+
138+
public void setWrappedDrawable(Drawable drawable) {
139+
if (this.wrappedDrawable != null) {
140+
this.wrappedDrawable.setCallback(null);
141+
}
142+
this.wrappedDrawable = drawable;
143+
if (drawable != null) {
144+
drawable.setCallback(getCallback());
145+
}
146+
}
147+
148+
@Override
149+
public void draw(@NonNull Canvas canvas) {
150+
if (wrappedDrawable != null) {
151+
wrappedDrawable.draw(canvas);
152+
}
153+
}
154+
155+
@Override
156+
public void setAlpha(int alpha) {
157+
if (wrappedDrawable != null) {
158+
wrappedDrawable.setAlpha(alpha);
159+
}
160+
}
161+
162+
@Override
163+
public void setColorFilter(@Nullable ColorFilter colorFilter) {
164+
if (wrappedDrawable != null) {
165+
wrappedDrawable.setColorFilter(colorFilter);
166+
}
167+
}
168+
169+
@Override
170+
public int getOpacity() {
171+
return wrappedDrawable != null ? wrappedDrawable.getOpacity() : PixelFormat.TRANSPARENT;
172+
}
173+
174+
@Override
175+
public void setBounds(int left, int top, int right, int bottom) {
176+
super.setBounds(left, top, right, bottom);
177+
if (wrappedDrawable != null) {
178+
wrappedDrawable.setBounds(left, top, right, bottom);
179+
}
180+
}
181+
182+
@Override
183+
public int getIntrinsicWidth() {
184+
return wrappedDrawable != null ? wrappedDrawable.getIntrinsicWidth() : -1;
185+
}
186+
187+
@Override
188+
public int getIntrinsicHeight() {
189+
return wrappedDrawable != null ? wrappedDrawable.getIntrinsicHeight() : -1;
190+
}
191+
}
192+
131193
}

0 commit comments

Comments
 (0)