diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java index 893838e3..c9d7efed 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java @@ -128,6 +128,8 @@ public class Status implements Serializable, Cloneable { public String translationContent; public boolean translationShown; public boolean mathsShown = false; + public boolean markdownShown = false; + public boolean extraFeaturesShown = false; public boolean canLoadMedia = false; public transient boolean isFocused = false; public transient boolean setCursorToEnd = false; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java index 2564d928..8ae89f70 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java @@ -745,25 +745,24 @@ public class StatusAdapter extends RecyclerView.Adapter holder.binding.statusAddCustomEmoji.setVisibility(View.GONE); holder.binding.statusEmoji.setVisibility(View.GONE); } - - } - if (status.isMaths == null) { - if (status.content != null && Helper.mathsPattern.matcher(status.content).find()) { - holder.binding.actionButtonMaths.setVisibility(View.VISIBLE); - status.isMaths = true; - } else { - holder.binding.actionButtonMaths.setVisibility(View.GONE); + if (statusToDeal.markdownShown) { + if (statusToDeal.contentMarkdownSpan != null) { + holder.binding.statusContent.setText(statusToDeal.contentMarkdownSpan, TextView.BufferType.SPANNABLE); } } else { - if (status.isMaths) { - holder.binding.actionButtonMaths.setVisibility(View.VISIBLE); - } else { - holder.binding.actionButtonMaths.setVisibility(View.GONE); + if (statusToDeal.contentSpan != null) { + holder.binding.statusContent.setText(statusToDeal.contentSpan, TextView.BufferType.SPANNABLE); } } - if (status.mathsShown) { + if (statusToDeal.extraFeaturesShown) { + holder.binding.extraFeaturesPanel.setVisibility(View.VISIBLE); + holder.binding.extraFeaturesPanel.requestFocus(); + } else { + holder.binding.extraFeaturesPanel.setVisibility(View.GONE); + } + if (statusToDeal.mathsShown) { holder.binding.statusContentMaths.setVisibility(View.VISIBLE); holder.binding.statusContent.setVisibility(View.GONE); holder.binding.statusContentMaths.removeAllViews(); @@ -799,10 +798,13 @@ public class StatusAdapter extends RecyclerView.Adapter holder.binding.statusContent.setVisibility(View.VISIBLE); } holder.binding.actionButtonMaths.setOnClickListener(v -> { - status.mathsShown = !status.mathsShown; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); }); + holder.binding.actionButtonMarkdown.setOnClickListener(v -> { + status.markdownShown = !status.markdownShown; + adapter.notifyItemChanged(holder.getBindingAdapterPosition()); + }); holder.binding.actionButtonFavorite.setActiveImage(R.drawable.ic_round_star_24); holder.binding.actionButtonFavorite.setInactiveImage(R.drawable.ic_round_star_border_24); holder.binding.actionButtonBookmark.setActiveImage(R.drawable.ic_round_bookmark_24); @@ -909,15 +911,6 @@ public class StatusAdapter extends RecyclerView.Adapter } else { holder.binding.actionButtonBookmark.setVisibility(View.GONE); } - if (displayTranslate) { - if (statusToDeal.language != null && statusToDeal.language.trim().length() > 0 && statusToDeal.language.equalsIgnoreCase(MyTransL.getLocale())) { - holder.binding.actionButtonTranslate.setVisibility(View.GONE); - } else { - holder.binding.actionButtonTranslate.setVisibility(View.VISIBLE); - } - } else { - holder.binding.actionButtonTranslate.setVisibility(View.GONE); - } //--- ACTIONS --- holder.binding.actionButtonBookmark.setChecked(statusToDeal.bookmarked); //---> BOOKMARK/UNBOOKMARK @@ -1042,11 +1035,42 @@ public class StatusAdapter extends RecyclerView.Adapter holder.binding.actionButtonExtra.setAnimation(null); holder.binding.actionButtonExtra.setOnClickListener(v -> { + if (displayTranslate) { + if (statusToDeal.language != null && statusToDeal.language.trim().length() > 0 && statusToDeal.language.equalsIgnoreCase(MyTransL.getLocale())) { + holder.binding.actionButtonTranslate.setVisibility(View.GONE); + } else { + holder.binding.actionButtonTranslate.setVisibility(View.VISIBLE); + } + } else { + holder.binding.actionButtonTranslate.setVisibility(View.GONE); + } + if (statusToDeal.isMaths == null) { + if (statusToDeal.content != null && Helper.mathsPattern.matcher(statusToDeal.content).find()) { + holder.binding.actionButtonMaths.setVisibility(View.VISIBLE); + statusToDeal.isMaths = true; + } else { + holder.binding.actionButtonMaths.setVisibility(View.GONE); + } + } else { + if (statusToDeal.isMaths) { + holder.binding.actionButtonMaths.setVisibility(View.VISIBLE); + } else { + holder.binding.actionButtonMaths.setVisibility(View.GONE); + } + } + if (statusToDeal.contentMarkdownSpan != null) { + holder.binding.actionButtonMarkdown.setVisibility(View.VISIBLE); + } else { + holder.binding.actionButtonMarkdown.setVisibility(View.GONE); + } holder.binding.extraFeaturesPanel.setVisibility(View.VISIBLE); holder.binding.actionButtonExtra.setChecked(false); }); - holder.binding.buttonCloseExtraFeaturesPanel.setOnClickListener(v -> holder.binding.extraFeaturesPanel.setVisibility(View.GONE)); + holder.binding.buttonCloseExtraFeaturesPanel.setOnClickListener(v -> { + statusToDeal.extraFeaturesShown = !statusToDeal.extraFeaturesShown; + adapter.notifyItemChanged(holder.getBindingAdapterPosition()); + }); holder.binding.actionButtonBoost.setOnClickListener(v -> { boolean needToWarnForMissingDescription = false; @@ -2066,9 +2090,14 @@ public class StatusAdapter extends RecyclerView.Adapter } } } else { - Intent intent = new Intent(context, ContextActivity.class); - intent.putExtra(Helper.ARG_STATUS, statusToDeal); - context.startActivity(intent); + if (statusToDeal.extraFeaturesShown) { + statusToDeal.extraFeaturesShown = false; + adapter.notifyItemChanged(holder.getBindingAdapterPosition()); + } else { + Intent intent = new Intent(context, ContextActivity.class); + intent.putExtra(Helper.ARG_STATUS, statusToDeal); + context.startActivity(intent); + } } } }); diff --git a/app/src/main/res/layouts/mastodon/drawable/baseline_code_24.xml b/app/src/main/res/layouts/mastodon/drawable/baseline_code_24.xml new file mode 100644 index 00000000..450b9e61 --- /dev/null +++ b/app/src/main/res/layouts/mastodon/drawable/baseline_code_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status.xml index 35ec4bfb..13f4d871 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status.xml @@ -763,8 +763,10 @@ android:background="@drawable/bg_compose_panels" android:padding="6dp" android:visibility="gone" - app:constraint_referenced_ids="button_close_extra_features_panel, action_button_quote, action_button_translate, action_button_maths, status_add_custom_emoji, status_emoji" - app:flow_maxElementsWrap="3" + app:constraint_referenced_ids="button_close_extra_features_panel, action_button_quote, action_button_translate, action_button_maths, status_add_custom_emoji, status_emoji, action_button_markdown" + app:flow_horizontalGap="10dp" + app:flow_horizontalStyle="spread_inside" + app:flow_maxElementsWrap="10" app:flow_wrapMode="aligned" app:layout_constraintBottom_toBottomOf="@id/action_buttons" app:layout_constraintEnd_toEndOf="@id/action_button_extra" /> @@ -799,6 +801,13 @@ android:layout_height="wrap_content" app:icon="@drawable/ic_baseline_functions_24" /> + +