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.MySuperGrammerLocator;
|
||||||
import app.fedilab.android.R;
|
import app.fedilab.android.R;
|
||||||
import app.fedilab.android.activities.MainActivity;
|
import app.fedilab.android.activities.MainActivity;
|
||||||
|
import app.fedilab.android.databinding.PopupHashtagsBinding;
|
||||||
import app.fedilab.android.databinding.PopupLinksBinding;
|
import app.fedilab.android.databinding.PopupLinksBinding;
|
||||||
import app.fedilab.android.mastodon.activities.ContextActivity;
|
import app.fedilab.android.mastodon.activities.ContextActivity;
|
||||||
import app.fedilab.android.mastodon.activities.HashTagActivity;
|
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.Filter;
|
||||||
import app.fedilab.android.mastodon.client.entities.api.Mention;
|
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.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.CachedBundle;
|
||||||
import app.fedilab.android.mastodon.client.entities.app.MarkdownConverter;
|
import app.fedilab.android.mastodon.client.entities.app.MarkdownConverter;
|
||||||
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
|
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
|
||||||
import app.fedilab.android.mastodon.viewmodel.mastodon.FiltersVM;
|
import app.fedilab.android.mastodon.viewmodel.mastodon.FiltersVM;
|
||||||
|
import app.fedilab.android.mastodon.viewmodel.mastodon.TagVM;
|
||||||
import es.dmoral.toasty.Toasty;
|
import es.dmoral.toasty.Toasty;
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
|
@ -276,35 +279,7 @@ public class SpannableHelper {
|
||||||
if (!tag.startsWith("#")) {
|
if (!tag.startsWith("#")) {
|
||||||
tag = "#" + tag;
|
tag = "#" + tag;
|
||||||
}
|
}
|
||||||
Filter fedilabFilter = null;
|
longPressHashTags(context, status, tag);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
public static void addTagToFilter(Context context, String tag, Status status, Filter filter) {
|
||||||
for (Filter.KeywordsAttributes keywords : filter.keywords) {
|
for (Filter.KeywordsAttributes keywords : filter.keywords) {
|
||||||
if (keywords.keyword.equalsIgnoreCase(tag)) {
|
if (keywords.keyword.equalsIgnoreCase(tag)) {
|
||||||
|
@ -1047,4 +1033,54 @@ public class SpannableHelper {
|
||||||
|
|
||||||
return trimSpannable(new SpannableStringBuilder(content));
|
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.setEnsureMinTouchTargetSize(false);
|
||||||
chip.setText(tag);
|
chip.setText(tag);
|
||||||
chip.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
|
chip.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
|
||||||
|
chip.setOnLongClickListener(v->{
|
||||||
|
SpannableHelper.longPressHashTags(context, statusToDeal, tag);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
chip.setOnClickListener(v -> {
|
chip.setOnClickListener(v -> {
|
||||||
Intent intentTag = new Intent(context, HashTagActivity.class);
|
Intent intentTag = new Intent(context, HashTagActivity.class);
|
||||||
Bundle args = new Bundle();
|
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_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="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="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">Unfollow tag</string>
|
||||||
<string name="action_unfollow_tag_confirm">Are you sure you want to unfollow this 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="unfollow">Unfollow</string>
|
||||||
<string name="action_tag_follow">Follow a tag</string>
|
<string name="action_tag_follow">Follow a tag</string>
|
||||||
<string name="write_the_tag_to_follow">Write the tag to follow</string>
|
<string name="write_the_tag_to_follow">Write the tag to follow</string>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
Added:
|
Added:
|
||||||
- Quote support for Mastodon
|
- Quote support for Mastodon
|
||||||
|
- Long press on tags: Follow / Mute
|
||||||
|
|
||||||
Changed:
|
Changed:
|
||||||
- Limit the number of highlighted hashtags at the bottom of messages
|
- Limit the number of highlighted hashtags at the bottom of messages
|
||||||
|
|
Loading…
Reference in a new issue