// 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.bookmarks; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.util.AttributeSet; import org.chromium.base.ApiCompatibilityUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; import org.chromium.chrome.browser.widget.RoundedIconGenerator; import org.chromium.components.bookmarks.BookmarkId; /** * A row view that shows bookmark info in the bookmarks UI. */ public class BookmarkItemRow extends BookmarkRow implements LargeIconCallback { private String mUrl; private RoundedIconGenerator mIconGenerator; private final int mMinIconSize; private final int mDisplayedIconSize; private final int mCornerRadius; /** * Constructor for inflating from XML. */ public BookmarkItemRow(Context context, AttributeSet attrs) { super(context, attrs); mCornerRadius = getResources().getDimensionPixelSize(R.dimen.default_favicon_corner_radius); mMinIconSize = (int) getResources().getDimension(R.dimen.default_favicon_min_size); mDisplayedIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_size); int textSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_icon_text_size); int iconColor = ApiCompatibilityUtils.getColor( getResources(), R.color.default_favicon_background_color); mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize , mDisplayedIconSize, mCornerRadius, iconColor, textSize); } // BookmarkRow implementation. @Override public void onClick() { int launchLocation = -1; switch (mDelegate.getCurrentState()) { case BookmarkUIState.STATE_FOLDER: launchLocation = BookmarkLaunchLocation.FOLDER; break; case BookmarkUIState.STATE_LOADING: assert false : "The main content shouldn't be inflated if it's still loading"; break; default: assert false : "State not valid"; break; } mDelegate.openBookmark(mBookmarkId, launchLocation); } @Override BookmarkItem setBookmarkId(BookmarkId bookmarkId) { BookmarkItem item = super.setBookmarkId(bookmarkId); mUrl = item.getUrl(); mIconImageView.setImageDrawable(null); mTitleView.setText(item.getTitle()); mDelegate.getLargeIconBridge().getLargeIconForUrl(mUrl, mMinIconSize, this); return item; } // LargeIconCallback implementation. @Override public void onLargeIconAvailable( Bitmap icon, int fallbackColor, boolean isFallbackColorDefault) { if (icon == null) { mIconGenerator.setBackgroundColor(fallbackColor); icon = mIconGenerator.generateIconForUrl(mUrl); mIconImageView.setImageDrawable(new BitmapDrawable(getResources(), icon)); } else { RoundedBitmapDrawable roundedIcon = RoundedBitmapDrawableFactory.create( getResources(), Bitmap.createScaledBitmap(icon, mDisplayedIconSize, mDisplayedIconSize, false)); roundedIcon.setCornerRadius(mCornerRadius); mIconImageView.setImageDrawable(roundedIcon); } } }