Merge remote-tracking branch 'upstream/master'

This commit is contained in:
sk
2023-10-06 15:17:49 +02:00
13 changed files with 90 additions and 14 deletions

View File

@@ -16,7 +16,7 @@ android {
minSdk 23 minSdk 23
targetSdk 33 targetSdk 33
versionCode 100 versionCode 100
versionName "2.1.4+fork.100" versionName "2.1.6+fork.100"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 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'] 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:viewpager:1.0.0'
implementation 'me.grishka.litex:viewpager2:1.0.0' implementation 'me.grishka.litex:viewpager2:1.0.0'
implementation 'me.grishka.litex:palette: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 'com.google.code.gson:gson:2.9.0'
implementation 'org.jsoup:jsoup:1.14.3' implementation 'org.jsoup:jsoup:1.14.3'
implementation 'com.squareup:otto:1.3.8' implementation 'com.squareup:otto:1.3.8'

View File

@@ -258,7 +258,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{
} }
private void updateHeader(){ private void updateHeader(){
if(hashtag==null) if(hashtag==null || getActivity()==null)
return; return;
if(hashtag.history!=null && !hashtag.history.isEmpty()){ if(hashtag.history!=null && !hashtag.history.isEmpty()){

View File

@@ -47,13 +47,12 @@ public class SplashFragment extends AppKitFragment{
private ProgressBarButton defaultServerButton; private ProgressBarButton defaultServerButton;
private ProgressBar defaultServerProgress; private ProgressBar defaultServerProgress;
private String chosenDefaultServer=DEFAULT_SERVER; private String chosenDefaultServer=DEFAULT_SERVER;
private boolean loadingDefaultServer; private boolean loadingDefaultServer, loadedDefaultServer;
@Override @Override
public void onCreate(Bundle savedInstanceState){ public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
motionEffect=new InterpolatingMotionEffect(MastodonApp.context); motionEffect=new InterpolatingMotionEffect(MastodonApp.context);
loadAndChooseDefaultServer();
} }
@Nullable @Nullable
@@ -101,6 +100,8 @@ public class SplashFragment extends AppKitFragment{
}); });
} }
}); });
if(!loadedDefaultServer && !loadingDefaultServer)
loadAndChooseDefaultServer();
return contentView; return contentView;
} }
@@ -239,6 +240,7 @@ public class SplashFragment extends AppKitFragment{
private void setChosenDefaultServer(String domain){ private void setChosenDefaultServer(String domain){
chosenDefaultServer=domain; chosenDefaultServer=domain;
loadingDefaultServer=false; loadingDefaultServer=false;
loadedDefaultServer=true;
if(defaultServerButton!=null && getActivity()!=null){ if(defaultServerButton!=null && getActivity()!=null){
defaultServerButton.setTextVisible(true); defaultServerButton.setTextVisible(true);
defaultServerProgress.setVisibility(View.GONE); defaultServerProgress.setVisibility(View.GONE);

View File

@@ -68,6 +68,14 @@ public class Attachment extends BaseModel{
return 1080; 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(){ public double getDuration(){
if(meta==null) if(meta==null)
return 0; return 0;

View File

@@ -66,6 +66,10 @@ public class BlurhashCrossfadeDrawable extends Drawable{
public void setImageDrawable(Drawable imageDrawable){ public void setImageDrawable(Drawable imageDrawable){
this.imageDrawable=imageDrawable; this.imageDrawable=imageDrawable;
if(imageDrawable!=null){
width=imageDrawable.getIntrinsicWidth();
height=imageDrawable.getIntrinsicHeight();
}
invalidateSelf(); invalidateSelf();
} }
@@ -99,11 +103,15 @@ public class BlurhashCrossfadeDrawable extends Drawable{
@Override @Override
public int getIntrinsicWidth(){ public int getIntrinsicWidth(){
if(width==0)
return imageDrawable==null ? 1920 : imageDrawable.getIntrinsicWidth();
return width; return width;
} }
@Override @Override
public int getIntrinsicHeight(){ public int getIntrinsicHeight(){
if(height==0)
return imageDrawable==null ? 1080 : imageDrawable.getIntrinsicHeight();
return height; return height;
} }

View File

@@ -734,9 +734,18 @@ public class PhotoViewer implements ZoomPanView.Listener{
public void onBind(Attachment item){ public void onBind(Attachment item){
super.onBind(item); super.onBind(item);
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) imageView.getLayoutParams(); FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) imageView.getLayoutParams();
Drawable currentDrawable=listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition());
if(item.hasKnownDimensions()){
params.width=item.getWidth(); params.width=item.getWidth();
params.height=item.getHeight(); params.height=item.getHeight();
ViewImageLoader.load(this, listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition()), new UrlImageLoaderRequest(item.url), false); }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 @Override
@@ -778,9 +787,18 @@ public class PhotoViewer implements ZoomPanView.Listener{
super.onBind(item); super.onBind(item);
playerReady=false; playerReady=false;
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) wrap.getLayoutParams(); FrameLayout.LayoutParams params=(FrameLayout.LayoutParams) wrap.getLayoutParams();
Drawable currentDrawable=listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition());
if(item.hasKnownDimensions()){
params.width=item.getWidth(); params.width=item.getWidth();
params.height=item.getHeight(); params.height=item.getHeight();
wrap.setBackground(listener.getPhotoViewCurrentDrawable(getAbsoluteAdapterPosition())); }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); progressBar.setVisibility(item.type==Attachment.Type.VIDEO ? View.VISIBLE : View.GONE);
if(itemView.isAttachedToWindow()){ if(itemView.isAttachedToWindow()){
reset(); reset();
@@ -841,7 +859,9 @@ public class PhotoViewer implements ZoomPanView.Listener{
@Override @Override
public boolean onError(MediaPlayer mp, int what, int extra){ public boolean onError(MediaPlayer mp, int what, int extra){
Log.e(TAG, "video player onError() called with: mp = ["+mp+"], what = ["+what+"], extra = ["+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(){ public void prepareAndStartPlayer(){
@@ -862,6 +882,8 @@ public class PhotoViewer implements ZoomPanView.Listener{
player.prepareAsync(); player.prepareAsync();
}catch(IOException x){ }catch(IOException x){
Log.w(TAG, "Error initializing gif player", x); Log.w(TAG, "Error initializing gif player", x);
Toast.makeText(activity, R.string.error_playing_video, Toast.LENGTH_SHORT).show();
onStartSwipeToDismissTransition(0f);
} }
} }

View File

@@ -119,8 +119,10 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS
int width=right-left; int width=right-left;
int height=bottom-top; int height=bottom-top;
if(width==0 || height==0) if(width==0 || height==0 || child.getWidth()==0 || child.getWidth()==0){
matrix.reset();
return; return;
}
float scale=Math.min(width/(float)child.getWidth(), height/(float)child.getHeight()); float scale=Math.min(width/(float)child.getWidth(), height/(float)child.getHeight());
minScale=scale; minScale=scale;

View File

@@ -28,6 +28,7 @@ public class MediaAttachmentViewController{
private final Context context; private final Context context;
private boolean didClear; private boolean didClear;
private Status status; private Status status;
private Attachment attachment;
public MediaAttachmentViewController(Context context, MediaGridStatusDisplayItem.GridItemType type){ public MediaAttachmentViewController(Context context, MediaGridStatusDisplayItem.GridItemType type){
view=context.getSystemService(LayoutInflater.class).inflate(switch(type){ view=context.getSystemService(LayoutInflater.class).inflate(switch(type){
@@ -54,6 +55,7 @@ public class MediaAttachmentViewController{
public void bind(Attachment attachment, Status status){ public void bind(Attachment attachment, Status status){
this.status=status; this.status=status;
this.attachment=attachment;
crossfadeDrawable.setSize(attachment.getWidth(), attachment.getHeight()); crossfadeDrawable.setSize(attachment.getWidth(), attachment.getHeight());
crossfadeDrawable.setBlurhashDrawable(attachment.blurhashPlaceholder); crossfadeDrawable.setBlurhashDrawable(attachment.blurhashPlaceholder);
crossfadeDrawable.setCrossfadeAlpha(0f); crossfadeDrawable.setCrossfadeAlpha(0f);
@@ -76,6 +78,11 @@ public class MediaAttachmentViewController{
crossfadeDrawable.setImageDrawable(drawable); crossfadeDrawable.setImageDrawable(drawable);
if(didClear) if(didClear)
crossfadeDrawable.animateAlpha(0f); 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(){ public void clearImage(){

View File

@@ -13,6 +13,7 @@
<string name="user_sent_follow_request">%s հետեւելու հարցում է ուղարկել</string> <string name="user_sent_follow_request">%s հետեւելու հարցում է ուղարկել</string>
<string name="user_favorited">%s-ը հավանեց ձեր գրառումը</string> <string name="user_favorited">%s-ը հավանեց ձեր գրառումը</string>
<string name="notification_boosted">%s տարածեց ձեր գրառումը</string> <string name="notification_boosted">%s տարածեց ձեր գրառումը</string>
<string name="poll_ended">Տեսեք ձեր քվեարկած հարցման արդյունքները</string>
<string name="share_toot_title">Տարածել</string> <string name="share_toot_title">Տարածել</string>
<string name="settings">Կարգավորումներ</string> <string name="settings">Կարգավորումներ</string>
<string name="publish">Հրապարակել</string> <string name="publish">Հրապարակել</string>
@@ -102,6 +103,7 @@
<string name="deleting">Ջնջում…</string> <string name="deleting">Ջնջում…</string>
<string name="play">Նվագարկել</string> <string name="play">Նվագարկել</string>
<string name="pause">Դադար տալ</string> <string name="pause">Դադար տալ</string>
<string name="log_out">Ելք</string>
<string name="add_account">Ավելացնել հաշիվ</string> <string name="add_account">Ավելացնել հաշիվ</string>
<string name="search_hint">Որոնել</string> <string name="search_hint">Որոնել</string>
<string name="hashtags">Պիտակներ</string> <string name="hashtags">Պիտակներ</string>

View File

@@ -554,5 +554,18 @@
<string name="time_hours_ago_short">%dj yang lalu</string> <string name="time_hours_ago_short">%dj yang lalu</string>
<string name="time_days_ago_short">%dh yang lalu</string> <string name="time_days_ago_short">%dh yang lalu</string>
<!-- %s is the name of the post language --> <!-- %s is the name of the post language -->
<string name="translate_post">Terjemahkan dari bahasa %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service --> <!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Diterjemahkan dari bahasa %1$s menggunakan %2$s</string>
<string name="translation_show_original">Tampilkan yang asli</string>
<string name="translation_failed">Terjemahan gagal. Administrator mungkin belum mengaktifkan terjemahan di server ini atau server ini menjalankan Mastodon versi lama yang belum mendukung terjemahan.</string>
<string name="settings_privacy">Privasi dan jangkauan</string>
<string name="settings_discoverable">Fiturkan profil dan kiriman dalam algoritma penjelajahan</string>
<string name="settings_indexable">Sertakan kiriman publik dalam hasil pencarian</string>
<plurals name="x_participants">
<item quantity="other">%,d peserta</item>
</plurals>
<plurals name="x_posts_today">
<item quantity="other">%,d kiriman hari ini</item>
</plurals>
</resources> </resources>

View File

@@ -572,5 +572,15 @@
<string name="time_hours_ago_short">%dh atrás</string> <string name="time_hours_ago_short">%dh atrás</string>
<string name="time_days_ago_short">%dd atrás</string> <string name="time_days_ago_short">%dd atrás</string>
<!-- %s is the name of the post language --> <!-- %s is the name of the post language -->
<string name="translate_post">Traduzido de %s</string>
<!-- %1$s is the language, %2$s is the name of the translation service --> <!-- %1$s is the language, %2$s is the name of the translation service -->
<string name="post_translated">Traduzido de %1$s usando %2$s</string>
<string name="translation_show_original">Mostrar original</string>
<string name="translation_failed">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.</string>
<string name="settings_privacy">Privacidade e alcance</string>
<string name="settings_indexable">Incluir publicações públicas nos resultados de pesquisa</string>
<plurals name="x_participants">
<item quantity="one">%,d participante</item>
<item quantity="other">%,d participantes</item>
</plurals>
</resources> </resources>

View File

@@ -11,7 +11,7 @@
<string name="discard">ඉවතලන්න</string> <string name="discard">ඉවතලන්න</string>
<string name="cancel">අවලංගු</string> <string name="cancel">අවලංගු</string>
<string name="media">මාධ්‍ය</string> <string name="media">මාධ්‍ය</string>
<string name="profile_about">පිිබඳව</string> <string name="profile_about">පිිබඳව</string>
<string name="edit_profile">පැතිකඩ සංස්කරණය</string> <string name="edit_profile">පැතිකඩ සංස්කරණය</string>
<string name="mute_user">%s නිහඬ</string> <string name="mute_user">%s නිහඬ</string>
<string name="unmute_user">%s නොනිහඬ</string> <string name="unmute_user">%s නොනිහඬ</string>

View File

@@ -608,4 +608,6 @@
<item quantity="one">%,d post today</item> <item quantity="one">%,d post today</item>
<item quantity="other">%,d posts today</item> <item quantity="other">%,d posts today</item>
</plurals> </plurals>
<string name="error_playing_video">Error playing video</string>
</resources> </resources>