| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarksPageView.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarksPageView.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarksPageView.java
|
| deleted file mode 100644
|
| index dd1c98e22d08afe45bc21b77081d98851e25c2b2..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarksPageView.java
|
| +++ /dev/null
|
| @@ -1,383 +0,0 @@
|
| -// 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.ntp;
|
| -
|
| -import android.content.Context;
|
| -import android.graphics.Bitmap;
|
| -import android.graphics.BitmapFactory;
|
| -import android.text.TextUtils;
|
| -import android.util.AttributeSet;
|
| -import android.util.LruCache;
|
| -import android.view.View;
|
| -import android.view.ViewGroup;
|
| -import android.view.inputmethod.EditorInfo;
|
| -import android.view.inputmethod.InputConnection;
|
| -import android.widget.BaseAdapter;
|
| -import android.widget.HorizontalScrollView;
|
| -import android.widget.ImageView;
|
| -import android.widget.LinearLayout;
|
| -import android.widget.TextView;
|
| -
|
| -import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem;
|
| -import org.chromium.chrome.browser.BookmarksBridge.BookmarksCallback;
|
| -import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
|
| -import org.chromium.components.bookmarks.BookmarkId;
|
| -import org.chromium.ui.base.LocalizationUtils;
|
| -
|
| -import java.util.Collections;
|
| -import java.util.List;
|
| -
|
| -/**
|
| - * The native bookmarks page, represented by some basic data such as folder contents,
|
| - * folder hierarchy, and an Android View that displays the page.
|
| - */
|
| -public class BookmarksPageView extends LinearLayout implements BookmarksCallback {
|
| -
|
| - private static final int MAX_NUM_FAVICONS_TO_CACHE = 256;
|
| -
|
| - private BookmarksPageManager mManager;
|
| - private HorizontalScrollView mHierarchyContainer;
|
| - private LinearLayout mHierarchyLayout;
|
| - private Bitmap mDefaultFavicon;
|
| - private BookmarkItemView.DrawingData mDrawingData;
|
| - private final int mDesiredFaviconSize;
|
| - private final LruCache<String, Bitmap> mFaviconCache;
|
| -
|
| - private final BookmarkListAdapter mAdapter;
|
| - private BookmarksListView mBookmarksList;
|
| - private TextView mEmptyView;
|
| - private int mSavedListPosition = 0;
|
| - private int mSavedListTop = 0;
|
| -
|
| - private boolean mSnapshotBookmarksChanged;
|
| - private int mSnapshotWidth;
|
| - private int mSnapshotHeight;
|
| - private int mSnapshotBookmarksListPosition;
|
| - private int mSnapshotBookmarksListTop;
|
| - private int mSnapshotBookmarksHierarchyScrollX;
|
| -
|
| - /**
|
| - * Manages the view interaction with the rest of the system.
|
| - */
|
| - public interface BookmarksPageManager {
|
| - /**
|
| - * @return True, if destroy() has been called.
|
| - */
|
| - boolean isDestroyed();
|
| -
|
| - /**
|
| - * @return Whether this bookmarks page should use incognito mode.
|
| - */
|
| - boolean isIncognito();
|
| -
|
| - /**
|
| - * @return Whether "Open in new tab" should be shown in the context menu
|
| - * when long pressing a bookmark.
|
| - */
|
| - boolean shouldShowOpenInNewTab();
|
| -
|
| - /**
|
| - * @return Whether "Open in new incognito tab" should be shown in the context menu
|
| - * when long pressing a bookmark.
|
| - */
|
| - boolean shouldShowOpenInNewIncognitoTab();
|
| -
|
| - /**
|
| - * @return Whether to show a context menu on long press.
|
| - */
|
| - boolean isContextMenuEnabled();
|
| -
|
| - /**
|
| - * Opens the bookmark item. If item is a bookmark then it opens the page else,
|
| - * if folder, it displays the folder contents.
|
| - * @param item BookmarkItem to be opened.
|
| - */
|
| - void open(BookmarkItemView item);
|
| -
|
| - /**
|
| - * Opens a bookmark item in a new tab.
|
| - * @param item The bookmark item to open.
|
| - */
|
| - void openInNewTab(BookmarkItemView item);
|
| -
|
| - /**
|
| - * Opens a bookmark item in a new incognito tab.
|
| - * @param item The bookmark item to open.
|
| - */
|
| - void openInNewIncognitoTab(BookmarkItemView item);
|
| -
|
| - /**
|
| - * Opens the bookmark folder to display the folder contents.
|
| - * @param item BookmarkFolderHierarchyItem to be opened.
|
| - */
|
| - void openFolder(BookmarkFolderHierarchyItem item);
|
| -
|
| - /**
|
| - * Deletes a bookmark entry.
|
| - * @param item The bookmark item to remove.
|
| - */
|
| - void delete(BookmarkItemView item);
|
| -
|
| - /**
|
| - * Edits a bookmark entry.
|
| - * @param item The bookmark item to be edited.
|
| - */
|
| - void edit(BookmarkItemView item);
|
| -
|
| - /**
|
| - * Gets the favicon image for a given URL.
|
| - * @param url The URL of the site whose favicon is being requested.
|
| - * @param size The desired size of the favicon in pixels.
|
| - * @param faviconCallback The callback to be notified when the favicon is available.
|
| - */
|
| - void getFaviconImageForUrl(String url, int size, FaviconImageCallback faviconCallback);
|
| - }
|
| -
|
| - /**
|
| - * Constructor for inflating from XML.
|
| - */
|
| - public BookmarksPageView(Context context, AttributeSet attrs) {
|
| - super(context, attrs);
|
| -
|
| - mDesiredFaviconSize = getResources().getDimensionPixelSize(
|
| - R.dimen.ntp_list_item_favicon_size);
|
| - mFaviconCache = new LruCache<String, Bitmap>(MAX_NUM_FAVICONS_TO_CACHE);
|
| - mAdapter = new BookmarkListAdapter();
|
| - }
|
| -
|
| - @Override
|
| - protected void onFinishInflate() {
|
| - super.onFinishInflate();
|
| -
|
| - mHierarchyContainer =
|
| - (HorizontalScrollView) findViewById(R.id.folder_structure_scroll_view);
|
| - mHierarchyContainer.setSmoothScrollingEnabled(true);
|
| - mHierarchyLayout = (LinearLayout) findViewById(R.id.bookmark_folder_structure);
|
| -
|
| - mBookmarksList = (BookmarksListView) findViewById(R.id.bookmarks_list_view);
|
| - mBookmarksList.setAdapter(mAdapter);
|
| -
|
| - mEmptyView = (TextView) findViewById(R.id.bookmarks_empty_view);
|
| - mBookmarksList.setEmptyView(mEmptyView);
|
| - }
|
| -
|
| - @Override
|
| - public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
|
| - // Fixes lanscape transitions when unfocusing the URL bar: crbug.com/288546
|
| - outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;
|
| - return super.onCreateInputConnection(outAttrs);
|
| - }
|
| -
|
| - /**
|
| - * Handles initializing the view.
|
| - * @param manager The manager handling the external dependencies of this view.
|
| - */
|
| - void initialize(BookmarksPageManager manager) {
|
| - mManager = manager;
|
| - }
|
| -
|
| - @Override
|
| - protected void onDetachedFromWindow() {
|
| - mSavedListPosition = mBookmarksList.getFirstVisiblePosition();
|
| - View v = mBookmarksList.getChildAt(0);
|
| - mSavedListTop = (v == null) ? 0 : v.getTop();
|
| - super.onDetachedFromWindow();
|
| - }
|
| -
|
| - @Override
|
| - protected void onAttachedToWindow() {
|
| - super.onAttachedToWindow();
|
| - mBookmarksList.setSelectionFromTop(mSavedListPosition, mSavedListTop);
|
| - }
|
| -
|
| - /**
|
| - * @see org.chromium.chrome.browser.compositor.layouts.content
|
| - * .InvalidationAwareThumbnailProvider#shouldCaptureThumbnail()
|
| - */
|
| - boolean shouldCaptureThumbnail() {
|
| - if (getWidth() == 0 || getHeight() == 0) return false;
|
| -
|
| - View topItem = mBookmarksList.getChildAt(0);
|
| - return mSnapshotBookmarksChanged
|
| - || getWidth() != mSnapshotWidth
|
| - || getHeight() != mSnapshotHeight
|
| - || mSnapshotBookmarksListPosition != mBookmarksList.getFirstVisiblePosition()
|
| - || mSnapshotBookmarksListTop != (topItem == null ? 0 : topItem.getTop())
|
| - || mHierarchyContainer.getScrollX() != mSnapshotBookmarksHierarchyScrollX;
|
| - }
|
| -
|
| - /**
|
| - * Triggered after a thumbnail has been captured to update the thumbnail visual state used to
|
| - * determine dirtiness.
|
| - */
|
| - void updateThumbnailState() {
|
| - mSnapshotWidth = getWidth();
|
| - mSnapshotHeight = getHeight();
|
| - mSnapshotBookmarksListPosition = mBookmarksList.getFirstVisiblePosition();
|
| - View topItem = mBookmarksList.getChildAt(0);
|
| - mSnapshotBookmarksListTop = topItem == null ? 0 : topItem.getTop();
|
| - mSnapshotBookmarksHierarchyScrollX = mHierarchyContainer.getScrollX();
|
| - mSnapshotBookmarksChanged = false;
|
| - }
|
| -
|
| - // BookmarksCallback overrides
|
| -
|
| - @Override
|
| - public void onBookmarksAvailable(BookmarkId folderId, List<BookmarkItem> bookmarksList) {
|
| - if (mEmptyView.length() == 0) {
|
| - // Set the empty view's text now that the first bookmarks callback has happened. If we
|
| - // set the text earlier, the user will see the "No bookmarks here" message while we're
|
| - // waiting for the callback.
|
| - mEmptyView.setText(R.string.bookmarks_folder_empty);
|
| - }
|
| -
|
| - mAdapter.setBookmarksList(bookmarksList);
|
| - mAdapter.notifyDataSetChanged();
|
| -
|
| - // In theory, the adapter should trigger a re-layout when the bookmarks list changes. In
|
| - // practice, if the bookmarks page is in the background and hence not attached to the view
|
| - // hierarchy, this doesn't happen. So, trigger the re-layout explicitly.
|
| - mBookmarksList.requestLayout();
|
| - mBookmarksList.invalidate();
|
| -
|
| - // Cause the scroll bar to appear then fade out again if this folder is scrollable.
|
| - mBookmarksList.awakenScrollBars();
|
| -
|
| - mSnapshotBookmarksChanged = true;
|
| - }
|
| -
|
| - @Override
|
| - public void onBookmarksFolderHierarchyAvailable(BookmarkId folderId,
|
| - List<BookmarkItem> bookmarksList) {
|
| - if (mManager.isDestroyed()) return;
|
| - mHierarchyLayout.removeAllViews();
|
| - for (int i = bookmarksList.size() - 1; i >= 0; i--) {
|
| - BookmarkItem bookmark = bookmarksList.get(i);
|
| - addItemToHierarchyView(bookmark.getTitle(), bookmark.getId(), (i == 0) ? true : false);
|
| - }
|
| - mHierarchyLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
| - @Override
|
| - public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
| - int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
| - mHierarchyLayout.removeOnLayoutChangeListener(this);
|
| - mHierarchyContainer.fullScroll(LocalizationUtils.isLayoutRtl()
|
| - ? View.FOCUS_LEFT : View.FOCUS_RIGHT);
|
| - }
|
| - });
|
| -
|
| - mSnapshotBookmarksChanged = true;
|
| - }
|
| -
|
| - /**
|
| - * Add a BookmarkFolderHierarchyItem item to the hierarchy layout.
|
| - * @param title Title of the folder
|
| - * @param id Id of the folder
|
| - * @param isCurrentFolder Whether the folder is the current folder.
|
| - */
|
| - private void addItemToHierarchyView(String title, final BookmarkId id,
|
| - boolean isCurrentFolder) {
|
| - if (TextUtils.isEmpty(title)) {
|
| - // TODO(cramya): Need to check why we cannot get "Bookmarks" folder information.
|
| - title = getResources().getString(R.string.ntp_bookmarks);
|
| - } else {
|
| - ImageView separator = new ImageView(getContext());
|
| - separator.setImageResource(R.drawable.breadcrumb_arrow);
|
| - mHierarchyLayout.addView(separator);
|
| - }
|
| - final BookmarkFolderHierarchyItem item = new BookmarkFolderHierarchyItem(
|
| - getContext(), mManager, id, title, isCurrentFolder);
|
| - mHierarchyLayout.addView(item);
|
| - }
|
| -
|
| - /**
|
| - * List Adapter for Bookmarks List View.
|
| - */
|
| - private class BookmarkListAdapter extends BaseAdapter {
|
| -
|
| - public List<BookmarkItem> mBookmarks = Collections.emptyList();
|
| -
|
| - /**
|
| - * Sets the bookmarks list for adapter.
|
| - * @param bookmarks BookmarkItem list.
|
| - */
|
| - public void setBookmarksList(List<BookmarkItem> bookmarks) {
|
| - mBookmarks = bookmarks;
|
| - }
|
| -
|
| - @Override
|
| - public View getView(int position, View convertView, ViewGroup parent) {
|
| - if (mDrawingData == null) mDrawingData = new BookmarkItemView.DrawingData(getContext());
|
| - final BookmarkItem bookmark = getItem(position);
|
| - final BookmarkItemView item;
|
| - if (convertView instanceof BookmarkItemView) {
|
| - item = (BookmarkItemView) convertView;
|
| - if (!item.reset(bookmark.getId(), bookmark.getTitle(), bookmark.getUrl(),
|
| - bookmark.isEditable(), bookmark.isManaged())) {
|
| - return item;
|
| - }
|
| - } else {
|
| - item = new BookmarkItemView(getContext(), mManager,
|
| - bookmark.getId(), bookmark.getTitle(), bookmark.getUrl(),
|
| - bookmark.isEditable(), bookmark.isManaged(), mDrawingData);
|
| - }
|
| - if (!bookmark.isFolder() && !TextUtils.isEmpty(bookmark.getUrl())) {
|
| - Bitmap favicon = mFaviconCache.get(bookmark.getUrl());
|
| - if (favicon != null) {
|
| - item.setFavicon(favicon);
|
| - } else if (!mManager.isDestroyed()) {
|
| - FaviconImageCallback faviconCallback = new FaviconImageCallback() {
|
| - @Override
|
| - public void onFaviconAvailable(Bitmap image, String iconUrl) {
|
| - if (image == null) {
|
| - if (mDefaultFavicon == null) {
|
| - mDefaultFavicon = BitmapFactory.decodeResource(
|
| - getResources(), R.drawable.default_favicon);
|
| - }
|
| - image = mDefaultFavicon;
|
| - }
|
| - mFaviconCache.put(bookmark.getUrl(), image);
|
| - // It's possible the BookmarkItemView has been recycled and is now
|
| - // displaying a different bookmark. Don't update the favicon in this
|
| - // case.
|
| - if (bookmark.getUrl().equals(item.getUrl())) {
|
| - item.setFavicon(image);
|
| - mSnapshotBookmarksChanged = true;
|
| - }
|
| - }
|
| - };
|
| - mManager.getFaviconImageForUrl(bookmark.getUrl(), mDesiredFaviconSize,
|
| - faviconCallback);
|
| - }
|
| - }
|
| - return item;
|
| - }
|
| -
|
| - @Override
|
| - public long getItemId(int position) {
|
| - return position;
|
| - }
|
| -
|
| - @Override
|
| - public int getCount() {
|
| - return mBookmarks.size();
|
| - }
|
| -
|
| - @Override
|
| - public BookmarkItem getItem(int position) {
|
| - return mBookmarks.get(position);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isEmpty() {
|
| - return mBookmarks.isEmpty();
|
| - }
|
| -
|
| - @Override
|
| - public boolean hasStableIds() {
|
| - return false;
|
| - }
|
| - }
|
| -}
|
|
|