diff --git a/mastodon/build.gradle b/mastodon/build.gradle index b1097408f..48be30f99 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 71 - versionName "2.1.5" + versionCode 72 + versionName "2.1.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "da-rDK", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fa-rIR", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "ig-rNG", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "my-rMM", "nl-rNL", "no-rNO", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "ur-rIN", "vi-rVN", "zh-rCN", "zh-rTW" } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java b/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java index 3c48c4f42..d3ef9d9e1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java @@ -45,26 +45,34 @@ public class Attachment extends BaseModel{ public int getWidth(){ if(meta==null) - return 0; + return 1920; if(meta.width>0) return meta.width; if(meta.original!=null && meta.original.width>0) return meta.original.width; if(meta.small!=null && meta.small.width>0) return meta.small.width; - return 0; + return 1920; } public int getHeight(){ if(meta==null) - return 0; + return 1080; if(meta.height>0) return meta.height; if(meta.original!=null && meta.original.height>0) return meta.original.height; if(meta.small!=null && meta.small.height>0) return meta.small.height; - return 0; + return 1080; + } + + public boolean hasKnownDimensions(){ + return meta!=null && ( + (meta.height>0 && meta.width>0) + || (meta.original!=null && meta.original.height>0 && meta.original.width>0) + || (meta.small!=null && meta.small.height>0 && meta.small.width>0) + ); } public double getDuration(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/BlurhashCrossfadeDrawable.java b/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/BlurhashCrossfadeDrawable.java index e0236a7a1..e33c612ab 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/BlurhashCrossfadeDrawable.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/drawables/BlurhashCrossfadeDrawable.java @@ -66,6 +66,10 @@ public class BlurhashCrossfadeDrawable extends Drawable{ public void setImageDrawable(Drawable imageDrawable){ this.imageDrawable=imageDrawable; + if(imageDrawable!=null){ + width=imageDrawable.getIntrinsicWidth(); + height=imageDrawable.getIntrinsicHeight(); + } invalidateSelf(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewer.java b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewer.java index 00d4c06a3..778c6d930 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewer.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewer.java @@ -716,9 +716,18 @@ public class PhotoViewer implements ZoomPanView.Listener{ public void onBind(Attachment item){ super.onBind(item); FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) imageView.getLayoutParams(); - params.width=item.getWidth(); - params.height=item.getHeight(); - ViewImageLoader.load(this, listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition()), new UrlImageLoaderRequest(item.url), false); + Drawable currentDrawable=listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition()); + if(item.hasKnownDimensions()){ + params.width=item.getWidth(); + params.height=item.getHeight(); + }else if(currentDrawable!=null){ + params.width=currentDrawable.getIntrinsicWidth(); + params.height=currentDrawable.getIntrinsicHeight(); + }else{ + params.width=1920; + params.height=1080; + } + ViewImageLoader.load(this, currentDrawable, new UrlImageLoaderRequest(item.url), false); } @Override @@ -760,9 +769,18 @@ public class PhotoViewer implements ZoomPanView.Listener{ super.onBind(item); playerReady=false; FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) wrap.getLayoutParams(); - params.width=item.getWidth(); - params.height=item.getHeight(); - wrap.setBackground(listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition())); + Drawable currentDrawable=listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition()); + if(item.hasKnownDimensions()){ + params.width=item.getWidth(); + params.height=item.getHeight(); + }else if(currentDrawable!=null){ + params.width=currentDrawable.getIntrinsicWidth(); + params.height=currentDrawable.getIntrinsicHeight(); + }else{ + params.width=1920; + params.height=1080; + } + wrap.setBackground(currentDrawable); progressBar.setVisibility(item.type==Attachment.Type.VIDEO ? View.VISIBLE : View.GONE); if(itemView.isAttachedToWindow()){ reset(); @@ -845,6 +863,8 @@ public class PhotoViewer implements ZoomPanView.Listener{ player.prepareAsync(); }catch(IOException x){ Log.w(TAG, "Error initializing gif player", x); + Toast.makeText(activity, R.string.error_playing_video, Toast.LENGTH_SHORT).show(); + onStartSwipeToDismissTransition(0f); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/ZoomPanView.java b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/ZoomPanView.java index 31d9a78fd..5425c095a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/ZoomPanView.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/ZoomPanView.java @@ -193,9 +193,6 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS private float prepareTransitionCropRect(Rect rect){ float initialScale; - if(rect.isEmpty()){ - rect.set(rect.centerX()-child.getWidth()/2, rect.centerY()-child.getHeight()/2, rect.centerX()+child.getWidth()/2, rect.centerY()+child.getWidth()/2); - } float scaleW=rect.width()/(float)child.getWidth(); float scaleH=rect.height()/(float)child.getHeight(); if(scaleW>scaleH){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java index 5b7dfb1ba..b8b57f2b7 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java @@ -27,6 +27,7 @@ public class MediaAttachmentViewController{ private final Context context; private boolean didClear; private Status status; + private Attachment attachment; public MediaAttachmentViewController(Context context, MediaGridStatusDisplayItem.GridItemType type){ view=context.getSystemService(LayoutInflater.class).inflate(switch(type){ @@ -50,6 +51,7 @@ public class MediaAttachmentViewController{ public void bind(Attachment attachment, Status status){ this.status=status; + this.attachment=attachment; crossfadeDrawable.setSize(attachment.getWidth(), attachment.getHeight()); crossfadeDrawable.setBlurhashDrawable(attachment.blurhashPlaceholder); crossfadeDrawable.setCrossfadeAlpha(0f); @@ -69,6 +71,11 @@ public class MediaAttachmentViewController{ crossfadeDrawable.setImageDrawable(drawable); if(didClear) crossfadeDrawable.animateAlpha(0f); + // Make sure the image is not stretched if the server returned wrong dimensions + if(drawable!=null && (drawable.getIntrinsicWidth()!=attachment.getWidth() || drawable.getIntrinsicHeight()!=attachment.getHeight())){ + photo.setImageDrawable(null); + photo.setImageDrawable(crossfadeDrawable); + } } public void clearImage(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/views/MediaGridLayout.java b/mastodon/src/main/java/org/joinmastodon/android/ui/views/MediaGridLayout.java index 67ff45d8d..554fc6903 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/views/MediaGridLayout.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/views/MediaGridLayout.java @@ -2,14 +2,11 @@ package org.joinmastodon.android.ui.views; import android.content.Context; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.view.ViewGroup; import org.joinmastodon.android.ui.PhotoLayoutHelper; -import java.util.Arrays; - import me.grishka.appkit.utils.V; public class MediaGridLayout extends ViewGroup{