From 1f6107e23890cb914056f28319ad1aa71fe16f27 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 12 Dec 2020 15:41:28 +0100 Subject: [PATCH] Truncate long descriptions for instances with a way to expand them. --- .../fedilabtube/client/data/InstanceData.java | 18 +++++ .../drawer/AboutInstanceAdapter.java | 27 +++++++ .../fedilabtube/drawer/InstanceAdapter.java | 77 +++++++++++-------- 3 files changed, 91 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/data/InstanceData.java b/app/src/main/java/app/fedilab/fedilabtube/client/data/InstanceData.java index e864958..d802489 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/data/InstanceData.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/data/InstanceData.java @@ -64,6 +64,7 @@ public class InstanceData { @SerializedName("isNSFW") private boolean isNSFW; private SpannableStringBuilder spannableStringBuilder; + private boolean truncatedDescription = true; public boolean isAutoBlacklistUserVideosEnabled() { return autoBlacklistUserVideosEnabled; @@ -240,6 +241,14 @@ public class InstanceData { public void setCategories(List categories) { this.categories = categories; } + + public boolean isTruncatedDescription() { + return truncatedDescription; + } + + public void setTruncatedDescription(boolean truncatedDescription) { + this.truncatedDescription = truncatedDescription; + } } public static class InstanceInfo { @@ -277,6 +286,7 @@ public class InstanceData { @SerializedName("terms") private String terms; private String host; + private boolean truncatedDescription = true; public AboutInstance() { } @@ -329,6 +339,14 @@ public class InstanceData { this.host = host; } + public boolean isTruncatedDescription() { + return truncatedDescription; + } + + public void setTruncatedDescription(boolean truncatedDescription) { + this.truncatedDescription = truncatedDescription; + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/AboutInstanceAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/AboutInstanceAdapter.java index b918bc1..b06fadd 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/AboutInstanceAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/AboutInstanceAdapter.java @@ -26,7 +26,9 @@ import android.os.Handler; import android.os.Looper; import android.text.Html; import android.text.SpannableString; +import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -89,6 +91,31 @@ public class AboutInstanceAdapter extends RecyclerView.Adapter 0) { + if (aboutInstance.isTruncatedDescription()) { + holder.binding.aboutInstanceDescription.setMaxLines(3); + holder.binding.aboutInstanceDescription.setEllipsize(TextUtils.TruncateAt.END); + + } else { + holder.binding.aboutInstanceDescription.setMaxLines(Integer.MAX_VALUE); + holder.binding.aboutInstanceDescription.setEllipsize(null); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + spannableString = new SpannableString(Html.fromHtml(aboutInstance.getShortDescription(), FROM_HTML_MODE_LEGACY)); + else + spannableString = new SpannableString(Html.fromHtml(aboutInstance.getShortDescription())); + holder.binding.aboutInstanceDescription.setText(spannableString, TextView.BufferType.SPANNABLE); + + holder.binding.aboutInstanceDescription.setOnClickListener(v -> { + aboutInstance.setTruncatedDescription(!aboutInstance.isTruncatedDescription()); + notifyItemChanged(i); + }); + holder.binding.aboutInstanceDescription.setVisibility(View.VISIBLE); + } else { + holder.binding.aboutInstanceDescription.setVisibility(View.GONE); + } + if (aboutInstance.getShortDescription() != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) spannableString = new SpannableString(Html.fromHtml(aboutInstance.getShortDescription(), FROM_HTML_MODE_LEGACY)); diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/InstanceAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/InstanceAdapter.java index 37d9247..ef82099 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/InstanceAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/InstanceAdapter.java @@ -19,12 +19,15 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Build; +import android.text.Html; +import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; @@ -35,9 +38,11 @@ import java.util.List; import app.fedilab.fedilabtube.R; import app.fedilab.fedilabtube.client.data.InstanceData.Instance; +import app.fedilab.fedilabtube.databinding.DrawerInstanceBinding; import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan; import static android.app.Activity.RESULT_OK; +import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; import static app.fedilab.fedilabtube.helper.Helper.peertubeInformation; @@ -56,8 +61,8 @@ public class InstanceAdapter extends RecyclerView.Adapter 0) { - holder.description.setText(instance.getShortDescription()); - holder.description.setVisibility(View.VISIBLE); + if (instance.isTruncatedDescription()) { + holder.binding.description.setText(instance.getShortDescription()); + holder.binding.description.setMaxLines(3); + holder.binding.description.setEllipsize(TextUtils.TruncateAt.END); + + } else { + holder.binding.description.setText(instance.getShortDescription()); + holder.binding.description.setMaxLines(Integer.MAX_VALUE); + holder.binding.description.setEllipsize(null); + } + SpannableString spannableString; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + spannableString = new SpannableString(Html.fromHtml(instance.getShortDescription(), FROM_HTML_MODE_LEGACY)); + else + spannableString = new SpannableString(Html.fromHtml(instance.getShortDescription())); + holder.binding.description.setText(spannableString, TextView.BufferType.SPANNABLE); + holder.binding.description.setOnClickListener(v -> { + instance.setTruncatedDescription(!instance.isTruncatedDescription()); + notifyItemChanged(position); + }); + holder.binding.description.setVisibility(View.VISIBLE); } else { - holder.description.setVisibility(View.GONE); + holder.binding.description.setVisibility(View.GONE); } - holder.name.setText(instance.getName()); - holder.host.setText(instance.getHost()); + holder.binding.name.setText(instance.getName()); + holder.binding.host.setText(instance.getHost()); SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); @@ -95,7 +119,7 @@ public class InstanceAdapter extends RecyclerView.Adapter { + holder.binding.pickup.setOnClickListener(v -> { Intent data = new Intent(); String instanceHost = instance.getHost(); data.setData(Uri.parse(instanceHost)); @@ -142,21 +166,12 @@ public class InstanceAdapter extends RecyclerView.Adapter