| Index: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java
|
| index bc72f2ee633516f5aa283abf2e66626e408c122b..cde8c8f08428e028c23f0c142039a0d93bf24fbc 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java
|
| @@ -10,9 +10,15 @@ import android.os.Bundle;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.chrome.browser.IntentHandler;
|
| import org.chromium.chrome.browser.SnackbarActivity;
|
| +import org.chromium.chrome.browser.UrlConstants;
|
| +import org.chromium.chrome.browser.download.ui.DownloadFilter;
|
| import org.chromium.chrome.browser.download.ui.DownloadManagerUi;
|
| +import org.chromium.chrome.browser.download.ui.DownloadManagerUi.DownloadUiObserver;
|
| import org.chromium.chrome.browser.util.IntentUtils;
|
|
|
| +import java.util.Deque;
|
| +import java.util.LinkedList;
|
| +
|
| /**
|
| * Activity for managing downloads handled through Chrome.
|
| */
|
| @@ -20,6 +26,22 @@ public class DownloadActivity extends SnackbarActivity {
|
| private DownloadManagerUi mDownloadManagerUi;
|
| private boolean mIsOffTheRecord;
|
|
|
| + /** Caches the stack of filters applied to let the user backtrack through their history. */
|
| + private final Deque<String> mBackStack = new LinkedList<>();
|
| +
|
| + private final DownloadUiObserver mUiObserver = new DownloadUiObserver() {
|
| + @Override
|
| + public void onManagerDestroyed() { }
|
| +
|
| + @Override
|
| + public void onFilterChanged(int filter) {
|
| + String url = DownloadFilter.getUrlForFilter(filter);
|
| + if (mBackStack.isEmpty() || !mBackStack.peek().equals(url)) {
|
| + mBackStack.push(url);
|
| + }
|
| + }
|
| + };
|
| +
|
| @Override
|
| public void onCreate(Bundle savedInstanceState) {
|
| super.onCreate(savedInstanceState);
|
| @@ -30,6 +52,9 @@ public class DownloadActivity extends SnackbarActivity {
|
| mDownloadManagerUi = new DownloadManagerUi(this, isOffTheRecord, parentComponent);
|
| setContentView(mDownloadManagerUi.getView());
|
| mIsOffTheRecord = isOffTheRecord;
|
| + mDownloadManagerUi.addObserver(mUiObserver);
|
| + // Call updateForUrl() to align with how DownloadPage interacts with DownloadManagerUi.
|
| + mDownloadManagerUi.updateForUrl(UrlConstants.DOWNLOADS_URL);
|
| }
|
|
|
| @Override
|
| @@ -41,7 +66,17 @@ public class DownloadActivity extends SnackbarActivity {
|
|
|
| @Override
|
| public void onBackPressed() {
|
| - if (!mDownloadManagerUi.onBackPressed()) super.onBackPressed();
|
| + if (mDownloadManagerUi.onBackPressed()) return;
|
| + // The top of the stack always represents the current filter. When back is pressed,
|
| + // the top is popped off and the new top indicates what filter to use. If there are
|
| + // no filters remaining, the Activity itself is closed.
|
| + if (mBackStack.size() > 1) {
|
| + mBackStack.pop();
|
| + mDownloadManagerUi.updateForUrl(mBackStack.peek());
|
| + } else {
|
| + if (!mBackStack.isEmpty()) mBackStack.pop();
|
| + super.onBackPressed();
|
| + }
|
| }
|
|
|
| @Override
|
|
|