diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 5b04a6c8b..fc71858ea 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -66,6 +66,7 @@ public class GlobalUserPreferences{ public static boolean showDividers; public static boolean relocatePublishButton; public static boolean defaultToUnlistedReplies; + public static boolean doubleTapToSearch; public static boolean doubleTapToSwipe; public static boolean confirmBeforeReblog; public static boolean hapticFeedback; @@ -140,6 +141,7 @@ public class GlobalUserPreferences{ relocatePublishButton=prefs.getBoolean("relocatePublishButton", true); compactReblogReplyLine=prefs.getBoolean("compactReblogReplyLine", true); defaultToUnlistedReplies=prefs.getBoolean("defaultToUnlistedReplies", false); + doubleTapToSearch =prefs.getBoolean("doubleTapToSearch", true); doubleTapToSwipe =prefs.getBoolean("doubleTapToSwipe", true); replyLineAboveHeader=prefs.getBoolean("replyLineAboveHeader", true); confirmBeforeReblog=prefs.getBoolean("confirmBeforeReblog", false); @@ -216,6 +218,7 @@ public class GlobalUserPreferences{ // MOSHIDON .putBoolean("defaultToUnlistedReplies", defaultToUnlistedReplies) + .putBoolean("doubleTapToSearch", doubleTapToSearch) .putBoolean("doubleTapToSwipe", doubleTapToSwipe) .putBoolean("compactReblogReplyLine", compactReblogReplyLine) .putBoolean("replyLineAboveHeader", replyLineAboveHeader) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java index 08a942a76..d2f7eb786 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java @@ -269,7 +269,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene private void onTabSelected(@IdRes int tab){ Fragment newFragment=fragmentForTab(tab); if(tab==currentTab){ - if (tab == R.id.tab_search) + if (tab == R.id.tab_search && GlobalUserPreferences.doubleTapToSearch) discoverFragment.openSearch(); else if(newFragment instanceof ScrollableToTop scrollable) scrollable.scrollToTop(); @@ -309,12 +309,12 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene return true; } if(tab==R.id.tab_search){ - int previousTab = currentTab; +// int previousTab = currentTab; onTabSelected(R.id.tab_search); tabBar.selectTab(R.id.tab_search); - if(previousTab != R.id.tab_search) + if(!GlobalUserPreferences.doubleTapToSearch) discoverFragment.openSearch(); return true; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java index 3d578d0fd..6cf748deb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java @@ -12,6 +12,7 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; +import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.IsOnTop; import org.joinmastodon.android.fragments.ScrollableToTop; @@ -208,6 +209,11 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, @Override public void scrollToTop(){ if(!searchActive){ + if (((IsOnTop)getFragmentForPage(pager.getCurrentItem())).isOnTop() && GlobalUserPreferences.doubleTapToSwipe){ + int nextPage=(pager.getCurrentItem()+1)%tabViews.length; + pager.setCurrentItem(nextPage, true); + return; + } ((ScrollableToTop)getFragmentForPage(pager.getCurrentItem())).scrollToTop(); }else{ searchFragment.scrollToTop(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java index 7c0917f57..9b9b3c4e5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java @@ -11,6 +11,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.trends.GetTrendingLinks; +import org.joinmastodon.android.fragments.IsOnTop; import org.joinmastodon.android.fragments.ScrollableToTop; import org.joinmastodon.android.model.Card; import org.joinmastodon.android.model.viewmodel.CardViewModel; @@ -43,7 +44,7 @@ import me.grishka.appkit.utils.SingleViewRecyclerAdapter; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.UsableRecyclerView; -public class DiscoverNewsFragment extends BaseRecyclerFragment implements ScrollableToTop{ +public class DiscoverNewsFragment extends BaseRecyclerFragment implements ScrollableToTop, IsOnTop{ private String accountID; private DiscoverInfoBannerHelper bannerHelper; private MergeRecyclerAdapter mergeAdapter; @@ -111,6 +112,11 @@ public class DiscoverNewsFragment extends BaseRecyclerFragment im smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isOnTop(){ + return isRecyclerViewOnTop(list); + } + private class LinksAdapter extends UsableRecyclerView.Adapter implements ImageLoaderRecyclerAdapter{ private final List data; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java index f9c34a65b..26b9a8439 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/TrendingHashtagsFragment.java @@ -7,6 +7,7 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.trends.GetTrendingHashtags; +import org.joinmastodon.android.fragments.IsOnTop; import org.joinmastodon.android.fragments.ScrollableToTop; import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.ui.DividerItemDecoration; @@ -23,7 +24,7 @@ import me.grishka.appkit.fragments.BaseRecyclerFragment; import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.views.UsableRecyclerView; -public class TrendingHashtagsFragment extends BaseRecyclerFragment implements ScrollableToTop{ +public class TrendingHashtagsFragment extends BaseRecyclerFragment implements ScrollableToTop, IsOnTop{ private String accountID; public TrendingHashtagsFragment(){ @@ -58,6 +59,11 @@ public class TrendingHashtagsFragment extends BaseRecyclerFragment impl smoothScrollRecyclerViewToTop(list); } + @Override + public boolean isOnTop(){ + return isRecyclerViewOnTop(list); + } + private class HashtagsAdapter extends RecyclerView.Adapter{ @NonNull @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java index 5c3d20805..212ce4e18 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDisplayFragment.java @@ -43,7 +43,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ private CheckableListItem pronounsInUserListingsItem, pronounsInTimelinesItem, pronounsInThreadsItem; // MOSHIDON - private CheckableListItem enableDoubleTapToSwipeItem, relocatePublishButtonItem, showPostDividersItem; + private CheckableListItem enableDoubleTapToSwipeItem, relocatePublishButtonItem, showPostDividersItem, enableDoubleTapToSearchItem; private AccountLocalPreferences lp; @@ -66,6 +66,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ emojiInNamesItem=new CheckableListItem<>(R.string.settings_show_emoji_in_names, 0, CheckableListItem.Style.SWITCH, lp.customEmojiInNames, R.drawable.ic_fluent_emoji_24_regular, ()->toggleCheckableItem(emojiInNamesItem)), marqueeItem=new CheckableListItem<>(R.string.sk_settings_enable_marquee, R.string.mo_setting_marquee_summary, CheckableListItem.Style.SWITCH, GlobalUserPreferences.toolbarMarquee, R.drawable.ic_fluent_text_more_24_regular, ()->toggleCheckableItem(marqueeItem)), reduceMotionItem=new CheckableListItem<>(R.string.sk_settings_reduce_motion, R.string.mo_setting_reduced_motion_summary, CheckableListItem.Style.SWITCH, GlobalUserPreferences.reduceMotion, R.drawable.ic_fluent_star_emphasis_24_regular, ()->toggleCheckableItem(reduceMotionItem)), + enableDoubleTapToSearchItem=new CheckableListItem<>(R.string.mo_double_tap_to_search, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.doubleTapToSearch, R.drawable.ic_fluent_search_24_regular, ()->toggleCheckableItem(enableDoubleTapToSearchItem)), disableSwipeItem=new CheckableListItem<>(R.string.sk_settings_tabs_disable_swipe, R.string.mo_setting_disable_swipe_summary, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableSwipe, R.drawable.ic_fluent_swipe_right_24_regular, ()->toggleCheckableItem(disableSwipeItem)), enableDoubleTapToSwipeItem=new CheckableListItem<>(R.string.mo_double_tap_to_swipe_between_tabs, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.doubleTapToSwipe, R.drawable.ic_fluent_double_tap_swipe_right_24_regular, ()->toggleCheckableItem(enableDoubleTapToSwipeItem)), altIndicatorItem=new CheckableListItem<>(R.string.sk_settings_show_alt_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showAltIndicator, R.drawable.ic_fluent_scan_text_24_regular, ()->toggleCheckableItem(altIndicatorItem)), @@ -114,6 +115,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment{ GlobalUserPreferences.relocatePublishButton=relocatePublishButtonItem.checked; GlobalUserPreferences.reduceMotion=reduceMotionItem.checked; GlobalUserPreferences.disableSwipe=disableSwipeItem.checked; + GlobalUserPreferences.doubleTapToSearch=enableDoubleTapToSearchItem.checked; GlobalUserPreferences.doubleTapToSwipe=enableDoubleTapToSwipeItem.checked; GlobalUserPreferences.showAltIndicator=altIndicatorItem.checked; GlobalUserPreferences.showNoAltIndicator=noAltIndicatorItem.checked; diff --git a/mastodon/src/main/res/values/strings_mo.xml b/mastodon/src/main/res/values/strings_mo.xml index 0b633b015..3aa112216 100644 --- a/mastodon/src/main/res/values/strings_mo.xml +++ b/mastodon/src/main/res/values/strings_mo.xml @@ -87,6 +87,7 @@ Notification Audience Show media posts with missing alt text + Double tap to open search Double tap to swipe between tabs Haptic feedback Swap bookmark with reblog action