From d1ad105eb7070bed94c61a8f22a7169b2d6a4b36 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 24 May 2022 16:40:09 +0200 Subject: [PATCH] Allow to truncate messages over x lines --- .../android/ui/drawer/StatusAdapter.java | 52 ++++++++++--------- app/src/main/res/drawable/ic_display_less.xml | 10 ++++ app/src/main/res/drawable/ic_display_more.xml | 10 ++++ app/src/main/res/layout/drawer_status.xml | 24 +++++---- 4 files changed, 62 insertions(+), 34 deletions(-) create mode 100644 app/src/main/res/drawable/ic_display_less.xml create mode 100644 app/src/main/res/drawable/ic_display_more.xml diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java index 70fd0be8c..1d6aadd69 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java @@ -38,7 +38,6 @@ import android.os.CountDownTimer; import android.os.Handler; import android.os.Looper; import android.text.Html; -import android.text.Layout; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; @@ -336,30 +335,8 @@ public class StatusAdapter extends RecyclerView.Adapter Helper.changeDrawableColor(context, holder.binding.favInfo, theme_text_color); } + holder.binding.toggleTruncate.setVisibility(View.GONE); - if (truncate_toots_size > 0) { - holder.binding.statusContent.setMaxLines(truncate_toots_size); - holder.binding.statusContent.setEllipsize(TextUtils.TruncateAt.END); - Layout layout = holder.binding.statusContent.getLayout(); - if (layout != null) { - int lines = layout.getLineCount(); - if (lines > truncate_toots_size) { - int ellipsisCount = layout.getEllipsisCount(lines - 1); - if (ellipsisCount > truncate_toots_size) { - holder.binding.toggleTruncate.setVisibility(View.VISIBLE); - holder.binding.toggleTruncate.setOnClickListener(v -> { - statusToDeal.isTruncated = !statusToDeal.isTruncated; - adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); - }); - if (statusToDeal.isTruncated) { - holder.binding.statusContent.setMaxLines(5); - } else { - holder.binding.statusContent.setMaxLines(9999); - } - } - } - } - } if (status.isFocused) { holder.binding.statusContent.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); holder.binding.spoiler.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); @@ -796,7 +773,34 @@ public class StatusAdapter extends RecyclerView.Adapter } //--- MAIN CONTENT --- holder.binding.statusContent.setText(statusToDeal.span_content, TextView.BufferType.SPANNABLE); + if (truncate_toots_size > 0) { + holder.binding.statusContent.setMaxLines(truncate_toots_size); + holder.binding.statusContent.setEllipsize(TextUtils.TruncateAt.END); + holder.binding.statusContent.post(() -> { + if (holder.binding.statusContent.getLineCount() > truncate_toots_size) { + holder.binding.toggleTruncate.setVisibility(View.VISIBLE); + if (statusToDeal.isTruncated) { + holder.binding.toggleTruncate.setText(R.string.display_toot_truncate); + holder.binding.toggleTruncate.setCompoundDrawables(null, null, ContextCompat.getDrawable(context, R.drawable.ic_display_more), null); + } else { + holder.binding.toggleTruncate.setText(R.string.hide_toot_truncate); + holder.binding.toggleTruncate.setCompoundDrawables(null, null, ContextCompat.getDrawable(context, R.drawable.ic_display_less), null); + } + holder.binding.toggleTruncate.setOnClickListener(v -> { + statusToDeal.isTruncated = !statusToDeal.isTruncated; + adapter.notifyItemChanged(getPositionAsync(notificationList, statusList, statusToDeal)); + }); + if (statusToDeal.isTruncated) { + holder.binding.statusContent.setMaxLines(5); + } else { + holder.binding.statusContent.setMaxLines(9999); + } + } else { + holder.binding.toggleTruncate.setVisibility(View.GONE); + } + }); + } if (statusToDeal.translationContent != null) { holder.binding.containerTrans.setVisibility(View.VISIBLE); holder.binding.statusContentTranslated.setText(statusToDeal.span_translate, TextView.BufferType.SPANNABLE); diff --git a/app/src/main/res/drawable/ic_display_less.xml b/app/src/main/res/drawable/ic_display_less.xml new file mode 100644 index 000000000..453333c92 --- /dev/null +++ b/app/src/main/res/drawable/ic_display_less.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_display_more.xml b/app/src/main/res/drawable/ic_display_more.xml new file mode 100644 index 000000000..71e1d3bcf --- /dev/null +++ b/app/src/main/res/drawable/ic_display_more.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/drawer_status.xml b/app/src/main/res/layout/drawer_status.xml index 238b72219..780989532 100644 --- a/app/src/main/res/layout/drawer_status.xml +++ b/app/src/main/res/layout/drawer_status.xml @@ -139,6 +139,7 @@ android:textColor="@color/cyanea_accent_dark_reference" android:text="@string/show_content" /> + + + android:layout_height="wrap_content" + android:layout_gravity="center" + android:drawableEnd="@drawable/ic_display_more" + android:gravity="center_vertical" + app:strokeColor="@color/cyanea_accent_dark_reference" + android:singleLine="true" + android:text="@string/display_toot_truncate" + app:iconTint="@color/cyanea_accent_reference" + android:textAllCaps="false" + + />