Commit bb500d04 authored by Thomas's avatar Thomas
Browse files

Long press on tags: Follow / Mute

parent 96ed9731
Loading
Loading
Loading
Loading
+65 −29
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.MySuperGrammerLocator;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.databinding.PopupHashtagsBinding;
import app.fedilab.android.databinding.PopupLinksBinding;
import app.fedilab.android.mastodon.activities.ContextActivity;
import app.fedilab.android.mastodon.activities.HashTagActivity;
@@ -85,10 +86,12 @@ import app.fedilab.android.mastodon.client.entities.api.Emoji;
import app.fedilab.android.mastodon.client.entities.api.Filter;
import app.fedilab.android.mastodon.client.entities.api.Mention;
import app.fedilab.android.mastodon.client.entities.api.Status;
import app.fedilab.android.mastodon.client.entities.api.Tag;
import app.fedilab.android.mastodon.client.entities.app.CachedBundle;
import app.fedilab.android.mastodon.client.entities.app.MarkdownConverter;
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
import app.fedilab.android.mastodon.viewmodel.mastodon.FiltersVM;
import app.fedilab.android.mastodon.viewmodel.mastodon.TagVM;
import es.dmoral.toasty.Toasty;
import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon;
@@ -276,35 +279,7 @@ public class SpannableHelper {
                            if (!tag.startsWith("#")) {
                                tag = "#" + tag;
                            }
                            Filter fedilabFilter = null;
                            for (Filter filter : MainActivity.mainFilters) {
                                if (filter.title.equals(Helper.FEDILAB_MUTED_HASHTAGS)) {
                                    fedilabFilter = filter;
                                    break;
                                }
                            }
                            //Filter for Fedilab doesn't exist we have to create it
                            if (fedilabFilter == null) {
                                Filter.FilterParams filterParams = new Filter.FilterParams();
                                filterParams.title = Helper.FEDILAB_MUTED_HASHTAGS;
                                filterParams.filter_action = "hide";
                                filterParams.context = new ArrayList<>();
                                filterParams.context.add("home");
                                filterParams.context.add("public");
                                filterParams.context.add("thread");
                                filterParams.context.add("account");
                                String finalTag = tag;
                                FiltersVM filtersVM = new ViewModelProvider((ViewModelStoreOwner) context).get(FiltersVM.class);
                                filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
                                        .observe((LifecycleOwner) context, filter -> {
                                            if (filter != null) {
                                                MainActivity.mainFilters.add(filter);
                                                addTagToFilter(context, finalTag, status, filter);
                                            }
                                        });
                            } else {
                                addTagToFilter(context, tag, status, fedilabFilter);
                            }
                            longPressHashTags(context, status, tag);
                        }
                    }

@@ -857,6 +832,17 @@ public class SpannableHelper {
        }
    }

    public static void addTagToFollowed(Context context, String tag) {
        AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
        builder.setMessage(context.getString(R.string.action_follow_tag_confirm, tag));
        builder.setPositiveButton(R.string.follow_tag, (dialog, which) -> {
                    TagVM tagVM = new ViewModelProvider((ViewModelStoreOwner) context).get(TagVM.class);
                    tagVM.follow(MainActivity.currentInstance, MainActivity.currentToken, tag).observe((LifecycleOwner) context, returnedTag -> Toasty.success(context, context.getString(R.string.followed_tag_success), Toast.LENGTH_LONG).show());
                    dialog.dismiss();
                })
                .setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss())
                .show();
    }
    public static void addTagToFilter(Context context, String tag, Status status, Filter filter) {
        for (Filter.KeywordsAttributes keywords : filter.keywords) {
            if (keywords.keyword.equalsIgnoreCase(tag)) {
@@ -1047,4 +1033,54 @@ public class SpannableHelper {

        return trimSpannable(new SpannableStringBuilder(content));
    }


    public static void longPressHashTags(Context context, Status status, String tag) {
        AlertDialog.Builder dialogBuilder = new MaterialAlertDialogBuilder(context);
        PopupHashtagsBinding popupHashtagsBinding = PopupHashtagsBinding.inflate(LayoutInflater.from(context));
        dialogBuilder.setView(popupHashtagsBinding.getRoot());
        AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.show();
        popupHashtagsBinding.followTags.setOnClickListener(v -> {
            addTagToFollowed(context, tag);
            alertDialog.dismiss();
        });
        /*popupHashtagsBinding.pinTag.setOnClickListener(v -> {

            alertDialog.dismiss();
        });*/

        popupHashtagsBinding.muteTag.setOnClickListener(v -> {
            Filter fedilabFilter = null;
            for (Filter filter : MainActivity.mainFilters) {
                if (filter.title.equals(Helper.FEDILAB_MUTED_HASHTAGS)) {
                    fedilabFilter = filter;
                    break;
                }
            }
            //Filter for Fedilab doesn't exist we have to create it
            if (fedilabFilter == null) {
                Filter.FilterParams filterParams = new Filter.FilterParams();
                filterParams.title = Helper.FEDILAB_MUTED_HASHTAGS;
                filterParams.filter_action = "hide";
                filterParams.context = new ArrayList<>();
                filterParams.context.add("home");
                filterParams.context.add("public");
                filterParams.context.add("thread");
                filterParams.context.add("account");
                FiltersVM filtersVM = new ViewModelProvider((ViewModelStoreOwner) context).get(FiltersVM.class);
                filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
                        .observe((LifecycleOwner) context, filter -> {
                            if (filter != null) {
                                MainActivity.mainFilters.add(filter);
                                addTagToFilter(context, tag, status, filter);
                            }
                        });
            } else {
                addTagToFilter(context, tag, status, fedilabFilter);
            }
            alertDialog.dismiss();
        });

    }
}
+4 −0
Original line number Diff line number Diff line
@@ -1541,6 +1541,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
                    chip.setEnsureMinTouchTargetSize(false);
                    chip.setText(tag);
                    chip.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
                    chip.setOnLongClickListener(v->{
                        SpannableHelper.longPressHashTags(context, statusToDeal, tag);
                        return true;
                    });
                    chip.setOnClickListener(v -> {
                        Intent intentTag = new Intent(context, HashTagActivity.class);
                        Bundle args = new Bundle();
+37 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="12dp">

    <com.google.android.material.button.MaterialButton
        android:id="@+id/follow_tags"
        style="@style/Widget.Material3.Button.TextButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/follow_tag"
        android:textAlignment="textStart"
        app:icon="@drawable/tag_follow" />

   <!-- <com.google.android.material.button.MaterialButton
        android:id="@+id/pin_tag"
        style="@style/Widget.Material3.Button.TextButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/pin_tag"
        android:textAlignment="textStart"
        app:icon="@drawable/tag_pin" /> -->

    <com.google.android.material.button.MaterialButton
        android:id="@+id/mute_tag"
        style="@style/Widget.Material3.Button.TextButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/mute_tag_action"
        android:textAlignment="textStart"
        app:icon="@drawable/tag_muted" />


</LinearLayout>
+2 −0
Original line number Diff line number Diff line
@@ -1905,8 +1905,10 @@
    <string name="set_language_picker_title">Languages in picker</string>
    <string name="set_language_picker">Allow to reduce the list of languages in the picker when composing a message.</string>
    <string name="action_followed_tag_empty">You don\'t follow any tags!</string>
    <string name="followed_tag_success">You now follow this tag!</string>
    <string name="action_unfollow_tag">Unfollow tag</string>
    <string name="action_unfollow_tag_confirm">Are you sure you want to unfollow this tag?</string>
    <string name="action_follow_tag_confirm">Are you sure you want to follow the tag %1$s??</string>
    <string name="unfollow">Unfollow</string>
    <string name="action_tag_follow">Follow a tag</string>
    <string name="write_the_tag_to_follow">Write the tag to follow</string>
+1 −0
Original line number Diff line number Diff line
Added:
- Quote support for Mastodon
- Long press on tags: Follow / Mute

Changed:
- Limit the number of highlighted hashtags at the bottom of messages