Fix animated emoji in picker
This commit is contained in:
parent
a775133c0e
commit
31225c092d
|
@ -15,6 +15,7 @@
|
||||||
package app.fedilab.android.client.Entities;
|
package app.fedilab.android.client.Entities;
|
||||||
|
|
||||||
|
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
@ -28,6 +29,8 @@ public class Emojis implements Parcelable {
|
||||||
private String static_url;
|
private String static_url;
|
||||||
private String url;
|
private String url;
|
||||||
private boolean visible_in_picker;
|
private boolean visible_in_picker;
|
||||||
|
private Drawable drawable;
|
||||||
|
private boolean drawableFound;
|
||||||
|
|
||||||
public Emojis(){}
|
public Emojis(){}
|
||||||
|
|
||||||
|
@ -94,4 +97,20 @@ public class Emojis implements Parcelable {
|
||||||
return new Emojis[size];
|
return new Emojis[size];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public Drawable getDrawable() {
|
||||||
|
return drawable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDrawable(Drawable drawable) {
|
||||||
|
this.drawable = drawable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDrawableFound() {
|
||||||
|
return drawableFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDrawableFound(boolean drawableFound) {
|
||||||
|
this.drawableFound = drawableFound;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,37 +20,33 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.text.Spannable;
|
import android.os.AsyncTask;
|
||||||
import android.text.style.ImageSpan;
|
import android.os.Handler;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.GridView;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.load.DataSource;
|
|
||||||
import com.bumptech.glide.load.engine.GlideException;
|
|
||||||
import com.bumptech.glide.request.RequestListener;
|
|
||||||
import com.bumptech.glide.request.target.SimpleTarget;
|
import com.bumptech.glide.request.target.SimpleTarget;
|
||||||
import com.bumptech.glide.request.target.Target;
|
|
||||||
import com.bumptech.glide.request.transition.Transition;
|
import com.bumptech.glide.request.transition.Transition;
|
||||||
import com.github.penfeizhou.animation.apng.APNGDrawable;
|
import com.github.penfeizhou.animation.apng.APNGDrawable;
|
||||||
|
import com.github.penfeizhou.animation.apng.decode.APNGParser;
|
||||||
import com.github.penfeizhou.animation.gif.GifDrawable;
|
import com.github.penfeizhou.animation.gif.GifDrawable;
|
||||||
import com.github.penfeizhou.animation.gif.decode.GifParser;
|
import com.github.penfeizhou.animation.gif.decode.GifParser;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import app.fedilab.android.R;
|
import app.fedilab.android.R;
|
||||||
import app.fedilab.android.client.Entities.Emojis;
|
import app.fedilab.android.client.Entities.Emojis;
|
||||||
import app.fedilab.android.helper.Helper;
|
import app.fedilab.android.helper.Helper;
|
||||||
|
|
||||||
import static app.fedilab.android.helper.Helper.drawableToBitmap;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Thomas on 03/11/2017.
|
* Created by Thomas on 03/11/2017.
|
||||||
|
@ -95,44 +91,70 @@ public class CustomEmojiAdapter extends ArrayAdapter<Emojis> {
|
||||||
imageView = (ImageView) convertView;
|
imageView = (ImageView) convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
|
||||||
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
|
||||||
|
|
||||||
Glide.with(context)
|
|
||||||
.asFile()
|
|
||||||
.load(emoji.getUrl())
|
|
||||||
.listener(new RequestListener<File>() {
|
|
||||||
@Override
|
|
||||||
public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
if( !emoji.isDrawableFound() ) {
|
||||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
|
emoji.setDrawableFound(true);
|
||||||
return false;
|
Glide.with(context)
|
||||||
}
|
.asFile()
|
||||||
})
|
.load(emoji.getUrl())
|
||||||
.into(new SimpleTarget<File>() {
|
.thumbnail(0.1f)
|
||||||
@Override
|
.into(new SimpleTarget<File>() {
|
||||||
public void onResourceReady(@NonNull File resourceFile, @Nullable Transition<? super File> transition) {
|
@Override
|
||||||
Drawable resource;
|
public void onResourceReady(@NonNull File resourceFile, @Nullable Transition<? super File> transition) {
|
||||||
if(GifParser.isGif(resourceFile.getAbsolutePath())){
|
new transform(context, emoji,resourceFile, imageView).execute();
|
||||||
resource = GifDrawable.fromFile(resourceFile.getAbsolutePath());
|
|
||||||
}else{
|
|
||||||
resource = APNGDrawable.fromFile(resourceFile.getAbsolutePath());
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
if( !disableAnimatedEmoji) {
|
}else{
|
||||||
resource.setVisible(true, true);
|
imageView.setImageDrawable(emoji.getDrawable());
|
||||||
imageView.setImageDrawable(resource);
|
}
|
||||||
|
|
||||||
}else{
|
|
||||||
Bitmap bitmap = drawableToBitmap(resource.getCurrent());
|
|
||||||
imageView.setImageBitmap(bitmap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static class transform extends AsyncTask<Void, Void, Drawable> {
|
||||||
|
|
||||||
|
private WeakReference<Context> contextWeakReference;
|
||||||
|
private File resourceFile;
|
||||||
|
private Emojis emoji;
|
||||||
|
private WeakReference<ImageView> imageViewWeakReference;
|
||||||
|
|
||||||
|
transform(Context context, Emojis emoji, File resource, ImageView imageView) {
|
||||||
|
this.contextWeakReference = new WeakReference<>(context);
|
||||||
|
this.resourceFile = resource;
|
||||||
|
this.emoji = emoji;
|
||||||
|
this.imageViewWeakReference = new WeakReference<>(imageView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Drawable doInBackground(Void... params) {
|
||||||
|
Drawable resource;
|
||||||
|
SharedPreferences sharedpreferences = contextWeakReference.get().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
||||||
|
if( !disableAnimatedEmoji) {
|
||||||
|
if (GifParser.isGif(resourceFile.getAbsolutePath())) {
|
||||||
|
resource = GifDrawable.fromFile(resourceFile.getAbsolutePath());
|
||||||
|
emoji.setDrawable(resource);
|
||||||
|
} else if (APNGParser.isAPNG(resourceFile.getAbsolutePath())) {
|
||||||
|
resource = APNGDrawable.fromFile(resourceFile.getAbsolutePath());
|
||||||
|
emoji.setDrawable(resource);
|
||||||
|
} else {
|
||||||
|
resource = Drawable.createFromPath(resourceFile.getAbsolutePath());
|
||||||
|
emoji.setDrawable(resource);
|
||||||
|
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
resource = Drawable.createFromPath(resourceFile.getAbsolutePath());
|
||||||
|
emoji.setDrawable(resource);
|
||||||
|
}
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Drawable result) {
|
||||||
|
|
||||||
|
imageViewWeakReference.get().setImageDrawable(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue