jimu-decompiled/sources/pl/droidsonroids/gif/GifDrawable.java
2025-05-13 19:24:51 +02:00

394 lines
11 KiB
Java

package pl.droidsonroids.gif;
import android.content.res.AssetFileDescriptor;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.os.SystemClock;
import android.widget.MediaController;
import java.io.IOException;
import java.util.Locale;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import pl.droidsonroids.gif.transforms.Transform;
/* loaded from: classes2.dex */
public class GifDrawable extends Drawable implements Animatable, MediaController.MediaPlayerControl {
final ScheduledThreadPoolExecutor a;
volatile boolean b;
long c;
private final Rect d;
protected final Paint e;
final Bitmap f;
final GifInfoHandle g;
final ConcurrentLinkedQueue<AnimationListener> h;
private ColorStateList i;
private PorterDuffColorFilter j;
private PorterDuff.Mode k;
final boolean l;
final InvalidationHandler m;
private final RenderTask n;
private final Rect o;
ScheduledFuture<?> p;
private int q;
private int r;
private Transform s;
public GifDrawable(Resources resources, int i) throws Resources.NotFoundException, IOException {
this(resources.openRawResourceFd(i));
float a = GifViewUtils.a(resources, i);
this.r = (int) (this.g.f() * a);
this.q = (int) (this.g.l() * a);
}
private void g() {
ScheduledFuture<?> scheduledFuture = this.p;
if (scheduledFuture != null) {
scheduledFuture.cancel(false);
}
this.m.removeMessages(-1);
}
private void h() {
if (this.l && this.b) {
long j = this.c;
if (j != Long.MIN_VALUE) {
long max = Math.max(0L, j - SystemClock.uptimeMillis());
this.c = Long.MIN_VALUE;
this.a.remove(this.n);
this.p = this.a.schedule(this.n, max, TimeUnit.MILLISECONDS);
}
}
}
private void i() {
this.b = false;
this.m.removeMessages(-1);
this.g.o();
}
void a(long j) {
if (this.l) {
this.c = 0L;
this.m.sendEmptyMessageAtTime(-1, 0L);
} else {
g();
this.p = this.a.schedule(this.n, Math.max(j, 0L), TimeUnit.MILLISECONDS);
}
}
public int b() {
int c = this.g.c();
return (c == 0 || c < this.g.g()) ? c : c - 1;
}
public int c() {
return this.f.getRowBytes() * this.f.getHeight();
}
@Override // android.widget.MediaController.MediaPlayerControl
public boolean canPause() {
return true;
}
@Override // android.widget.MediaController.MediaPlayerControl
public boolean canSeekBackward() {
return d() > 1;
}
@Override // android.widget.MediaController.MediaPlayerControl
public boolean canSeekForward() {
return d() > 1;
}
public int d() {
return this.g.j();
}
@Override // android.graphics.drawable.Drawable
public void draw(Canvas canvas) {
boolean z;
if (this.j == null || this.e.getColorFilter() != null) {
z = false;
} else {
this.e.setColorFilter(this.j);
z = true;
}
Transform transform = this.s;
if (transform == null) {
canvas.drawBitmap(this.f, this.o, this.d, this.e);
} else {
transform.a(canvas, this.e, this.f);
}
if (z) {
this.e.setColorFilter(null);
}
}
public boolean e() {
return this.g.n();
}
public void f() {
this.a.execute(new SafeRunnable(this) { // from class: pl.droidsonroids.gif.GifDrawable.1
@Override // pl.droidsonroids.gif.SafeRunnable
public void a() {
if (GifDrawable.this.g.p()) {
GifDrawable.this.start();
}
}
});
}
@Override // android.graphics.drawable.Drawable
public int getAlpha() {
return this.e.getAlpha();
}
@Override // android.widget.MediaController.MediaPlayerControl
public int getAudioSessionId() {
return 0;
}
@Override // android.widget.MediaController.MediaPlayerControl
public int getBufferPercentage() {
return 100;
}
@Override // android.graphics.drawable.Drawable
public ColorFilter getColorFilter() {
return this.e.getColorFilter();
}
@Override // android.widget.MediaController.MediaPlayerControl
public int getCurrentPosition() {
return this.g.d();
}
@Override // android.widget.MediaController.MediaPlayerControl
public int getDuration() {
return this.g.e();
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicHeight() {
return this.r;
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicWidth() {
return this.q;
}
@Override // android.graphics.drawable.Drawable
public int getOpacity() {
return (!this.g.m() || this.e.getAlpha() < 255) ? -2 : -1;
}
@Override // android.graphics.drawable.Drawable
public void invalidateSelf() {
super.invalidateSelf();
h();
}
@Override // android.widget.MediaController.MediaPlayerControl
public boolean isPlaying() {
return this.b;
}
@Override // android.graphics.drawable.Animatable
public boolean isRunning() {
return this.b;
}
@Override // android.graphics.drawable.Drawable
public boolean isStateful() {
ColorStateList colorStateList;
return super.isStateful() || ((colorStateList = this.i) != null && colorStateList.isStateful());
}
@Override // android.graphics.drawable.Drawable
protected void onBoundsChange(Rect rect) {
this.d.set(rect);
Transform transform = this.s;
if (transform != null) {
transform.a(rect);
}
}
@Override // android.graphics.drawable.Drawable
protected boolean onStateChange(int[] iArr) {
PorterDuff.Mode mode;
ColorStateList colorStateList = this.i;
if (colorStateList == null || (mode = this.k) == null) {
return false;
}
this.j = a(colorStateList, mode);
return true;
}
@Override // android.widget.MediaController.MediaPlayerControl
public void pause() {
stop();
}
@Override // android.widget.MediaController.MediaPlayerControl
public void seekTo(final int i) {
if (i < 0) {
throw new IllegalArgumentException("Position is not positive");
}
this.a.execute(new SafeRunnable(this) { // from class: pl.droidsonroids.gif.GifDrawable.2
@Override // pl.droidsonroids.gif.SafeRunnable
public void a() {
GifDrawable gifDrawable = GifDrawable.this;
gifDrawable.g.a(i, gifDrawable.f);
this.a.m.sendEmptyMessageAtTime(-1, 0L);
}
});
}
@Override // android.graphics.drawable.Drawable
public void setAlpha(int i) {
this.e.setAlpha(i);
}
@Override // android.graphics.drawable.Drawable
public void setColorFilter(ColorFilter colorFilter) {
this.e.setColorFilter(colorFilter);
}
@Override // android.graphics.drawable.Drawable
@Deprecated
public void setDither(boolean z) {
this.e.setDither(z);
invalidateSelf();
}
@Override // android.graphics.drawable.Drawable
public void setFilterBitmap(boolean z) {
this.e.setFilterBitmap(z);
invalidateSelf();
}
@Override // android.graphics.drawable.Drawable
public void setTintList(ColorStateList colorStateList) {
this.i = colorStateList;
this.j = a(colorStateList, this.k);
invalidateSelf();
}
@Override // android.graphics.drawable.Drawable
public void setTintMode(PorterDuff.Mode mode) {
this.k = mode;
this.j = a(this.i, mode);
invalidateSelf();
}
@Override // android.graphics.drawable.Drawable
public boolean setVisible(boolean z, boolean z2) {
boolean visible = super.setVisible(z, z2);
if (!this.l) {
if (z) {
if (z2) {
f();
}
if (visible) {
start();
}
} else if (visible) {
stop();
}
}
return visible;
}
@Override // android.graphics.drawable.Animatable, android.widget.MediaController.MediaPlayerControl
public void start() {
synchronized (this) {
if (this.b) {
return;
}
this.b = true;
a(this.g.q());
}
}
@Override // android.graphics.drawable.Animatable
public void stop() {
synchronized (this) {
if (this.b) {
this.b = false;
g();
this.g.r();
}
}
}
public String toString() {
return String.format(Locale.ENGLISH, "GIF: size: %dx%d, frames: %d, error: %d", Integer.valueOf(this.g.l()), Integer.valueOf(this.g.f()), Integer.valueOf(this.g.j()), Integer.valueOf(this.g.i()));
}
public GifDrawable(AssetFileDescriptor assetFileDescriptor) throws IOException {
this(new GifInfoHandle(assetFileDescriptor), null, null, true);
}
GifDrawable(GifInfoHandle gifInfoHandle, GifDrawable gifDrawable, ScheduledThreadPoolExecutor scheduledThreadPoolExecutor, boolean z) {
this.b = true;
this.c = Long.MIN_VALUE;
this.d = new Rect();
this.e = new Paint(6);
this.h = new ConcurrentLinkedQueue<>();
this.n = new RenderTask(this);
this.l = z;
this.a = scheduledThreadPoolExecutor == null ? GifRenderingExecutor.a() : scheduledThreadPoolExecutor;
this.g = gifInfoHandle;
Bitmap bitmap = null;
if (gifDrawable != null) {
synchronized (gifDrawable.g) {
if (!gifDrawable.g.n() && gifDrawable.g.f() >= this.g.f() && gifDrawable.g.l() >= this.g.l()) {
gifDrawable.i();
Bitmap bitmap2 = gifDrawable.f;
bitmap2.eraseColor(0);
bitmap = bitmap2;
}
}
}
if (bitmap == null) {
this.f = Bitmap.createBitmap(this.g.l(), this.g.f(), Bitmap.Config.ARGB_8888);
} else {
this.f = bitmap;
}
this.f.setHasAlpha(!gifInfoHandle.m());
this.o = new Rect(0, 0, this.g.l(), this.g.f());
this.m = new InvalidationHandler(this);
this.n.a();
this.q = this.g.l();
this.r = this.g.f();
}
public void a(int i) {
this.g.a(i);
}
private PorterDuffColorFilter a(ColorStateList colorStateList, PorterDuff.Mode mode) {
if (colorStateList == null || mode == null) {
return null;
}
return new PorterDuffColorFilter(colorStateList.getColorForState(getState(), 0), mode);
}
public int a() {
return this.g.b();
}
}