diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 1394b43dca..7934ade846 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -16,7 +16,7 @@ android { minSdk 23 targetSdk 33 versionCode 100 - versionName "2.1.4+fork.100" + versionName "2.1.6+fork.100" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resourceConfigurations += ['ar-rSA', 'ar-rDZ', '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'] } @@ -70,7 +70,7 @@ dependencies { implementation 'me.grishka.litex:viewpager:1.0.0' implementation 'me.grishka.litex:viewpager2:1.0.0' implementation 'me.grishka.litex:palette:1.0.0' - implementation 'me.grishka.appkit:appkit:1.2.9' + implementation 'me.grishka.appkit:appkit:1.2.14' implementation 'com.google.code.gson:gson:2.9.0' implementation 'org.jsoup:jsoup:1.14.3' implementation 'com.squareup:otto:1.3.8' diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java index df86494fe1..c8e07f5b17 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java @@ -258,7 +258,7 @@ protected void onUpdateToolbar(){ } private void updateHeader(){ - if(hashtag==null) + if(hashtag==null || getActivity()==null) return; if(hashtag.history!=null && !hashtag.history.isEmpty()){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java index 12c6e0af4b..05622a216c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java @@ -47,13 +47,12 @@ public class SplashFragment extends AppKitFragment{ private ProgressBarButton defaultServerButton; private ProgressBar defaultServerProgress; private String chosenDefaultServer=DEFAULT_SERVER; - private boolean loadingDefaultServer; + private boolean loadingDefaultServer, loadedDefaultServer; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); motionEffect=new InterpolatingMotionEffect(MastodonApp.context); - loadAndChooseDefaultServer(); } @Nullable @@ -101,6 +100,8 @@ public boolean onPreDraw(){ }); } }); + if(!loadedDefaultServer && !loadingDefaultServer) + loadAndChooseDefaultServer(); return contentView; } @@ -239,6 +240,7 @@ public void onError(ErrorResponse error){ private void setChosenDefaultServer(String domain){ chosenDefaultServer=domain; loadingDefaultServer=false; + loadedDefaultServer=true; if(defaultServerButton!=null && getActivity()!=null){ defaultServerButton.setTextVisible(true); defaultServerProgress.setVisibility(View.GONE); 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 2e45cd1a12..6fbcc67127 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Attachment.java @@ -68,6 +68,14 @@ public int getHeight(){ 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(){ if(meta==null) return 0; 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 c909fcb8d1..e33c612ab0 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 void setBlurhashDrawable(Drawable blurhashDrawable){ public void setImageDrawable(Drawable imageDrawable){ this.imageDrawable=imageDrawable; + if(imageDrawable!=null){ + width=imageDrawable.getIntrinsicWidth(); + height=imageDrawable.getIntrinsicHeight(); + } invalidateSelf(); } @@ -99,11 +103,15 @@ public int getOpacity(){ @Override public int getIntrinsicWidth(){ + if(width==0) + return imageDrawable==null ? 1920 : imageDrawable.getIntrinsicWidth(); return width; } @Override public int getIntrinsicHeight(){ + if(height==0) + return imageDrawable==null ? 1080 : imageDrawable.getIntrinsicHeight(); return height; } 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 3082753596..e525a6199c 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 @@ -734,9 +734,18 @@ public PhotoViewHolder(){ 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 @@ -778,9 +787,18 @@ public void onBind(Attachment item){ 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(); @@ -841,7 +859,9 @@ private void startPlayer(){ @Override public boolean onError(MediaPlayer mp, int what, int extra){ Log.e(TAG, "video player onError() called with: mp = ["+mp+"], what = ["+what+"], extra = ["+extra+"]"); - return false; + Toast.makeText(activity, R.string.error_playing_video, Toast.LENGTH_SHORT).show(); + onStartSwipeToDismissTransition(0f); + return true; } public void prepareAndStartPlayer(){ @@ -862,6 +882,8 @@ public void prepareAndStartPlayer(){ 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 ac9f5fbaa9..5425c095a0 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 @@ -119,8 +119,10 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto int width=right-left; int height=bottom-top; - if(width==0 || height==0) + if(width==0 || height==0 || child.getWidth()==0 || child.getWidth()==0){ + matrix.reset(); return; + } float scale=Math.min(width/(float)child.getWidth(), height/(float)child.getHeight()); minScale=scale; 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 2c073a5918..b652bdfd07 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 @@ -28,6 +28,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){ @@ -54,6 +55,7 @@ public MediaAttachmentViewController(Context context, MediaGridStatusDisplayItem 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); @@ -76,6 +78,11 @@ public void setImage(Drawable drawable){ 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/res/values-hy-rAM/strings.xml b/mastodon/src/main/res/values-hy-rAM/strings.xml index 48b1644f7e..4c133ca6ee 100644 --- a/mastodon/src/main/res/values-hy-rAM/strings.xml +++ b/mastodon/src/main/res/values-hy-rAM/strings.xml @@ -13,6 +13,7 @@ %s հետեւելու հարցում է ուղարկել %s-ը հավանեց ձեր գրառումը %s տարածեց ձեր գրառումը + Տեսեք ձեր քվեարկած հարցման արդյունքները Տարածել Կարգավորումներ Հրապարակել @@ -102,6 +103,7 @@ Ջնջում… Նվագարկել Դադար տալ + Ելք Ավելացնել հաշիվ Որոնել Պիտակներ diff --git a/mastodon/src/main/res/values-in-rID/strings.xml b/mastodon/src/main/res/values-in-rID/strings.xml index 80680fa33e..f980da9162 100644 --- a/mastodon/src/main/res/values-in-rID/strings.xml +++ b/mastodon/src/main/res/values-in-rID/strings.xml @@ -554,5 +554,18 @@ %dj yang lalu %dh yang lalu + Terjemahkan dari bahasa %s + Diterjemahkan dari bahasa %1$s menggunakan %2$s + Tampilkan yang asli + Terjemahan gagal. Administrator mungkin belum mengaktifkan terjemahan di server ini atau server ini menjalankan Mastodon versi lama yang belum mendukung terjemahan. + Privasi dan jangkauan + Fiturkan profil dan kiriman dalam algoritma penjelajahan + Sertakan kiriman publik dalam hasil pencarian + + %,d peserta + + + %,d kiriman hari ini + diff --git a/mastodon/src/main/res/values-pt-rBR/strings.xml b/mastodon/src/main/res/values-pt-rBR/strings.xml index f6a4a8127c..f8e304352d 100644 --- a/mastodon/src/main/res/values-pt-rBR/strings.xml +++ b/mastodon/src/main/res/values-pt-rBR/strings.xml @@ -572,5 +572,15 @@ %dh atrás %dd atrás + Traduzido de %s + Traduzido de %1$s usando %2$s + Mostrar original + A tradução falhou. Talvez o administrador não tenha habilitado as traduções neste servidor ou este servidor esteja executando uma versão mais antiga do Mastodon onde as traduções ainda não são suportadas. + Privacidade e alcance + Incluir publicações públicas nos resultados de pesquisa + + %,d participante + %,d participantes + diff --git a/mastodon/src/main/res/values-si-rLK/strings.xml b/mastodon/src/main/res/values-si-rLK/strings.xml index d26a76f2ac..e7218851d2 100644 --- a/mastodon/src/main/res/values-si-rLK/strings.xml +++ b/mastodon/src/main/res/values-si-rLK/strings.xml @@ -11,7 +11,7 @@ ඉවතලන්න අවලංගු මාධ්‍ය - පිලිබඳව + පිළිබඳව පැතිකඩ සංස්කරණය %s නිහඬ %s නොනිහඬ diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index af28ff40a5..9ae6db2cfd 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -608,4 +608,6 @@ %,d post today %,d posts today + + Error playing video \ No newline at end of file