Index: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActionBar.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActionBar.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActionBar.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9ebeb1397bcbd2537018264e8e3d968be89ab007 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActionBar.java |
@@ -0,0 +1,296 @@ |
+// 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.app.Activity; |
+import android.content.Context; |
+import android.support.v7.app.ActionBarDrawerToggle; |
+import android.support.v7.widget.Toolbar; |
+import android.support.v7.widget.Toolbar.OnMenuItemClickListener; |
+import android.text.TextUtils; |
+import android.util.AttributeSet; |
+import android.view.MenuItem; |
+import android.view.View; |
+import android.view.View.OnClickListener; |
+ |
+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.widget.NumberRollView; |
+import org.chromium.components.bookmarks.BookmarkId; |
+import org.chromium.components.bookmarks.BookmarkType; |
+import org.chromium.ui.base.DeviceFormFactor; |
+ |
+import java.util.List; |
+ |
+/** |
+ * Main action bar of Enhanced Bookmark UI. It is responsible for displaying title and buttons |
+ * associated with the current context. |
+ */ |
+public class EnhancedBookmarkActionBar extends Toolbar implements EnhancedBookmarkUIObserver, |
+ OnMenuItemClickListener, OnClickListener { |
+ private static final int NAVIGATION_BUTTON_NONE = 0; |
+ private static final int NAVIGATION_BUTTON_MENU = 1; |
+ private static final int NAVIGATION_BUTTON_BACK = 2; |
+ private static final int NAVIGATION_BUTTON_SELECTION_BACK = 3; |
+ |
+ private int mNavigationButton; |
+ private BookmarkItem mCurrentFolder; |
+ private EnhancedBookmarkDelegate mDelegate; |
+ private ActionBarDrawerToggle mActionBarDrawerToggle; |
+ private boolean mIsSelectionEnabled; |
+ |
+ private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObserver() { |
+ @Override |
+ public void bookmarkModelChanged() { |
+ onSelectionStateChange(mDelegate.getSelectedBookmarks()); |
+ } |
+ }; |
+ |
+ public EnhancedBookmarkActionBar(Context context, AttributeSet attrs) { |
+ super(context, attrs); |
+ setNavigationOnClickListener(this); |
+ inflateMenu(R.menu.eb_action_bar_menu); |
+ if (DeviceFormFactor.isTablet(context)) getMenu().removeItem(R.id.close_menu_id); |
+ setOnMenuItemClickListener(this); |
+ } |
+ |
+ @Override |
+ public void onClick(View view) { |
+ switch (mNavigationButton) { |
+ case NAVIGATION_BUTTON_NONE: |
+ break; |
+ case NAVIGATION_BUTTON_MENU: |
+ // ActionBarDrawerToggle handles this. |
+ break; |
+ case NAVIGATION_BUTTON_BACK: |
+ mDelegate.openFolder(mCurrentFolder.getParentId()); |
+ break; |
+ case NAVIGATION_BUTTON_SELECTION_BACK: |
+ mDelegate.clearSelection(); |
+ break; |
+ default: |
+ assert false : "Incorrect navigation button state"; |
+ } |
+ } |
+ |
+ @Override |
+ public boolean onMenuItemClick(MenuItem menuItem) { |
+ EnhancedBookmarksModel model = mDelegate.getModel(); |
+ if (menuItem.getItemId() == R.id.edit_menu_id) { |
+ EnhancedBookmarkAddEditFolderActivity.startEditFolderActivity(getContext(), |
+ mCurrentFolder.getId()); |
+ } else if (menuItem.getItemId() == R.id.list_toggle_menu_id) { |
+ mDelegate.setListModeEnabled(!mDelegate.isListModeEnabled()); |
+ return true; |
+ } else if (menuItem.getItemId() == R.id.search_menu_id) { |
+ mDelegate.openSearchUI(); |
+ return true; |
+ } else if (menuItem.getItemId() == R.id.close_menu_id) { |
+ mDelegate.finishActivityOnPhone(); |
+ return true; |
+ } else if (menuItem.getItemId() == R.id.selection_mode_edit_menu_id) { |
+ List<BookmarkId> list = mDelegate.getSelectedBookmarks(); |
+ assert list.size() == 1; |
+ BookmarkItem item = model.getBookmarkById(list.get(0)); |
+ if (item.isFolder()) { |
+ EnhancedBookmarkAddEditFolderActivity.startEditFolderActivity(getContext(), |
+ item.getId()); |
+ } else { |
+ mDelegate.startDetailActivity(item.getId(), null); |
+ } |
+ return true; |
+ } else if (menuItem.getItemId() == R.id.selection_mode_move_menu_id) { |
+ List<BookmarkId> list = mDelegate.getSelectedBookmarks(); |
+ if (list.size() >= 1) { |
+ EnhancedBookmarkFolderSelectActivity.startFolderSelectActivity(getContext(), |
+ list.toArray(new BookmarkId[list.size()])); |
+ } |
+ return true; |
+ } else if (menuItem.getItemId() == R.id.selection_mode_delete_menu_id) { |
+ mDelegate.getModel().deleteBookmarks( |
+ mDelegate.getSelectedBookmarks().toArray(new BookmarkId[0])); |
+ return true; |
+ } |
+ |
+ assert false : "Unhandled menu click."; |
+ return false; |
+ } |
+ |
+ /** |
+ * Update the current navigation button (the top-left icon on LTR) |
+ * @param navigationButton one of NAVIGATION_BUTTON_* constants. |
+ */ |
+ private void setNavigationButton(int navigationButton) { |
+ int iconResId = 0; |
+ int contentDescriptionId = 0; |
+ |
+ if (navigationButton == NAVIGATION_BUTTON_MENU && !mDelegate.doesDrawerExist()) { |
+ mNavigationButton = NAVIGATION_BUTTON_NONE; |
+ } else { |
+ mNavigationButton = navigationButton; |
+ } |
+ |
+ if (mNavigationButton == NAVIGATION_BUTTON_MENU) { |
+ initActionBarDrawerToggle(); |
+ // ActionBarDrawerToggle will take care of icon and content description, so just return. |
+ return; |
+ } |
+ |
+ if (mActionBarDrawerToggle != null) { |
+ mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); |
+ mDelegate.getDrawerLayout().setDrawerListener(null); |
+ } |
+ |
+ setNavigationOnClickListener(this); |
+ |
+ switch (mNavigationButton) { |
+ case NAVIGATION_BUTTON_NONE: |
+ break; |
+ case NAVIGATION_BUTTON_BACK: |
+ iconResId = R.drawable.eb_back_normal; |
+ contentDescriptionId = R.string.accessibility_toolbar_btn_back; |
+ break; |
+ case NAVIGATION_BUTTON_SELECTION_BACK: |
+ iconResId = R.drawable.eb_cancel_active; |
+ contentDescriptionId = R.string.accessibility_enhanced_bookmark_cancel_selection; |
+ break; |
+ default: |
+ assert false : "Incorrect navigationButton argument"; |
+ } |
+ |
+ if (iconResId == 0) { |
+ setNavigationIcon(null); |
+ } else { |
+ setNavigationIcon(iconResId); |
+ } |
+ setNavigationContentDescription(contentDescriptionId); |
+ } |
+ |
+ /** |
+ * Set up ActionBarDrawerToggle, a.k.a. hamburger button. |
+ */ |
+ private void initActionBarDrawerToggle() { |
+ // Sadly, the only way to set correct toolbar button listener for ActionBarDrawerToggle |
+ // is constructing, so we will need to construct every time we re-show this button. |
+ mActionBarDrawerToggle = new ActionBarDrawerToggle((Activity) getContext(), |
+ mDelegate.getDrawerLayout(), this, |
+ R.string.accessibility_enhanced_bookmark_drawer_toggle_btn_open, |
+ R.string.accessibility_enhanced_bookmark_drawer_toggle_btn_close); |
+ mDelegate.getDrawerLayout().setDrawerListener(mActionBarDrawerToggle); |
+ mActionBarDrawerToggle.syncState(); |
+ } |
+ |
+ void showLoadingUi() { |
+ setTitle(null); |
+ setNavigationButton(NAVIGATION_BUTTON_NONE); |
+ getMenu().findItem(R.id.search_menu_id).setVisible(false); |
+ getMenu().findItem(R.id.edit_menu_id).setVisible(false); |
+ getMenu().findItem(R.id.list_toggle_menu_id).setVisible(false); |
+ } |
+ |
+ // EnhancedBookmarkUIObserver implementations. |
+ |
+ @Override |
+ public void onEnhancedBookmarkDelegateInitialized(EnhancedBookmarkDelegate delegate) { |
+ mDelegate = delegate; |
+ mDelegate.addUIObserver(this); |
+ delegate.getModel().addModelObserver(mBookmarkModelObserver); |
+ getMenu().findItem(R.id.list_toggle_menu_id).setVisible(true); |
+ } |
+ |
+ @Override |
+ public void onDestroy() { |
+ mDelegate.removeUIObserver(this); |
+ mDelegate.getModel().removeModelObserver(mBookmarkModelObserver); |
+ } |
+ |
+ @Override |
+ public void onAllBookmarksStateSet() { |
+ setTitle(R.string.enhanced_bookmark_title_bar_all_items); |
+ setNavigationButton(NAVIGATION_BUTTON_MENU); |
+ getMenu().findItem(R.id.search_menu_id).setVisible(true); |
+ getMenu().findItem(R.id.edit_menu_id).setVisible(false); |
+ } |
+ |
+ @Override |
+ public void onFolderStateSet(BookmarkId folder) { |
+ mCurrentFolder = mDelegate.getModel().getBookmarkById(folder); |
+ |
+ getMenu().findItem(R.id.search_menu_id).setVisible(false); |
+ getMenu().findItem(R.id.edit_menu_id).setVisible(mCurrentFolder.isEditable()); |
+ |
+ // If the parent folder is a top level node, we don't go up anymore. |
+ if (mDelegate.getModel().getTopLevelFolderParentIDs().contains( |
+ mCurrentFolder.getParentId())) { |
+ if (TextUtils.isEmpty(mCurrentFolder.getTitle())) { |
+ setTitle(R.string.enhanced_bookmark_title_bar_all_items); |
+ } else { |
+ setTitle(mCurrentFolder.getTitle()); |
+ } |
+ setNavigationButton(NAVIGATION_BUTTON_MENU); |
+ } else { |
+ setTitle(mCurrentFolder.getTitle()); |
+ setNavigationButton(NAVIGATION_BUTTON_BACK); |
+ } |
+ } |
+ |
+ @Override |
+ public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) { |
+ boolean wasSelectionEnabled = mIsSelectionEnabled; |
+ mIsSelectionEnabled = mDelegate.isSelectionEnabled(); |
+ NumberRollView numberRollView = (NumberRollView) findViewById(R.id.selection_mode_number); |
+ if (mIsSelectionEnabled) { |
+ setNavigationButton(NAVIGATION_BUTTON_SELECTION_BACK); |
+ setTitle(null); |
+ |
+ getMenu().setGroupVisible(R.id.normal_menu_group, false); |
+ getMenu().setGroupVisible(R.id.selection_mode_menu_group, true); |
+ // Editing a bookmark action on multiple selected items doesn't make sense. So disable. |
+ getMenu().findItem(R.id.selection_mode_edit_menu_id).setVisible( |
+ selectedBookmarks.size() == 1); |
+ // Partner bookmarks can't move, so if the selection includes a partner bookmark, |
+ // disable the move button. |
+ for (BookmarkId bookmark : selectedBookmarks) { |
+ if (bookmark.getType() == BookmarkType.PARTNER) { |
+ getMenu().findItem(R.id.selection_mode_move_menu_id).setVisible(false); |
+ break; |
+ } |
+ } |
+ |
+ setBackgroundColor(getResources().getColor( |
+ R.color.enhanced_bookmark_selection_action_bar_background)); |
+ |
+ numberRollView.setVisibility(View.VISIBLE); |
+ if (!wasSelectionEnabled) numberRollView.setNumber(0, false); |
+ numberRollView.setNumber(selectedBookmarks.size(), true); |
+ } else { |
+ getMenu().setGroupVisible(R.id.normal_menu_group, true); |
+ getMenu().setGroupVisible(R.id.selection_mode_menu_group, false); |
+ setBackgroundColor(getResources().getColor(R.color.default_primary_color)); |
+ |
+ numberRollView.setVisibility(View.GONE); |
+ numberRollView.setNumber(0, false); |
+ |
+ mDelegate.notifyStateChange(this); |
+ } |
+ } |
+ |
+ @Override |
+ public void onFilterStateSet(String filter) { |
+ setTitle(filter); |
+ setNavigationButton(NAVIGATION_BUTTON_MENU); |
+ getMenu().findItem(R.id.search_menu_id).setVisible(false); |
+ getMenu().findItem(R.id.edit_menu_id).setVisible(false); |
+ } |
+ |
+ @Override |
+ public void onListModeChange(boolean isListModeEnabled) { |
+ MenuItem menuItem = getMenu().findItem(R.id.list_toggle_menu_id); |
+ menuItem.getIcon().setLevel(isListModeEnabled ? 1 : 0); |
+ } |
+} |