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

Commit ad968cf4 authored by Todd Kennedy's avatar Todd Kennedy Committed by Android (Google) Code Review
Browse files

Merge "Retain fragment loaders" into mnc-dr-dev

parents 4ecfbcfd 2ee19c7f
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -460,9 +460,6 @@ 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;

@@ -2404,7 +2401,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
                mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
            }
            if (mLoaderManager != null) {
                if (mRetainLoader) {
                if (mHost.getRetainLoaders()) {
                    mLoaderManager.doRetain();
                } else {
                    mLoaderManager.doStop();
+0 −1
Original line number Diff line number Diff line
@@ -341,7 +341,6 @@ 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
@@ -42,9 +42,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
    private final Handler mHandler;
    final int mWindowAnimations;
    final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
    /** The loader managers for individual fragments [i.e. Fragment#getLoaderManager()] */
    private ArrayMap<String, LoaderManager> mAllLoaderManagers;
    /** Whether or not fragment loaders should retain their state */
    private boolean mRetainLoaders;
    /** The loader manger for the fragment host [i.e. Activity#getLoaderManager()] */
    private LoaderManagerImpl mLoaderManager;
    private boolean mCheckedForLoaderManager;
    /** Whether or not the fragment host loader manager was started */
    private boolean mLoadersStarted;

    public FragmentHostCallback(Context context, Handler handler, int windowAnimations) {
@@ -166,6 +171,10 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
        return true;
    }

    boolean getRetainLoaders() {
        return mRetainLoaders;
    }

    Activity getActivity() {
        return mActivity;
    }
@@ -217,6 +226,8 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
    }

    void doLoaderStop(boolean retain) {
        mRetainLoaders = retain;

        if (mLoaderManager == null) {
            return;
        }
+0 −11
Original line number Diff line number Diff line
@@ -869,17 +869,6 @@ 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