Disable mass APNG animation on low-memory devices.

This commit is contained in:
Greyson Parrelli
2021-01-24 16:37:32 -05:00
parent acbc17c909
commit 92b586c061
12 changed files with 125 additions and 30 deletions

View File

@@ -20,7 +20,11 @@ public class ApngBufferCacheDecoder implements ResourceDecoder<ByteBuffer, APNGD
@Override
public boolean handles(@NonNull ByteBuffer source, @NonNull Options options) {
return APNGParser.isAPNG(new ByteBufferReader(source));
if (options.get(ApngOptions.ANIMATE)) {
return APNGParser.isAPNG(new ByteBufferReader(source));
} else {
return false;
}
}
@Override

View File

@@ -0,0 +1,20 @@
package org.thoughtcrime.securesms.glide.cache;
import com.bumptech.glide.load.Option;
import org.signal.core.util.Conversions;
/**
* Holds options that can be used to alter how APNGs are decoded in Glide.
*/
public final class ApngOptions {
private static final String KEY = "org.signal.skip_apng";
public static Option<Boolean> ANIMATE = Option.disk(KEY, true, (keyBytes, value, messageDigest) -> {
messageDigest.update(keyBytes);
messageDigest.update(Conversions.intToByteArray(value ? 1 : 0));
});
private ApngOptions() {}
}

View File

@@ -26,7 +26,11 @@ public class ApngStreamCacheDecoder implements ResourceDecoder<InputStream, APNG
@Override
public boolean handles(@NonNull InputStream source, @NonNull Options options) {
return APNGParser.isAPNG(new StreamReader(source));
if (options.get(ApngOptions.ANIMATE)) {
return APNGParser.isAPNG(new StreamReader(source));
} else {
return false;
}
}
@Override