Change summary
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 28
src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java | 6
2 files changed, 34 insertions(+)
Detailed changes
@@ -53,6 +53,7 @@ import android.widget.PopupMenu;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
+import androidx.activity.OnBackPressedCallback;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -575,6 +576,16 @@ public class ConversationFragment extends XmppFragment
}
}
};
+ private OnBackPressedCallback backPressedLeaveSingleThread = new OnBackPressedCallback(false) {
+ @Override
+ public void handleOnBackPressed() {
+ conversation.setLockThread(false);
+ this.setEnabled(false);
+ conversation.setUserSelectedThread(false);
+ refresh();
+ updateThreadFromLastMessage();
+ }
+ };
private int completionIndex = 0;
private int lastCompletionLength = 0;
private String incomplete;
@@ -1153,6 +1164,7 @@ public class ConversationFragment extends XmppFragment
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
+ activity.getOnBackPressedDispatcher().addCallback(backPressedLeaveSingleThread);
}
@Override
@@ -1261,6 +1273,7 @@ public class ConversationFragment extends XmppFragment
binding.threadIdenticonLayout.setOnClickListener(v -> {
boolean wasLocked = conversation.getLockThread();
conversation.setLockThread(false);
+ backPressedLeaveSingleThread.setEnabled(false);
if (wasLocked) {
conversation.setUserSelectedThread(false);
refresh();
@@ -1275,6 +1288,7 @@ public class ConversationFragment extends XmppFragment
binding.threadIdenticonLayout.setOnLongClickListener(v -> {
boolean wasLocked = conversation.getLockThread();
conversation.setLockThread(false);
+ backPressedLeaveSingleThread.setEnabled(false);
setThread(null);
conversation.setUserSelectedThread(true);
if (wasLocked) refresh();
@@ -1527,6 +1541,7 @@ public class ConversationFragment extends XmppFragment
return true;
case R.id.only_this_thread:
conversation.setLockThread(true);
+ backPressedLeaveSingleThread.setEnabled(true);
setThread(selectedMessage.getThread());
refresh();
return true;
@@ -1610,6 +1625,19 @@ public class ConversationFragment extends XmppFragment
return super.onOptionsItemSelected(item);
}
+ public boolean onBackPressed() {
+ boolean wasLocked = conversation.getLockThread();
+ conversation.setLockThread(false);
+ backPressedLeaveSingleThread.setEnabled(false);
+ if (wasLocked) {
+ conversation.setUserSelectedThread(false);
+ refresh();
+ updateThreadFromLastMessage();
+ return true;
+ }
+ return false;
+ }
+
private void startSearch() {
final Intent intent = new Intent(getActivity(), SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_CONVERSATION_UUID, conversation.getUuid());
@@ -492,6 +492,12 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
switch (item.getItemId()) {
case android.R.id.home:
FragmentManager fm = getFragmentManager();
+ Fragment f = fm.getFragments().get(fm.getFragments().size() - 1);
+ if (f != null && f instanceof ConversationFragment) {
+ if (((ConversationFragment) f).onBackPressed()) {
+ return true;
+ }
+ }
if (fm.getBackStackEntryCount() > 0) {
try {
fm.popBackStack();