| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
|
| deleted file mode 100644
|
| index 6855ab42b08954ad374679f32c176b4589a9bc9f..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
|
| +++ /dev/null
|
| @@ -1,848 +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.app.Activity;
|
| -import android.content.res.Resources;
|
| -import android.graphics.Bitmap;
|
| -import android.graphics.drawable.BitmapDrawable;
|
| -import android.graphics.drawable.Drawable;
|
| -import android.text.TextUtils;
|
| -import android.util.LruCache;
|
| -import android.view.ContextMenu;
|
| -import android.view.LayoutInflater;
|
| -import android.view.MenuItem;
|
| -import android.view.MenuItem.OnMenuItemClickListener;
|
| -import android.view.View;
|
| -import android.view.ViewGroup;
|
| -import android.widget.BaseExpandableListAdapter;
|
| -import android.widget.TextView;
|
| -
|
| -import org.chromium.base.ApiCompatibilityUtils;
|
| -import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.ForeignSessionHelper.ForeignSession;
|
| -import org.chromium.chrome.browser.ForeignSessionHelper.ForeignSessionTab;
|
| -import org.chromium.chrome.browser.ForeignSessionHelper.ForeignSessionWindow;
|
| -import org.chromium.chrome.browser.RecentlyClosedBridge.RecentlyClosedTab;
|
| -import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
|
| -import org.chromium.ui.WindowOpenDisposition;
|
| -import org.chromium.ui.base.DeviceFormFactor;
|
| -
|
| -import java.util.ArrayList;
|
| -import java.util.List;
|
| -import java.util.concurrent.TimeUnit;
|
| -
|
| -/**
|
| - * Row adapter for presenting recently closed tabs, synced tabs from other devices, the sync or
|
| - * sign in promo, and currently open tabs (only in document mode) in a grouped list view.
|
| - */
|
| -public class RecentTabsRowAdapter extends BaseExpandableListAdapter {
|
| - private static final int MAX_NUM_FAVICONS_TO_CACHE = 256;
|
| -
|
| - private enum ChildType {
|
| - NONE, DEFAULT_CONTENT, SYNC_PROMO
|
| - }
|
| -
|
| - private enum GroupType {
|
| - CONTENT, VISIBLE_SEPARATOR, INVISIBLE_SEPARATOR
|
| - }
|
| -
|
| - private final Activity mActivity;
|
| - private final ArrayList<Group> mGroups;
|
| - private final Drawable mDefaultFavicon;
|
| - private final RecentTabsManager mRecentTabsManager;
|
| - private final RecentlyClosedTabsGroup mRecentlyClosedTabsGroup = new RecentlyClosedTabsGroup();
|
| - private final SeparatorGroup mVisibleSeparatorGroup = new SeparatorGroup(true);
|
| - private final SeparatorGroup mInvisibleSeparatorGroup = new SeparatorGroup(false);
|
| - private final long mInitializationTimestamp; // Seconds since Unix epoch.
|
| - private final FaviconCache mFaviconCache;
|
| - private final int mFaviconSize;
|
| -
|
| - /**
|
| - * A generic group of objects to be shown in the RecentTabsRowAdapter, such as the list of
|
| - * recently closed tabs.
|
| - */
|
| - abstract class Group {
|
| - /**
|
| - * @return The type of group: GroupType.CONTENT or GroupType.SEPARATOR.
|
| - */
|
| - abstract GroupType getGroupType();
|
| -
|
| - /**
|
| - * @return The number of children in this group.
|
| - */
|
| - abstract int getChildrenCount();
|
| -
|
| - /**
|
| - * @return The child type.
|
| - */
|
| - abstract ChildType getChildType();
|
| -
|
| -
|
| - /**
|
| - * @return The child at the position childPosition.
|
| - */
|
| - abstract Object getChild(int childPosition);
|
| -
|
| - /**
|
| - * Returns the view corresponding to the child view at a given position.
|
| - *
|
| - * @param childPosition The position of the child.
|
| - * @param isLastChild Whether this child is the last one.
|
| - * @param convertView The re-usable child view (may be null).
|
| - * @param parent The parent view group.
|
| - *
|
| - * @return The view corresponding to the child.
|
| - */
|
| - View getChildView(int childPosition, boolean isLastChild,
|
| - View convertView, ViewGroup parent) {
|
| - View childView = convertView;
|
| - if (childView == null) {
|
| - LayoutInflater inflater = LayoutInflater.from(mActivity);
|
| - childView = inflater.inflate(R.layout.recent_tabs_list_item, parent, false);
|
| -
|
| - ViewHolder viewHolder = new ViewHolder();
|
| - viewHolder.textView = (TextView) childView;
|
| - childView.setTag(viewHolder);
|
| - }
|
| -
|
| - ViewHolder viewHolder = (ViewHolder) childView.getTag();
|
| - configureChildView(childPosition, viewHolder);
|
| -
|
| - return childView;
|
| - }
|
| -
|
| - /**
|
| - * Configures a view inflated from recent_tabs_list_item.xml to display information about
|
| - * a child in this group.
|
| - *
|
| - * @param childPosition The position of the child within this group.
|
| - * @param viewHolder The ViewHolder with references to pieces of the view.
|
| - */
|
| - abstract void configureChildView(int childPosition, ViewHolder viewHolder);
|
| -
|
| - /**
|
| - * Returns the view corresponding to this group.
|
| - *
|
| - * @param isExpanded Whether the group is expanded.
|
| - * @param convertView The re-usable group view (may be null).
|
| - * @param parent The parent view group.
|
| - *
|
| - * @return The view corresponding to the group.
|
| - */
|
| - public View getGroupView(boolean isExpanded, View convertView, ViewGroup parent) {
|
| - assert convertView == null || convertView instanceof RecentTabsGroupView;
|
| - RecentTabsGroupView groupView = (RecentTabsGroupView) convertView;
|
| - if (groupView == null) {
|
| - groupView = (RecentTabsGroupView) LayoutInflater.from(mActivity).inflate(
|
| - R.layout.recent_tabs_group_item, parent, false);
|
| - groupView.initialize(mInitializationTimestamp);
|
| - }
|
| - configureGroupView(groupView, isExpanded);
|
| - return groupView;
|
| - }
|
| -
|
| - /**
|
| - * Configures an RecentTabsGroupView to display the header of this group.
|
| - * @param groupView The RecentTabsGroupView to configure.
|
| - * @param isExpanded Whether the view is currently expanded.
|
| - */
|
| - abstract void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded);
|
| -
|
| - /**
|
| - * Sets whether this group is collapsed (i.e. whether only the header is visible).
|
| - */
|
| - abstract void setCollapsed(boolean isCollapsed);
|
| -
|
| - /**
|
| - * @return Whether this group is collapsed.
|
| - */
|
| - abstract boolean isCollapsed();
|
| -
|
| - /**
|
| - * Called when a child item is clicked.
|
| - * @param childPosition The position of the child in the group.
|
| - * @return Whether the click was handled.
|
| - */
|
| - abstract boolean onChildClick(int childPosition);
|
| -
|
| - /**
|
| - * Called when the context menu for the group view is being built.
|
| - * @param menu The context menu being built.
|
| - * @param activity The current activity.
|
| - */
|
| - void onCreateContextMenuForGroup(ContextMenu menu, Activity activity) {
|
| - }
|
| -
|
| - /**
|
| - * Called when a context menu for one of the child views is being built.
|
| - * @param childPosition The position of the child in the group.
|
| - * @param menu The context menu being built.
|
| - * @param activity The current activity.
|
| - */
|
| - void onCreateContextMenuForChild(int childPosition, ContextMenu menu,
|
| - Activity activity) {
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A group containing all the tabs currently open on this device.
|
| - */
|
| - class CurrentlyOpenTabsGroup extends Group {
|
| - private static final int NUM_DEFAULT_VISIBLE_TABS = 6;
|
| -
|
| - private final List<CurrentlyOpenTab> mCurrentlyOpenTabs;
|
| - private final boolean mShowingAll;
|
| -
|
| - public CurrentlyOpenTabsGroup(List<CurrentlyOpenTab> tabsList) {
|
| - mCurrentlyOpenTabs = tabsList;
|
| - mShowingAll = mRecentTabsManager.isCurrentlyOpenTabsShowingAll();
|
| - }
|
| -
|
| - private boolean isMoreButton(int childPosition) {
|
| - return !mShowingAll && childPosition
|
| - == Math.min(NUM_DEFAULT_VISIBLE_TABS, mCurrentlyOpenTabs.size());
|
| - }
|
| -
|
| - @Override
|
| - GroupType getGroupType() {
|
| - return GroupType.CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - int getChildrenCount() {
|
| - if (mShowingAll) return mCurrentlyOpenTabs.size();
|
| - return Math.min(NUM_DEFAULT_VISIBLE_TABS, mCurrentlyOpenTabs.size() - 1) + 1;
|
| - }
|
| -
|
| - @Override
|
| - ChildType getChildType() {
|
| - return ChildType.DEFAULT_CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - CurrentlyOpenTab getChild(int childPosition) {
|
| - if (isMoreButton(childPosition)) return null;
|
| -
|
| - return mCurrentlyOpenTabs.get(childPosition);
|
| - }
|
| -
|
| - @Override
|
| - void configureChildView(int childPosition, ViewHolder viewHolder) {
|
| - if (isMoreButton(childPosition)) {
|
| - Resources resources = mActivity.getResources();
|
| - String text = resources.getString(R.string.recent_tabs_show_more);
|
| - viewHolder.textView.setText(text);
|
| - Drawable drawable = ApiCompatibilityUtils.getDrawable(
|
| - resources, R.drawable.more_horiz);
|
| - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(
|
| - viewHolder.textView, drawable, null, null, null);
|
| - } else {
|
| - CurrentlyOpenTab openTab = getChild(childPosition);
|
| - viewHolder.textView.setText(TextUtils.isEmpty(openTab.getTitle()) ? openTab.getUrl()
|
| - : openTab.getTitle());
|
| - loadLocalFavicon(viewHolder, openTab.getUrl());
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded) {
|
| - groupView.configureForCurrentlyOpenTabs(isExpanded);
|
| - }
|
| -
|
| - @Override
|
| - void setCollapsed(boolean isCollapsed) {
|
| - mRecentTabsManager.setCurrentlyOpenTabsCollapsed(isCollapsed);
|
| - }
|
| -
|
| - @Override
|
| - boolean isCollapsed() {
|
| - return mRecentTabsManager.isCurrentlyOpenTabsCollapsed();
|
| - }
|
| -
|
| - @Override
|
| - boolean onChildClick(int childPosition) {
|
| - if (isMoreButton(childPosition)) {
|
| - mRecentTabsManager.setCurrentlyOpenTabsShowAll(true);
|
| - } else {
|
| - getChild(childPosition).getRunnable().run();
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - @Override
|
| - void onCreateContextMenuForChild(final int childPosition, ContextMenu menu,
|
| - Activity activity) {
|
| - if (isMoreButton(childPosition)) return;
|
| - OnMenuItemClickListener listener = new OnMenuItemClickListener() {
|
| - @Override
|
| - public boolean onMenuItemClick(MenuItem item) {
|
| - mRecentTabsManager.closeTab(getChild(childPosition));
|
| - return true;
|
| - }
|
| - };
|
| - menu.add(R.string.close_tab).setOnMenuItemClickListener(listener);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A group containing all the tabs associated with a foreign session from a synced device.
|
| - */
|
| - class ForeignSessionGroup extends Group {
|
| - private final ForeignSession mForeignSession;
|
| -
|
| - ForeignSessionGroup(ForeignSession foreignSession) {
|
| - mForeignSession = foreignSession;
|
| - }
|
| -
|
| - @Override
|
| - public GroupType getGroupType() {
|
| - return GroupType.CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - public int getChildrenCount() {
|
| - int count = 0;
|
| - for (ForeignSessionWindow window : mForeignSession.windows) {
|
| - count += window.tabs.size();
|
| - }
|
| - return count;
|
| - }
|
| -
|
| - @Override
|
| - public ChildType getChildType() {
|
| - return ChildType.DEFAULT_CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - public ForeignSessionTab getChild(int childPosition) {
|
| - for (ForeignSessionWindow window : mForeignSession.windows) {
|
| - if (childPosition < window.tabs.size()) {
|
| - return window.tabs.get(childPosition);
|
| - }
|
| - childPosition -= window.tabs.size();
|
| - }
|
| - assert false;
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public void configureChildView(int childPosition, ViewHolder viewHolder) {
|
| - ForeignSessionTab sessionTab = getChild(childPosition);
|
| - viewHolder.textView.setText(TextUtils.isEmpty(sessionTab.title) ? sessionTab.url
|
| - : sessionTab.title);
|
| - loadSyncedFavicon(viewHolder, sessionTab.url);
|
| - }
|
| -
|
| - @Override
|
| - public void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded) {
|
| - groupView.configureForForeignSession(mForeignSession, isExpanded);
|
| - }
|
| -
|
| - @Override
|
| - public void setCollapsed(boolean isCollapsed) {
|
| - mRecentTabsManager.setForeignSessionCollapsed(mForeignSession, isCollapsed);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isCollapsed() {
|
| - return mRecentTabsManager.getForeignSessionCollapsed(mForeignSession);
|
| - }
|
| -
|
| - @Override
|
| - public boolean onChildClick(int childPosition) {
|
| - ForeignSessionTab foreignSessionTab = getChild(childPosition);
|
| - mRecentTabsManager.openForeignSessionTab(mForeignSession, foreignSessionTab,
|
| - WindowOpenDisposition.CURRENT_TAB);
|
| - return true;
|
| - }
|
| -
|
| - @Override
|
| - public void onCreateContextMenuForGroup(ContextMenu menu, Activity activity) {
|
| - OnMenuItemClickListener listener = new OnMenuItemClickListener() {
|
| - @Override
|
| - public boolean onMenuItemClick(MenuItem item) {
|
| - mRecentTabsManager.deleteForeignSession(mForeignSession);
|
| - return true;
|
| - }
|
| - };
|
| - menu.add(R.string.ntp_recent_tabs_remove_menu_option)
|
| - .setOnMenuItemClickListener(listener);
|
| - }
|
| -
|
| - @Override
|
| - public void onCreateContextMenuForChild(int childPosition, ContextMenu menu,
|
| - Activity activity) {
|
| - final ForeignSessionTab foreignSessionTab = getChild(childPosition);
|
| - OnMenuItemClickListener listener = new OnMenuItemClickListener() {
|
| - @Override
|
| - public boolean onMenuItemClick(MenuItem item) {
|
| - mRecentTabsManager.openForeignSessionTab(mForeignSession, foreignSessionTab,
|
| - WindowOpenDisposition.NEW_BACKGROUND_TAB);
|
| - return true;
|
| - }
|
| - };
|
| - menu.add(R.string.contextmenu_open_in_new_tab).setOnMenuItemClickListener(listener);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A group containing tabs that were recently closed on this device and a link to the history
|
| - * page.
|
| - */
|
| - class RecentlyClosedTabsGroup extends Group {
|
| - private static final int ID_OPEN_IN_NEW_TAB = 1;
|
| - private static final int ID_REMOVE_ALL = 2;
|
| -
|
| - @Override
|
| - public GroupType getGroupType() {
|
| - return GroupType.CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - public int getChildrenCount() {
|
| - // The number of children is the number of recently closed tabs, plus one for the "Show
|
| - // full history" item.
|
| - return 1 + mRecentTabsManager.getRecentlyClosedTabs().size();
|
| - }
|
| -
|
| - @Override
|
| - public ChildType getChildType() {
|
| - return ChildType.DEFAULT_CONTENT;
|
| - }
|
| -
|
| - /**
|
| - * @param childPosition The index of an item in the recently closed list.
|
| - * @return Whether the item at childPosition is the link to the history page.
|
| - */
|
| - private boolean isHistoryLink(int childPosition) {
|
| - return childPosition == mRecentTabsManager.getRecentlyClosedTabs().size();
|
| - }
|
| -
|
| - @Override
|
| - public RecentlyClosedTab getChild(int childPosition) {
|
| - if (isHistoryLink(childPosition)) {
|
| - return null;
|
| - }
|
| - return mRecentTabsManager.getRecentlyClosedTabs().get(childPosition);
|
| - }
|
| -
|
| - @Override
|
| - public void configureChildView(int childPosition, ViewHolder viewHolder) {
|
| - if (isHistoryLink(childPosition)) {
|
| - viewHolder.textView.setText(R.string.show_full_history);
|
| - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(
|
| - viewHolder.textView, R.drawable.history_favicon, 0, 0, 0);
|
| - } else {
|
| - RecentlyClosedTab tab = getChild(childPosition);
|
| - String title = NewTabPageView.getTitleForDisplay(tab.title, tab.url);
|
| - viewHolder.textView.setText(title);
|
| - loadLocalFavicon(viewHolder, tab.url);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded) {
|
| - groupView.configureForRecentlyClosedTabs(isExpanded);
|
| - }
|
| -
|
| - @Override
|
| - public void setCollapsed(boolean isCollapsed) {
|
| - mRecentTabsManager.setRecentlyClosedTabsCollapsed(isCollapsed);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isCollapsed() {
|
| - return mRecentTabsManager.isRecentlyClosedTabsCollapsed();
|
| - }
|
| -
|
| - @Override
|
| - public boolean onChildClick(int childPosition) {
|
| - if (isHistoryLink(childPosition)) {
|
| - mRecentTabsManager.openHistoryPage();
|
| - } else {
|
| - mRecentTabsManager.openRecentlyClosedTab(getChild(childPosition),
|
| - WindowOpenDisposition.CURRENT_TAB);
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - @Override
|
| - public void onCreateContextMenuForGroup(ContextMenu menu, Activity activity) {
|
| - }
|
| -
|
| - @Override
|
| - public void onCreateContextMenuForChild(final int childPosition, ContextMenu menu,
|
| - Activity activity) {
|
| - final RecentlyClosedTab recentlyClosedTab = getChild(childPosition);
|
| - if (recentlyClosedTab == null) return;
|
| - OnMenuItemClickListener listener = new OnMenuItemClickListener() {
|
| - @Override
|
| - public boolean onMenuItemClick(MenuItem item) {
|
| - switch (item.getItemId()) {
|
| - case ID_REMOVE_ALL:
|
| - mRecentTabsManager.clearRecentlyClosedTabs();
|
| - break;
|
| - case ID_OPEN_IN_NEW_TAB:
|
| - mRecentTabsManager.openRecentlyClosedTab(recentlyClosedTab,
|
| - WindowOpenDisposition.NEW_BACKGROUND_TAB);
|
| - break;
|
| - default:
|
| - assert false;
|
| - }
|
| - return true;
|
| - }
|
| - };
|
| - menu.add(ContextMenu.NONE, ID_OPEN_IN_NEW_TAB, ContextMenu.NONE,
|
| - R.string.contextmenu_open_in_new_tab).setOnMenuItemClickListener(listener);
|
| - menu.add(ContextMenu.NONE, ID_REMOVE_ALL, ContextMenu.NONE,
|
| - R.string.remove_all).setOnMenuItemClickListener(listener);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A group containing a blank separator.
|
| - */
|
| - class SeparatorGroup extends Group {
|
| - private final boolean mIsVisible;
|
| -
|
| - public SeparatorGroup(boolean isVisible) {
|
| - mIsVisible = isVisible;
|
| - }
|
| -
|
| - @Override
|
| - public GroupType getGroupType() {
|
| - return mIsVisible ? GroupType.VISIBLE_SEPARATOR : GroupType.INVISIBLE_SEPARATOR;
|
| - }
|
| -
|
| - @Override
|
| - public ChildType getChildType() {
|
| - return ChildType.NONE;
|
| - }
|
| -
|
| - @Override
|
| - public int getChildrenCount() {
|
| - return 0;
|
| - }
|
| -
|
| - @Override
|
| - public View getGroupView(boolean isExpanded, View convertView, ViewGroup parent) {
|
| - if (convertView == null) {
|
| - int layout = mIsVisible
|
| - ? R.layout.recent_tabs_group_separator_visible
|
| - : R.layout.recent_tabs_group_separator_invisible;
|
| - convertView = LayoutInflater.from(mActivity).inflate(layout, parent, false);
|
| - }
|
| - return convertView;
|
| - }
|
| -
|
| - @Override
|
| - public void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded) {
|
| - }
|
| -
|
| - @Override
|
| - public void configureChildView(int childPosition, ViewHolder viewHolder) {
|
| - }
|
| -
|
| - @Override
|
| - public Object getChild(int childPosition) {
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public void setCollapsed(boolean isCollapsed) {
|
| - }
|
| -
|
| - @Override
|
| - public boolean isCollapsed() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public boolean onChildClick(int childPosition) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A group containing the Sync Promo.
|
| - */
|
| - class SyncPromoGroup extends Group {
|
| - @Override
|
| - public GroupType getGroupType() {
|
| - return GroupType.CONTENT;
|
| - }
|
| -
|
| - @Override
|
| - public ChildType getChildType() {
|
| - return ChildType.SYNC_PROMO;
|
| - }
|
| -
|
| - @Override
|
| - public int getChildrenCount() {
|
| - return 1;
|
| - }
|
| -
|
| - @Override
|
| - public Object getChild(int childPosition) {
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - View getChildView(int childPosition, boolean isLastChild, View convertView,
|
| - ViewGroup parent) {
|
| - if (convertView == null) {
|
| - convertView = new RecentTabsPromoView(mActivity, mRecentTabsManager, null);
|
| - }
|
| - return convertView;
|
| - }
|
| -
|
| - @Override
|
| - public void configureChildView(int childPosition, ViewHolder viewHolder) {
|
| - }
|
| -
|
| - @Override
|
| - public void configureGroupView(RecentTabsGroupView groupView, boolean isExpanded) {
|
| - groupView.configureForSyncPromo(isExpanded);
|
| - }
|
| -
|
| - @Override
|
| - public void setCollapsed(boolean isCollapsed) {
|
| - mRecentTabsManager.setSyncPromoCollapsed(isCollapsed);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isCollapsed() {
|
| - return mRecentTabsManager.isSyncPromoCollapsed();
|
| - }
|
| -
|
| - @Override
|
| - public boolean onChildClick(int childPosition) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - private static class FaviconCache {
|
| - private static final String SYNCED_FAVICON_PREFIX = "Synced";
|
| - private static final String LOCAL_FAVICON_PREFIX = "Local";
|
| -
|
| - private final LruCache<String, Drawable> mMemoryCache;
|
| -
|
| - public FaviconCache(int size) {
|
| - mMemoryCache = new LruCache<String, Drawable>(size);
|
| - }
|
| -
|
| - public Drawable getSyncedFaviconImage(String url) {
|
| - return mMemoryCache.get(SYNCED_FAVICON_PREFIX + url);
|
| - }
|
| -
|
| - public void putSycnedFaviconImage(String url, Drawable image) {
|
| - mMemoryCache.put(SYNCED_FAVICON_PREFIX + url, image);
|
| - }
|
| -
|
| - public Drawable getLocalFaviconImage(String url) {
|
| - return mMemoryCache.get(LOCAL_FAVICON_PREFIX + url);
|
| - }
|
| -
|
| - public void putLocalFaviconImage(String url, Drawable image) {
|
| - mMemoryCache.put(LOCAL_FAVICON_PREFIX + url, image);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Creates an RecentTabsRowAdapter used to populate an ExpandableList with other
|
| - * devices and foreign tab cells.
|
| - *
|
| - * @param activity The Android activity this adapter will work in.
|
| - * @param recentTabsManager The RecentTabsManager that will act as the data source.
|
| - */
|
| - public RecentTabsRowAdapter(Activity activity, RecentTabsManager recentTabsManager) {
|
| - mActivity = activity;
|
| - mRecentTabsManager = recentTabsManager;
|
| - mGroups = new ArrayList<Group>();
|
| - mInitializationTimestamp =
|
| - TimeUnit.SECONDS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
|
| - mFaviconCache = buildFaviconCache(MAX_NUM_FAVICONS_TO_CACHE);
|
| -
|
| - Resources resources = activity.getResources();
|
| - mDefaultFavicon = ApiCompatibilityUtils.getDrawable(resources, R.drawable.default_favicon);
|
| - mFaviconSize = mDefaultFavicon.getIntrinsicHeight();
|
| - }
|
| -
|
| - private static FaviconCache buildFaviconCache(int size) {
|
| - return new FaviconCache(size);
|
| - }
|
| -
|
| - /**
|
| - * ViewHolder class optimizes looking up table row fields. findViewById is only called once
|
| - * per row view initialization, and the references are cached here. Also stores a reference to
|
| - * the favicon image callback; so that we can make sure we load the correct favicon.
|
| - */
|
| - private static class ViewHolder {
|
| - public TextView textView;
|
| - public FaviconImageCallback imageCallback;
|
| - }
|
| -
|
| - private Drawable faviconDrawable(Bitmap image) {
|
| - if (image == null) return null;
|
| - return new BitmapDrawable(mActivity.getResources(), Bitmap.createScaledBitmap(image,
|
| - mFaviconSize, mFaviconSize, true));
|
| - }
|
| -
|
| - private void loadSyncedFavicon(final ViewHolder viewHolder, final String url) {
|
| - Drawable image = mFaviconCache.getSyncedFaviconImage(url);
|
| - if (image == null) {
|
| - image = faviconDrawable(mRecentTabsManager.getSyncedFaviconImageForURL(url));
|
| - image = (image == null) ? mDefaultFavicon : image;
|
| - mFaviconCache.putSycnedFaviconImage(url, image);
|
| - }
|
| - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(viewHolder.textView,
|
| - image, null, null, null);
|
| - }
|
| -
|
| - private void loadLocalFavicon(final ViewHolder viewHolder, final String url) {
|
| - Drawable image;
|
| - if (url == null) {
|
| - // URL is null for print jobs, for example.
|
| - image = mDefaultFavicon;
|
| - } else {
|
| - image = mFaviconCache.getLocalFaviconImage(url);
|
| - if (image == null) {
|
| - FaviconImageCallback imageCallback = new FaviconImageCallback() {
|
| - @Override
|
| - public void onFaviconAvailable(Bitmap bitmap, String iconUrl) {
|
| - if (this != viewHolder.imageCallback) return;
|
| - Drawable image = faviconDrawable(bitmap);
|
| - image = (image == null) ? mDefaultFavicon : image;
|
| - mFaviconCache.putLocalFaviconImage(url, image);
|
| - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(
|
| - viewHolder.textView, image, null, null, null);
|
| - }
|
| - };
|
| - viewHolder.imageCallback = imageCallback;
|
| - mRecentTabsManager.getLocalFaviconForUrl(url, mFaviconSize, imageCallback);
|
| - image = mDefaultFavicon;
|
| - }
|
| - }
|
| - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(viewHolder.textView,
|
| - image, null, null, null);
|
| - }
|
| -
|
| - @Override
|
| - public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
|
| - View convertView, ViewGroup parent) {
|
| - return getGroup(groupPosition).getChildView(childPosition, isLastChild, convertView,
|
| - parent);
|
| - }
|
| -
|
| - // BaseExpandableListAdapter group related implementations
|
| - @Override
|
| - public int getGroupCount() {
|
| - return mGroups.size();
|
| - }
|
| -
|
| - @Override
|
| - public long getGroupId(int groupPosition) {
|
| - return groupPosition;
|
| - }
|
| -
|
| - @Override
|
| - public Group getGroup(int groupPosition) {
|
| - return mGroups.get(groupPosition);
|
| - }
|
| -
|
| - @Override
|
| - public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
|
| - ViewGroup parent) {
|
| - return getGroup(groupPosition).getGroupView(isExpanded, convertView, parent);
|
| - }
|
| -
|
| - // BaseExpandableListAdapter child related implementations
|
| - @Override
|
| - public int getChildrenCount(int groupPosition) {
|
| - return getGroup(groupPosition).getChildrenCount();
|
| - }
|
| -
|
| - @Override
|
| - public long getChildId(int groupPosition, int childPosition) {
|
| - return childPosition;
|
| - }
|
| -
|
| - @Override
|
| - public Object getChild(int groupPosition, int childPosition) {
|
| - return getGroup(groupPosition).getChild(childPosition);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isChildSelectable(int groupPosition, int childPosition) {
|
| - return true;
|
| - }
|
| -
|
| - // BaseExpandableListAdapter misc. implementation
|
| - @Override
|
| - public boolean hasStableIds() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public int getGroupType(int groupPosition) {
|
| - return getGroup(groupPosition).getGroupType().ordinal();
|
| - }
|
| -
|
| - @Override
|
| - public int getGroupTypeCount() {
|
| - return GroupType.values().length;
|
| - }
|
| -
|
| - private void addGroup(Group group) {
|
| - if (!DeviceFormFactor.isTablet(mActivity)) {
|
| - mGroups.add(group);
|
| - } else {
|
| - if (mGroups.size() == 0) {
|
| - mGroups.add(mInvisibleSeparatorGroup);
|
| - }
|
| - mGroups.add(group);
|
| - mGroups.add(mInvisibleSeparatorGroup);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void notifyDataSetChanged() {
|
| - mGroups.clear();
|
| - List<CurrentlyOpenTab> tabList = mRecentTabsManager.getCurrentlyOpenTabs();
|
| - if (tabList != null && !tabList.isEmpty()) {
|
| - addGroup(new CurrentlyOpenTabsGroup(tabList));
|
| - }
|
| - addGroup(mRecentlyClosedTabsGroup);
|
| - for (ForeignSession session : mRecentTabsManager.getForeignSessions()) {
|
| - addGroup(new ForeignSessionGroup(session));
|
| - }
|
| - if (mRecentTabsManager.shouldDisplaySyncPromo()) {
|
| - addGroup(new SyncPromoGroup());
|
| - }
|
| -
|
| - // Add separator line after the recently closed tabs group.
|
| - int recentlyClosedIndex = mGroups.indexOf(mRecentlyClosedTabsGroup);
|
| - if (DeviceFormFactor.isTablet(mActivity)) {
|
| - if (recentlyClosedIndex != mGroups.size() - 2) {
|
| - mGroups.set(recentlyClosedIndex + 1, mVisibleSeparatorGroup);
|
| - }
|
| - } else if (recentlyClosedIndex != mGroups.size() - 1) {
|
| - mGroups.add(recentlyClosedIndex + 1, mVisibleSeparatorGroup);
|
| - }
|
| -
|
| - super.notifyDataSetChanged();
|
| - }
|
| -
|
| - @Override
|
| - public int getChildType(int groupPosition, int childPosition) {
|
| - return mGroups.get(groupPosition).getChildType().ordinal();
|
| - }
|
| -
|
| - @Override
|
| - public int getChildTypeCount() {
|
| - return ChildType.values().length;
|
| - }
|
| -}
|
|
|