mirror of
https://framagit.org/tom79/fedilab-tube
synced 2025-04-24 07:07:27 +02:00
Truncate long descriptions for instances with a way to expand them.
This commit is contained in:
parent
2b7639599c
commit
1f6107e238
@ -64,6 +64,7 @@ public class InstanceData {
|
|||||||
@SerializedName("isNSFW")
|
@SerializedName("isNSFW")
|
||||||
private boolean isNSFW;
|
private boolean isNSFW;
|
||||||
private SpannableStringBuilder spannableStringBuilder;
|
private SpannableStringBuilder spannableStringBuilder;
|
||||||
|
private boolean truncatedDescription = true;
|
||||||
|
|
||||||
public boolean isAutoBlacklistUserVideosEnabled() {
|
public boolean isAutoBlacklistUserVideosEnabled() {
|
||||||
return autoBlacklistUserVideosEnabled;
|
return autoBlacklistUserVideosEnabled;
|
||||||
@ -240,6 +241,14 @@ public class InstanceData {
|
|||||||
public void setCategories(List<Integer> categories) {
|
public void setCategories(List<Integer> categories) {
|
||||||
this.categories = categories;
|
this.categories = categories;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTruncatedDescription() {
|
||||||
|
return truncatedDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTruncatedDescription(boolean truncatedDescription) {
|
||||||
|
this.truncatedDescription = truncatedDescription;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class InstanceInfo {
|
public static class InstanceInfo {
|
||||||
@ -277,6 +286,7 @@ public class InstanceData {
|
|||||||
@SerializedName("terms")
|
@SerializedName("terms")
|
||||||
private String terms;
|
private String terms;
|
||||||
private String host;
|
private String host;
|
||||||
|
private boolean truncatedDescription = true;
|
||||||
|
|
||||||
public AboutInstance() {
|
public AboutInstance() {
|
||||||
}
|
}
|
||||||
@ -329,6 +339,14 @@ public class InstanceData {
|
|||||||
this.host = host;
|
this.host = host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTruncatedDescription() {
|
||||||
|
return truncatedDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTruncatedDescription(boolean truncatedDescription) {
|
||||||
|
this.truncatedDescription = truncatedDescription;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -26,7 +26,9 @@ import android.os.Handler;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@ -89,6 +91,31 @@ public class AboutInstanceAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
holder.binding.aboutInstanceHost.setText(aboutInstance.getHost());
|
holder.binding.aboutInstanceHost.setText(aboutInstance.getHost());
|
||||||
|
|
||||||
SpannableString spannableString;
|
SpannableString spannableString;
|
||||||
|
|
||||||
|
if (aboutInstance.getShortDescription() != null && aboutInstance.getShortDescription().trim().length() > 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 (aboutInstance.getShortDescription() != null) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
spannableString = new SpannableString(Html.fromHtml(aboutInstance.getShortDescription(), FROM_HTML_MODE_LEGACY));
|
spannableString = new SpannableString(Html.fromHtml(aboutInstance.getShortDescription(), FROM_HTML_MODE_LEGACY));
|
||||||
|
@ -19,12 +19,15 @@ import android.app.Activity;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.text.Html;
|
||||||
|
import android.text.SpannableString;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@ -35,9 +38,11 @@ import java.util.List;
|
|||||||
|
|
||||||
import app.fedilab.fedilabtube.R;
|
import app.fedilab.fedilabtube.R;
|
||||||
import app.fedilab.fedilabtube.client.data.InstanceData.Instance;
|
import app.fedilab.fedilabtube.client.data.InstanceData.Instance;
|
||||||
|
import app.fedilab.fedilabtube.databinding.DrawerInstanceBinding;
|
||||||
import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan;
|
import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan;
|
||||||
|
|
||||||
import static android.app.Activity.RESULT_OK;
|
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;
|
import static app.fedilab.fedilabtube.helper.Helper.peertubeInformation;
|
||||||
|
|
||||||
|
|
||||||
@ -56,8 +61,8 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
context = parent.getContext();
|
context = parent.getContext();
|
||||||
LayoutInflater layoutInflater = LayoutInflater.from(context);
|
DrawerInstanceBinding itemBinding = DrawerInstanceBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(layoutInflater.inflate(R.layout.drawer_instance, parent, false));
|
return new ViewHolder(itemBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -66,14 +71,33 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
final ViewHolder holder = (ViewHolder) viewHolder;
|
final ViewHolder holder = (ViewHolder) viewHolder;
|
||||||
|
|
||||||
if (instance.getShortDescription() != null && instance.getShortDescription().trim().length() > 0) {
|
if (instance.getShortDescription() != null && instance.getShortDescription().trim().length() > 0) {
|
||||||
holder.description.setText(instance.getShortDescription());
|
if (instance.isTruncatedDescription()) {
|
||||||
holder.description.setVisibility(View.VISIBLE);
|
holder.binding.description.setText(instance.getShortDescription());
|
||||||
|
holder.binding.description.setMaxLines(3);
|
||||||
|
holder.binding.description.setEllipsize(TextUtils.TruncateAt.END);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
holder.description.setVisibility(View.GONE);
|
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.binding.description.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.name.setText(instance.getName());
|
holder.binding.name.setText(instance.getName());
|
||||||
holder.host.setText(instance.getHost());
|
holder.binding.host.setText(instance.getHost());
|
||||||
|
|
||||||
|
|
||||||
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
|
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
|
||||||
@ -95,7 +119,7 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (instance.getSpannableStringBuilder() != null) {
|
if (instance.getSpannableStringBuilder() != null) {
|
||||||
holder.tags.setText(instance.getSpannableStringBuilder());
|
holder.binding.tags.setText(instance.getSpannableStringBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peertubeInformation != null && peertubeInformation.getLanguages() != null) {
|
if (peertubeInformation != null && peertubeInformation.getLanguages() != null) {
|
||||||
@ -107,21 +131,21 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (languages.toString().trim().length() == 0) {
|
if (languages.toString().trim().length() == 0) {
|
||||||
holder.languages.setVisibility(View.GONE);
|
holder.binding.languages.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
holder.languages.setText(languages);
|
holder.binding.languages.setText(languages);
|
||||||
holder.languages.setVisibility(View.VISIBLE);
|
holder.binding.languages.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (instance.getDefaultNSFWPolicy().compareTo("do_not_list") != 0) {
|
if (instance.getDefaultNSFWPolicy().compareTo("do_not_list") != 0) {
|
||||||
holder.sensitive_content.setText(context.getString(R.string.sensitive_content, instance.getDefaultNSFWPolicy()));
|
holder.binding.sensitiveContent.setText(context.getString(R.string.sensitive_content, instance.getDefaultNSFWPolicy()));
|
||||||
holder.sensitive_content.setVisibility(View.VISIBLE);
|
holder.binding.sensitiveContent.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
holder.sensitive_content.setVisibility(View.GONE);
|
holder.binding.sensitiveContent.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
holder.followers_instance.setText(context.getString(R.string.followers_instance, String.valueOf(instance.getTotalInstanceFollowers())));
|
holder.binding.followersInstance.setText(context.getString(R.string.followers_instance, String.valueOf(instance.getTotalInstanceFollowers())));
|
||||||
|
|
||||||
holder.pickup.setOnClickListener(v -> {
|
holder.binding.pickup.setOnClickListener(v -> {
|
||||||
Intent data = new Intent();
|
Intent data = new Intent();
|
||||||
String instanceHost = instance.getHost();
|
String instanceHost = instance.getHost();
|
||||||
data.setData(Uri.parse(instanceHost));
|
data.setData(Uri.parse(instanceHost));
|
||||||
@ -142,21 +166,12 @@ public class InstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
|
|
||||||
|
|
||||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
DrawerInstanceBinding binding;
|
||||||
|
|
||||||
Button pickup;
|
ViewHolder(DrawerInstanceBinding itemView) {
|
||||||
TextView name, host, description;
|
super(itemView.getRoot());
|
||||||
TextView tags, followers_instance, languages, sensitive_content;
|
binding = itemView;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ViewHolder(@NonNull View itemView) {
|
|
||||||
super(itemView);
|
|
||||||
pickup = itemView.findViewById(R.id.pickup);
|
|
||||||
name = itemView.findViewById(R.id.name);
|
|
||||||
host = itemView.findViewById(R.id.host);
|
|
||||||
description = itemView.findViewById(R.id.description);
|
|
||||||
followers_instance = itemView.findViewById(R.id.followers_instance);
|
|
||||||
tags = itemView.findViewById(R.id.tags);
|
|
||||||
languages = itemView.findViewById(R.id.languages);
|
|
||||||
sensitive_content = itemView.findViewById(R.id.sensitive_content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user