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 |