Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1550)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java

Issue 2271583006: [Android] Implement back key functionality in download manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@loading
Patch Set: fix test Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadFilter.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadFilter.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698