Index: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUndoController.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUndoController.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUndoController.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0569354da413c76ce0ef014161379ea607e16d22 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUndoController.java |
@@ -0,0 +1,101 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.enhancedbookmarks; |
+ |
+import android.content.Context; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem; |
+import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; |
+import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel; |
+import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel.EnhancedBookmarkDeleteObserver; |
+import org.chromium.chrome.browser.snackbar.SnackbarManager; |
+ |
+import java.util.Locale; |
+ |
+/** |
+ * Shows an undo bar when the user modifies enhanced bookmarks, |
+ * allowing them to undo their changes. |
+ * TODO(danduong): Add move undo |
+ */ |
+public class EnhancedBookmarkUndoController extends BookmarkModelObserver implements |
+ SnackbarManager.SnackbarController, EnhancedBookmarkDeleteObserver { |
+ |
+ private final EnhancedBookmarksModel mBookmarksModel; |
+ private final SnackbarManager mSnackbarManager; |
+ private final Context mContext; |
+ |
+ /** |
+ * Creates an instance of {@link EnhancedBookmarkUndoController}. |
+ * @param context The {@link Context} in which snackbar is shown. |
+ * @param model The enhanced bookmark model. |
+ * @param snackbarManager SnackManager passed from activity. |
+ */ |
+ public EnhancedBookmarkUndoController(Context context, EnhancedBookmarksModel model, |
+ SnackbarManager snackbarManager) { |
+ mBookmarksModel = model; |
+ mBookmarksModel.addDeleteObserver(this); |
+ mSnackbarManager = snackbarManager; |
+ mContext = context; |
+ } |
+ |
+ /** |
+ * Cleans up this class, unregistering for application notifications from bookmark model. |
+ */ |
+ public void destroy() { |
+ mBookmarksModel.removeDeleteObserver(this); |
+ } |
+ |
+ @Override |
+ public void onAction(Object actionData) { |
+ mBookmarksModel.undo(); |
+ mSnackbarManager.dismissSnackbar(false); |
+ } |
+ |
+ @Override |
+ public void onDismissNoAction(Object actionData) { |
+ } |
+ |
+ @Override |
+ public void onDismissForEachType(boolean isTimeout) { |
+ } |
+ |
+ // Overriding BookmarkModelObserver |
+ @Override |
+ public void bookmarkModelChanged() { |
+ // TODO(danduong): dismiss snackbar only when needed |
+ mSnackbarManager.dismissSnackbar(false); |
+ } |
+ |
+ @Override |
+ public void bookmarkNodeChanged(BookmarkItem node) { |
+ // Title/url change of a bookmark should not affect undo. |
+ } |
+ |
+ @Override |
+ public void bookmarkNodeAdded(BookmarkItem parent, int index) { |
+ // Adding a new bookmark should not affect undo. |
+ } |
+ |
+ // Implement EnhancedBookmarkDeleteObserver |
+ @Override |
+ public void onDeleteBookmarks(String[] titles, boolean isUndoable) { |
+ assert titles != null && titles.length >= 1; |
+ |
+ if (!isUndoable) return; |
+ |
+ if (titles.length == 1) { |
+ mSnackbarManager.showSnackbar(mContext.getString(R.string.undo_bar_delete_message), |
+ titles[0], mContext.getString(R.string.undo_bar_button_text), |
+ null, this); |
+ } else { |
+ mSnackbarManager.showSnackbar( |
+ mContext.getString(R.string.undo_bar_multiple_delete_message), |
+ String.format(Locale.getDefault(), "%d", titles.length), |
+ mContext.getString(R.string.undo_bar_button_text), null, this); |
+ } |
+ } |
+} |