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