diff --git a/app/src/main/java/com/keylesspalace/tusky/Status.java b/app/src/main/java/com/keylesspalace/tusky/Status.java index b81e99da9..8b89ba572 100644 --- a/app/src/main/java/com/keylesspalace/tusky/Status.java +++ b/app/src/main/java/com/keylesspalace/tusky/Status.java @@ -15,8 +15,6 @@ package com.keylesspalace.tusky; -import android.os.Build; -import android.text.Html; import android.text.Spanned; import org.json.JSONArray; @@ -52,10 +50,11 @@ public class Status { private boolean reblogged; /** whether the authenticated user has favourited this status */ private boolean favourited; + private boolean sensitive; + private String spoilerText; private Visibility visibility; private MediaAttachment[] attachments; private Mention[] mentions; - private boolean sensitive; public static final int MAX_MEDIA_ATTACHMENTS = 4; @@ -71,6 +70,7 @@ public class Status { this.createdAt = createdAt; this.reblogged = reblogged; this.favourited = favourited; + this.spoilerText = ""; this.visibility = Visibility.valueOf(visibility.toUpperCase()); this.attachments = new MediaAttachment[0]; this.mentions = new Mention[0]; @@ -116,6 +116,14 @@ public class Status { return favourited; } + public boolean getSensitive() { + return sensitive; + } + + public String getSpoilerText() { + return spoilerText; + } + public Visibility getVisibility() { return visibility; } @@ -128,10 +136,6 @@ public class Status { return mentions; } - public boolean getSensitive() { - return sensitive; - } - public void setRebloggedByUsername(String name) { rebloggedByUsername = name; } @@ -144,6 +148,10 @@ public class Status { this.favourited = favourited; } + public void setSpoilerText(String spoilerText) { + this.spoilerText = spoilerText; + } + public void setMentions(Mention[] mentions) { this.mentions = mentions; } @@ -188,6 +196,7 @@ public class Status { Date createdAt = parseDate(object.getString("created_at")); boolean reblogged = object.getBoolean("reblogged"); boolean favourited = object.getBoolean("favourited"); + String spoilerText = object.getString("spoiler_text"); boolean sensitive = object.optBoolean("sensitive"); String visibility = object.getString("visibility"); @@ -260,6 +269,9 @@ public class Status { if (attachments != null) { status.setAttachments(attachments, sensitive); } + if (!spoilerText.isEmpty()) { + status.setSpoilerText(spoilerText); + } } return status; } diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java index 8c2732633..047767054 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java @@ -21,23 +21,19 @@ import android.support.v7.widget.RecyclerView; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.method.LinkMovementMethod; -import android.text.method.MovementMethod; import android.text.style.ClickableSpan; import android.text.style.URLSpan; -import android.text.util.Linkify; import android.view.View; -import android.view.ViewGroup; +import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; +import android.widget.ToggleButton; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.NetworkImageView; -import java.net.URL; import java.util.Date; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class StatusViewHolder extends RecyclerView.ViewHolder { private View container; @@ -59,6 +55,9 @@ public class StatusViewHolder extends RecyclerView.ViewHolder { private NetworkImageView mediaPreview2; private NetworkImageView mediaPreview3; private View sensitiveMediaWarning; + private View contentWarningBar; + private TextView contentWarningDescription; + private ToggleButton contentWarningButton; public StatusViewHolder(View itemView) { super(itemView); @@ -87,6 +86,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder { mediaPreview2.setDefaultImageResId(R.drawable.media_preview_unloaded); mediaPreview3.setDefaultImageResId(R.drawable.media_preview_unloaded); sensitiveMediaWarning = itemView.findViewById(R.id.status_sensitive_media_warning); + contentWarningBar = itemView.findViewById(R.id.status_content_warning_bar); + contentWarningDescription = + (TextView) itemView.findViewById(R.id.status_content_warning_description); + contentWarningButton = + (ToggleButton) itemView.findViewById(R.id.status_content_warning_button); } public void setDisplayName(String name) { @@ -258,6 +262,23 @@ public class StatusViewHolder extends RecyclerView.ViewHolder { sensitiveMediaWarning.setVisibility(View.GONE); } + public void setSpoilerText(String spoilerText) { + contentWarningDescription.setText(spoilerText); + contentWarningBar.setVisibility(View.VISIBLE); + content.setVisibility(View.GONE); + contentWarningButton.setOnCheckedChangeListener( + new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + content.setVisibility(View.VISIBLE); + } else { + content.setVisibility(View.GONE); + } + } + }); + } + public void setupButtons(final StatusActionListener listener, final int position) { avatar.setOnClickListener(new View.OnClickListener() { @Override @@ -329,5 +350,8 @@ public class StatusViewHolder extends RecyclerView.ViewHolder { if (status.getVisibility() == Status.Visibility.PRIVATE) { disableReblogging(); } + if (!status.getSpoilerText().isEmpty()) { + setSpoilerText(status.getSpoilerText()); + } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/toggle_small.xml b/app/src/main/res/drawable/toggle_small.xml new file mode 100644 index 000000000..b02895973 --- /dev/null +++ b/app/src/main/res/drawable/toggle_small.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_status.xml b/app/src/main/res/layout/item_status.xml index 8d8ecbc32..0071d1971 100644 --- a/app/src/main/res/layout/item_status.xml +++ b/app/src/main/res/layout/item_status.xml @@ -69,13 +69,43 @@ + + + + + + + + + android:layout_below="@+id/status_content_warning_bar" /> %s boosted Sensitive Media Click to view. + Show More + Show Less Could not load the rest of the statuses. Could not load the rest of the statuses.