Fixed back pressed callback ordering

This commit is contained in:
M66B
2022-06-15 16:30:50 +02:00
parent d494c31e3c
commit 025803894d
7 changed files with 26 additions and 8 deletions

View File

@@ -22,7 +22,6 @@ package eu.faircode.email;
import static android.app.ActionBar.DISPLAY_SHOW_CUSTOM;
import static android.app.Activity.RESULT_OK;
import android.app.Activity;
import android.app.RecoverableSecurityException;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -37,7 +36,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -48,6 +46,7 @@ import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
@@ -59,6 +58,8 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentResultListener;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import java.io.File;
@@ -420,6 +421,23 @@ public class FragmentBase extends Fragment {
}
}
protected void setBackPressedCallback(OnBackPressedCallback backPressedCallback) {
backPressedCallback.setEnabled(false);
FragmentActivity activity = getActivity();
if (activity == null)
return;
activity.getOnBackPressedDispatcher().addCallback(backPressedCallback);
getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
public void onAny() {
Lifecycle.State state = getViewLifecycleOwner().getLifecycle().getCurrentState();
backPressedCallback.setEnabled(state.isAtLeast(Lifecycle.State.STARTED));
if (state.isAtLeast(Lifecycle.State.DESTROYED))
backPressedCallback.remove();
}
});
}
private boolean isPane() {
Bundle args = getArguments();
return (args != null && args.getBoolean("pane"));