mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2025-09-15 08:20:18 +03:00
Long press on tags: Follow / Mute
This commit is contained in:
parent
96ed973163
commit
bb500d04a6
5 changed files with 109 additions and 29 deletions
|
@ -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();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
app/src/main/res/layouts/mastodon/layout/popup_hashtags.xml
Normal file
37
app/src/main/res/layouts/mastodon/layout/popup_hashtags.xml
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?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>
|
|
@ -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,5 +1,6 @@
|
|||
Added:
|
||||
- Quote support for Mastodon
|
||||
- Long press on tags: Follow / Mute
|
||||
|
||||
Changed:
|
||||
- Limit the number of highlighted hashtags at the bottom of messages
|
||||
|
|
Loading…
Reference in a new issue