Merge "Fallback to Recents when Downloads is not available." into nyc-dev

am: 793f859

* commit '793f859123ae77c9925d18f2c46c3fea5497b4de':
  Fallback to Recents when Downloads is not available.

Change-Id: I057f45aabba52347764a9021172468193d18df04
This commit is contained in:
Tomasz Mikolajewski
2016-04-15 23:36:53 +00:00
committed by android-build-merger
2 changed files with 34 additions and 14 deletions

View File

@@ -793,7 +793,7 @@ public abstract class BaseActivity extends Activity
private static final class HandleRootsChangedTask
extends PairedTask<BaseActivity, RootInfo, RootInfo> {
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<RootInfo> 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);
}
}
}

View File

@@ -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<RootInfo> getMatchingRoots(Collection<RootInfo> roots, State state) {
final List<RootInfo> matching = new ArrayList<>();