Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c22eca3 authored by Johannes Gallmann's avatar Johannes Gallmann Committed by Android (Google) Code Review
Browse files

Merge "Fix fragment back navigation in PreferenceActivity with predictive back" into main

parents 9890167f ecad8299
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -213,7 +213,10 @@ public abstract class PreferenceActivity extends ListActivity implements
    private int mPreferenceHeaderItemResId = 0;
    private boolean mPreferenceHeaderRemoveEmptyIcon = false;

    private boolean mIsBackCallbackRegistered = false;
    private final OnBackInvokedCallback mOnBackInvokedCallback = this::onBackInvoked;
    private final FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener =
            this::updateBackCallbackRegistrationState;

    /**
     * The starting request code given out to preference framework.
@@ -706,6 +709,7 @@ public abstract class PreferenceActivity extends ListActivity implements
            }
        }
        updateBackCallbackRegistrationState();
        getFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
    }

    @Override
@@ -715,17 +719,25 @@ public abstract class PreferenceActivity extends ListActivity implements

    private void updateBackCallbackRegistrationState() {
        if (!WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(this)) return;
        if (mCurHeader != null && mSinglePane && getFragmentManager().getBackStackEntryCount() == 0
                && getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT) == null) {
        if ((mCurHeader != null && getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT) == null
                && mSinglePane) || getFragmentManager().getBackStackEntryCount() != 0) {
            if (!mIsBackCallbackRegistered) {
                getOnBackInvokedDispatcher()
                        .registerOnBackInvokedCallback(PRIORITY_DEFAULT, mOnBackInvokedCallback);
        } else {
                mIsBackCallbackRegistered = true;
            }
        } else if (mIsBackCallbackRegistered) {
            getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mOnBackInvokedCallback);
            mIsBackCallbackRegistered = false;
        }
    }

    private void onBackInvoked() {
        if (mCurHeader != null && mSinglePane && getFragmentManager().getBackStackEntryCount() == 0
        if (WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(this)
                && getFragmentManager().getBackStackEntryCount() != 0) {
            getFragmentManager().popBackStackImmediate();
        } else if (mCurHeader != null && mSinglePane
                && getFragmentManager().getBackStackEntryCount() == 0
                && getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT) == null) {
            mCurHeader = null;

@@ -1012,6 +1024,7 @@ public abstract class PreferenceActivity extends ListActivity implements

    @Override
    protected void onDestroy() {
        getFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);
        mHandler.removeMessages(MSG_BIND_PREFERENCES);
        mHandler.removeMessages(MSG_BUILD_HEADERS);
        super.onDestroy();