diff --git a/app/build.gradle b/app/build.gradle index ffdb500fa..e0ae4c61b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 29 buildToolsVersion "29.0.0" defaultConfig { - minSdkVersion 18 + minSdkVersion 19 targetSdkVersion 29 versionCode 301 versionName "2.13.2" @@ -120,8 +120,7 @@ dependencies { implementation "ch.acra:acra-notification:$acraVersion" implementation 'com.github.stom79:Android-WYSIWYG-Editor:3.2.1' implementation 'com.github.duanhong169:colorpicker:1.1.6' - implementation 'com.github.penfeizhou.android.animation:apng:1.0.1' - implementation 'com.github.penfeizhou.android.animation:gif:1.0.1' + implementation 'com.linecorp:apng:1.6.0' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Account.java b/app/src/main/java/app/fedilab/android/client/Entities/Account.java index bb57ea56a..0929ff656 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Account.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Account.java @@ -44,12 +44,13 @@ import android.widget.Toast; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.transition.Transition; -import com.github.penfeizhou.animation.apng.APNGDrawable; -import com.github.penfeizhou.animation.gif.GifDrawable; +import com.linecorp.apng.ApngDrawable; +import com.linecorp.apng.decoder.ApngException; import org.jetbrains.annotations.NotNull; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; @@ -952,12 +953,16 @@ public class Account implements Parcelable { .into(new SimpleTarget() { @Override public void onResourceReady(@NonNull File resourceFile, @Nullable Transition transition) { - Drawable resource; - if( emoji.getUrl().endsWith(".gif")){ - resource = GifDrawable.fromFile(resourceFile.getAbsolutePath()); - }else{ - resource = APNGDrawable.fromFile(resourceFile.getAbsolutePath()); + ApngDrawable resource = null; + try { + resource = ApngDrawable.Companion.decode(resourceFile.getAbsolutePath(), (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); + } catch (ApngException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); } + if( resource == null) + return; final String targetedEmoji = ":" + emoji.getShortcode() + ":"; if (noteSpan != null && noteSpan.toString().contains(targetedEmoji)) { @@ -970,8 +975,8 @@ public class Account implements Parcelable { resource.setBounds(0, 0, (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); resource.setVisible(true, true); imageSpan = new ImageSpan(resource); + resource.start(); }else{ - resource.setVisible(true, true); Bitmap bitmap = drawableToBitmap(resource.getCurrent()); imageSpan = new ImageSpan(context, Bitmap.createScaledBitmap(bitmap, (int) Helper.convertDpToPixel(20, context), diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Notification.java b/app/src/main/java/app/fedilab/android/client/Entities/Notification.java index 11320f891..e9a1b8c69 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Notification.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Notification.java @@ -37,10 +37,11 @@ import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; -import com.github.penfeizhou.animation.apng.APNGDrawable; -import com.github.penfeizhou.animation.gif.GifDrawable; +import com.linecorp.apng.ApngDrawable; +import com.linecorp.apng.decoder.ApngException; import java.io.File; +import java.io.IOException; import java.util.Date; import java.util.List; @@ -267,12 +268,17 @@ public class Notification implements Parcelable { .into(new SimpleTarget() { @Override public void onResourceReady(@NonNull File resourceFile, @Nullable Transition transition) { - Drawable resource; - if( emoji.getUrl().endsWith(".gif")){ - resource = GifDrawable.fromFile(resourceFile.getAbsolutePath()); - }else{ - resource = APNGDrawable.fromFile(resourceFile.getAbsolutePath()); + ApngDrawable resource = null; + try { + resource = ApngDrawable.Companion.decode(resourceFile.getAbsolutePath(), (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); + } catch (ApngException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); } + if( resource == null) + return; + final String targetedEmoji = ":" + emoji.getShortcode() + ":"; if (contentSpan != null && contentSpan.toString().contains(targetedEmoji)) { //emojis can be used several times so we have to loop @@ -284,8 +290,8 @@ public class Notification implements Parcelable { resource.setBounds(0, 0, (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); resource.setVisible(true, true); imageSpan = new ImageSpan(resource); + resource.start(); }else{ - resource.setVisible(true, true); Bitmap bitmap = drawableToBitmap(resource); imageSpan = new ImageSpan(context, Bitmap.createScaledBitmap(bitmap, (int) Helper.convertDpToPixel(20, context), diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index 404711fbb..b627073f8 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -49,10 +49,12 @@ import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; -import com.github.penfeizhou.animation.apng.APNGDrawable; -import com.github.penfeizhou.animation.gif.GifDrawable; +import com.linecorp.apng.ApngDrawable; +import com.linecorp.apng.decoder.ApngException; + import java.io.File; +import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -1171,12 +1173,17 @@ public class Status implements Parcelable{ .into(new SimpleTarget() { @Override public void onResourceReady(@NonNull File resourceFile, @Nullable Transition transition) { - Drawable resource; - if( emoji.getUrl().endsWith(".gif")){ - resource = GifDrawable.fromFile(resourceFile.getAbsolutePath()); - }else{ - resource = APNGDrawable.fromFile(resourceFile.getAbsolutePath()); + ApngDrawable resource = null; + try { + resource = ApngDrawable.Companion.decode(resourceFile.getAbsolutePath(), (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); + } catch (ApngException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); } + if( resource == null) + return; + final String targetedEmoji = ":" + emoji.getShortcode() + ":"; if (contentSpan != null && contentSpan.toString().contains(targetedEmoji)) { //emojis can be used several times so we have to loop @@ -1188,6 +1195,8 @@ public class Status implements Parcelable{ resource.setBounds(0, 0, (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); resource.setVisible(true, true); imageSpan = new ImageSpan(resource); + resource.setLoopCount(1000); + resource.start(); }else{ resource.setVisible(true, true);