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

Commit d8b47855 authored by Todd Kennedy's avatar Todd Kennedy Committed by Chris Banes
Browse files

save "retain loader" state DO NOT MERGE

We cannot pull the "retain loader" state from the Activity; an Activity may
not always be hosting a Fragment. Instead, save the "retain loader" state
inside the individual fragments.

Bug: 23838271
Change-Id: I8358183a7689b5a571ea7be03d769186b2812600
(cherry picked from commit c5ac16f5)
parent 5695a7f6
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -460,6 +460,9 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
    // If set this fragment is being retained across the current config change.
    boolean mRetaining;

    // If set this fragment's loaders are being retained across the current config change.
    boolean mRetainLoader;

    // If set this fragment has menu items to contribute.
    boolean mHasMenu;

@@ -2401,7 +2404,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
                mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
            }
            if (mLoaderManager != null) {
                if (mRetaining) {
                if (mRetainLoader) {
                    mLoaderManager.doRetain();
                } else {
                    mLoaderManager.doStop();
+1 −0
Original line number Diff line number Diff line
@@ -341,6 +341,7 @@ public class FragmentController {
     */
    public void doLoaderStop(boolean retain) {
        mHost.doLoaderStop(retain);
        mHost.mFragmentManager.setRetainLoader(retain);
    }

    /**
+11 −0
Original line number Diff line number Diff line
@@ -869,6 +869,17 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
        }
    }

    void setRetainLoader(boolean retain) {
        if (mActive != null) {
            for (int i=0; i<mActive.size(); i++) {
                Fragment f = mActive.get(i);
                if (f != null) {
                    f.mRetainLoader = retain;
                }
            }
        }
    }

    void moveToState(Fragment f, int newState, int transit, int transitionStyle,
            boolean keepActive) {
        if (DEBUG && false) Log.v(TAG, "moveToState: " + f