diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index 3b0be575140a2..44d7136258ae0 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -793,7 +793,7 @@ public abstract class BaseActivity extends Activity private static final class HandleRootsChangedTask extends PairedTask { - DocumentInfo mDownloadsDocument; + DocumentInfo mDefaultRootDocument; public HandleRootsChangedTask(BaseActivity activity) { super(activity); @@ -805,28 +805,36 @@ public abstract class BaseActivity extends Activity final RootInfo currentRoot = roots[0]; final Collection cachedRoots = mOwner.mRoots.getRootsBlocking(); - RootInfo downloadsRoot = null; for (final RootInfo root : cachedRoots) { - if (root.isDownloads()) { - downloadsRoot = root; - } if (root.getUri().equals(currentRoot.getUri())) { // We don't need to change the current root as the current root was not removed. return null; } } - assert(downloadsRoot != null); - mDownloadsDocument = mOwner.getRootDocumentBlocking(downloadsRoot); - return downloadsRoot; + + // Choose the default root. + final RootInfo defaultRoot = mOwner.mRoots.getDefaultRootBlocking(mOwner.mState); + assert(defaultRoot != null); + if (!defaultRoot.isRecents()) { + mDefaultRootDocument = mOwner.getRootDocumentBlocking(defaultRoot); + } + return defaultRoot; } @Override - protected void finish(RootInfo downloadsRoot) { - if (downloadsRoot != null && mDownloadsDocument != null) { - // Clear entire backstack and start in new root - mOwner.mState.onRootChanged(downloadsRoot); - mOwner.mSearchManager.update(downloadsRoot); - mOwner.openContainerDocument(mDownloadsDocument); + protected void finish(RootInfo defaultRoot) { + if (defaultRoot == null) { + return; + } + + // Clear entire backstack and start in new root. + mOwner.mState.onRootChanged(defaultRoot); + mOwner.mSearchManager.update(defaultRoot); + + if (defaultRoot.isRecents()) { + mOwner.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE); + } else { + mOwner.openContainerDocument(mDefaultRootDocument); } } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java index 594e02f0a01d8..3a04d9db6173e 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java @@ -445,6 +445,18 @@ public class RootsCache { mCacheUpdateListener = cacheUpdateListener; } + /** + * Returns the default root for the specified state. + */ + public RootInfo getDefaultRootBlocking(State state) { + for (RootInfo root : getMatchingRoots(getRootsBlocking(), state)) { + if (root.isDownloads()) { + return root; + } + } + return mRecentsRoot; + } + @VisibleForTesting static List getMatchingRoots(Collection roots, State state) { final List matching = new ArrayList<>();