Content warnings now show/hide on all timelines.
This commit is contained in:
parent
1429dfc7b5
commit
2b6bc8a5c7
|
@ -15,8 +15,6 @@
|
||||||
|
|
||||||
package com.keylesspalace.tusky;
|
package com.keylesspalace.tusky;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
import android.text.Html;
|
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
@ -52,10 +50,11 @@ public class Status {
|
||||||
private boolean reblogged;
|
private boolean reblogged;
|
||||||
/** whether the authenticated user has favourited this status */
|
/** whether the authenticated user has favourited this status */
|
||||||
private boolean favourited;
|
private boolean favourited;
|
||||||
|
private boolean sensitive;
|
||||||
|
private String spoilerText;
|
||||||
private Visibility visibility;
|
private Visibility visibility;
|
||||||
private MediaAttachment[] attachments;
|
private MediaAttachment[] attachments;
|
||||||
private Mention[] mentions;
|
private Mention[] mentions;
|
||||||
private boolean sensitive;
|
|
||||||
|
|
||||||
public static final int MAX_MEDIA_ATTACHMENTS = 4;
|
public static final int MAX_MEDIA_ATTACHMENTS = 4;
|
||||||
|
|
||||||
|
@ -71,6 +70,7 @@ public class Status {
|
||||||
this.createdAt = createdAt;
|
this.createdAt = createdAt;
|
||||||
this.reblogged = reblogged;
|
this.reblogged = reblogged;
|
||||||
this.favourited = favourited;
|
this.favourited = favourited;
|
||||||
|
this.spoilerText = "";
|
||||||
this.visibility = Visibility.valueOf(visibility.toUpperCase());
|
this.visibility = Visibility.valueOf(visibility.toUpperCase());
|
||||||
this.attachments = new MediaAttachment[0];
|
this.attachments = new MediaAttachment[0];
|
||||||
this.mentions = new Mention[0];
|
this.mentions = new Mention[0];
|
||||||
|
@ -116,6 +116,14 @@ public class Status {
|
||||||
return favourited;
|
return favourited;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getSensitive() {
|
||||||
|
return sensitive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpoilerText() {
|
||||||
|
return spoilerText;
|
||||||
|
}
|
||||||
|
|
||||||
public Visibility getVisibility() {
|
public Visibility getVisibility() {
|
||||||
return visibility;
|
return visibility;
|
||||||
}
|
}
|
||||||
|
@ -128,10 +136,6 @@ public class Status {
|
||||||
return mentions;
|
return mentions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getSensitive() {
|
|
||||||
return sensitive;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRebloggedByUsername(String name) {
|
public void setRebloggedByUsername(String name) {
|
||||||
rebloggedByUsername = name;
|
rebloggedByUsername = name;
|
||||||
}
|
}
|
||||||
|
@ -144,6 +148,10 @@ public class Status {
|
||||||
this.favourited = favourited;
|
this.favourited = favourited;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setSpoilerText(String spoilerText) {
|
||||||
|
this.spoilerText = spoilerText;
|
||||||
|
}
|
||||||
|
|
||||||
public void setMentions(Mention[] mentions) {
|
public void setMentions(Mention[] mentions) {
|
||||||
this.mentions = mentions;
|
this.mentions = mentions;
|
||||||
}
|
}
|
||||||
|
@ -188,6 +196,7 @@ public class Status {
|
||||||
Date createdAt = parseDate(object.getString("created_at"));
|
Date createdAt = parseDate(object.getString("created_at"));
|
||||||
boolean reblogged = object.getBoolean("reblogged");
|
boolean reblogged = object.getBoolean("reblogged");
|
||||||
boolean favourited = object.getBoolean("favourited");
|
boolean favourited = object.getBoolean("favourited");
|
||||||
|
String spoilerText = object.getString("spoiler_text");
|
||||||
boolean sensitive = object.optBoolean("sensitive");
|
boolean sensitive = object.optBoolean("sensitive");
|
||||||
String visibility = object.getString("visibility");
|
String visibility = object.getString("visibility");
|
||||||
|
|
||||||
|
@ -260,6 +269,9 @@ public class Status {
|
||||||
if (attachments != null) {
|
if (attachments != null) {
|
||||||
status.setAttachments(attachments, sensitive);
|
status.setAttachments(attachments, sensitive);
|
||||||
}
|
}
|
||||||
|
if (!spoilerText.isEmpty()) {
|
||||||
|
status.setSpoilerText(spoilerText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,23 +21,19 @@ import android.support.v7.widget.RecyclerView;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
import android.text.method.MovementMethod;
|
|
||||||
import android.text.style.ClickableSpan;
|
import android.text.style.ClickableSpan;
|
||||||
import android.text.style.URLSpan;
|
import android.text.style.URLSpan;
|
||||||
import android.text.util.Linkify;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
import com.android.volley.toolbox.ImageLoader;
|
import com.android.volley.toolbox.ImageLoader;
|
||||||
import com.android.volley.toolbox.NetworkImageView;
|
import com.android.volley.toolbox.NetworkImageView;
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class StatusViewHolder extends RecyclerView.ViewHolder {
|
public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
private View container;
|
private View container;
|
||||||
|
@ -59,6 +55,9 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
private NetworkImageView mediaPreview2;
|
private NetworkImageView mediaPreview2;
|
||||||
private NetworkImageView mediaPreview3;
|
private NetworkImageView mediaPreview3;
|
||||||
private View sensitiveMediaWarning;
|
private View sensitiveMediaWarning;
|
||||||
|
private View contentWarningBar;
|
||||||
|
private TextView contentWarningDescription;
|
||||||
|
private ToggleButton contentWarningButton;
|
||||||
|
|
||||||
public StatusViewHolder(View itemView) {
|
public StatusViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
@ -87,6 +86,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
mediaPreview2.setDefaultImageResId(R.drawable.media_preview_unloaded);
|
mediaPreview2.setDefaultImageResId(R.drawable.media_preview_unloaded);
|
||||||
mediaPreview3.setDefaultImageResId(R.drawable.media_preview_unloaded);
|
mediaPreview3.setDefaultImageResId(R.drawable.media_preview_unloaded);
|
||||||
sensitiveMediaWarning = itemView.findViewById(R.id.status_sensitive_media_warning);
|
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) {
|
public void setDisplayName(String name) {
|
||||||
|
@ -258,6 +262,23 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
sensitiveMediaWarning.setVisibility(View.GONE);
|
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) {
|
public void setupButtons(final StatusActionListener listener, final int position) {
|
||||||
avatar.setOnClickListener(new View.OnClickListener() {
|
avatar.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -329,5 +350,8 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
if (status.getVisibility() == Status.Visibility.PRIVATE) {
|
if (status.getVisibility() == Status.Visibility.PRIVATE) {
|
||||||
disableReblogging();
|
disableReblogging();
|
||||||
}
|
}
|
||||||
|
if (!status.getSpoilerText().isEmpty()) {
|
||||||
|
setSpoilerText(status.getSpoilerText());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#ffafafaf" />
|
||||||
|
<corners android:radius="2dp" />
|
||||||
|
</shape>
|
|
@ -69,13 +69,43 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:id="@+id/status_content_warning_bar"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_toRightOf="@+id/status_avatar"
|
||||||
|
android:layout_toEndOf="@+id/status_avatar"
|
||||||
|
android:layout_below="@+id/status_name_bar"
|
||||||
|
android:layout_marginBottom="8dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/status_content_warning_description" />
|
||||||
|
|
||||||
|
<ToggleButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minWidth="0dp"
|
||||||
|
android:minHeight="0dp"
|
||||||
|
android:id="@+id/status_content_warning_button"
|
||||||
|
android:textOn="@string/status_content_warning_show_less"
|
||||||
|
android:textOff="@string/status_content_warning_show_more"
|
||||||
|
android:background="@drawable/toggle_small"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:layout_marginLeft="8dp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/status_content"
|
android:id="@+id/status_content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_toRightOf="@+id/status_avatar"
|
android:layout_toRightOf="@+id/status_avatar"
|
||||||
android:layout_toEndOf="@+id/status_avatar"
|
android:layout_toEndOf="@+id/status_avatar"
|
||||||
android:layout_below="@+id/status_name_bar" />
|
android:layout_below="@+id/status_content_warning_bar" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/status_media_preview_container"
|
android:id="@+id/status_media_preview_container"
|
||||||
|
|
|
@ -67,6 +67,8 @@
|
||||||
<string name="status_boosted_format">%s boosted</string>
|
<string name="status_boosted_format">%s boosted</string>
|
||||||
<string name="status_sensitive_media_title">Sensitive Media</string>
|
<string name="status_sensitive_media_title">Sensitive Media</string>
|
||||||
<string name="status_sensitive_media_directions">Click to view.</string>
|
<string name="status_sensitive_media_directions">Click to view.</string>
|
||||||
|
<string name="status_content_warning_show_more">Show More</string>
|
||||||
|
<string name="status_content_warning_show_less">Show Less</string>
|
||||||
|
|
||||||
<string name="footer_retry_statuses">Could not load the rest of the statuses.</string>
|
<string name="footer_retry_statuses">Could not load the rest of the statuses.</string>
|
||||||
<string name="footer_retry_notifications">Could not load the rest of the statuses.</string>
|
<string name="footer_retry_notifications">Could not load the rest of the statuses.</string>
|
||||||
|
|
Loading…
Reference in New Issue