From ebbd56e3bcf40a0d618983d131f412a4f45ab5cd Mon Sep 17 00:00:00 2001 From: FineFindus <63370021+FineFindus@users.noreply.github.com> Date: Mon, 4 Sep 2023 23:07:24 +0200 Subject: [PATCH] feat(search): show suicide help dialog (#767) * feat(search): show suicide help dialog * change wording, add helpline url, change behavior --------- Co-authored-by: sk --- .../android/GlobalUserPreferences.java | 3 + .../discover/SearchQueryFragment.java | 66 ++++++++++++++----- mastodon/src/main/res/values/strings_sk.xml | 6 ++ 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 200499599..22908509d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -60,6 +60,7 @@ public class GlobalUserPreferences{ public static boolean showNavigationLabels; public static boolean displayPronounsInTimelines, displayPronounsInThreads, displayPronounsInUserListings; public static boolean overlayMedia; + public static boolean showSuicideHelp; private static SharedPreferences getPrefs(){ return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); @@ -119,6 +120,7 @@ public class GlobalUserPreferences{ displayPronounsInThreads=prefs.getBoolean("displayPronounsInThreads", true); displayPronounsInUserListings=prefs.getBoolean("displayPronounsInUserListings", true); overlayMedia=prefs.getBoolean("overlayMedia", false); + showSuicideHelp=prefs.getBoolean("showSuicideHelp", true); if (prefs.contains("prefixRepliesWithRe")) { prefixReplies = prefs.getBoolean("prefixRepliesWithRe", false) @@ -177,6 +179,7 @@ public class GlobalUserPreferences{ .putBoolean("displayPronounsInThreads", displayPronounsInThreads) .putBoolean("displayPronounsInUserListings", displayPronounsInUserListings) .putBoolean("overlayMedia", overlayMedia) + .putBoolean("showSuicideHelp", showSuicideHelp) .apply(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchQueryFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchQueryFragment.java index 782cc6cbc..b9332ebf0 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchQueryFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchQueryFragment.java @@ -10,7 +10,6 @@ import android.graphics.Outline; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -26,7 +25,7 @@ import android.widget.TextView; import android.widget.Toast; import android.widget.Toolbar; -import org.joinmastodon.android.MainActivity; +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.search.GetSearchResults; import org.joinmastodon.android.api.session.AccountSessionManager; @@ -38,19 +37,16 @@ import org.joinmastodon.android.model.SearchResults; import org.joinmastodon.android.model.viewmodel.ListItem; import org.joinmastodon.android.model.viewmodel.SearchResultViewModel; import org.joinmastodon.android.ui.DividerItemDecoration; +import org.joinmastodon.android.ui.M3AlertDialogBuilder; import org.joinmastodon.android.ui.SearchViewHelper; import org.joinmastodon.android.ui.adapters.GenericListItemsAdapter; import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter; import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.viewholders.AccountViewHolder; import org.joinmastodon.android.ui.viewholders.SimpleListItemViewHolder; -import org.parceler.Parcels; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.List; -import java.util.function.BiConsumer; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -381,16 +377,54 @@ public class SearchQueryFragment extends MastodonRecyclerFragment{ + UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag.name, res.hashtag.following); + AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putRecentSearch(res); + }); } private boolean isInRecentMode(){ return TextUtils.isEmpty(currentQuery); } + private void wrapSuicideDialog(Runnable r){ + if(!GlobalUserPreferences.showSuicideHelp){ + r.run(); + return; + } + + String[] terms=getContext().getString(R.string.sk_suicide_search_terms).toLowerCase().split(","); + String query=currentQuery.trim().toLowerCase(); + boolean termMatches=false; + for(String term : terms){ + if(query.contains(term)){ + termMatches=true; + break; + } + } + + if(!termMatches){ + r.run(); + return; + } + + String url=getContext().getString(R.string.sk_suicide_helplines_url); + new M3AlertDialogBuilder(getActivity()) + .setTitle(R.string.sk_search_suicide_title) + .setMessage(R.string.sk_search_suicide_message) + .setNegativeButton(R.string.sk_do_not_show_again, (dialog, which)->{ + GlobalUserPreferences.showSuicideHelp = false; + GlobalUserPreferences.save(); + r.run(); + }) + .setNeutralButton(R.string.sk_search_suicide_hotlines, (dialog, which)->UiUtils.launchWebBrowser(getContext(), url)) + .setPositiveButton(R.string.ok, (dialog, which)->r.run()) + .setOnDismissListener((dialog)->{}) + .show(); + } + private void onSearchViewEnter(){ - deliverResult(currentQuery, null); + wrapSuicideDialog(()->deliverResult(currentQuery, null)); } private void onOpenURLClick(){ @@ -398,10 +432,12 @@ public class SearchQueryFragment extends MastodonRecyclerFragment{ + String q=searchViewHelper.getQuery(); + if(q.startsWith("#")) + q=q.substring(1); + UiUtils.openHashtagTimeline(getActivity(), accountID, q, null); + }); } private void onGoToAccountClick(){ @@ -422,11 +458,11 @@ public class SearchQueryFragment extends MastodonRecyclerFragmentdeliverResult(searchViewHelper.getQuery(), SearchResult.Type.STATUS)); } private void onGoToAccountSearchClick(){ - deliverResult(searchViewHelper.getQuery(), SearchResult.Type.ACCOUNT); + wrapSuicideDialog(()->deliverResult(searchViewHelper.getQuery(), SearchResult.Type.ACCOUNT)); } private void onClearRecentClick(){ diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 950285895..970baf128 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -374,6 +374,12 @@ 3 days 7 days You were mentioned by %s + Suicide + In case you’re in distress… + If you’re looking for a sign not to commit suicide, this is it. Please consider reaching out to a local suicide hotline if you’re in distress. + Find a helpline + Don’t show again + https://findahelpline.com post posts