From e40841c1289eb33d95c8cfee48b83fbeffff02ca Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Sep 2023 20:26:54 +0200 Subject: [PATCH 01/98] New translations strings.xml (Portuguese, Brazilian) --- mastodon/src/main/res/values-pt-rBR/strings.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mastodon/src/main/res/values-pt-rBR/strings.xml b/mastodon/src/main/res/values-pt-rBR/strings.xml index f6a4a8127..f8e304352 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 + From b91840fb95fb9e0911232f6230a8580b38bf6b9b Mon Sep 17 00:00:00 2001 From: Grishka Date: Sun, 1 Oct 2023 07:16:21 +0300 Subject: [PATCH 02/98] Another attempt to fix ZoomPanView crash --- mastodon/build.gradle | 4 ++-- .../org/joinmastodon/android/ui/photoviewer/ZoomPanView.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 592344c16..7d1646926 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 70 - versionName "2.1.4" + versionCode 71 + versionName "2.1.5" 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/ui/photoviewer/ZoomPanView.java b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/ZoomPanView.java index ac9f5fbaa..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 @@ -119,8 +119,10 @@ public class ZoomPanView extends FrameLayout implements ScaleGestureDetector.OnS 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; From c5b52b27817410961a66b7a72ae993b81a93fadc Mon Sep 17 00:00:00 2001 From: Grishka Date: Sun, 1 Oct 2023 12:17:21 +0300 Subject: [PATCH 03/98] Fix default server not loading sometimes --- .../org/joinmastodon/android/fragments/SplashFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 12c6e0af4..05622a216 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 class SplashFragment extends AppKitFragment{ }); } }); + if(!loadedDefaultServer && !loadingDefaultServer) + loadAndChooseDefaultServer(); return contentView; } @@ -239,6 +240,7 @@ public class SplashFragment extends AppKitFragment{ private void setChosenDefaultServer(String domain){ chosenDefaultServer=domain; loadingDefaultServer=false; + loadedDefaultServer=true; if(defaultServerButton!=null && getActivity()!=null){ defaultServerButton.setTextVisible(true); defaultServerProgress.setVisibility(View.GONE); From f43352b790539db053b2493c64767f2aa85f777c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 1 Oct 2023 16:30:51 +0200 Subject: [PATCH 04/98] New translations strings.xml (Indonesian) --- mastodon/src/main/res/values-in-rID/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mastodon/src/main/res/values-in-rID/strings.xml b/mastodon/src/main/res/values-in-rID/strings.xml index 80680fa33..0dafc3b3c 100644 --- a/mastodon/src/main/res/values-in-rID/strings.xml +++ b/mastodon/src/main/res/values-in-rID/strings.xml @@ -554,5 +554,9 @@ %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. From c38c2a425b762ffece370fe36e42881135e46832 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 1 Oct 2023 17:30:46 +0200 Subject: [PATCH 05/98] New translations strings.xml (Indonesian) --- mastodon/src/main/res/values-in-rID/strings.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mastodon/src/main/res/values-in-rID/strings.xml b/mastodon/src/main/res/values-in-rID/strings.xml index 0dafc3b3c..f980da916 100644 --- a/mastodon/src/main/res/values-in-rID/strings.xml +++ b/mastodon/src/main/res/values-in-rID/strings.xml @@ -559,4 +559,13 @@ 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 + From 1feccdc26d154f1468abdcdf0b7051cb41a179a1 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sun, 1 Oct 2023 23:11:33 +0300 Subject: [PATCH 06/98] Fixes --- .../android/fragments/HashtagTimelineFragment.java | 2 +- .../org/joinmastodon/android/ui/photoviewer/PhotoViewer.java | 4 +++- .../org/joinmastodon/android/ui/photoviewer/ZoomPanView.java | 3 +++ mastodon/src/main/res/values/strings.xml | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) 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 e919f9dbe..e8419d151 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java @@ -176,7 +176,7 @@ public class HashtagTimelineFragment extends StatusListFragment{ } 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/ui/photoviewer/PhotoViewer.java b/mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewer.java index 7eded4094..00d4c06a3 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 @@ -822,7 +822,9 @@ public class PhotoViewer implements ZoomPanView.Listener{ @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(){ 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 5425c095a..31d9a78fd 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,6 +193,9 @@ 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/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index af28ff40a..9ae6db2cf 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 From 74ae3bf706053ec6d1492a2b2522dc7a82452faa Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 2 Oct 2023 07:26:27 +0200 Subject: [PATCH 07/98] New translations strings.xml (Armenian) --- mastodon/src/main/res/values-hy-rAM/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mastodon/src/main/res/values-hy-rAM/strings.xml b/mastodon/src/main/res/values-hy-rAM/strings.xml index 48b1644f7..4c133ca6e 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 @@ Ջնջում… Նվագարկել Դադար տալ + Ելք Ավելացնել հաշիվ Որոնել Պիտակներ From cbce90c4615ce3d7b097c5f06ed6582853236e7b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 2 Oct 2023 21:16:49 +0200 Subject: [PATCH 08/98] New translations strings.xml (Sinhala) --- mastodon/src/main/res/values-si-rLK/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-si-rLK/strings.xml b/mastodon/src/main/res/values-si-rLK/strings.xml index d26a76f2a..e7218851d 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 නොනිහඬ From 70386ea1b22249635ee21803146a479784e1d35c Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 3 Oct 2023 02:11:04 +0300 Subject: [PATCH 09/98] Update appkit to finally fix that ViewPager2 crash --- mastodon/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 7d1646926..b1097408f 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -76,7 +76,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.13' + implementation 'me.grishka.appkit:appkit:1.2.14' implementation 'com.google.code.gson:gson:2.8.9' implementation 'org.jsoup:jsoup:1.14.3' implementation 'com.squareup:otto:1.3.8' From 1f4152b588f05ffafa93bc4e9a422ad9653195af Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 3 Oct 2023 02:52:07 +0300 Subject: [PATCH 10/98] Fix #705 and improve handling of unknown attachment dimensions --- mastodon/build.gradle | 4 +-- .../android/model/Attachment.java | 16 +++++++--- .../drawables/BlurhashCrossfadeDrawable.java | 4 +++ .../android/ui/photoviewer/PhotoViewer.java | 32 +++++++++++++++---- .../android/ui/photoviewer/ZoomPanView.java | 3 -- .../utils/MediaAttachmentViewController.java | 7 ++++ .../android/ui/views/MediaGridLayout.java | 3 -- 7 files changed, 51 insertions(+), 18 deletions(-) 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{ From 74fa2a3081a521dcca2033db4e620bc246c9ade4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 3 Oct 2023 21:27:27 +0200 Subject: [PATCH 11/98] New translations strings.xml (Thai) --- mastodon/src/main/res/values-th-rTH/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-th-rTH/strings.xml b/mastodon/src/main/res/values-th-rTH/strings.xml index 7acb8fb8a..8e28885d1 100644 --- a/mastodon/src/main/res/values-th-rTH/strings.xml +++ b/mastodon/src/main/res/values-th-rTH/strings.xml @@ -568,4 +568,5 @@ %,d โพสต์วันนี้ + เกิดข้อผิดพลาดในการเล่นวิดีโอ From ac891eea53f27323b04d4e5c2c111b0016e2145b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 4 Oct 2023 15:28:52 +0200 Subject: [PATCH 12/98] New translations strings.xml (Icelandic) --- mastodon/src/main/res/values-is-rIS/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-is-rIS/strings.xml b/mastodon/src/main/res/values-is-rIS/strings.xml index 0f8f22474..0a381602a 100644 --- a/mastodon/src/main/res/values-is-rIS/strings.xml +++ b/mastodon/src/main/res/values-is-rIS/strings.xml @@ -599,4 +599,5 @@ %,d færsla í dag %,d færslur í dag + Villa við að spila myndskeið From 55a8634be291f02e73afa4a544b50906272c5d91 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 4 Oct 2023 16:52:54 +0200 Subject: [PATCH 13/98] New translations strings.xml (Japanese) --- mastodon/src/main/res/values-ja-rJP/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-ja-rJP/strings.xml b/mastodon/src/main/res/values-ja-rJP/strings.xml index 1fa201e22..5e2bf447d 100644 --- a/mastodon/src/main/res/values-ja-rJP/strings.xml +++ b/mastodon/src/main/res/values-ja-rJP/strings.xml @@ -568,4 +568,5 @@ 今日の投稿 %,d 件 + 動画再生に失敗しました From e78b51865492a543e4b0b5a64230634146c28429 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 4 Oct 2023 18:44:26 +0200 Subject: [PATCH 14/98] New translations strings.xml (Ukrainian) --- mastodon/src/main/res/values-uk-rUA/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-uk-rUA/strings.xml b/mastodon/src/main/res/values-uk-rUA/strings.xml index d2080f40e..ff28c113a 100644 --- a/mastodon/src/main/res/values-uk-rUA/strings.xml +++ b/mastodon/src/main/res/values-uk-rUA/strings.xml @@ -661,4 +661,5 @@ %,d дописів сьогодні %,d дописа сьогодні + Помилка відтворення відео From c17745368d03178601fce18c70935189fa64677e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 4 Oct 2023 22:24:20 +0200 Subject: [PATCH 15/98] New translations strings.xml (Italian) --- mastodon/src/main/res/values-it-rIT/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mastodon/src/main/res/values-it-rIT/strings.xml b/mastodon/src/main/res/values-it-rIT/strings.xml index 67b70f50f..44e8d382b 100644 --- a/mastodon/src/main/res/values-it-rIT/strings.xml +++ b/mastodon/src/main/res/values-it-rIT/strings.xml @@ -588,6 +588,8 @@ Tradotto da %1$s utilizzando %2$s Mostra originale Traduzione fallita. Forse l\'amministratore non ha abilitato le traduzioni su questo server, o su questo server è in esecuzione una versione precedente di Mastodon in cui le traduzioni non sono ancora supportate. + Privacy e portata + Mostra il profilo e i post negli algoritmi di scoperta Includi i post pubblici nei risultati di ricerca %,d participante @@ -597,4 +599,5 @@ %,d post oggi %,d post oggi + Errore nella riproduzione del video From 9fcfbe5593bb9b5c1e854b1bb3e261d413bb1d18 Mon Sep 17 00:00:00 2001 From: poesty Date: Sun, 1 Oct 2023 01:42:26 +0000 Subject: [PATCH 16/98] Translated using Weblate (Chinese (Simplified)) Currently translated at 99.7% (387 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/zh_Hans/ --- mastodon/src/main/res/values-zh-rCN/strings_sk.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml index 2b48f1656..3b8726f72 100644 --- a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml +++ b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml @@ -325,7 +325,7 @@ 用表情回应 再次点击以打开系统键盘 请输入一个表情 - 输入一个表情以回应 + 输入表情符号或搜索自定义表情 持续时间 无限期 5分钟 @@ -393,4 +393,6 @@ 如果你正在寻找一个不自杀的迹象,这就是。如果你遇到困难,请考虑拨打当地的自杀热线。 这些是你的服务器上正在谈论的新闻故事。 嘟文包含媒体 + 已屏蔽账号 + 已静音账号 \ No newline at end of file From 2e11f78e9daeb4e6b735e5cff88546c44161e91f Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sun, 1 Oct 2023 13:39:39 +0000 Subject: [PATCH 17/98] Translated using Weblate (Spanish) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/ --- mastodon/src/main/res/values-es-rES/strings_sk.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-es-rES/strings_sk.xml b/mastodon/src/main/res/values-es-rES/strings_sk.xml index f8c1f85f0..f20bb9034 100644 --- a/mastodon/src/main/res/values-es-rES/strings_sk.xml +++ b/mastodon/src/main/res/values-es-rES/strings_sk.xml @@ -367,7 +367,7 @@ %1$,d usuarios reaccionaron con %2$s Por favor, introduce un emoticono - Escribe para reaccionar con un emoticono + Escribe un emoticono o busca un emoticono personalizado Activar reacciones con emoticonos Muestra las reacciones con emoticonos a las publicaciones y te permite añadir las tuyas. Varias instancias del Fediverso lo soportan, pero Mastodon no. Las reacciones con los emoticonos deben mostrarse en las líneas de tiempo. Si esta opción está desactivada, las reacciones con los emoticonos solo se mostrarán al ver un hilo. @@ -400,4 +400,6 @@ Cargar publicaciones más recientes Estos son los posts que ganan popularidad en tu servidor. Estas son las noticias de las que se habla en tu servidor. + Cuentas bloqueadas + Cuentas silenciadas \ No newline at end of file From 36e05a6d149c50bd49814111ef691dc30a0d9d9f Mon Sep 17 00:00:00 2001 From: butterflyoffire Date: Tue, 3 Oct 2023 13:04:44 +0000 Subject: [PATCH 18/98] Translated using Weblate (French) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/ --- mastodon/src/main/res/values-fr-rFR/strings_sk.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml index 141066168..d2af9b278 100644 --- a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml +++ b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml @@ -401,4 +401,6 @@ %d heures %d jours Ce sont les publications qui gagnent du terrain sur votre serveur. + Comptes bloqués + Comptes silenciés \ No newline at end of file From b1bec870c5a06e69ebd521d6e88df7d5f3f10dda Mon Sep 17 00:00:00 2001 From: Choukajohn Date: Tue, 3 Oct 2023 22:34:30 +0000 Subject: [PATCH 19/98] Translated using Weblate (French) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/ --- mastodon/src/main/res/values-fr-rFR/strings_sk.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml index d2af9b278..03350e95e 100644 --- a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml +++ b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml @@ -372,7 +372,7 @@ Réagissez avec des emojis Appuyez à nouveau pour le clavier système - Tapez pour réagir avec un emoji + Tapez un emoji ou recherchez un emoji personnalisé Veuillez saisir un emoji message From f3b3bcaa0aaceef9ee32c6e53cf91771982edded Mon Sep 17 00:00:00 2001 From: Linerly Date: Sun, 1 Oct 2023 14:06:58 +0000 Subject: [PATCH 20/98] Translated using Weblate (Indonesian) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/id/ --- mastodon/src/main/res/values-in-rID/strings_sk.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-in-rID/strings_sk.xml b/mastodon/src/main/res/values-in-rID/strings_sk.xml index 213cb3f83..2377abedd 100644 --- a/mastodon/src/main/res/values-in-rID/strings_sk.xml +++ b/mastodon/src/main/res/values-in-rID/strings_sk.xml @@ -366,7 +366,7 @@ %1$,d pengguna bereaksi dengan %2$s Silakan ketik emoji - Ketik untuk bereaksi dengan sebuah emoji + Ketik emoji atau cari emoji kustom Aktifkan reaksi emoji Menampilkan reaksi emoji di kiriman dan memungkinkan Anda untuk menambahkan sendiri. Banyak server Fediverse yang mendukung ini, tetapi Mastodon tidak mendukungnya. "Menentukan apakah reaksi emoji ditampilkan di lini masa. Jika opsi ini mati, reaksi emoji hanya akan ditampilkan ketika melihat sebuah utas." @@ -394,4 +394,6 @@ Jika Anda mencari tanda untuk tidak melakukan bunuh diri, ini adalah tanda itu. Tolong pertimbangkan untuk menghubungi hotline bunuh diri lokal jika Anda dalam kesulitan. Di bawah adalah berita yang dibicarakan di server Anda. Kiriman berisi media + Akun yang diblokir + Akun yang dibisukan \ No newline at end of file From 1299b2ad42821b85d9ce2ef0b91430a08a95a938 Mon Sep 17 00:00:00 2001 From: alextecplayz Date: Sat, 30 Sep 2023 17:52:13 +0000 Subject: [PATCH 21/98] Translated using Weblate (Romanian) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ro/ --- mastodon/src/main/res/values-ro-rRO/strings_sk.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml index 06a7bb385..a6a212c06 100644 --- a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml +++ b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml @@ -379,7 +379,7 @@ %d zile Afișați mereu butonul adăugare Găsiți o linie de asistență telefonică - Scrieți pentru a reacționa cu un emoji + Scrieți un emoji sau căutați emoji personalizat Nu mai afișați din nou http://www.antisuicid.com/ Vă rugăm scrieți un emoji @@ -397,4 +397,6 @@ Dacă sunteți în căutarea unui semn pentru a nu vă sinucide, acesta este. Vă rugăm să luați în considerare posibilitatea de a apela la o linie telefonică locală de urgență pentru suicid dacă vă aflați în dificultate. Acestea sunt știrile despre care se vorbește pe serverul tău. Postare conține media + Conturi blocate + Conturi amuțite \ No newline at end of file From 0379347f2da745b192d24ae0a09bed7d9427084e Mon Sep 17 00:00:00 2001 From: David Lapshin Date: Mon, 2 Oct 2023 13:02:07 +0000 Subject: [PATCH 22/98] Translated using Weblate (Russian) Currently translated at 87.1% (338 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ru/ --- mastodon/src/main/res/values-ru-rRU/strings_sk.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-ru-rRU/strings_sk.xml b/mastodon/src/main/res/values-ru-rRU/strings_sk.xml index 00e4b355f..1e435d958 100644 --- a/mastodon/src/main/res/values-ru-rRU/strings_sk.xml +++ b/mastodon/src/main/res/values-ru-rRU/strings_sk.xml @@ -250,7 +250,7 @@ Версия сервера: %s Итоги голосования Для работы этой функции ваш инстанс должен поддерживать локальные публикации. Большинство модифицированных версий Mastodon это поддерживают, но сам Mastodon нет. - Префикс ответа CW с “re:” + Префикс CW с \"re:\" при ответе Отфильтровано: %s Развернуть Свернуть @@ -331,4 +331,10 @@ Только в ответ другим Распределители не найдены Позволяет устанавливать тип содержимого вроде Markdown при создании поста. Имейте в виду, что это поддерживается не на всех серверах. + Пробовать получить более точные данные о подписчиках, избранных и продвижениях, загрузив информацию из экземпляра происхождения. + Это позволяет предварительно выбирать тип содержимого при создании новых публикаций, переопределяя значение, установленное в “Параметры публикации”. + Эти посты набирают обороты на вашем сервере. + Позволять продолжить воспроизведение уже проигрываемого медиа, накладывая его на новое воспроизведение + Наложение аудио + Это новости, которые обсуждаются на вашем сервере. \ No newline at end of file From 6efe263dd80001a95b509c84788a89c20db6599d Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Sat, 30 Sep 2023 20:05:02 +0000 Subject: [PATCH 23/98] Translated using Weblate (Ukrainian) Currently translated at 100.0% (388 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/uk/ --- mastodon/src/main/res/values-uk-rUA/strings_sk.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml index 90c045e93..0bb125e62 100644 --- a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml +++ b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml @@ -372,7 +372,7 @@ Увімкнути реакції з емоджі Показує реакції емоджі на дописи та дає змогу додавати свої. Різні сервери Fediverse підтримують цю функцію, але Mastodon не підтримує. Введіть емоджі - Введіть, щоб відреагувати з емоджі + Введіть або знайдіть власний емоджі Чи відображати реакції емоджі у стрічках. Якщо цю опцію вимкнено, реакції емоджі показуватимуться лише під час перегляду гілки. допис @@ -402,4 +402,6 @@ %d секунд Це дописи, які набирають популярність на вашому сервері. %d днів + Заблоковані облікові записи + Ігноровані облікові записи \ No newline at end of file From 5d26ea85e962118af554da1e451f9e08d825bf28 Mon Sep 17 00:00:00 2001 From: butterflyoffire Date: Sun, 1 Oct 2023 11:14:45 +0000 Subject: [PATCH 24/98] Translated using Weblate (Arabic) Currently translated at 80.1% (311 of 388 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ar/ --- mastodon/src/main/res/values-ar/strings_sk.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mastodon/src/main/res/values-ar/strings_sk.xml b/mastodon/src/main/res/values-ar/strings_sk.xml index 9eafdf22e..763ca2bfa 100644 --- a/mastodon/src/main/res/values-ar/strings_sk.xml +++ b/mastodon/src/main/res/values-ar/strings_sk.xml @@ -316,4 +316,10 @@ هذه هي أحدث المنشورات للأعضاء في فديراليتك. هذه هي أحدث المنشورات على الشبكة والتي انتقاها مُدراء خادمكم. برمجة أو تحرير مُسودّة + لوحة الألوان + الحسابات المحظورة + معلومات مثيل الخادم غير متوفرة في الحين + الحسابات المكتومة + السماح للوسائط المشغَّلَة بالفعل بالاستمرار في التشغيل، مع تراكب التشغيل الجديد + تراكُب صوتي \ No newline at end of file From 1b0ce5d893c3707eb1576d571fcd7eec62460afd Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 5 Oct 2023 12:02:19 +0200 Subject: [PATCH 25/98] New translations strings.xml (Swedish) --- mastodon/src/main/res/values-sv-rSE/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mastodon/src/main/res/values-sv-rSE/strings.xml b/mastodon/src/main/res/values-sv-rSE/strings.xml index 1fecf3424..870f2c74c 100644 --- a/mastodon/src/main/res/values-sv-rSE/strings.xml +++ b/mastodon/src/main/res/values-sv-rSE/strings.xml @@ -12,7 +12,9 @@ Som svar på %s Notiser %s följde dig + %s skickade en förfrågan om att följa dig %s favoritmarkerade ditt inlägg + %s boostade ditt inlägg Dela Inställningar Publicera From 7eae879037c92c2f5865878eb82f4e48b40dc9c2 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 5 Oct 2023 16:06:00 +0200 Subject: [PATCH 26/98] New translations strings.xml (Russian) --- mastodon/src/main/res/values-ru-rRU/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-ru-rRU/strings.xml b/mastodon/src/main/res/values-ru-rRU/strings.xml index 2e5bb9bfd..ec6eeeb2b 100644 --- a/mastodon/src/main/res/values-ru-rRU/strings.xml +++ b/mastodon/src/main/res/values-ru-rRU/strings.xml @@ -661,4 +661,5 @@ %,d постов сегодня %,d постов сегодня + Ошибка воспроизведения видео From f81283c8925e545398933d18a2be58e0ae23093b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 5 Oct 2023 21:19:39 +0200 Subject: [PATCH 27/98] New translations strings.xml (Italian) --- mastodon/src/main/res/values-it-rIT/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mastodon/src/main/res/values-it-rIT/strings.xml b/mastodon/src/main/res/values-it-rIT/strings.xml index 44e8d382b..ace77920e 100644 --- a/mastodon/src/main/res/values-it-rIT/strings.xml +++ b/mastodon/src/main/res/values-it-rIT/strings.xml @@ -588,8 +588,8 @@ Tradotto da %1$s utilizzando %2$s Mostra originale Traduzione fallita. Forse l\'amministratore non ha abilitato le traduzioni su questo server, o su questo server è in esecuzione una versione precedente di Mastodon in cui le traduzioni non sono ancora supportate. - Privacy e portata - Mostra il profilo e i post negli algoritmi di scoperta + Privacy e copertura + Include il profilo e i post negli algoritmi di scoperta Includi i post pubblici nei risultati di ricerca %,d participante From 4a3b94876035dfd65a4afab06b1082dff99e742b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 5 Oct 2023 22:23:12 +0200 Subject: [PATCH 28/98] New translations strings.xml (Finnish) --- mastodon/src/main/res/values-fi-rFI/strings.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 80be06d17..6d42b623f 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -270,11 +270,11 @@ Hyväksyy seuraajat käsin - %d seuraaja - %d seuraajaa + %,d seuraaja + %,d seuraajaa - %d seurattu + %,d seurattu %d seurattua @@ -588,6 +588,9 @@ Käännetty kielestä %1$s käyttäen %2$s Näytä alkuperäinen Käännös epäonnistui. Ehkä järjestelmänvalvoja ei ole ottanut käyttöön käännöksiä tällä palvelimella tai tällä palvelimella on käynnissä vanhempi versio Mastodonista, jossa käännöksiä ei vielä tueta. + Yksityisyys ja tavoittavuus + Nosta profiili ja julkaisut esille löytämisalgoritmeissa + Sisällytä julkiset julkaisut hakutuloksiin %d osallistuja %d osallistujaa @@ -596,4 +599,5 @@ %,d viesti tänään %,d viestiä tänään + Virhe videon toistossa From bc4619e6b19edc00141763e8991fc79d954c09bd Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Mon, 2 Oct 2023 16:42:04 -0300 Subject: [PATCH 29/98] fix(translations): fix crash when status language is null --- .../android/ui/displayitems/TextStatusDisplayItem.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index b47ea7e93..53fbe8e90 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -16,6 +16,7 @@ import android.widget.TextView; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Translation; @@ -207,7 +208,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ translationProgress.setVisibility(View.GONE); Translation existingTrans=item.status.getContentStatus().translation; String lang=existingTrans!=null ? existingTrans.detectedSourceLanguage : null; - String displayLang=Locale.forLanguageTag(lang!=null ? lang : item.status.getContentStatus().language).getDisplayLanguage(); + String displayLang=Locale.forLanguageTag(lang!=null ? lang : (item.status.getContentStatus().language != null ? item.status.getContentStatus().language : AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage)).getDisplayLanguage(); translationButton.setText(item.parentFragment.getString(R.string.translate_post, !displayLang.isBlank() ? displayLang : lang)); translationButton.setEnabled(true); translationButton.setAlpha(1); From ebb49c44fef9a2e396796ac82bcc34d6ad7f4ac9 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 15:01:17 +0200 Subject: [PATCH 30/98] refactor code --- .../android/ui/displayitems/TextStatusDisplayItem.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index 53fbe8e90..4801c8502 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -207,8 +207,10 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ translationFooter.setVisibility(translateEnabled ? View.VISIBLE : View.GONE); translationProgress.setVisibility(View.GONE); Translation existingTrans=item.status.getContentStatus().translation; - String lang=existingTrans!=null ? existingTrans.detectedSourceLanguage : null; - String displayLang=Locale.forLanguageTag(lang!=null ? lang : (item.status.getContentStatus().language != null ? item.status.getContentStatus().language : AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage)).getDisplayLanguage(); + String existingTransLang=existingTrans!=null ? existingTrans.detectedSourceLanguage : null; + String lang=existingTransLang!=null ? existingTransLang : item.status.getContentStatus().language; + String displayLang=Locale.forLanguageTag(lang != null ? lang + : AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage).getDisplayLanguage(); translationButton.setText(item.parentFragment.getString(R.string.translate_post, !displayLang.isBlank() ? displayLang : lang)); translationButton.setEnabled(true); translationButton.setAlpha(1); From 697f801c1a67969508134bbc637c94212eee5c3f Mon Sep 17 00:00:00 2001 From: LucasGGamerM <71328265+LucasGGamerM@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:03:25 -0300 Subject: [PATCH 31/98] fix(hashtags): fix crash when hashtag is null (#844) --- .../joinmastodon/android/fragments/HashtagTimelineFragment.java | 2 -- 1 file changed, 2 deletions(-) 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 d15a9c105..90fc51e3a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java @@ -217,8 +217,6 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{ followMenuItem=optionsMenu.findItem(R.id.follow_hashtag); pinMenuItem=optionsMenu.findItem(R.id.pin); followMenuItem.setVisible(toolbarContentVisible); - followMenuItem.setTitle(getString(hashtag.following ? R.string.unfollow_user : R.string.follow_user, "#"+hashtagName)); - followMenuItem.setIcon(hashtag.following ? R.drawable.ic_fluent_person_delete_24_filled : R.drawable.ic_fluent_person_add_24_regular); pinMenuItem.setShowAsAction(toolbarContentVisible ? MenuItem.SHOW_AS_ACTION_NEVER : MenuItem.SHOW_AS_ACTION_ALWAYS); super.updatePinButton(pinMenuItem); if(toolbarContentVisible){ From ee2b4b6a1f5e9be90f251a9c64bf509926031a0b Mon Sep 17 00:00:00 2001 From: LucasGGamerM <71328265+LucasGGamerM@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:04:02 -0300 Subject: [PATCH 32/98] fix(hashtag-fragment): fix crash when opening some hashtags (#842) --- .../joinmastodon/android/fragments/HashtagTimelineFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 90fc51e3a..df86494fe 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagTimelineFragment.java @@ -85,7 +85,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment{ @Override protected TimelineDefinition makeTimelineDefinition() { - return TimelineDefinition.ofHashtag(hashtag); + return TimelineDefinition.ofHashtag(hashtagName); } @Override From 061b2ee3de8b181da5aff5fecddd9d75d5c7249b Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 16:13:38 +0200 Subject: [PATCH 33/98] per-account color palette preference --- .../android/ExternalShareActivity.java | 1 - .../android/GlobalUserPreferences.java | 44 +++++-------------- .../joinmastodon/android/MainActivity.java | 33 +++++++++++++- .../api/session/AccountLocalPreferences.java | 30 +++++++++++++ .../ComposeImageDescriptionFragment.java | 8 ++-- .../settings/SettingsDisplayFragment.java | 23 +++++----- .../settings/SettingsMainFragment.java | 2 +- .../android/ui/AccountSwitcherSheet.java | 4 +- .../android/ui/utils/ColorPalette.java | 21 ++++----- .../android/ui/utils/UiUtils.java | 18 +++++--- 10 files changed, 117 insertions(+), 67 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java b/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java index 96e145d01..382456256 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java @@ -32,7 +32,6 @@ public class ExternalShareActivity extends FragmentStackActivity{ UiUtils.setUserPreferredTheme(this); super.onCreate(savedInstanceState); if(savedInstanceState==null){ - Optional text = Optional.ofNullable(getIntent().getStringExtra(Intent.EXTRA_TEXT)); Optional>> fediHandle = text.flatMap(UiUtils::parseFediverseHandle); boolean isFediUrl = text.map(UiUtils::looksLikeFediverseUrl).orElse(false); diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 4524c8cef..421830b30 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -57,7 +57,6 @@ public class GlobalUserPreferences{ public static boolean allowRemoteLoading; public static boolean forwardReportDefault; public static AutoRevealMode autoRevealEqualSpoilers; - public static ColorPreference color; public static boolean disableM3PillActiveIndicator; public static boolean showNavigationLabels; public static boolean displayPronounsInTimelines, displayPronounsInThreads, displayPronounsInUserListings; @@ -133,14 +132,8 @@ public class GlobalUserPreferences{ .apply(); } - try { - color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.PINK.name())); - } catch (IllegalArgumentException|ClassCastException ignored) { - // invalid color name or color was previously saved as integer - color=ColorPreference.PINK; - } - if(prefs.getInt("migrationLevel", 0) < 61) migrateToUpstreamVersion61(); + if(prefs.getInt("migrationLevel", 0) < 101) migrateToVersion101(); } public static void save(){ @@ -171,7 +164,6 @@ public class GlobalUserPreferences{ .putBoolean("spectatorMode", spectatorMode) .putBoolean("autoHideFab", autoHideFab) .putBoolean("compactReblogReplyLine", compactReblogReplyLine) - .putString("color", color.name()) .putBoolean("allowRemoteLoading", allowRemoteLoading) .putString("autoRevealEqualSpoilers", autoRevealEqualSpoilers.name()) .putBoolean("forwardReportDefault", forwardReportDefault) @@ -185,6 +177,16 @@ public class GlobalUserPreferences{ .apply(); } + private static void migrateToVersion101(){ + Log.d(TAG, "Migrating preferences to version 101!! (copy current theme to local preferences)"); + + AccountSessionManager asm=AccountSessionManager.getInstance(); + for(AccountSession session : asm.getLoggedInAccounts()){ + String accountID=session.getID(); + AccountLocalPreferences localPrefs=session.getLocalPreferences(); + } + } + private static void migrateToUpstreamVersion61(){ Log.d(TAG, "Migrating preferences to upstream version 61!!"); @@ -235,30 +237,6 @@ public class GlobalUserPreferences{ prefs.edit().putInt("migrationLevel", 61).apply(); } - public enum ColorPreference{ - MATERIAL3, - PINK, - PURPLE, - GREEN, - BLUE, - BROWN, - RED, - YELLOW; - - public @StringRes int getName() { - return switch(this){ - case MATERIAL3 -> R.string.sk_color_palette_material3; - case PINK -> R.string.sk_color_palette_pink; - case PURPLE -> R.string.sk_color_palette_purple; - case GREEN -> R.string.sk_color_palette_green; - case BLUE -> R.string.sk_color_palette_blue; - case BROWN -> R.string.sk_color_palette_brown; - case RED -> R.string.sk_color_palette_red; - case YELLOW -> R.string.sk_color_palette_yellow; - }; - } - } - public enum ThemePreference{ AUTO, LIGHT, diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java index ae0f71cd3..005d9a382 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java @@ -39,7 +39,8 @@ import me.grishka.appkit.api.ErrorResponse; public class MainActivity extends FragmentStackActivity implements ProvidesAssistContent { @Override protected void onCreate(@Nullable Bundle savedInstanceState){ - UiUtils.setUserPreferredTheme(this); + AccountSession session=getCurrentSession(); + UiUtils.setUserPreferredTheme(this, session); super.onCreate(savedInstanceState); if(savedInstanceState==null){ @@ -217,6 +218,36 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis if (fragment != null) callFragmentToProvideAssistContent(fragment, assistContent); } + public AccountSession getCurrentSession(){ + AccountSession session; + Bundle args=new Bundle(); + Intent intent=getIntent(); + if(intent.hasExtra("fromExternalShare")) { + return AccountSessionManager.getInstance() + .getAccount(intent.getStringExtra("account")); + } + + boolean fromNotification = intent.getBooleanExtra("fromNotification", false); + boolean hasNotification = intent.hasExtra("notification"); + if(fromNotification){ + String accountID=intent.getStringExtra("accountID"); + try{ + session=AccountSessionManager.getInstance().getAccount(accountID); + if(!hasNotification) args.putString("tab", "notifications"); + }catch(IllegalStateException x){ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + }else{ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + return session; + } + + public void restartActivity(){ + finish(); + startActivity(new Intent(this, MainActivity.class)); + } + public void restartHomeFragment(){ if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ showFragmentClearingBackStack(new CustomWelcomeFragment()); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java index 9ad711637..d67138d22 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java @@ -6,8 +6,11 @@ import static org.joinmastodon.android.api.MastodonAPIController.gson; import android.content.SharedPreferences; +import androidx.annotation.StringRes; + import com.google.gson.reflect.TypeToken; +import org.joinmastodon.android.R; import org.joinmastodon.android.model.ContentType; import org.joinmastodon.android.model.TimelineDefinition; @@ -39,6 +42,7 @@ public class AccountLocalPreferences{ public boolean emojiReactionsEnabled; public ShowEmojiReactions showEmojiReactions; + public ColorPreference color; private final static Type recentLanguagesType = new TypeToken>() {}.getType(); private final static Type timelinesType = new TypeToken>() {}.getType(); @@ -66,6 +70,7 @@ public class AccountLocalPreferences{ keepOnlyLatestNotification=prefs.getBoolean("keepOnlyLatestNotification", false); emojiReactionsEnabled=prefs.getBoolean("emojiReactionsEnabled", session.getInstance().isPresent() && session.getInstance().get().isAkkoma()); showEmojiReactions=ShowEmojiReactions.valueOf(prefs.getString("showEmojiReactions", ShowEmojiReactions.HIDE_EMPTY.name())); + color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.MATERIAL3.name())); } public long getNotificationsPauseEndTime(){ @@ -99,9 +104,34 @@ public class AccountLocalPreferences{ .putBoolean("keepOnlyLatestNotification", keepOnlyLatestNotification) .putBoolean("emojiReactionsEnabled", emojiReactionsEnabled) .putString("showEmojiReactions", showEmojiReactions.name()) + .putString("color", color.name()) .apply(); } + public enum ColorPreference{ + MATERIAL3, + PINK, + PURPLE, + GREEN, + BLUE, + BROWN, + RED, + YELLOW; + + public @StringRes int getName() { + return switch(this){ + case MATERIAL3 -> R.string.sk_color_palette_material3; + case PINK -> R.string.sk_color_palette_pink; + case PURPLE -> R.string.sk_color_palette_purple; + case GREEN -> R.string.sk_color_palette_green; + case BLUE -> R.string.sk_color_palette_blue; + case BROWN -> R.string.sk_color_palette_brown; + case RED -> R.string.sk_color_palette_red; + case YELLOW -> R.string.sk_color_palette_yellow; + }; + } + } + public enum ShowEmojiReactions{ HIDE_EMPTY, ONLY_OPENED, diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeImageDescriptionFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeImageDescriptionFragment.java index 5e53cb728..ef03a45ac 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeImageDescriptionFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeImageDescriptionFragment.java @@ -26,12 +26,12 @@ import android.widget.ImageView; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIController; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.ui.M3AlertDialogBuilder; import org.joinmastodon.android.ui.photoviewer.PhotoViewer; import org.joinmastodon.android.ui.utils.ColorPalette; import org.joinmastodon.android.ui.utils.UiUtils; -import org.joinmastodon.android.ui.views.FixedAspectRatioImageView; import java.util.Collections; @@ -54,16 +54,16 @@ public class ComposeImageDescriptionFragment extends MastodonToolbarFragment imp @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); - accountID=getArguments().getString("account"); - attachmentID=getArguments().getString("attachment"); setHasOptionsMenu(true); } @Override public void onAttach(Activity activity){ super.onAttach(activity); + accountID=getArguments().getString("account"); + attachmentID=getArguments().getString("attachment"); themeWrapper=new ContextThemeWrapper(activity, R.style.Theme_Mastodon_Dark); - ColorPalette.palettes.get(GlobalUserPreferences.color).apply(themeWrapper, GlobalUserPreferences.ThemePreference.DARK); + ColorPalette.palettes.get(AccountSessionManager.get(accountID).getLocalPreferences().color).apply(themeWrapper, GlobalUserPreferences.ThemePreference.DARK); setTitle(R.string.add_alt_text); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java index 0b17750e2..b8c7b44b3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java @@ -17,6 +17,7 @@ import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; import org.joinmastodon.android.api.session.AccountLocalPreferences; +import org.joinmastodon.android.api.session.AccountLocalPreferences.ColorPreference; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.StatusDisplaySettingsChangedEvent; @@ -131,7 +132,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ } private @StringRes int getColorPaletteValue(){ - return switch(GlobalUserPreferences.color){ + return switch(AccountSessionManager.get(accountID).getLocalPreferences().color){ case MATERIAL3 -> R.string.sk_color_palette_material3; case PINK -> R.string.sk_color_palette_pink; case PURPLE -> R.string.sk_color_palette_purple; @@ -196,18 +197,19 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ } private void onColorClick(){ - int selected=GlobalUserPreferences.color.ordinal(); + AccountLocalPreferences prefs=AccountSessionManager.get(accountID).getLocalPreferences(); + int selected=prefs.color.ordinal(); int[] newSelected={selected}; - String[] names=Arrays.stream(GlobalUserPreferences.ColorPreference.values()).map(GlobalUserPreferences.ColorPreference::getName).map(this::getString).toArray(String[]::new); + String[] names=Arrays.stream(ColorPreference.values()).map(ColorPreference::getName).map(this::getString).toArray(String[]::new); new M3AlertDialogBuilder(getActivity()) .setTitle(R.string.settings_theme) .setSingleChoiceItems(names, selected, (dlg, item)->newSelected[0]=item) .setPositiveButton(R.string.ok, (dlg, item)->{ - GlobalUserPreferences.ColorPreference pref=GlobalUserPreferences.ColorPreference.values()[newSelected[0]]; - if(pref!=GlobalUserPreferences.color){ - GlobalUserPreferences.ColorPreference prev=GlobalUserPreferences.color; - GlobalUserPreferences.color=pref; + ColorPreference pref=ColorPreference.values()[newSelected[0]]; + if(pref!=prefs.color){ + ColorPreference prev=prefs.color; + prefs.color=pref; GlobalUserPreferences.save(); colorItem.subtitleRes=getColorPaletteValue(); rebindItem(colorItem); @@ -257,17 +259,18 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ .show(); } - private void maybeApplyNewThemeRightNow(GlobalUserPreferences.ThemePreference prevTheme, GlobalUserPreferences.ColorPreference prevColor, Boolean prevTrueBlack){ + private void maybeApplyNewThemeRightNow(GlobalUserPreferences.ThemePreference prevTheme, ColorPreference prevColor, Boolean prevTrueBlack){ + AccountLocalPreferences prefs=AccountSessionManager.get(accountID).getLocalPreferences(); if(prevTheme==null) prevTheme=GlobalUserPreferences.theme; if(prevTrueBlack==null) prevTrueBlack=GlobalUserPreferences.trueBlackTheme; - if(prevColor==null) prevColor=GlobalUserPreferences.color; + if(prevColor==null) prevColor=prefs.color; boolean isCurrentDark=prevTheme==GlobalUserPreferences.ThemePreference.DARK || (prevTheme==GlobalUserPreferences.ThemePreference.AUTO && Build.VERSION.SDK_INT>=30 && getResources().getConfiguration().isNightModeActive()); boolean isNewDark=GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.DARK || (GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.AUTO && Build.VERSION.SDK_INT>=30 && getResources().getConfiguration().isNightModeActive()); boolean isNewBlack=GlobalUserPreferences.trueBlackTheme; - if(isCurrentDark!=isNewDark || prevColor!=GlobalUserPreferences.color || (isNewDark && prevTrueBlack!=isNewBlack)){ + if(isCurrentDark!=isNewDark || prevColor!=prefs.color || (isNewDark && prevTrueBlack!=isNewBlack)){ restartActivityToApplyNewTheme(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java index 72359efd7..6197a4a5a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java @@ -163,7 +163,7 @@ public class SettingsMainFragment extends BaseSettingsFragment{ .setMessage(getString(R.string.confirm_log_out, session.getFullUsername())) .setPositiveButton(R.string.log_out, (dialog, which)->account.logOut(getActivity(), ()->{ loggedOut=true; - ((MainActivity)getActivity()).restartHomeFragment(); + ((MainActivity)getActivity()).restartActivity(); })) .setNegativeButton(R.string.cancel, null) .show(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java index 106d64d46..1a5c315ce 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java @@ -148,7 +148,7 @@ public class AccountSwitcherSheet extends BottomSheet{ private void logOut(String accountID){ AccountSessionManager.get(accountID).logOut(activity, ()->{ dismiss(); - ((MainActivity)activity).restartHomeFragment(); + ((MainActivity)activity).restartActivity(); }); } @@ -324,7 +324,7 @@ public class AccountSwitcherSheet extends BottomSheet{ } if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null){ AccountSessionManager.getInstance().setLastActiveAccountID(item.getID()); - ((MainActivity)activity).restartHomeFragment(); + ((MainActivity)activity).restartActivity(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/ColorPalette.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/ColorPalette.java index b11c6e3f2..f7e21590b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/ColorPalette.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/ColorPalette.java @@ -1,8 +1,8 @@ package org.joinmastodon.android.ui.utils; -import static org.joinmastodon.android.GlobalUserPreferences.ColorPreference; import static org.joinmastodon.android.GlobalUserPreferences.ThemePreference; import static org.joinmastodon.android.GlobalUserPreferences.trueBlackTheme; +import static org.joinmastodon.android.api.session.AccountLocalPreferences.ColorPreference.*; import android.content.Context; import android.content.res.Resources; @@ -11,20 +11,21 @@ import androidx.annotation.StyleRes; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.session.AccountLocalPreferences; import java.util.Map; public class ColorPalette { - public static final Map palettes = Map.of( - ColorPreference.MATERIAL3, new ColorPalette(R.style.ColorPalette_Material3) + public static final Map palettes = Map.of( + MATERIAL3, new ColorPalette(R.style.ColorPalette_Material3) .dark(R.style.ColorPalette_Material3_Dark, R.style.ColorPalette_Material3_AutoLightDark), - ColorPreference.PINK, new ColorPalette(R.style.ColorPalette_Pink), - ColorPreference.PURPLE, new ColorPalette(R.style.ColorPalette_Purple), - ColorPreference.GREEN, new ColorPalette(R.style.ColorPalette_Green), - ColorPreference.BLUE, new ColorPalette(R.style.ColorPalette_Blue), - ColorPreference.BROWN, new ColorPalette(R.style.ColorPalette_Brown), - ColorPreference.RED, new ColorPalette(R.style.ColorPalette_Red), - ColorPreference.YELLOW, new ColorPalette(R.style.ColorPalette_Yellow) + PINK, new ColorPalette(R.style.ColorPalette_Pink), + PURPLE, new ColorPalette(R.style.ColorPalette_Purple), + GREEN, new ColorPalette(R.style.ColorPalette_Green), + BLUE, new ColorPalette(R.style.ColorPalette_Blue), + BROWN, new ColorPalette(R.style.ColorPalette_Brown), + RED, new ColorPalette(R.style.ColorPalette_Red), + YELLOW, new ColorPalette(R.style.ColorPalette_Yellow) ); private @StyleRes int base; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index eda146220..678f1d470 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -1,6 +1,7 @@ package org.joinmastodon.android.ui.utils; import static android.view.Menu.NONE; +import static org.joinmastodon.android.GlobalUserPreferences.ThemePreference.*; import static org.joinmastodon.android.GlobalUserPreferences.theme; import static org.joinmastodon.android.GlobalUserPreferences.trueBlackTheme; @@ -85,6 +86,7 @@ import org.joinmastodon.android.api.requests.statuses.CreateStatus; import org.joinmastodon.android.api.requests.statuses.DeleteStatus; import org.joinmastodon.android.api.requests.statuses.GetStatusByID; import org.joinmastodon.android.api.requests.statuses.SetStatusPinned; +import org.joinmastodon.android.api.session.AccountLocalPreferences; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.ScheduledStatusDeletedEvent; @@ -973,14 +975,20 @@ public class UiUtils { } public static void setUserPreferredTheme(Context context) { - context.setTheme(switch (theme) { + setUserPreferredTheme(context, null); + } + + public static void setUserPreferredTheme(Context context, @Nullable AccountSession session) { + context.setTheme(switch(theme) { case LIGHT -> R.style.Theme_Mastodon_Light; case DARK -> R.style.Theme_Mastodon_Dark; default -> R.style.Theme_Mastodon_AutoLightDark; }); - ColorPalette palette = ColorPalette.palettes.get(GlobalUserPreferences.color); - if (palette != null) palette.apply(context); + AccountLocalPreferences prefs=session.getLocalPreferences(); + AccountLocalPreferences.ColorPreference color=prefs != null ? prefs.color : AccountLocalPreferences.ColorPreference.MATERIAL3; + ColorPalette palette = ColorPalette.palettes.get(color); + if (palette != null) palette.apply(context, theme); Resources res = context.getResources(); MAX_WIDTH = (int) res.getDimension(R.dimen.layout_max_width); @@ -997,9 +1005,9 @@ public class UiUtils { } public static boolean isDarkTheme() { - if (theme == GlobalUserPreferences.ThemePreference.AUTO) + if (theme == AUTO) return (MastodonApp.context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; - return theme == GlobalUserPreferences.ThemePreference.DARK; + return theme == DARK; } public static Optional>> parseFediverseHandle(String maybeFediHandle) { From 8b8f192dfadc046fc2550524e2f246841bc8b1f4 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 16:17:18 +0200 Subject: [PATCH 34/98] fix posts/bubble banner not disappearing closes sk22#833 --- .../android/fragments/NotificationsListFragment.java | 1 + .../android/fragments/discover/BubbleTimelineFragment.java | 1 + 2 files changed, 2 insertions(+) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java index 8243bfeb3..375427af8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -134,6 +134,7 @@ public class NotificationsListFragment extends BaseStatusListFragmentn.type!=null).collect(Collectors.toList()), !result.items.isEmpty()); + bannerHelper.onBannerBecameVisible(); reloadingFromCache=false; if (getParentFragment() instanceof NotificationsFragment nf) { nf.updateMarkAllReadButton(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java index 079c799c7..7b1ec89ed 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/BubbleTimelineFragment.java @@ -45,6 +45,7 @@ public class BubbleTimelineFragment extends StatusListFragment { if (getActivity() == null) return; result=result.stream().filter(new StatusFilterPredicate(accountID, getFilterContext())).collect(Collectors.toList()); onDataLoaded(result, !result.isEmpty()); + bannerHelper.onBannerBecameVisible(); } }) .exec(accountID); From 331548b38dda5cb67278d78fb9ca2a4732dd4496 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 16:20:16 +0200 Subject: [PATCH 35/98] fix crash --- .../android/fragments/NotificationsListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java index 375427af8..6f6fed745 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -134,7 +134,7 @@ public class NotificationsListFragment extends BaseStatusListFragmentn.type!=null).collect(Collectors.toList()), !result.items.isEmpty()); - bannerHelper.onBannerBecameVisible(); + if(bannerHelper!=null) bannerHelper.onBannerBecameVisible(); reloadingFromCache=false; if (getParentFragment() instanceof NotificationsFragment nf) { nf.updateMarkAllReadButton(); From a75ce70615d2c1d0ff0120060b33d02a8e06634e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 6 Oct 2023 16:38:40 +0200 Subject: [PATCH 36/98] New translations strings.xml (Finnish) --- mastodon/src/main/res/values-fi-rFI/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mastodon/src/main/res/values-fi-rFI/strings.xml b/mastodon/src/main/res/values-fi-rFI/strings.xml index 6d42b623f..4259e06e1 100644 --- a/mastodon/src/main/res/values-fi-rFI/strings.xml +++ b/mastodon/src/main/res/values-fi-rFI/strings.xml @@ -228,7 +228,7 @@ Tehosta Suosikki Jaa - Kuva ilma kuvausta + Kuva ilman kuvausta Lisää mediatiedosto Lisää kysely Emoji @@ -240,8 +240,8 @@ Seuraat nyt käyttäjää %s Käyttäjän %s seuraamista pyydetty Avaa selaimessa - Piilota käyttäjän @%s tehostukset - Näytä tehostukset käyttäjältä @%s + Piilota käyttäjän %s tehostukset + Näytä tehostukset käyttäjältä %s Miksi haluat liittyä? Tämä auttaa meitä arvioimaan hakemustasi. Tyhjennä @@ -351,7 +351,7 @@ Aasia Oseania Ei hyväksy uusia jäseniä - Erityiset Kiinnostukset + Erityiset kiinnostuksen kohteet Salasanat eivät täsmää Valitse minulle Lisää rivi @@ -385,7 +385,7 @@ tai Lue lisää Tervetuloa Mastodoniin - Mastodon on hajautettu sosiaalinen verkosto, joka tarkoittaa sitä, ettei sitä hallitse mikään yksittäinen yritys. Se koostuu monista itsenäisesti ylläpidetyistä palvelimista, jotka on liitetty yhteen. + Mastodon on hajautettu sosiaalinen verkosto, mikä tarkoittaa sitä, ettei sitä hallitse mikään yksittäinen yritys. Se koostuu monista itsenäisesti ylläpidetyistä palvelimista, jotka on liitetty yhteen. Mitä palvelimet ovat? Jokainen Mastodon tili isännöi palvelimella - kullakin on omat arvot, säännöt, & ylläpitäjät. Riippumatta siitä, minkä valitset, voit seurata ja olla vuorovaikutuksessa ihmisten kanssa millä tahansa palvelimella. Avataan linkki… @@ -583,7 +583,7 @@ %dh sitten %dd sitten - Käännetty kielestä %s + Käännä kielestä %s Käännetty kielestä %1$s käyttäen %2$s Näytä alkuperäinen From 7c8624bd53176bbe2b77d9e03ab11377e9587dd5 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 16:55:02 +0200 Subject: [PATCH 37/98] fix alpha animations closes sk22#839 --- .../displayitems/FooterStatusDisplayItem.java | 22 ++++++++-------- .../ui/displayitems/GapStatusDisplayItem.java | 2 +- .../displayitems/TextStatusDisplayItem.java | 16 ++++++------ .../android/ui/utils/UiUtils.java | 26 +++++++++---------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index 378728911..7c323825f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -63,7 +63,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private final Runnable longClickRunnable = () -> { longClickPerformed = touchingView != null && touchingView.performLongClick(); if (longClickPerformed && touchingView != null) { - touchingView.startAnimation(opacityIn); + UiUtils.opacityIn(touchingView); touchingView.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start(); } }; @@ -160,7 +160,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ if (!longClickPerformed) v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start(); if (disabled) return true; if (action == MotionEvent.ACTION_UP && !longClickPerformed) v.performClick(); - else if (!longClickPerformed) v.startAnimation(opacityIn); + else if (!longClickPerformed) UiUtils.opacityIn(v); } else if (action == MotionEvent.ACTION_DOWN) { longClickPerformed = false; touchingView = v; @@ -168,13 +168,13 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start(); if (disabled) return true; v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout()); - v.startAnimation(opacityOut); + UiUtils.opacityOut(v); } return true; } private void onReplyClick(View v){ - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); Bundle args=new Bundle(); args.putString("account", item.accountID); args.putParcelable("replyTo", Parcels.wrap(item.status)); @@ -198,7 +198,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private void onBoostClick(View v){ if (GlobalUserPreferences.confirmBoost) { - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); onBoostLongClick(v); return; } @@ -207,7 +207,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ } private void boostConsumer(View v, Status r) { - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); bindText(boosts, r.reblogsCount); } @@ -218,7 +218,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ AccountSession session = AccountSessionManager.getInstance().getAccount(item.accountID); Consumer doReblog = (visibility) -> { - v.startAnimation(opacityOut); + UiUtils.opacityOut(v); session.getStatusInteractionController() .setReblogged(item.status, !item.status.reblogged, visibility, r->boostConsumer(v, r)); dialog.dismiss(); @@ -271,7 +271,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ menu.findViewById(R.id.quote).setOnClickListener(c->{ dialog.dismiss(); - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); Bundle args=new Bundle(); args.putString("account", item.accountID); AccountSession accountSession=AccountSessionManager.getInstance().getAccount(item.accountID); @@ -296,7 +296,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private void onFavoriteClick(View v){ favorite.setSelected(!item.status.favourited); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{ - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); bindText(favorites, r.favouritesCount); }); } @@ -318,7 +318,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private void onBookmarkClick(View v){ bookmark.setSelected(!item.status.bookmarked); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{ - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); }); } @@ -337,7 +337,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ } private void onShareClick(View v){ - v.startAnimation(opacityIn); + UiUtils.opacityIn(v); Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, item.status.url); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java index 1009bb148..9615b2b33 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java @@ -72,7 +72,7 @@ public class GapStatusDisplayItem extends StatusDisplayItem{ private void onViewClick(View v){ if(item.loading) return; boolean isTop=v==top; - (isTop ? textTop : textBottom).startAnimation(UiUtils.opacityOut); + UiUtils.opacityOut(isTop ? textTop : textBottom); V.setVisibilityAnimated((isTop ? progressTop : progressBottom), View.VISIBLE); item.parentFragment.onGapClick(this, isTop); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index 4801c8502..b70b0f4ae 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -1,7 +1,5 @@ package org.joinmastodon.android.ui.displayitems; -import static org.joinmastodon.android.ui.utils.UiUtils.opacityIn; - import android.app.Activity; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; @@ -30,6 +28,7 @@ import java.util.Locale; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.MovieDrawable; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; +import me.grishka.appkit.utils.CubicBezierInterpolator; import me.grishka.appkit.utils.V; public class TextStatusDisplayItem extends StatusDisplayItem{ @@ -201,6 +200,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ translationProgress=findViewById(R.id.translation_progress); translationButton.setOnClickListener(v->item.parentFragment.togglePostTranslation(item.status, item.parentID)); } + if(translationButton!=null) translationButton.animate().cancel(); if(item.status.translationState==Status.TranslationState.HIDDEN){ if(updateText) text.setText(item.text); if(translationFooter==null) return; @@ -212,8 +212,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ String displayLang=Locale.forLanguageTag(lang != null ? lang : AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage).getDisplayLanguage(); translationButton.setText(item.parentFragment.getString(R.string.translate_post, !displayLang.isBlank() ? displayLang : lang)); - translationButton.setEnabled(true); - translationButton.setAlpha(1); + translationButton.setClickable(true); + translationButton.animate().alpha(1).setDuration(100).start(); translationInfo.setVisibility(View.GONE); UiUtils.beginLayoutTransition((ViewGroup) translationButtonWrap); }else{ @@ -221,8 +221,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ if(item.status.translationState==Status.TranslationState.SHOWN){ translationProgress.setVisibility(View.GONE); translationButton.setText(R.string.translation_show_original); - translationButton.setEnabled(true); - translationButton.setAlpha(1); + translationButton.setClickable(true); + translationButton.animate().alpha(1).setDuration(200).start(); translationInfo.setVisibility(View.VISIBLE); translationButton.setVisibility(View.VISIBLE); String displayLang=Locale.forLanguageTag(item.status.translation.detectedSourceLanguage).getDisplayLanguage(); @@ -236,8 +236,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ } }else{ // LOADING translationProgress.setVisibility(View.VISIBLE); - translationButton.setEnabled(false); - translationButton.startAnimation(opacityIn); + translationButton.setClickable(false); + translationButton.animate().alpha(UiUtils.ALPHA_PRESSED).setStartDelay(50).setDuration(300).setInterpolator(CubicBezierInterpolator.DEFAULT).start(); translationInfo.setVisibility(View.INVISIBLE); UiUtils.beginLayoutTransition((ViewGroup) translationButton.getParent()); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 678f1d470..a77b30ca4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -54,9 +54,8 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; import android.view.WindowInsets; -import android.view.animation.AlphaAnimation; -import android.view.animation.Animation; import android.webkit.MimeTypeMap; import android.widget.Button; import android.widget.ImageView; @@ -178,17 +177,6 @@ public class UiUtils { public static int MAX_WIDTH, SCROLL_TO_TOP_DELTA; public static final float ALPHA_PRESSED=0.55f; - public static final Animation opacityOut, opacityIn; - - static { - opacityOut = new AlphaAnimation(1, ALPHA_PRESSED); - opacityOut.setDuration(300); - opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT); - opacityOut.setFillAfter(true); - opacityIn = new AlphaAnimation(ALPHA_PRESSED, 1); - opacityIn.setDuration(400); - opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT); - } private UiUtils() { } @@ -1748,4 +1736,16 @@ public class UiUtils { .filter(Objects::nonNull) .findFirst(); } + + public static void opacityIn(View v){ + v.animate().alpha(1).setDuration(400).setInterpolator(CubicBezierInterpolator.DEFAULT).start(); + } + + public static void opacityOut(View v){ + opacityOut(v, ALPHA_PRESSED).start(); + } + + public static ViewPropertyAnimator opacityOut(View v, float alpha){ + return v.animate().alpha(alpha).setDuration(300).setInterpolator(CubicBezierInterpolator.DEFAULT); + } } From f86d60be2318fb62ad27af8a0f24b116a407bbb5 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:00:09 +0200 Subject: [PATCH 38/98] fix color palette dialog title --- .../android/fragments/settings/SettingsDisplayFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java index b8c7b44b3..93e8fc739 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java @@ -202,7 +202,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ int[] newSelected={selected}; String[] names=Arrays.stream(ColorPreference.values()).map(ColorPreference::getName).map(this::getString).toArray(String[]::new); new M3AlertDialogBuilder(getActivity()) - .setTitle(R.string.settings_theme) + .setTitle(R.string.sk_settings_color_palette) .setSingleChoiceItems(names, selected, (dlg, item)->newSelected[0]=item) .setPositiveButton(R.string.ok, (dlg, item)->{ From f72f7cb831f5468b1bcbd8edc0acca3275d3fcbf Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:02:52 +0200 Subject: [PATCH 39/98] hide username wrap in edit mode closes sk22#828 --- .../org/joinmastodon/android/fragments/ProfileFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index cf26e2971..30b314c37 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -133,6 +133,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private ImageView avatar; private CoverImageView cover; private View avatarBorder; + private View usernameWrap; private TextView name, username, bio, followersCount, followersLabel, followingCount, followingLabel; private ImageView lockIcon, botIcon; private ProgressBarButton actionButton, notifyButton; @@ -233,6 +234,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList cover=content.findViewById(R.id.cover); avatarBorder=content.findViewById(R.id.avatar_border); name=content.findViewById(R.id.name); + usernameWrap=content.findViewById(R.id.username_wrap); username=content.findViewById(R.id.username); lockIcon=content.findViewById(R.id.lock_icon); botIcon=content.findViewById(R.id.bot_icon); @@ -1114,7 +1116,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList name.setVisibility(View.GONE); rolesView.setVisibility(View.GONE); - username.setVisibility(View.GONE); + usernameWrap.setVisibility(View.GONE); bio.setVisibility(View.GONE); countersLayout.setVisibility(View.GONE); @@ -1163,7 +1165,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList bioEditWrap.setVisibility(View.GONE); name.setVisibility(View.VISIBLE); rolesView.setVisibility(View.VISIBLE); - username.setVisibility(View.VISIBLE); + usernameWrap.setVisibility(View.VISIBLE); bio.setVisibility(View.VISIBLE); countersLayout.setVisibility(View.VISIBLE); refreshLayout.setEnabled(true); From b5b3cb42a1976f1d0d33acc81cc511ebe284ff6b Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:09:57 +0200 Subject: [PATCH 40/98] re-implement missing "translate opened only" --- .../joinmastodon/android/fragments/StatusListFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java index c58d761d7..8459c6a84 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java @@ -42,10 +42,12 @@ public abstract class StatusListFragment extends BaseStatusListFragment boolean isMainThreadStatus = this instanceof ThreadFragment t && s.id.equals(t.mainStatus.id); int flags = 0; AccountLocalPreferences lp=getLocalPrefs(); - if (GlobalUserPreferences.spectatorMode) + if(GlobalUserPreferences.spectatorMode) flags |= StatusDisplayItem.FLAG_NO_FOOTER; - if (!lp.emojiReactionsEnabled || lp.showEmojiReactions==ONLY_OPENED) + if(!lp.emojiReactionsEnabled || lp.showEmojiReactions==ONLY_OPENED) flags |= StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS; + if(GlobalUserPreferences.translateButtonOpenedOnly) + flags |= StatusDisplayItem.FLAG_NO_TRANSLATE; return StatusDisplayItem.buildItems(this, s, accountID, s, knownAccounts, getFilterContext(), isMainThreadStatus ? 0 : flags); } From 43e737425a561c7a5a1564f9959876a871110f77 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:20:49 +0200 Subject: [PATCH 41/98] fix null reference --- .../main/java/org/joinmastodon/android/ui/utils/UiUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index a77b30ca4..80a9cbb5f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -973,7 +973,7 @@ public class UiUtils { default -> R.style.Theme_Mastodon_AutoLightDark; }); - AccountLocalPreferences prefs=session.getLocalPreferences(); + AccountLocalPreferences prefs=session != null ? session.getLocalPreferences() : null; AccountLocalPreferences.ColorPreference color=prefs != null ? prefs.color : AccountLocalPreferences.ColorPreference.MATERIAL3; ColorPalette palette = ColorPalette.palettes.get(color); if (palette != null) palette.apply(context, theme); From efc67fd7e8818af6dad291d88c9f999eb3ff82d7 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:26:59 +0200 Subject: [PATCH 42/98] remove inset poll styles closes sk22#801 --- .../PollOptionStatusDisplayItem.java | 16 ++++--------- .../res/color/poll_option_progress_inset.xml | 5 ---- .../main/res/color/poll_option_text_inset.xml | 5 ---- .../bg_poll_option_clickable_inset.xml | 16 ------------- .../drawable/bg_poll_option_voted_inset.xml | 23 ------------------- 5 files changed, 5 insertions(+), 60 deletions(-) delete mode 100644 mastodon/src/main/res/color/poll_option_progress_inset.xml delete mode 100644 mastodon/src/main/res/color/poll_option_text_inset.xml delete mode 100644 mastodon/src/main/res/drawable/bg_poll_option_clickable_inset.xml delete mode 100644 mastodon/src/main/res/drawable/bg_poll_option_voted_inset.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java index ee3357e66..a1eae6f99 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java @@ -68,7 +68,7 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ private final TextView text, percent; private final View button; private final ImageView icon; - private final Drawable progressBg, progressBgInset; + private final Drawable progressBg; public Holder(Activity activity, ViewGroup parent){ super(activity, R.layout.display_item_poll_option, parent); @@ -77,7 +77,6 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ icon=findViewById(R.id.icon); button=findViewById(R.id.button); progressBg=activity.getResources().getDrawable(R.drawable.bg_poll_option_voted, activity.getTheme()).mutate(); - progressBgInset=activity.getResources().getDrawable(R.drawable.bg_poll_option_voted_inset, activity.getTheme()).mutate(); itemView.setOnClickListener(this::onButtonClick); button.setOutlineProvider(OutlineProviders.roundedRect(20)); button.setClipToOutline(true); @@ -93,22 +92,17 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ item.showResults ? R.drawable.ic_poll_option_button : R.drawable.ic_fluent_radio_button_24_selector )); if(item.showResults){ - Drawable bg=item.inset ? progressBgInset : progressBg; + Drawable bg=progressBg; bg.setLevel(Math.round(10000f*item.votesFraction)); button.setBackground(bg); itemView.setSelected(item.poll.ownVotes!=null && item.poll.ownVotes.contains(item.optionIndex)); percent.setText(String.format(Locale.getDefault(), "%d%%", Math.round(item.votesFraction*100f))); }else{ itemView.setSelected(item.poll.selectedOptions!=null && item.poll.selectedOptions.contains(item.option)); - button.setBackgroundResource(item.inset ? R.drawable.bg_poll_option_clickable_inset : R.drawable.bg_poll_option_clickable); - } - if(item.inset){ - text.setTextColor(itemView.getContext().getColorStateList(R.color.poll_option_text_inset)); - percent.setTextColor(itemView.getContext().getColorStateList(R.color.poll_option_text_inset)); - }else{ - text.setTextColor(UiUtils.getThemeColor(itemView.getContext(), android.R.attr.textColorPrimary)); - percent.setTextColor(UiUtils.getThemeColor(itemView.getContext(), R.attr.colorM3OnSecondaryContainer)); + button.setBackgroundResource(R.drawable.bg_poll_option_clickable); } + text.setTextColor(UiUtils.getThemeColor(itemView.getContext(), android.R.attr.textColorPrimary)); + percent.setTextColor(UiUtils.getThemeColor(itemView.getContext(), R.attr.colorM3OnSecondaryContainer)); } @Override diff --git a/mastodon/src/main/res/color/poll_option_progress_inset.xml b/mastodon/src/main/res/color/poll_option_progress_inset.xml deleted file mode 100644 index 3fd78b91e..000000000 --- a/mastodon/src/main/res/color/poll_option_progress_inset.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mastodon/src/main/res/color/poll_option_text_inset.xml b/mastodon/src/main/res/color/poll_option_text_inset.xml deleted file mode 100644 index ef1f151e6..000000000 --- a/mastodon/src/main/res/color/poll_option_text_inset.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_poll_option_clickable_inset.xml b/mastodon/src/main/res/drawable/bg_poll_option_clickable_inset.xml deleted file mode 100644 index 29dd2b1fc..000000000 --- a/mastodon/src/main/res/drawable/bg_poll_option_clickable_inset.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_poll_option_voted_inset.xml b/mastodon/src/main/res/drawable/bg_poll_option_voted_inset.xml deleted file mode 100644 index 1bc8c099b..000000000 --- a/mastodon/src/main/res/drawable/bg_poll_option_voted_inset.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From baf756e16396ea7c4e1f4fea57d3f2cdd8ddf743 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 17:53:43 +0200 Subject: [PATCH 43/98] =?UTF-8?q?allow=20using=20heart=20as=20fav=20icon?= =?UTF-8?q?=20=E2=9D=A4=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes sk22#81 --- .../api/session/AccountLocalPreferences.java | 3 +++ .../settings/SettingsDisplayFragment.java | 21 ++++++++++--------- .../displayitems/FooterStatusDisplayItem.java | 17 ++++++++++++--- mastodon/src/main/res/color/like_icon.xml | 5 +++++ .../drawable/ic_fluent_heart_24_filled.xml | 3 +++ .../drawable/ic_fluent_heart_24_selector.xml | 8 +++++++ .../main/res/layout/display_item_footer.xml | 1 + mastodon/src/main/res/values/colors.xml | 1 + mastodon/src/main/res/values/strings_sk.xml | 1 + 9 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 mastodon/src/main/res/color/like_icon.xml create mode 100644 mastodon/src/main/res/drawable/ic_fluent_heart_24_filled.xml create mode 100644 mastodon/src/main/res/drawable/ic_fluent_heart_24_selector.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java index d67138d22..c3f6fc7dc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java @@ -43,6 +43,7 @@ public class AccountLocalPreferences{ public boolean emojiReactionsEnabled; public ShowEmojiReactions showEmojiReactions; public ColorPreference color; + public boolean likeIcon; private final static Type recentLanguagesType = new TypeToken>() {}.getType(); private final static Type timelinesType = new TypeToken>() {}.getType(); @@ -71,6 +72,7 @@ public class AccountLocalPreferences{ emojiReactionsEnabled=prefs.getBoolean("emojiReactionsEnabled", session.getInstance().isPresent() && session.getInstance().get().isAkkoma()); showEmojiReactions=ShowEmojiReactions.valueOf(prefs.getString("showEmojiReactions", ShowEmojiReactions.HIDE_EMPTY.name())); color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.MATERIAL3.name())); + likeIcon=prefs.getBoolean("likeIcon", false); } public long getNotificationsPauseEndTime(){ @@ -105,6 +107,7 @@ public class AccountLocalPreferences{ .putBoolean("emojiReactionsEnabled", emojiReactionsEnabled) .putString("showEmojiReactions", showEmojiReactions.name()) .putString("color", color.name()) + .putBoolean("likeIcon", likeIcon) .apply(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java index 93e8fc739..1b4190d89 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java @@ -38,7 +38,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ private CheckableListItem revealCWsItem, hideSensitiveMediaItem, interactionCountsItem, emojiInNamesItem; // MEGALODON - private CheckableListItem trueBlackModeItem, marqueeItem, disableSwipeItem, reduceMotionItem, altIndicatorItem, noAltIndicatorItem, collapsePostsItem, spectatorModeItem, hideFabItem, translateOpenedItem, disablePillItem, showNavigationLabelsItem; + private CheckableListItem trueBlackModeItem, marqueeItem, disableSwipeItem, reduceMotionItem, altIndicatorItem, noAltIndicatorItem, collapsePostsItem, spectatorModeItem, hideFabItem, translateOpenedItem, disablePillItem, showNavigationLabelsItem, likeIconItem; private ListItem colorItem, publishTextItem, autoRevealCWsItem; private CheckableListItem pronounsInUserListingsItem, pronounsInTimelinesItem, pronounsInThreadsItem; @@ -70,6 +70,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ hideFabItem=new CheckableListItem<>(R.string.sk_settings_hide_fab, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.autoHideFab, R.drawable.ic_fluent_edit_24_regular, ()->toggleCheckableItem(hideFabItem)), translateOpenedItem=new CheckableListItem<>(R.string.sk_settings_translate_only_opened, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.translateButtonOpenedOnly, R.drawable.ic_fluent_translate_24_regular, ()->toggleCheckableItem(translateOpenedItem)), disablePillItem=new CheckableListItem<>(R.string.sk_disable_pill_shaped_active_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableM3PillActiveIndicator, R.drawable.ic_fluent_pill_24_regular, ()->toggleCheckableItem(disablePillItem)), + likeIconItem=new CheckableListItem<>(R.string.sk_settings_like_icon, 0, CheckableListItem.Style.SWITCH, lp.likeIcon, R.drawable.ic_fluent_heart_24_regular, ()->toggleCheckableItem(likeIconItem)), showNavigationLabelsItem=new CheckableListItem<>(R.string.sk_settings_show_labels_in_navigation_bar, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNavigationLabels, R.drawable.ic_fluent_tag_24_regular, ()->toggleCheckableItem(showNavigationLabelsItem), true), pronounsInTimelinesItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_timelines, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInTimelines, 0, ()->toggleCheckableItem(pronounsInTimelinesItem)), pronounsInThreadsItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_threads, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInThreads, 0, ()->toggleCheckableItem(pronounsInThreadsItem)), @@ -97,12 +98,14 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ boolean restartPlease= GlobalUserPreferences.disableM3PillActiveIndicator!=disablePillItem.checked || - GlobalUserPreferences.showNavigationLabels!=showNavigationLabelsItem.checked; + GlobalUserPreferences.showNavigationLabels!=showNavigationLabelsItem.checked || + lp.likeIcon!=likeIconItem.checked; lp.revealCWs=revealCWsItem.checked; lp.hideSensitiveMedia=hideSensitiveMediaItem.checked; lp.showInteractionCounts=interactionCountsItem.checked; lp.customEmojiInNames=emojiInNamesItem.checked; + lp.likeIcon=likeIconItem.checked; lp.save(); GlobalUserPreferences.toolbarMarquee=marqueeItem.checked; GlobalUserPreferences.reduceMotion=reduceMotionItem.checked; @@ -197,8 +200,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ } private void onColorClick(){ - AccountLocalPreferences prefs=AccountSessionManager.get(accountID).getLocalPreferences(); - int selected=prefs.color.ordinal(); + int selected=lp.color.ordinal(); int[] newSelected={selected}; String[] names=Arrays.stream(ColorPreference.values()).map(ColorPreference::getName).map(this::getString).toArray(String[]::new); new M3AlertDialogBuilder(getActivity()) @@ -207,9 +209,9 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ selected, (dlg, item)->newSelected[0]=item) .setPositiveButton(R.string.ok, (dlg, item)->{ ColorPreference pref=ColorPreference.values()[newSelected[0]]; - if(pref!=prefs.color){ - ColorPreference prev=prefs.color; - prefs.color=pref; + if(pref!=lp.color){ + ColorPreference prev=lp.color; + lp.color=pref; GlobalUserPreferences.save(); colorItem.subtitleRes=getColorPaletteValue(); rebindItem(colorItem); @@ -260,17 +262,16 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ } private void maybeApplyNewThemeRightNow(GlobalUserPreferences.ThemePreference prevTheme, ColorPreference prevColor, Boolean prevTrueBlack){ - AccountLocalPreferences prefs=AccountSessionManager.get(accountID).getLocalPreferences(); if(prevTheme==null) prevTheme=GlobalUserPreferences.theme; if(prevTrueBlack==null) prevTrueBlack=GlobalUserPreferences.trueBlackTheme; - if(prevColor==null) prevColor=prefs.color; + if(prevColor==null) prevColor=lp.color; boolean isCurrentDark=prevTheme==GlobalUserPreferences.ThemePreference.DARK || (prevTheme==GlobalUserPreferences.ThemePreference.AUTO && Build.VERSION.SDK_INT>=30 && getResources().getConfiguration().isNightModeActive()); boolean isNewDark=GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.DARK || (GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.AUTO && Build.VERSION.SDK_INT>=30 && getResources().getConfiguration().isNightModeActive()); boolean isNewBlack=GlobalUserPreferences.trueBlackTheme; - if(isCurrentDark!=isNewDark || prevColor!=prefs.color || (isNewDark && prevTrueBlack!=isNewBlack)){ + if(isCurrentDark!=isNewDark || prevColor!=lp.color || (isNewDark && prevTrueBlack!=isNewBlack)){ restartActivityToApplyNewTheme(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index 7c323825f..675ac812f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -1,12 +1,10 @@ package org.joinmastodon.android.ui.displayitems; -import static org.joinmastodon.android.ui.utils.UiUtils.opacityIn; -import static org.joinmastodon.android.ui.utils.UiUtils.opacityOut; - import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; @@ -17,6 +15,7 @@ import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Button; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.TextView; import org.joinmastodon.android.GlobalUserPreferences; @@ -57,6 +56,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ public static class Holder extends StatusDisplayItem.Holder{ private final TextView replies, boosts, favorites; private final View reply, boost, favorite, share, bookmark; + private final ImageView favIcon; private View touchingView = null; private boolean longClickPerformed = false; @@ -89,6 +89,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ favorite=findViewById(R.id.favorite_btn); share=findViewById(R.id.share_btn); bookmark=findViewById(R.id.bookmark_btn); + favIcon=findViewById(R.id.favorite_icon); reply.setOnTouchListener(this::onButtonTouch); reply.setOnClickListener(this::onReplyClick); @@ -132,6 +133,16 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ boolean condenseBottom = !item.isMainStatus && item.hasDescendantNeighbor && !nextIsWarning; + + AccountSession session=AccountSessionManager.get(item.accountID); + boolean like=session!=null && session.getLocalPreferences().likeIcon; + ColorStateList color=item.parentFragment.getResources().getColorStateList( + like ? R.color.like_icon : R.color.favorite_icon, item.parentFragment.getContext().getTheme() + ); + favIcon.setImageResource(like ? R.drawable.ic_fluent_heart_24_selector : R.drawable.ic_fluent_star_24_selector); + favIcon.setImageTintList(color); + favorites.setTextColor(color); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams(); params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, condenseBottom ? V.dp(-5) : 0); diff --git a/mastodon/src/main/res/color/like_icon.xml b/mastodon/src/main/res/color/like_icon.xml new file mode 100644 index 000000000..242d79986 --- /dev/null +++ b/mastodon/src/main/res/color/like_icon.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/ic_fluent_heart_24_filled.xml b/mastodon/src/main/res/drawable/ic_fluent_heart_24_filled.xml new file mode 100644 index 000000000..8dc20bdeb --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_heart_24_filled.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_heart_24_selector.xml b/mastodon/src/main/res/drawable/ic_fluent_heart_24_selector.xml new file mode 100644 index 000000000..80231c3e4 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_heart_24_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/mastodon/src/main/res/layout/display_item_footer.xml b/mastodon/src/main/res/layout/display_item_footer.xml index b63a32e1f..51e1c6843 100644 --- a/mastodon/src/main/res/layout/display_item_footer.xml +++ b/mastodon/src/main/res/layout/display_item_footer.xml @@ -101,6 +101,7 @@ android:layout_height="match_parent" android:paddingVertical="12dp"> @color/warning_500 @color/success_500 + @color/error_400 @color/gray_100 @color/primary_700 diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 6c0ecf7aa..80c17c260 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -406,4 +406,5 @@ Muted accounts Blocked accounts + Use heart as favorite icon \ No newline at end of file From c2184e7bd8824f5a01f0c379a89ac379a3fc3cac Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 18:00:59 +0200 Subject: [PATCH 44/98] don't dismiss when restarting activity --- .../java/org/joinmastodon/android/ui/AccountSwitcherSheet.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java index 1a5c315ce..448617a9a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java @@ -147,7 +147,6 @@ public class AccountSwitcherSheet extends BottomSheet{ private void logOut(String accountID){ AccountSessionManager.get(accountID).logOut(activity, ()->{ - dismiss(); ((MainActivity)activity).restartActivity(); }); } @@ -317,8 +316,8 @@ public class AccountSwitcherSheet extends BottomSheet{ @Override public void onClick(){ setOnDismissListener(null); - dismiss(); if (onClick != null) { + dismiss(); onClick.accept(item.getID(), false); return; } From c10cdfd795eb03552d172681db3baae5690655dc Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 6 Oct 2023 18:44:15 +0200 Subject: [PATCH 45/98] fix color inheritance issue --- mastodon/src/main/res/layout/tab_bar.xml | 2 +- mastodon/src/main/res/values/palettes.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mastodon/src/main/res/layout/tab_bar.xml b/mastodon/src/main/res/layout/tab_bar.xml index b31bf4959..70561fb96 100644 --- a/mastodon/src/main/res/layout/tab_bar.xml +++ b/mastodon/src/main/res/layout/tab_bar.xml @@ -132,7 +132,7 @@ android:layout_marginTop="-4dp" android:layout_marginStart="-12dp" android:background="@drawable/bg_tabbar_badge" - android:textColor="?colorM3OnPrimary" + android:textColor="?colorM3OnError" android:gravity="center" android:includeFontPadding="false" android:textAppearance="@style/m3_label_small" diff --git a/mastodon/src/main/res/values/palettes.xml b/mastodon/src/main/res/values/palettes.xml index 30c5efa58..d30c15a18 100644 --- a/mastodon/src/main/res/values/palettes.xml +++ b/mastodon/src/main/res/values/palettes.xml @@ -244,7 +244,7 @@ @color/m3_neutral2_10 -