mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-27 19:38:22 +01:00
parent
3b365dfe5d
commit
a70950baf9
@ -96,6 +96,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
private String subredditName;
|
||||
private boolean isDownloading = false;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isFallback = false;
|
||||
|
||||
public ViewRedditGalleryImageOrGifFragment() {
|
||||
// Required empty public constructor
|
||||
@ -162,6 +163,21 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
view.setQuickScaleEnabled(true);
|
||||
view.resetScaleAndCenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImageLoadError(Exception e) {
|
||||
e.printStackTrace();
|
||||
// For issue #558
|
||||
// Make sure it's not stuck in a loop if it comes to that
|
||||
// Fallback url should be empty if it's not an album item
|
||||
if (!isFallback && media.hasFallback()) {
|
||||
imageView.cancel();
|
||||
isFallback = true;
|
||||
loadImage();
|
||||
} else {
|
||||
isFallback = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -238,7 +254,12 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
}
|
||||
|
||||
private void loadImage() {
|
||||
imageView.showImage(Uri.parse(media.url));
|
||||
if(isFallback) {
|
||||
imageView.showImage(Uri.parse(media.fallbackUrl));
|
||||
}
|
||||
else{
|
||||
imageView.showImage(Uri.parse(media.url));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -295,7 +316,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
isDownloading = false;
|
||||
|
||||
Intent intent = new Intent(activity, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, media.url);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, media.hasFallback() ? media.fallbackUrl : media.url); // Retrieve original instead of the one additionally compressed by reddit
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, media.mediaType == Post.Gallery.TYPE_GIF ? DownloadMediaService.EXTRA_MEDIA_TYPE_GIF: DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, media.fileName);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
@ -303,8 +324,10 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
Toast.makeText(activity, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
//TODO: Find a way to share original image, Glide messes with the size and quality,
|
||||
// compression should be up to the app being shared with (WhatsApp for example)
|
||||
private void shareImage() {
|
||||
glide.asBitmap().load(media.url).into(new CustomTarget<Bitmap>() {
|
||||
glide.asBitmap().load(media.hasFallback() ? media.fallbackUrl : media.url).into(new CustomTarget<Bitmap>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
if (activity.getExternalCacheDir() != null) {
|
||||
@ -420,7 +443,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
super.onResume();
|
||||
SubsamplingScaleImageView ssiv = imageView.getSSIV();
|
||||
if (ssiv == null || !ssiv.hasImage()) {
|
||||
imageView.showImage(Uri.parse(media.url));
|
||||
loadImage();
|
||||
}
|
||||
}
|
||||
|
||||
@ -428,6 +451,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
imageView.cancel();
|
||||
isFallback = false;
|
||||
SubsamplingScaleImageView subsamplingScaleImageView = imageView.getSSIV();
|
||||
if (subsamplingScaleImageView != null) {
|
||||
subsamplingScaleImageView.recycle();
|
||||
|
@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit.post;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.text.Html;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
@ -563,7 +564,17 @@ public class ParsePost {
|
||||
previews.add(new Post.Preview(galleryItemUrl, singleGalleryObject.getJSONObject(JSONUtils.S_KEY).getInt(JSONUtils.X_KEY),
|
||||
singleGalleryObject.getJSONObject(JSONUtils.S_KEY).getInt(JSONUtils.Y_KEY)));
|
||||
}
|
||||
gallery.add(new Post.Gallery(mimeType, galleryItemUrl, subredditName + "-" + galleryId + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1)));
|
||||
|
||||
Post.Gallery postGalleryItem = new Post.Gallery(mimeType, galleryItemUrl, "", subredditName + "-" + galleryId + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1));
|
||||
|
||||
// For issue #558
|
||||
// Construct a fallback image url
|
||||
if(!TextUtils.isEmpty(galleryItemUrl) && !TextUtils.isEmpty(mimeType) && (mimeType.contains("jpg") || mimeType.contains("png"))) {
|
||||
postGalleryItem.setFallbackUrl("https://i.redd.it/" + galleryId + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1));
|
||||
postGalleryItem.setHasFallback(true);
|
||||
}
|
||||
|
||||
gallery.add(postGalleryItem);
|
||||
}
|
||||
|
||||
if (!gallery.isEmpty()) {
|
||||
|
@ -580,12 +580,15 @@ public class Post implements Parcelable {
|
||||
|
||||
public String mimeType;
|
||||
public String url;
|
||||
public String fallbackUrl;
|
||||
private boolean hasFallback;
|
||||
public String fileName;
|
||||
public int mediaType;
|
||||
|
||||
public Gallery(String mimeType, String url, String fileName) {
|
||||
public Gallery(String mimeType, String url, String fallbackUrl, String fileName) {
|
||||
this.mimeType = mimeType;
|
||||
this.url = url;
|
||||
this.fallbackUrl = fallbackUrl;
|
||||
this.fileName = fileName;
|
||||
if (mimeType.contains("gif")) {
|
||||
mediaType = TYPE_GIF;
|
||||
@ -599,6 +602,8 @@ public class Post implements Parcelable {
|
||||
protected Gallery(Parcel in) {
|
||||
mimeType = in.readString();
|
||||
url = in.readString();
|
||||
fallbackUrl = in.readString();
|
||||
hasFallback = in.readByte() != 0;
|
||||
fileName = in.readString();
|
||||
mediaType = in.readInt();
|
||||
}
|
||||
@ -624,9 +629,17 @@ public class Post implements Parcelable {
|
||||
public void writeToParcel(Parcel parcel, int i) {
|
||||
parcel.writeString(mimeType);
|
||||
parcel.writeString(url);
|
||||
parcel.writeString(fallbackUrl);
|
||||
parcel.writeByte((byte) (hasFallback ? 1 : 0));
|
||||
parcel.writeString(fileName);
|
||||
parcel.writeInt(mediaType);
|
||||
}
|
||||
|
||||
public void setFallbackUrl(String fallbackUrl) { this.fallbackUrl = fallbackUrl; }
|
||||
|
||||
public void setHasFallback(boolean hasFallback) { this.hasFallback = hasFallback; }
|
||||
|
||||
public boolean hasFallback() { return this.hasFallback; }
|
||||
}
|
||||
|
||||
public static class Preview implements Parcelable {
|
||||
|
Loading…
Reference in New Issue
Block a user