mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2025-10-29 19:44:40 +00:00
Fix slow gif playback in ViewImageOrGifActivity and ViewRedditGalleryImageOrGifFragment.
This commit is contained in:
parent
2e965203a4
commit
447139459c
@ -15,6 +15,7 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PersistableBundle;
|
||||
import android.text.Html;
|
||||
import android.text.Spanned;
|
||||
@ -45,7 +46,6 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
|
||||
import com.github.piasy.biv.BigImageViewer;
|
||||
import com.github.piasy.biv.loader.ImageLoader;
|
||||
import com.github.piasy.biv.loader.glide.GlideImageLoader;
|
||||
import com.github.piasy.biv.view.GlideImageViewFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.Executor;
|
||||
@ -57,11 +57,13 @@ import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.CustomFontReceiver;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
import ml.docilealligator.infinityforreddit.WallpaperSetter;
|
||||
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
|
||||
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
|
||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.customviews.GlideGifImageViewFactory;
|
||||
import ml.docilealligator.infinityforreddit.customviews.slidr.Slidr;
|
||||
import ml.docilealligator.infinityforreddit.customviews.slidr.model.SlidrConfig;
|
||||
import ml.docilealligator.infinityforreddit.customviews.slidr.model.SlidrPosition;
|
||||
@ -145,7 +147,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
|
||||
glide = Glide.with(this);
|
||||
|
||||
handler = new Handler();
|
||||
handler = new Handler(Looper.getMainLooper());
|
||||
|
||||
Intent intent = getIntent();
|
||||
mImageUrl = intent.getStringExtra(EXTRA_GIF_URL_KEY);
|
||||
@ -229,7 +231,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
}
|
||||
});
|
||||
|
||||
binding.imageViewViewImageOrGifActivity.setImageViewFactory(new GlideImageViewFactory());
|
||||
binding.imageViewViewImageOrGifActivity.setImageViewFactory(new GlideGifImageViewFactory(new SaveMemoryCenterInisdeDownsampleStrategy(Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.POST_FEED_MAX_RESOLUTION, "5000000")))));
|
||||
|
||||
binding.imageViewViewImageOrGifActivity.setImageLoaderCallback(new ImageLoader.Callback() {
|
||||
@Override
|
||||
|
||||
@ -336,7 +336,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
@Override
|
||||
public void setToHomeScreen(int viewPagerPosition) {
|
||||
if (mImages != null && viewPagerPosition >= 0 && viewPagerPosition < mImages.size()) {
|
||||
WallpaperSetter.set(executor, new Handler(), mImages.get(viewPagerPosition).getLink(), WallpaperSetter.HOME_SCREEN, this,
|
||||
WallpaperSetter.set(executor, handler, mImages.get(viewPagerPosition).getLink(), WallpaperSetter.HOME_SCREEN, this,
|
||||
new WallpaperSetter.SetWallpaperListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@ -354,7 +354,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
@Override
|
||||
public void setToLockScreen(int viewPagerPosition) {
|
||||
if (mImages != null && viewPagerPosition >= 0 && viewPagerPosition < mImages.size()) {
|
||||
WallpaperSetter.set(executor, new Handler(), mImages.get(viewPagerPosition).getLink(), WallpaperSetter.LOCK_SCREEN, this,
|
||||
WallpaperSetter.set(executor, handler, mImages.get(viewPagerPosition).getLink(), WallpaperSetter.LOCK_SCREEN, this,
|
||||
new WallpaperSetter.SetWallpaperListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@ -372,7 +372,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
@Override
|
||||
public void setToBoth(int viewPagerPosition) {
|
||||
if (mImages != null && viewPagerPosition >= 0 && viewPagerPosition < mImages.size()) {
|
||||
WallpaperSetter.set(executor, new Handler(), mImages.get(viewPagerPosition).getLink(), WallpaperSetter.BOTH_SCREENS, this,
|
||||
WallpaperSetter.set(executor, handler, mImages.get(viewPagerPosition).getLink(), WallpaperSetter.BOTH_SCREENS, this,
|
||||
new WallpaperSetter.SetWallpaperListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
package ml.docilealligator.infinityforreddit.customviews;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.view.View;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.github.piasy.biv.metadata.ImageInfoExtractor;
|
||||
import com.github.piasy.biv.view.BigImageView;
|
||||
import com.github.piasy.biv.view.ImageViewFactory;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
|
||||
public class GlideGifImageViewFactory extends ImageViewFactory {
|
||||
private SaveMemoryCenterInisdeDownsampleStrategy saveMemoryCenterInisdeDownsampleStrategy;
|
||||
|
||||
public GlideGifImageViewFactory(SaveMemoryCenterInisdeDownsampleStrategy saveMemoryCenterInisdeDownsampleStrategy) {
|
||||
this.saveMemoryCenterInisdeDownsampleStrategy = saveMemoryCenterInisdeDownsampleStrategy;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final View createAnimatedImageView(final Context context, final int imageType,
|
||||
final int initScaleType) {
|
||||
switch (imageType) {
|
||||
case ImageInfoExtractor.TYPE_GIF:
|
||||
case ImageInfoExtractor.TYPE_ANIMATED_WEBP: {
|
||||
final GifImageView imageView = new GifImageView(context);
|
||||
imageView.setScaleType(BigImageView.scaleType(initScaleType));
|
||||
return imageView;
|
||||
}
|
||||
default:
|
||||
return super.createAnimatedImageView(context, imageType, initScaleType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void loadAnimatedContent(final View view, final int imageType,
|
||||
final File imageFile) {
|
||||
switch (imageType) {
|
||||
case ImageInfoExtractor.TYPE_GIF:
|
||||
case ImageInfoExtractor.TYPE_ANIMATED_WEBP: {
|
||||
if (view instanceof GifImageView) {
|
||||
Glide.with(view.getContext())
|
||||
.load(imageFile)
|
||||
.centerInside()
|
||||
.downsample(saveMemoryCenterInisdeDownsampleStrategy)
|
||||
.into((GifImageView) view);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
super.loadAnimatedContent(view, imageType, imageFile);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadThumbnailContent(final View view, final Uri thumbnail) {
|
||||
if (view instanceof GifImageView) {
|
||||
Glide.with(view.getContext())
|
||||
.load(thumbnail)
|
||||
.into((GifImageView) view);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ import android.app.job.JobInfo;
|
||||
import android.app.job.JobScheduler;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
@ -13,6 +14,7 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PersistableBundle;
|
||||
import android.text.TextUtils;
|
||||
import android.text.util.Linkify;
|
||||
@ -43,17 +45,18 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
|
||||
import com.github.piasy.biv.BigImageViewer;
|
||||
import com.github.piasy.biv.loader.ImageLoader;
|
||||
import com.github.piasy.biv.loader.glide.GlideImageLoader;
|
||||
import com.github.piasy.biv.view.GlideImageViewFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity;
|
||||
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
|
||||
@ -61,9 +64,11 @@ import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
|
||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.CopyTextBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.customviews.GlideGifImageViewFactory;
|
||||
import ml.docilealligator.infinityforreddit.databinding.FragmentViewRedditGalleryImageOrGifBinding;
|
||||
import ml.docilealligator.infinityforreddit.post.Post;
|
||||
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||
|
||||
public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
@ -75,6 +80,9 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
public static final String EXTRA_IS_NSFW = "EIN";
|
||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@ -86,6 +94,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
private boolean isDownloading = false;
|
||||
private boolean isUseBottomCaption = false;
|
||||
private boolean isFallback = false;
|
||||
private Handler handler;
|
||||
private FragmentViewRedditGalleryImageOrGifBinding binding;
|
||||
|
||||
public ViewRedditGalleryImageOrGifFragment() {
|
||||
@ -107,6 +116,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
subredditName = getArguments().getString(EXTRA_SUBREDDIT_NAME);
|
||||
isNsfw = getArguments().getBoolean(EXTRA_IS_NSFW, false);
|
||||
glide = Glide.with(activity);
|
||||
handler = new Handler(Looper.getMainLooper());
|
||||
|
||||
if (activity.typeface != null) {
|
||||
binding.titleTextViewViewRedditGalleryImageOrGifFragment.setTypeface(activity.typeface);
|
||||
@ -114,7 +124,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
binding.captionUrlTextViewViewRedditGalleryImageOrGifFragment.setTypeface(activity.typeface);
|
||||
}
|
||||
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.setImageViewFactory(new GlideImageViewFactory());
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.setImageViewFactory(new GlideGifImageViewFactory(new SaveMemoryCenterInisdeDownsampleStrategy(Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.POST_FEED_MAX_RESOLUTION, "5000000")))));
|
||||
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.setImageLoaderCallback(new ImageLoader.Callback() {
|
||||
@Override
|
||||
@ -184,7 +194,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
loadImage();
|
||||
//loadImage();
|
||||
|
||||
String caption = media.caption;
|
||||
String captionUrl = media.captionUrl;
|
||||
@ -312,8 +322,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
private void loadImage() {
|
||||
if (isFallback) {
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.showImage(Uri.parse(media.fallbackUrl));
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.showImage(Uri.parse(media.url));
|
||||
}
|
||||
}
|
||||
@ -398,7 +407,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
if (activity.getExternalCacheDir() != null) {
|
||||
Toast.makeText(activity, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
SaveBitmapImageToFile.SaveBitmapImageToFile(mExecutor, new Handler(), resource, activity.getExternalCacheDir().getPath(),
|
||||
SaveBitmapImageToFile.SaveBitmapImageToFile(mExecutor, handler, resource, activity.getExternalCacheDir().getPath(),
|
||||
media.fileName,
|
||||
new SaveBitmapImageToFile.SaveBitmapImageToFileListener() {
|
||||
@Override
|
||||
@ -434,16 +443,16 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
|
||||
private void shareGif() {
|
||||
Toast.makeText(activity, R.string.save_gif_first, Toast.LENGTH_SHORT).show();
|
||||
glide.asGif().load(media.url).listener(new RequestListener<GifDrawable>() {
|
||||
glide.asGif().load(media.url).listener(new RequestListener<>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, @NonNull Target<GifDrawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
if (activity.getExternalCacheDir() != null) {
|
||||
SaveGIFToFile.saveGifToFile(mExecutor, new Handler(), resource, activity.getExternalCacheDir().getPath(), media.fileName,
|
||||
SaveGIFToFile.saveGifToFile(mExecutor, handler, resource, activity.getExternalCacheDir().getPath(), media.fileName,
|
||||
new SaveGIFToFile.SaveGIFToFileListener() {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
@ -526,13 +535,23 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
binding.imageViewViewRedditGalleryImageOrGifFragment.cancel();
|
||||
isFallback = false;
|
||||
SubsamplingScaleImageView subsamplingScaleImageView = binding.imageViewViewRedditGalleryImageOrGifFragment.getSSIV();
|
||||
if (subsamplingScaleImageView != null) {
|
||||
subsamplingScaleImageView.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void onDestroyView() {
|
||||
// super.onDestroyView();
|
||||
// binding.imageViewViewRedditGalleryImageOrGifFragment.cancel();
|
||||
// isFallback = false;
|
||||
// SubsamplingScaleImageView subsamplingScaleImageView = binding.imageViewViewRedditGalleryImageOrGifFragment.getSSIV();
|
||||
// if (subsamplingScaleImageView != null) {
|
||||
// subsamplingScaleImageView.recycle();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user