diff options
author | Todd Kennedy <toddke@google.com> | 2015-05-01 01:32:25 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-05-01 01:32:25 +0000 |
commit | 6b379c8a3421df32ca1b70a3cb12a095fe443fef (patch) | |
tree | c66308b15d25d6f9acdd6829309ddfa5766a5592 /core/java/android/app/Activity.java | |
parent | 7a038337564a360c52a6b66f573687dc0df3d302 (diff) | |
parent | 9c14b3ab0d6e42031d0465114a979b644c6890d2 (diff) | |
download | frameworks_base-6b379c8a3421df32ca1b70a3cb12a095fe443fef.zip frameworks_base-6b379c8a3421df32ca1b70a3cb12a095fe443fef.tar.gz frameworks_base-6b379c8a3421df32ca1b70a3cb12a095fe443fef.tar.bz2 |
am 9c14b3ab: am c7e9a17a: am 10a54a79: Merge "Remove dependency upon FragmentActivity" into mnc-dev
* commit '9c14b3ab0d6e42031d0465114a979b644c6890d2':
Remove dependency upon FragmentActivity
Diffstat (limited to 'core/java/android/app/Activity.java')
-rw-r--r-- | core/java/android/app/Activity.java | 215 |
1 files changed, 91 insertions, 124 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index f70f07b..afbddd9 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -109,6 +109,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * An activity is a single, focused thing that the user can do. Almost all @@ -707,8 +708,6 @@ public class Activity extends ContextThemeWrapper /*package*/ ActivityThread mMainThread; Activity mParent; boolean mCalled; - boolean mCheckedForLoaderManager; - boolean mLoadersStarted; /*package*/ boolean mResumed; private boolean mStopped; boolean mFinished; @@ -727,8 +726,8 @@ public class Activity extends ContextThemeWrapper static final class NonConfigurationInstances { Object activity; HashMap<String, Object> children; - ArrayList<Fragment> fragments; - ArrayMap<String, LoaderManagerImpl> loaders; + List<Fragment> fragments; + ArrayMap<String, LoaderManager> loaders; VoiceInteractor voiceInteractor; } /* package */ NonConfigurationInstances mLastNonConfigurationInstances; @@ -748,26 +747,13 @@ public class Activity extends ContextThemeWrapper private CharSequence mTitle; private int mTitleColor = 0; - final FragmentManagerImpl mFragments = new FragmentManagerImpl(); - final FragmentContainer mContainer = new FragmentContainer() { - @Override - @Nullable - public View findViewById(int id) { - return Activity.this.findViewById(id); - } - @Override - public boolean hasView() { - Window window = Activity.this.getWindow(); - return (window != null && window.peekDecorView() != null); - } - }; + // we must have a handler before the FragmentController is constructed + final Handler mHandler = new Handler(); + final FragmentController mFragments = FragmentController.createController(new HostCallbacks()); // Most recent call to requestVisibleBehind(). boolean mVisibleBehind; - ArrayMap<String, LoaderManagerImpl> mAllLoaderManagers; - LoaderManagerImpl mLoaderManager; - private static final class ManagedCursor { ManagedCursor(Cursor cursor) { mCursor = cursor; @@ -803,7 +789,6 @@ public class Activity extends ContextThemeWrapper private final Object mInstanceTracker = StrictMode.trackActivity(this); private Thread mUiThread; - final Handler mHandler = new Handler(); ActivityTransitionState mActivityTransitionState = new ActivityTransitionState(); SharedElementCallback mEnterTransitionListener = SharedElementCallback.NULL_CALLBACK; @@ -864,28 +849,7 @@ public class Activity extends ContextThemeWrapper * Return the LoaderManager for this activity, creating it if needed. */ public LoaderManager getLoaderManager() { - if (mLoaderManager != null) { - return mLoaderManager; - } - mCheckedForLoaderManager = true; - mLoaderManager = getLoaderManager("(root)", mLoadersStarted, true); - return mLoaderManager; - } - - LoaderManagerImpl getLoaderManager(String who, boolean started, boolean create) { - if (mAllLoaderManagers == null) { - mAllLoaderManagers = new ArrayMap<String, LoaderManagerImpl>(); - } - LoaderManagerImpl lm = mAllLoaderManagers.get(who); - if (lm == null) { - if (create) { - lm = new LoaderManagerImpl(who, this, started); - mAllLoaderManagers.put(who, lm); - } - } else { - lm.updateActivity(this); - } - return lm; + return mFragments.getLoaderManager(); } /** @@ -933,7 +897,7 @@ public class Activity extends ContextThemeWrapper protected void onCreate(@Nullable Bundle savedInstanceState) { if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState); if (mLastNonConfigurationInstances != null) { - mAllLoaderManagers = mLastNonConfigurationInstances.loaders; + mFragments.restoreLoaderNonConfig(mLastNonConfigurationInstances.loaders); } if (mActivityInfo.parentActivityName != null) { if (mActionBar == null) { @@ -1174,15 +1138,7 @@ public class Activity extends ContextThemeWrapper if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStart " + this); mCalled = true; - if (!mLoadersStarted) { - mLoadersStarted = true; - if (mLoaderManager != null) { - mLoaderManager.doStart(); - } else if (!mCheckedForLoaderManager) { - mLoaderManager = getLoaderManager("(root)", mLoadersStarted, false); - } - mCheckedForLoaderManager = true; - } + mFragments.doLoaderStart(); getApplication().dispatchActivityStarted(this); } @@ -1875,27 +1831,9 @@ public class Activity extends ContextThemeWrapper NonConfigurationInstances retainNonConfigurationInstances() { Object activity = onRetainNonConfigurationInstance(); HashMap<String, Object> children = onRetainNonConfigurationChildInstances(); - ArrayList<Fragment> fragments = mFragments.retainNonConfig(); - boolean retainLoaders = false; - if (mAllLoaderManagers != null) { - // prune out any loader managers that were already stopped and so - // have nothing useful to retain. - final int N = mAllLoaderManagers.size(); - LoaderManagerImpl loaders[] = new LoaderManagerImpl[N]; - for (int i=N-1; i>=0; i--) { - loaders[i] = mAllLoaderManagers.valueAt(i); - } - for (int i=0; i<N; i++) { - LoaderManagerImpl lm = loaders[i]; - if (lm.mRetaining) { - retainLoaders = true; - } else { - lm.doDestroy(); - mAllLoaderManagers.remove(lm.mWho); - } - } - } - if (activity == null && children == null && fragments == null && !retainLoaders + List<Fragment> fragments = mFragments.retainNonConfig(); + ArrayMap<String, LoaderManager> loaders = mFragments.retainLoaderNonConfig(); + if (activity == null && children == null && fragments == null && loaders == null && mVoiceInteractor == null) { return null; } @@ -1904,7 +1842,7 @@ public class Activity extends ContextThemeWrapper nci.activity = activity; nci.children = children; nci.fragments = fragments; - nci.loaders = mAllLoaderManagers; + nci.loaders = loaders; nci.voiceInteractor = mVoiceInteractor; return nci; } @@ -1926,18 +1864,7 @@ public class Activity extends ContextThemeWrapper * with this activity. */ public FragmentManager getFragmentManager() { - return mFragments; - } - - void invalidateFragment(String who) { - //Log.v(TAG, "invalidateFragmentIndex: index=" + index); - if (mAllLoaderManagers != null) { - LoaderManagerImpl lm = mAllLoaderManagers.get(who); - if (lm != null && !lm.mRetaining) { - lm.doDestroy(); - mAllLoaderManagers.remove(who); - } - } + return mFragments.getFragmentManager(); } /** @@ -2520,7 +2447,7 @@ public class Activity extends ContextThemeWrapper return; } - if (!mFragments.popBackStackImmediate()) { + if (!mFragments.getFragmentManager().popBackStackImmediate()) { finishAfterTransition(); } } @@ -5520,21 +5447,13 @@ public class Activity extends ContextThemeWrapper writer.print(mResumed); writer.print(" mStopped="); writer.print(mStopped); writer.print(" mFinished="); writer.println(mFinished); - writer.print(innerPrefix); writer.print("mLoadersStarted="); - writer.println(mLoadersStarted); writer.print(innerPrefix); writer.print("mChangingConfigurations="); writer.println(mChangingConfigurations); writer.print(innerPrefix); writer.print("mCurrentConfig="); writer.println(mCurrentConfig); - if (mLoaderManager != null) { - writer.print(prefix); writer.print("Loader Manager "); - writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); - writer.println(":"); - mLoaderManager.dump(prefix + " ", fd, writer, args); - } - - mFragments.dump(prefix, fd, writer, args); + mFragments.dumpLoaders(innerPrefix, fd, writer, args); + mFragments.getFragmentManager().dump(innerPrefix, fd, writer, args); if (getWindow() != null && getWindow().peekDecorView() != null && @@ -6130,7 +6049,7 @@ public class Activity extends ContextThemeWrapper Configuration config, String referrer, IVoiceInteractor voiceInteractor) { attachBaseContext(context); - mFragments.attachActivity(this, mContainer, null); + mFragments.attachHost(null /*parent*/); mWindow = new PhoneWindow(this); mWindow.setCallback(this); @@ -6213,18 +6132,7 @@ public class Activity extends ContextThemeWrapper " did not call through to super.onStart()"); } mFragments.dispatchStart(); - if (mAllLoaderManagers != null) { - final int N = mAllLoaderManagers.size(); - LoaderManagerImpl loaders[] = new LoaderManagerImpl[N]; - for (int i=N-1; i>=0; i--) { - loaders[i] = mAllLoaderManagers.valueAt(i); - } - for (int i=0; i<N; i++) { - LoaderManagerImpl lm = loaders[i]; - lm.finishRetain(); - lm.doReportStart(); - } - } + mFragments.reportLoaderStart(); mActivityTransitionState.enterReady(this); } @@ -6330,16 +6238,7 @@ public class Activity extends ContextThemeWrapper final void performStop() { mDoReportFullyDrawn = false; - if (mLoadersStarted) { - mLoadersStarted = false; - if (mLoaderManager != null) { - if (!mChangingConfigurations) { - mLoaderManager.doStop(); - } else { - mLoaderManager.doRetain(); - } - } - } + mFragments.doLoaderStop(mChangingConfigurations /*retain*/); if (!mStopped) { if (mWindow != null) { @@ -6381,9 +6280,7 @@ public class Activity extends ContextThemeWrapper mWindow.destroy(); mFragments.dispatchDestroy(); onDestroy(); - if (mLoaderManager != null) { - mLoaderManager.doDestroy(); - } + mFragments.doLoaderDestroy(); if (mVoiceInteractor != null) { mVoiceInteractor.detachActivity(); } @@ -6543,4 +6440,74 @@ public class Activity extends ContextThemeWrapper return intent != null && PackageManager.ACTION_REQUEST_PERMISSIONS.equals(intent.getAction()); } + + class HostCallbacks extends FragmentHostCallback<Activity> { + public HostCallbacks() { + super(Activity.this /*activity*/); + } + + @Override + public void onDump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + Activity.this.dump(prefix, fd, writer, args); + } + + @Override + public boolean onShouldSaveFragmentState(Fragment fragment) { + return !isFinishing(); + } + + @Override + public LayoutInflater onGetLayoutInflater() { + final LayoutInflater result = Activity.this.getLayoutInflater(); + if (onUseFragmentManagerInflaterFactory()) { + return result.cloneInContext(Activity.this); + } + return result; + } + + @Override + public boolean onUseFragmentManagerInflaterFactory() { + // Newer platform versions use the child fragment manager's LayoutInflaterFactory. + return getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP; + } + + @Override + public Activity onGetHost() { + return Activity.this; + } + + @Override + public void onInvalidateOptionsMenu() { + Activity.this.invalidateOptionsMenu(); + } + + @Override + public void onStartActivityFromFragment(Fragment fragment, Intent intent, int requestCode, + Bundle options) { + Activity.this.startActivityFromFragment(fragment, intent, requestCode, options); + } + + @Override + public boolean onHasWindowAnimations() { + return getWindow() != null; + } + + @Override + public int onGetWindowAnimations() { + final Window w = getWindow(); + return (w == null) ? 0 : w.getAttributes().windowAnimations; + } + + @Nullable + @Override + public View onFindViewById(int id) { + return Activity.this.findViewById(id); + } + + @Override + public boolean onHasView() { + final Window w = getWindow(); + return (w != null && w.peekDecorView() != null); + } + } } |