OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.history; | 5 package org.chromium.chrome.browser.history; |
6 | 6 |
7 import android.app.Activity; | 7 import android.app.Activity; |
8 import android.app.ActivityManager; | 8 import android.app.ActivityManager; |
9 import android.content.ComponentName; | 9 import android.content.ComponentName; |
10 import android.content.Context; | 10 import android.content.Context; |
(...skipping 21 matching lines...) Expand all Loading... |
32 import org.chromium.base.metrics.RecordUserAction; | 32 import org.chromium.base.metrics.RecordUserAction; |
33 import org.chromium.chrome.R; | 33 import org.chromium.chrome.R; |
34 import org.chromium.chrome.browser.IntentHandler; | 34 import org.chromium.chrome.browser.IntentHandler; |
35 import org.chromium.chrome.browser.NativePage; | 35 import org.chromium.chrome.browser.NativePage; |
36 import org.chromium.chrome.browser.document.ChromeLauncherActivity; | 36 import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
37 import org.chromium.chrome.browser.favicon.LargeIconBridge; | 37 import org.chromium.chrome.browser.favicon.LargeIconBridge; |
38 import org.chromium.chrome.browser.preferences.PreferencesLauncher; | 38 import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
39 import org.chromium.chrome.browser.profiles.Profile; | 39 import org.chromium.chrome.browser.profiles.Profile; |
40 import org.chromium.chrome.browser.signin.SigninManager; | 40 import org.chromium.chrome.browser.signin.SigninManager; |
41 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; | 41 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; |
| 42 import org.chromium.chrome.browser.snackbar.Snackbar; |
| 43 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; |
| 44 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; |
42 import org.chromium.chrome.browser.util.IntentUtils; | 45 import org.chromium.chrome.browser.util.IntentUtils; |
43 import org.chromium.chrome.browser.widget.FadingShadowView; | 46 import org.chromium.chrome.browser.widget.FadingShadowView; |
44 import org.chromium.chrome.browser.widget.selection.SelectableListLayout; | 47 import org.chromium.chrome.browser.widget.selection.SelectableListLayout; |
45 import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.Search
Delegate; | 48 import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.Search
Delegate; |
46 import org.chromium.chrome.browser.widget.selection.SelectionDelegate; | 49 import org.chromium.chrome.browser.widget.selection.SelectionDelegate; |
47 import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionO
bserver; | 50 import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionO
bserver; |
48 import org.chromium.ui.base.Clipboard; | 51 import org.chromium.ui.base.Clipboard; |
49 import org.chromium.ui.base.DeviceFormFactor; | 52 import org.chromium.ui.base.DeviceFormFactor; |
50 | 53 |
51 import java.util.List; | 54 import java.util.List; |
52 | 55 |
53 /** | 56 /** |
54 * Displays and manages the UI for browsing history. | 57 * Displays and manages the UI for browsing history. |
55 */ | 58 */ |
56 public class HistoryManager implements OnMenuItemClickListener, SignInStateObser
ver, | 59 public class HistoryManager implements OnMenuItemClickListener, SignInStateObser
ver, |
57 SelectionObserver<HistoryItem>, SearchDelegate { | 60 SelectionObserver<HistoryItem>, SearchDel
egate, |
| 61 SnackbarController { |
58 private static final int FAVICON_MAX_CACHE_SIZE_BYTES = 10 * 1024 * 1024; //
10MB | 62 private static final int FAVICON_MAX_CACHE_SIZE_BYTES = 10 * 1024 * 1024; //
10MB |
59 private static final int MEGABYTES_TO_BYTES = 1024 * 1024; | 63 private static final int MEGABYTES_TO_BYTES = 1024 * 1024; |
60 private static final String METRICS_PREFIX = "Android.HistoryPage."; | 64 private static final String METRICS_PREFIX = "Android.HistoryPage."; |
61 | 65 |
62 private static HistoryProvider sProviderForTests; | 66 private static HistoryProvider sProviderForTests; |
63 | 67 |
64 private final int mListItemLateralShadowSizePx; | 68 private final int mListItemLateralShadowSizePx; |
65 private final int mDefaultLateralListItemMarginPx; | 69 private final int mDefaultLateralListItemMarginPx; |
66 | 70 |
67 private final Activity mActivity; | 71 private final Activity mActivity; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 mToolbarShadow = (FadingShadowView) mSelectableListLayout.findViewById(R
.id.shadow); | 115 mToolbarShadow = (FadingShadowView) mSelectableListLayout.findViewById(R
.id.shadow); |
112 mToolbarShadow.setVisibility(View.GONE); | 116 mToolbarShadow.setVisibility(View.GONE); |
113 | 117 |
114 // 4. Configure values for HorizontalDisplayStyle.WIDE and HorizontalDis
playStyle.REGULAR. | 118 // 4. Configure values for HorizontalDisplayStyle.WIDE and HorizontalDis
playStyle.REGULAR. |
115 // The list item shadow is part of the drawable nine-patch used as the l
ist item background. | 119 // The list item shadow is part of the drawable nine-patch used as the l
ist item background. |
116 // Use the dimensions of the shadow (from the drawable's padding) to cal
culate the margins | 120 // Use the dimensions of the shadow (from the drawable's padding) to cal
culate the margins |
117 // to use in the regular and wide display styles. | 121 // to use in the regular and wide display styles. |
118 Rect listItemShadow = new Rect(); | 122 Rect listItemShadow = new Rect(); |
119 ApiCompatibilityUtils.getDrawable( | 123 ApiCompatibilityUtils.getDrawable( |
120 mActivity.getResources(), R.drawable.card_middle).getPadding(lis
tItemShadow); | 124 mActivity.getResources(), R.drawable.card_middle).getPadding(lis
tItemShadow); |
121 int cardCornerRadius = mActivity.getResources().getDimensionPixelSize( | 125 int cardCornerRadius = |
122 R.dimen.card_corner_radius); | 126 mActivity.getResources().getDimensionPixelSize(R.dimen.list_item
_corner_radius); |
123 | 127 |
124 assert listItemShadow.left == listItemShadow.right; | 128 assert listItemShadow.left == listItemShadow.right; |
125 // The list item shadow size is used in HorizontalDisplayStyle.WIDE to v
isually align other | 129 // The list item shadow size is used in HorizontalDisplayStyle.WIDE to v
isually align other |
126 // elements with the edge of the list items. | 130 // elements with the edge of the list items. |
127 mListItemLateralShadowSizePx = listItemShadow.left; | 131 mListItemLateralShadowSizePx = listItemShadow.left; |
128 // A negative margin is used in HorizontalDisplayStyle.REGULAR to hide t
he lateral shadow. | 132 // A negative margin is used in HorizontalDisplayStyle.REGULAR to hide t
he lateral shadow. |
129 mDefaultLateralListItemMarginPx = -(listItemShadow.left + cardCornerRadi
us); | 133 mDefaultLateralListItemMarginPx = -(listItemShadow.left + cardCornerRadi
us); |
130 | 134 |
131 mSelectableListLayout.setHasWideDisplayStyle(mListItemLateralShadowSizeP
x); | 135 mSelectableListLayout.setHasWideDisplayStyle(mListItemLateralShadowSizeP
x); |
132 | 136 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 181 |
178 /** | 182 /** |
179 * @return Whether the history manager UI is displayed in a native page. | 183 * @return Whether the history manager UI is displayed in a native page. |
180 */ | 184 */ |
181 public boolean isDisplayedInNativePage() { | 185 public boolean isDisplayedInNativePage() { |
182 return mIsDisplayedInNativePage; | 186 return mIsDisplayedInNativePage; |
183 } | 187 } |
184 | 188 |
185 @Override | 189 @Override |
186 public boolean onMenuItemClick(MenuItem item) { | 190 public boolean onMenuItemClick(MenuItem item) { |
| 191 mToolbar.hideOverflowMenu(); |
| 192 |
187 if (item.getItemId() == R.id.close_menu_id && !isDisplayedInNativePage()
) { | 193 if (item.getItemId() == R.id.close_menu_id && !isDisplayedInNativePage()
) { |
188 mActivity.finish(); | 194 mActivity.finish(); |
189 return true; | 195 return true; |
190 } else if (item.getItemId() == R.id.selection_mode_open_in_new_tab) { | 196 } else if (item.getItemId() == R.id.selection_mode_open_in_new_tab) { |
191 openItemsInNewTabs(mSelectionDelegate.getSelectedItems(), false); | 197 openItemsInNewTabs(mSelectionDelegate.getSelectedItems(), false); |
192 mSelectionDelegate.clearSelection(); | 198 mSelectionDelegate.clearSelection(); |
193 return true; | 199 return true; |
194 } else if (item.getItemId() == R.id.selection_mode_copy_link) { | 200 } else if (item.getItemId() == R.id.selection_mode_copy_link) { |
195 recordUserActionWithOptionalSearch("CopyLink"); | 201 recordUserActionWithOptionalSearch("CopyLink"); |
196 Clipboard clipboard = new Clipboard(mActivity); | 202 Clipboard clipboard = new Clipboard(mActivity); |
197 clipboard.setText(mSelectionDelegate.getSelectedItems().get(0).getUr
l()); | 203 clipboard.setText(mSelectionDelegate.getSelectedItems().get(0).getUr
l()); |
| 204 mSelectionDelegate.clearSelection(); |
| 205 Snackbar snackbar = Snackbar.make(mActivity.getString(R.string.copie
d), this, |
| 206 Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_HISTORY_LINK_COPIED
); |
| 207 ((SnackbarManageable) mActivity).getSnackbarManager().showSnackbar(s
nackbar); |
198 return true; | 208 return true; |
199 } else if (item.getItemId() == R.id.selection_mode_open_in_incognito) { | 209 } else if (item.getItemId() == R.id.selection_mode_open_in_incognito) { |
200 openItemsInNewTabs(mSelectionDelegate.getSelectedItems(), true); | 210 openItemsInNewTabs(mSelectionDelegate.getSelectedItems(), true); |
201 mSelectionDelegate.clearSelection(); | 211 mSelectionDelegate.clearSelection(); |
202 return true; | 212 return true; |
203 } else if (item.getItemId() == R.id.selection_mode_delete_menu_id) { | 213 } else if (item.getItemId() == R.id.selection_mode_delete_menu_id) { |
204 recordSelectionCountHistorgram("Remove"); | 214 recordSelectionCountHistorgram("Remove"); |
205 recordUserActionWithOptionalSearch("RemoveSelected"); | 215 recordUserActionWithOptionalSearch("RemoveSelected"); |
206 | 216 |
207 for (HistoryItem historyItem : mSelectionDelegate.getSelectedItems()
) { | 217 for (HistoryItem historyItem : mSelectionDelegate.getSelectedItems()
) { |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 mToolbar.onSignInStateChange(); | 442 mToolbar.onSignInStateChange(); |
433 mHistoryAdapter.onSignInStateChange(); | 443 mHistoryAdapter.onSignInStateChange(); |
434 } | 444 } |
435 | 445 |
436 @Override | 446 @Override |
437 public void onSelectionStateChange(List<HistoryItem> selectedItems) { | 447 public void onSelectionStateChange(List<HistoryItem> selectedItems) { |
438 mHistoryAdapter.onSelectionStateChange(mSelectionDelegate.isSelectionEna
bled()); | 448 mHistoryAdapter.onSelectionStateChange(mSelectionDelegate.isSelectionEna
bled()); |
439 setToolbarShadowVisibility(); | 449 setToolbarShadowVisibility(); |
440 } | 450 } |
441 | 451 |
| 452 @Override |
| 453 public void onAction(Object actionData) { |
| 454 // Handler for the link copied snackbar. Do nothing. |
| 455 } |
| 456 |
| 457 @Override |
| 458 public void onDismissNoAction(Object actionData) { |
| 459 // Handler for the link copied snackbar. Do nothing. |
| 460 } |
| 461 |
442 private void setToolbarShadowVisibility() { | 462 private void setToolbarShadowVisibility() { |
443 boolean showShadow = mRecyclerView.computeVerticalScrollOffset() != 0 | 463 boolean showShadow = mRecyclerView.computeVerticalScrollOffset() != 0 |
444 || mIsSearching || mSelectionDelegate.isSelectionEnabled(); | 464 || mIsSearching || mSelectionDelegate.isSelectionEnabled(); |
445 mToolbarShadow.setVisibility(showShadow ? View.VISIBLE : View.GONE); | 465 mToolbarShadow.setVisibility(showShadow ? View.VISIBLE : View.GONE); |
446 } | 466 } |
447 } | 467 } |
OLD | NEW |