Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.bookmarks; | 5 package org.chromium.chrome.browser.bookmarks; |
| 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.Context; | 9 import android.content.Context; |
| 10 import android.support.v4.view.GravityCompat; | |
| 10 import android.support.v4.widget.DrawerLayout; | 11 import android.support.v4.widget.DrawerLayout; |
| 11 import android.support.v7.widget.RecyclerView; | 12 import android.support.v7.widget.RecyclerView; |
| 12 import android.support.v7.widget.Toolbar; | 13 import android.support.v7.widget.Toolbar; |
| 13 import android.text.TextUtils; | 14 import android.text.TextUtils; |
| 14 import android.view.Gravity; | |
| 15 import android.view.View; | 15 import android.view.View; |
| 16 import android.view.ViewGroup; | 16 import android.view.ViewGroup; |
| 17 import android.widget.ViewSwitcher; | |
| 18 | 17 |
| 19 import org.chromium.base.ApiCompatibilityUtils; | 18 import org.chromium.base.ApiCompatibilityUtils; |
| 20 import org.chromium.base.ContextUtils; | 19 import org.chromium.base.ContextUtils; |
| 21 import org.chromium.base.ObserverList; | 20 import org.chromium.base.ObserverList; |
| 22 import org.chromium.base.metrics.RecordUserAction; | 21 import org.chromium.base.metrics.RecordUserAction; |
| 23 import org.chromium.chrome.R; | 22 import org.chromium.chrome.R; |
| 24 import org.chromium.chrome.browser.BasicNativePage; | 23 import org.chromium.chrome.browser.BasicNativePage; |
| 25 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; | 24 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; |
| 26 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r; | 25 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserve r; |
| 27 import org.chromium.chrome.browser.favicon.LargeIconBridge; | 26 import org.chromium.chrome.browser.favicon.LargeIconBridge; |
| 28 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; | 27 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; |
| 29 import org.chromium.chrome.browser.profiles.Profile; | 28 import org.chromium.chrome.browser.profiles.Profile; |
| 30 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; | 29 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; |
| 31 import org.chromium.chrome.browser.widget.selection.SelectableListLayout; | 30 import org.chromium.chrome.browser.widget.selection.SelectableListLayout; |
| 31 import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.Search Delegate; | |
| 32 import org.chromium.chrome.browser.widget.selection.SelectionDelegate; | 32 import org.chromium.chrome.browser.widget.selection.SelectionDelegate; |
| 33 import org.chromium.components.bookmarks.BookmarkId; | 33 import org.chromium.components.bookmarks.BookmarkId; |
| 34 | 34 |
| 35 import java.util.Stack; | 35 import java.util.Stack; |
| 36 | 36 |
| 37 /** | 37 /** |
| 38 * The new bookmark manager that is planned to replace the existing bookmark man ager. It holds all | 38 * The new bookmark manager that is planned to replace the existing bookmark man ager. It holds all |
| 39 * views and shared logics between tablet and phone. For tablet/phone specific l ogics, see | 39 * views and shared logics between tablet and phone. For tablet/phone specific l ogics, see |
| 40 * {@link BookmarkActivity} (phone) and {@link BookmarkPage} (tablet). | 40 * {@link BookmarkActivity} (phone) and {@link BookmarkPage} (tablet). |
| 41 */ | 41 */ |
| 42 public class BookmarkManager implements BookmarkDelegate { | 42 public class BookmarkManager implements BookmarkDelegate, SearchDelegate { |
| 43 private static final int FAVICON_MAX_CACHE_SIZE_BYTES = 10 * 1024 * 1024; // 10MB | 43 private static final int FAVICON_MAX_CACHE_SIZE_BYTES = 10 * 1024 * 1024; // 10MB |
| 44 | 44 |
| 45 /** | |
| 46 * This shared preference used to be used to save a list of recent searches. That feature | |
| 47 * has been removed, so this string is now used solely to clear the shared p reference. | |
| 48 */ | |
| 49 private static final String PREF_SEARCH_HISTORY = "bookmark_search_history"; | |
| 50 | |
|
gone
2017/03/23 00:56:36
We should really have a central place for this.
Theresa
2017/03/23 15:49:38
"bookmark_search_history" was previously in Bookma
gone
2017/03/23 17:12:03
Yeah, common place for removing deprecated prefs.
| |
| 45 private Activity mActivity; | 51 private Activity mActivity; |
| 46 private ViewGroup mMainView; | 52 private ViewGroup mMainView; |
| 47 private BookmarkModel mBookmarkModel; | 53 private BookmarkModel mBookmarkModel; |
| 48 private BookmarkUndoController mUndoController; | 54 private BookmarkUndoController mUndoController; |
| 49 private final ObserverList<BookmarkUIObserver> mUIObservers = | 55 private final ObserverList<BookmarkUIObserver> mUIObservers = |
| 50 new ObserverList<BookmarkUIObserver>(); | 56 new ObserverList<BookmarkUIObserver>(); |
| 51 private BasicNativePage mNativePage; | 57 private BasicNativePage mNativePage; |
| 52 private SelectableListLayout<BookmarkId> mSelectableListLayout; | 58 private SelectableListLayout<BookmarkId> mSelectableListLayout; |
| 53 private RecyclerView mRecyclerView; | 59 private RecyclerView mRecyclerView; |
| 54 private BookmarkItemsAdapter mAdapter; | 60 private BookmarkItemsAdapter mAdapter; |
| 55 private BookmarkActionBar mToolbar; | 61 private BookmarkActionBar mToolbar; |
| 56 private BookmarkSearchView mSearchView; | |
| 57 private ViewSwitcher mViewSwitcher; | |
| 58 private DrawerLayout mDrawer; | 62 private DrawerLayout mDrawer; |
| 59 private BookmarkDrawerListView mDrawerListView; | 63 private BookmarkDrawerListView mDrawerListView; |
| 60 private SelectionDelegate<BookmarkId> mSelectionDelegate; | 64 private SelectionDelegate<BookmarkId> mSelectionDelegate; |
| 61 private final Stack<BookmarkUIState> mStateStack = new Stack<>(); | 65 private final Stack<BookmarkUIState> mStateStack = new Stack<>(); |
| 62 private LargeIconBridge mLargeIconBridge; | 66 private LargeIconBridge mLargeIconBridge; |
| 63 private String mInitialUrl; | 67 private String mInitialUrl; |
| 64 private boolean mIsDialogUi; | 68 private boolean mIsDialogUi; |
| 65 | 69 |
| 66 private final BookmarkModelObserver mBookmarkModelObserver = new BookmarkMod elObserver() { | 70 private final BookmarkModelObserver mBookmarkModelObserver = new BookmarkMod elObserver() { |
| 67 | 71 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 95 if (getCurrentState() == BookmarkUIState.STATE_FOLDER) { | 99 if (getCurrentState() == BookmarkUIState.STATE_FOLDER) { |
| 96 setState(mStateStack.peek()); | 100 setState(mStateStack.peek()); |
| 97 } | 101 } |
| 98 mSelectionDelegate.clearSelection(); | 102 mSelectionDelegate.clearSelection(); |
| 99 } | 103 } |
| 100 }; | 104 }; |
| 101 | 105 |
| 102 private final Runnable mModelLoadedRunnable = new Runnable() { | 106 private final Runnable mModelLoadedRunnable = new Runnable() { |
| 103 @Override | 107 @Override |
| 104 public void run() { | 108 public void run() { |
| 105 mSearchView.onBookmarkDelegateInitialized(BookmarkManager.this); | |
| 106 mDrawerListView.onBookmarkDelegateInitialized(BookmarkManager.this); | 109 mDrawerListView.onBookmarkDelegateInitialized(BookmarkManager.this); |
| 107 mAdapter.onBookmarkDelegateInitialized(BookmarkManager.this); | 110 mAdapter.onBookmarkDelegateInitialized(BookmarkManager.this); |
| 108 mToolbar.onBookmarkDelegateInitialized(BookmarkManager.this); | 111 mToolbar.onBookmarkDelegateInitialized(BookmarkManager.this); |
| 109 if (!TextUtils.isEmpty(mInitialUrl)) { | 112 if (!TextUtils.isEmpty(mInitialUrl)) { |
| 110 setState(BookmarkUIState.createStateFromUrl(mInitialUrl, | 113 setState(BookmarkUIState.createStateFromUrl(mInitialUrl, |
| 111 mBookmarkModel)); | 114 mBookmarkModel)); |
| 112 } | 115 } |
| 113 } | 116 } |
| 114 }; | 117 }; |
| 115 | 118 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 137 mDrawerListView = (BookmarkDrawerListView) mMainView.findViewById( | 140 mDrawerListView = (BookmarkDrawerListView) mMainView.findViewById( |
| 138 R.id.bookmark_drawer_list); | 141 R.id.bookmark_drawer_list); |
| 139 | 142 |
| 140 @SuppressWarnings("unchecked") | 143 @SuppressWarnings("unchecked") |
| 141 SelectableListLayout<BookmarkId> selectableList = | 144 SelectableListLayout<BookmarkId> selectableList = |
| 142 (SelectableListLayout<BookmarkId>) mMainView.findViewById(R.id.s electable_list); | 145 (SelectableListLayout<BookmarkId>) mMainView.findViewById(R.id.s electable_list); |
| 143 mSelectableListLayout = selectableList; | 146 mSelectableListLayout = selectableList; |
| 144 mSelectableListLayout.initializeEmptyView( | 147 mSelectableListLayout.initializeEmptyView( |
| 145 ApiCompatibilityUtils.getDrawable( | 148 ApiCompatibilityUtils.getDrawable( |
| 146 mActivity.getResources(), R.drawable.bookmark_logo_large ), | 149 mActivity.getResources(), R.drawable.bookmark_logo_large ), |
| 147 R.string.bookmarks_folder_empty, | 150 R.string.bookmarks_folder_empty, R.string.bookmark_no_result); |
| 148 0 /* Bookmarks search is not yet controlled by the SelectableLis tLayout. */); | |
| 149 | 151 |
| 150 mAdapter = new BookmarkItemsAdapter(activity); | 152 mAdapter = new BookmarkItemsAdapter(activity); |
| 151 | 153 |
| 152 mRecyclerView = mSelectableListLayout.initializeRecyclerView(mAdapter); | 154 mRecyclerView = mSelectableListLayout.initializeRecyclerView(mAdapter); |
| 153 | 155 |
| 154 mToolbar = (BookmarkActionBar) mSelectableListLayout.initializeToolbar( | 156 mToolbar = (BookmarkActionBar) mSelectableListLayout.initializeToolbar( |
| 155 R.layout.bookmark_action_bar, mSelectionDelegate, 0, mDrawer, | 157 R.layout.bookmark_action_bar, mSelectionDelegate, 0, mDrawer, |
| 156 R.id.normal_menu_group, R.id.selection_mode_menu_group, null, tr ue, null); | 158 R.id.normal_menu_group, R.id.selection_mode_menu_group, null, tr ue, null); |
| 159 mToolbar.initializeSearchView( | |
| 160 this, R.string.bookmark_action_bar_search, R.id.search_menu_id); | |
| 157 | 161 |
| 158 mViewSwitcher = (ViewSwitcher) mMainView.findViewById(R.id.bookmark_view _switcher); | |
| 159 mUndoController = new BookmarkUndoController(activity, mBookmarkModel, | 162 mUndoController = new BookmarkUndoController(activity, mBookmarkModel, |
| 160 ((SnackbarManageable) activity).getSnackbarManager()); | 163 ((SnackbarManageable) activity).getSnackbarManager()); |
| 161 mSearchView = (BookmarkSearchView) getView().findViewById(R.id.bookmark_ search_view); | |
| 162 mBookmarkModel.addObserver(mBookmarkModelObserver); | 164 mBookmarkModel.addObserver(mBookmarkModelObserver); |
| 163 initializeToLoadingState(); | 165 initializeToLoadingState(); |
| 164 mBookmarkModel.runAfterBookmarkModelLoaded(mModelLoadedRunnable); | 166 mBookmarkModel.runAfterBookmarkModelLoaded(mModelLoadedRunnable); |
| 165 | 167 |
| 166 // Load partner bookmarks explicitly. We load partner bookmarks in the d eferred startup | 168 // Load partner bookmarks explicitly. We load partner bookmarks in the d eferred startup |
| 167 // code, but that might be executed much later. Especially on L, showing loading | 169 // code, but that might be executed much later. Especially on L, showing loading |
| 168 // progress bar blocks that so it won't be loaded. http://crbug.com/4293 83 | 170 // progress bar blocks that so it won't be loaded. http://crbug.com/4293 83 |
| 169 PartnerBookmarksShim.kickOffReading(activity); | 171 PartnerBookmarksShim.kickOffReading(activity); |
| 170 | 172 |
| 171 mLargeIconBridge = new LargeIconBridge(Profile.getLastUsedProfile().getO riginalProfile()); | 173 mLargeIconBridge = new LargeIconBridge(Profile.getLastUsedProfile().getO riginalProfile()); |
| 172 ActivityManager activityManager = ((ActivityManager) ContextUtils | 174 ActivityManager activityManager = ((ActivityManager) ContextUtils |
| 173 .getApplicationContext().getSystemService(Context.ACTIVITY_SERVI CE)); | 175 .getApplicationContext().getSystemService(Context.ACTIVITY_SERVI CE)); |
| 174 int maxSize = Math.min(activityManager.getMemoryClass() / 4 * 1024 * 102 4, | 176 int maxSize = Math.min(activityManager.getMemoryClass() / 4 * 1024 * 102 4, |
| 175 FAVICON_MAX_CACHE_SIZE_BYTES); | 177 FAVICON_MAX_CACHE_SIZE_BYTES); |
| 176 mLargeIconBridge.createCache(maxSize); | 178 mLargeIconBridge.createCache(maxSize); |
| 177 | 179 |
| 178 RecordUserAction.record("MobileBookmarkManagerOpen"); | 180 RecordUserAction.record("MobileBookmarkManagerOpen"); |
| 179 if (!isDialogUi) { | 181 if (!isDialogUi) { |
| 180 RecordUserAction.record("MobileBookmarkManagerPageOpen"); | 182 RecordUserAction.record("MobileBookmarkManagerPageOpen"); |
| 181 } | 183 } |
| 184 | |
| 185 // TODO(twellington): Remove this when Chrome version 59 is a distant me mory and users | |
| 186 // are unlikely to have the old PREF_SEARCH_HISTORY in shared preference s. | |
| 187 ContextUtils.getAppSharedPreferences().edit().remove(PREF_SEARCH_HISTORY ).apply(); | |
| 182 } | 188 } |
| 183 | 189 |
| 184 /** | 190 /** |
| 185 * Destroys and cleans up itself. This must be called after done using this class. | 191 * Destroys and cleans up itself. This must be called after done using this class. |
| 186 */ | 192 */ |
| 187 public void destroy() { | 193 public void destroy() { |
| 188 for (BookmarkUIObserver observer : mUIObservers) { | 194 for (BookmarkUIObserver observer : mUIObservers) { |
| 189 observer.onDestroy(); | 195 observer.onDestroy(); |
| 190 } | 196 } |
| 191 assert mUIObservers.size() == 0; | 197 assert mUIObservers.size() == 0; |
| 192 | 198 |
| 193 if (mUndoController != null) { | 199 if (mUndoController != null) { |
| 194 mUndoController.destroy(); | 200 mUndoController.destroy(); |
| 195 mUndoController = null; | 201 mUndoController = null; |
| 196 } | 202 } |
| 197 mBookmarkModel.removeObserver(mBookmarkModelObserver); | 203 mBookmarkModel.removeObserver(mBookmarkModelObserver); |
| 198 mBookmarkModel.destroy(); | 204 mBookmarkModel.destroy(); |
| 199 mBookmarkModel = null; | 205 mBookmarkModel = null; |
| 200 mLargeIconBridge.destroy(); | 206 mLargeIconBridge.destroy(); |
| 201 mLargeIconBridge = null; | 207 mLargeIconBridge = null; |
| 202 } | 208 } |
| 203 | 209 |
| 204 /** | 210 /** |
| 205 * Called when the user presses the back key. This is only going to be calle d on Phone. | 211 * Called when the user presses the back key. This is only going to be calle d on Phone. |
| 206 * @return True if manager handles this event, false if it decides to ignore . | 212 * @return True if manager handles this event, false if it decides to ignore . |
| 207 */ | 213 */ |
| 208 public boolean onBackPressed() { | 214 public boolean onBackPressed() { |
| 209 if (doesDrawerExist()) { | 215 if (doesDrawerExist()) { |
| 210 if (mDrawer.isDrawerVisible(Gravity.START)) { | 216 if (mDrawer.isDrawerVisible(GravityCompat.START)) { |
| 211 mDrawer.closeDrawer(Gravity.START); | 217 mDrawer.closeDrawer(GravityCompat.START); |
| 212 return true; | 218 return true; |
| 213 } | 219 } |
| 214 } | 220 } |
| 215 | 221 |
| 216 // TODO(twellington): replicate this behavior for other list UIs during unification. | 222 // TODO(twellington): replicate this behavior for other list UIs during unification. |
| 217 if (mSelectionDelegate.isSelectionEnabled()) { | 223 if (mSelectionDelegate.isSelectionEnabled()) { |
| 218 mSelectionDelegate.clearSelection(); | 224 mSelectionDelegate.clearSelection(); |
| 219 return true; | 225 return true; |
| 220 } | 226 } |
| 221 | 227 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 | 346 |
| 341 // BookmarkDelegate implementations. | 347 // BookmarkDelegate implementations. |
| 342 | 348 |
| 343 @Override | 349 @Override |
| 344 public boolean isDialogUi() { | 350 public boolean isDialogUi() { |
| 345 return mIsDialogUi; | 351 return mIsDialogUi; |
| 346 } | 352 } |
| 347 | 353 |
| 348 @Override | 354 @Override |
| 349 public void openFolder(BookmarkId folder) { | 355 public void openFolder(BookmarkId folder) { |
| 350 closeSearchUI(); | 356 mToolbar.hideSearchView(); |
| 351 setState(BookmarkUIState.createFolderState(folder, mBookmarkModel)); | 357 setState(BookmarkUIState.createFolderState(folder, mBookmarkModel)); |
| 352 mRecyclerView.scrollToPosition(0); | 358 mRecyclerView.scrollToPosition(0); |
| 353 } | 359 } |
| 354 | 360 |
| 355 @Override | 361 @Override |
| 356 public SelectionDelegate<BookmarkId> getSelectionDelegate() { | 362 public SelectionDelegate<BookmarkId> getSelectionDelegate() { |
| 357 return mSelectionDelegate; | 363 return mSelectionDelegate; |
| 358 } | 364 } |
| 359 | 365 |
| 360 @Override | 366 @Override |
| 361 public void notifyStateChange(BookmarkUIObserver observer) { | 367 public void notifyStateChange(BookmarkUIObserver observer) { |
| 362 int state = getCurrentState(); | 368 int state = getCurrentState(); |
| 363 switch (state) { | 369 switch (state) { |
| 364 case BookmarkUIState.STATE_FOLDER: | 370 case BookmarkUIState.STATE_FOLDER: |
| 365 observer.onFolderStateSet(mStateStack.peek().mFolder); | 371 observer.onFolderStateSet(mStateStack.peek().mFolder); |
| 366 break; | 372 break; |
| 367 case BookmarkUIState.STATE_LOADING: | 373 case BookmarkUIState.STATE_LOADING: |
| 368 // In loading state, onBookmarkDelegateInitialized() is not call ed for all | 374 // In loading state, onBookmarkDelegateInitialized() is not call ed for all |
| 369 // UIObservers, which means that there will be no observers at t he time. Do nothing. | 375 // UIObservers, which means that there will be no observers at t he time. Do nothing. |
| 370 assert mUIObservers.isEmpty(); | 376 assert mUIObservers.isEmpty(); |
| 371 break; | 377 break; |
| 378 case BookmarkUIState.STATE_SEARCHING: | |
| 379 observer.onSearchStateSet(); | |
| 380 break; | |
| 372 default: | 381 default: |
| 373 assert false : "State not valid"; | 382 assert false : "State not valid"; |
| 374 break; | 383 break; |
| 375 } | 384 } |
| 376 } | 385 } |
| 377 | 386 |
| 378 @Override | 387 @Override |
| 379 public boolean doesDrawerExist() { | 388 public boolean doesDrawerExist() { |
| 380 return mDrawer != null; | 389 return mDrawer != null; |
| 381 } | 390 } |
| 382 | 391 |
| 383 @Override | 392 @Override |
| 384 public void closeDrawer() { | 393 public void closeDrawer() { |
| 385 if (!doesDrawerExist()) return; | 394 if (!doesDrawerExist()) return; |
| 386 | 395 |
| 387 mDrawer.closeDrawer(Gravity.START); | 396 mDrawer.closeDrawer(GravityCompat.START); |
| 388 } | 397 } |
| 389 | 398 |
| 390 @Override | 399 @Override |
| 391 public DrawerLayout getDrawerLayout() { | 400 public DrawerLayout getDrawerLayout() { |
| 392 return mDrawer; | 401 return mDrawer; |
| 393 } | 402 } |
| 394 | 403 |
| 395 @Override | 404 @Override |
| 396 public void openBookmark(BookmarkId bookmark, int launchLocation) { | 405 public void openBookmark(BookmarkId bookmark, int launchLocation) { |
| 397 mSelectionDelegate.clearSelection(); | 406 mSelectionDelegate.clearSelection(); |
| 398 if (BookmarkUtils.openBookmark( | 407 if (BookmarkUtils.openBookmark( |
| 399 mBookmarkModel, mActivity, bookmark, launchLocation)) { | 408 mBookmarkModel, mActivity, bookmark, launchLocation)) { |
| 400 BookmarkUtils.finishActivityOnPhone(mActivity); | 409 BookmarkUtils.finishActivityOnPhone(mActivity); |
| 401 } | 410 } |
| 402 } | 411 } |
| 403 | 412 |
| 404 @Override | 413 @Override |
| 405 public void openSearchUI() { | 414 public void openSearchUI() { |
| 406 // Give search view focus, because it needs to handle back key event. | 415 mSelectableListLayout.onStartSearch(); |
| 407 mViewSwitcher.showNext(); | 416 mToolbar.showSearchView(); |
| 417 setState(BookmarkUIState.createSearchState()); | |
| 408 } | 418 } |
| 409 | 419 |
| 410 @Override | 420 @Override |
| 411 public void closeSearchUI() { | 421 public void closeSearchUI() { |
| 412 if (mSearchView.getVisibility() != View.VISIBLE) return; | 422 mSelectableListLayout.onEndSearch(); |
| 413 mViewSwitcher.showPrevious(); | 423 |
| 424 // Pop the search state off the stack. | |
| 425 mStateStack.pop(); | |
| 426 | |
| 427 // Set the state back to the folder that was previously being viewed. Li steners, including | |
| 428 // the BookmarkItemsAdapter, will be notified of the change and the list of bookmarks will | |
| 429 // be updated. | |
| 430 setState(mStateStack.pop()); | |
| 414 } | 431 } |
| 415 | 432 |
| 416 @Override | 433 @Override |
| 417 public void addUIObserver(BookmarkUIObserver observer) { | 434 public void addUIObserver(BookmarkUIObserver observer) { |
| 418 mUIObservers.addObserver(observer); | 435 mUIObservers.addObserver(observer); |
| 419 } | 436 } |
| 420 | 437 |
| 421 @Override | 438 @Override |
| 422 public void removeUIObserver(BookmarkUIObserver observer) { | 439 public void removeUIObserver(BookmarkUIObserver observer) { |
| 423 mUIObservers.removeObserver(observer); | 440 mUIObservers.removeObserver(observer); |
| 424 } | 441 } |
| 425 | 442 |
| 426 @Override | 443 @Override |
| 427 public BookmarkModel getModel() { | 444 public BookmarkModel getModel() { |
| 428 return mBookmarkModel; | 445 return mBookmarkModel; |
| 429 } | 446 } |
| 430 | 447 |
| 431 @Override | 448 @Override |
| 432 public int getCurrentState() { | 449 public int getCurrentState() { |
| 433 if (mStateStack.isEmpty()) return BookmarkUIState.STATE_LOADING; | 450 if (mStateStack.isEmpty()) return BookmarkUIState.STATE_LOADING; |
| 434 return mStateStack.peek().mState; | 451 return mStateStack.peek().mState; |
| 435 } | 452 } |
| 436 | 453 |
| 437 @Override | 454 @Override |
| 438 public LargeIconBridge getLargeIconBridge() { | 455 public LargeIconBridge getLargeIconBridge() { |
| 439 return mLargeIconBridge; | 456 return mLargeIconBridge; |
| 440 } | 457 } |
| 458 | |
| 459 // SearchDelegate overrides | |
| 460 | |
| 461 @Override | |
| 462 public void onSearchTextChanged(String query) { | |
| 463 mAdapter.search(query); | |
| 464 } | |
| 465 | |
| 466 @Override | |
| 467 public void onEndSearch() { | |
| 468 closeSearchUI(); | |
| 469 } | |
| 441 } | 470 } |
| OLD | NEW |