Add options to hide 'sensitive content' and 'media description' indicators

(close #925)
This commit is contained in:
0xd9a 2025-11-26 01:19:54 +05:30
parent 79f8a0744b
commit 7fdb7b3ee6
3 changed files with 59 additions and 21 deletions

View file

@ -260,6 +260,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
private static boolean autoplaygif;
private static int video_cache;
private static int timeout;
private static boolean sensitiveIndicator;
private static boolean mediaDescriptionIndicator;
private static int iconSize;
private static int dp6;
@ -1974,10 +1976,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
context.startActivity(mediaIntent, options.toBundle());
});
});
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
if (sensitiveIndicator) {
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
} else {
layoutMediaBinding.viewHide.setVisibility(View.GONE);
}
ViewCompat.addAccessibilityAction(
layoutMediaBinding.mediaVideo,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
@ -2062,10 +2068,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
context.startActivity(mediaIntent, options.toBundle());
});
});
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
if (sensitiveIndicator) {
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
} else {
layoutMediaBinding.viewHide.setVisibility(View.GONE);
}
ViewCompat.addAccessibilityAction(
layoutMediaBinding.mediaVideo,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
@ -3135,24 +3145,34 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
} else {
layoutMediaBinding.playMusic.setVisibility(View.GONE);
}
if (attachment.description != null && !attachment.description.isEmpty()) {
if (mediaDescriptionIndicator && (attachment.description != null && !attachment.description.isEmpty())) {
layoutMediaBinding.viewDescription.setVisibility(View.VISIBLE);
} else {
layoutMediaBinding.viewDescription.setVisibility(View.GONE);
}
RequestBuilder<Drawable> requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, statusToDeal.sensitive, false);
if (!statusToDeal.sensitive || expand_media) {
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_24);
if (sensitiveIndicator) {
if (!statusToDeal.sensitive || expand_media) {
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_24);
} else {
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_off_24);
}
if (statusToDeal.sensitive) {
Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, ThemeHelper.getAttColor(context, R.attr.colorError));
} else {
Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, R.color.white);
}
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
} else {
layoutMediaBinding.viewHide.setIconResource(R.drawable.ic_baseline_visibility_off_24);
layoutMediaBinding.viewHide.setVisibility(View.GONE);
}
requestBuilder.load(attachment.preview_url).into(layoutMediaBinding.media);
if (statusToDeal.sensitive) {
Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, ThemeHelper.getAttColor(context, R.attr.colorError));
} else {
Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, R.color.white);
}
layoutMediaBinding.media.setOnClickListener(v -> {
if (statusToDeal.sensitive && !expand_media) {
@ -3186,10 +3206,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
context.startActivity(mediaIntent, options.toBundle());
});
});
layoutMediaBinding.viewHide.setOnClickListener(v -> {
statusToDeal.sensitive = !statusToDeal.sensitive;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
ViewCompat.addAccessibilityAction(
layoutMediaBinding.media,
context.getString(statusToDeal.sensitive ? R.string.cd_show_media : R.string.cd_hide_media),
@ -3452,6 +3468,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
video_cache = sharedpreferences.getInt(context.getString(R.string.SET_VIDEO_CACHE), Helper.DEFAULT_VIDEO_CACHE_MB);
timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5);
video_cache = sharedpreferences.getInt(context.getString(R.string.SET_VIDEO_CACHE), Helper.DEFAULT_VIDEO_CACHE_MB);
sensitiveIndicator = sharedpreferences.getBoolean(context.getString(R.string.SET_SENSITIVE_INDICATOR), true);
mediaDescriptionIndicator = sharedpreferences.getBoolean(context.getString(R.string.SET_MEDIA_DESCRIPTION_INDICATOR), true);
iconSize = (int) (Helper.convertDpToPixel(28, context) * scaleIcon);
dp6 = (int) Helper.convertDpToPixel(6, context);

View file

@ -1327,6 +1327,8 @@
<string name="SET_DISPLAY_TRANSLATE" translatable="false">SET_DISPLAY_TRANSLATE</string>
<string name="SET_TRANSLATE_BUTTON" translatable="false">SET_TRANSLATE_BUTTON</string>
<string name="SET_QUOTE_BUTTON" translatable="false">SET_QUOTE_BUTTON</string>
<string name="SET_SENSITIVE_INDICATOR" translatable="false">SET_SENSITIVE_INDICATOR</string>
<string name="SET_MEDIA_DESCRIPTION_INDICATOR" translatable="false">SET_MEDIA_DESCRIPTION_INDICATOR</string>
<string name="SET_POST_FORMAT" translatable="false">SET_POST_FORMAT</string>
<string name="SET_COMPOSE_LOCAL_ONLY" translatable="false">SET_COMPOSE_LOCAL_ONLY</string>
@ -2134,6 +2136,10 @@
<string name="icons_extra_features">Icons for extra features</string>
<string name="icons_extra_features_visibility_summary">If your instance does not accept some extra features, you can hide these icons</string>
<string name="set_display_quote_indication">Quote button</string>
<string name="set_sensitive_indicator">Sensitive indicator</string>
<string name="set_sensitive_indicator_summary">Display an indicator for sensitive media</string>
<string name="set_media_description_indicator">Media description indicator</string>
<string name="set_media_description_indicator_summary">Display an indicator for media with a description</string>
<string name="set_display_reaction_indication">Display \"Reactions\" buttons</string>
<string name="bubble">Bubble</string>
<string name="exclude_visibility">Exclude visibility</string>

View file

@ -156,6 +156,20 @@
app:icon="@drawable/ic_baseline_format_quote_24"
app:key="@string/SET_QUOTE_BUTTON"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
app:defaultValue="true"
app:icon="@drawable/ic_compose_sensitive"
app:key="@string/SET_SENSITIVE_INDICATOR"
app:singleLineTitle="false"
app:summary="@string/set_sensitive_indicator_summary"
app:title="@string/set_sensitive_indicator" />
<SwitchPreferenceCompat
app:defaultValue="true"
app:icon="@drawable/ic_outline_note_alt_24"
app:key="@string/SET_MEDIA_DESCRIPTION_INDICATOR"
app:singleLineTitle="false"
app:summary="@string/set_media_description_indicator_summary"
app:title="@string/set_media_description_indicator" />
<ListPreference
app:defaultValue="FEDILAB"
app:dialogTitle="@string/translator"