diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 390368df70..4651bfb3c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -101,6 +101,7 @@ android:supportsRtl="true" android:resizeableActivity="true" android:fullBackupOnly="false" + android:enableOnBackInvokedCallback="false" android:allowBackup="true" android:backupAgent=".absbackup.SignalBackupAgent" android:theme="@style/TextSecure.LightTheme" @@ -1069,6 +1070,7 @@ android:exported="false"/> builder.withDistributionType(distributionType) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index edcc8c8ebc..1d5a7c7856 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -244,6 +244,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode private ConversationListTabsViewModel conversationListTabsViewModel; private ContactSearchMediator contactSearchMediator; private MainToolbarViewModel mainToolbarViewModel; + private ChatListBackHandler chatListBackHandler; private BannerManager bannerManager; @@ -428,16 +429,8 @@ public class ConversationListFragment extends MainFragment implements ActionMode RatingManager.showRatingDialogIfNecessary(requireContext()); - requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { - @Override - public void handleOnBackPressed() { - if (!closeSearchIfOpen()) { - if (!NavHostFragment.findNavController(ConversationListFragment.this).popBackStack()) { - requireActivity().finish(); - } - } - } - }); + chatListBackHandler = new ChatListBackHandler(false); + requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), chatListBackHandler); conversationListTabsViewModel = new ViewModelProvider(requireActivity()).get(ConversationListTabsViewModel.class); @@ -658,15 +651,14 @@ public class ConversationListFragment extends MainFragment implements ActionMode return mainToolbarViewModel.getState().getValue().getMode() == MainToolbarMode.SEARCH; } - private boolean closeSearchIfOpen() { + private void closeSearchIfOpen() { if (isSearchOpen()) { setAdapter(defaultAdapter); fadeInButtonsAndMegaphone(250); mainToolbarViewModel.setToolbarMode(MainToolbarMode.FULL); + chatListBackHandler.setEnabled(false); return true; } - - return false; } @Override @@ -1690,6 +1682,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode } private void onSearchOpen() { + chatListBackHandler.setEnabled(true); fadeOutButtonsAndMegaphone(250); } @@ -1697,6 +1690,8 @@ public class ConversationListFragment extends MainFragment implements ActionMode if (list != null) { setAdapter(defaultAdapter); } + + chatListBackHandler.setEnabled(false); fadeInButtonsAndMegaphone(250); } @@ -1970,6 +1965,18 @@ public class ConversationListFragment extends MainFragment implements ActionMode } } + private class ChatListBackHandler extends OnBackPressedCallback { + + public ChatListBackHandler(boolean enabled) { + super(enabled); + } + + @Override + public void handleOnBackPressed() { + closeSearchIfOpen(); + } + } + public interface Callback extends Material3OnScrollHelperBinder { void updateProxyStatus(@NonNull WebSocketConnectionState state);