summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagar Dhawan <sdhawan@codeaurora.org>2015-08-10 17:27:58 -0700
committerjrizzoli <joey@cyanogenmoditalia.it>2015-08-28 13:15:47 +0200
commitca9ecfbb05d61a72bad739a24dae771b1bbaa683 (patch)
tree0273de3074530525bb5565cb7807ae57006fa153
parent6014dad6acf443eb1b06ba064eb06ae8ea26229f (diff)
downloadandroid_packages_apps_Gello-ca9ecfbb05d61a72bad739a24dae771b1bbaa683.tar.gz
android_packages_apps_Gello-ca9ecfbb05d61a72bad739a24dae771b1bbaa683.tar.bz2
android_packages_apps_Gello-ca9ecfbb05d61a72bad739a24dae771b1bbaa683.zip
Multiple fixes for Favicons
- Per Site Settings now uses SiteTiles and shows favicons - New default Favicon - Fixed missing Favicons on History items Change-Id: Ia0317694ede81d62ce04e0693f9779f65030165c
-rw-r--r--res/drawable-xxhdpi/ic_deco_favicon_normal.pngbin2828 -> 1028 bytes
-rw-r--r--res/layout/swe_website_settings.xml51
-rw-r--r--res/layout/website_settings_row.xml16
-rw-r--r--src/com/android/browser/BaseUi.java8
-rw-r--r--src/com/android/browser/BrowserHistoryPage.java8
-rw-r--r--src/com/android/browser/BrowserSnapshotPage.java12
-rw-r--r--src/com/android/browser/BrowserWebView.java12
-rw-r--r--src/com/android/browser/Controller.java13
-rw-r--r--src/com/android/browser/NavigationBarBase.java28
-rw-r--r--src/com/android/browser/SiteTileView.java4
-rw-r--r--src/com/android/browser/Tab.java46
-rw-r--r--src/com/android/browser/preferences/WebsiteSettingsFragment.java83
12 files changed, 177 insertions, 104 deletions
diff --git a/res/drawable-xxhdpi/ic_deco_favicon_normal.png b/res/drawable-xxhdpi/ic_deco_favicon_normal.png
index 5e38c971..ac3b2a46 100644
--- a/res/drawable-xxhdpi/ic_deco_favicon_normal.png
+++ b/res/drawable-xxhdpi/ic_deco_favicon_normal.png
Binary files differ
diff --git a/res/layout/swe_website_settings.xml b/res/layout/swe_website_settings.xml
index 50d593c1..b71d4cc0 100644
--- a/res/layout/swe_website_settings.xml
+++ b/res/layout/swe_website_settings.xml
@@ -23,34 +23,47 @@
android:layout_width="match_parent"
android:background="@android:color/transparent">
- <ListView android:id="@android:id/list"
+ <FrameLayout
android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:clipToPadding="false"
- android:drawSelectorOnTop="false"
- android:cacheColorHint="@android:color/transparent"
- android:divider="@null"
- android:dividerHeight="0dp"
- android:scrollbarAlwaysDrawVerticalTrack="true" />
+ android:layout_height="fill_parent"
+ android:layout_weight="1">
+ <ListView android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:drawSelectorOnTop="false"
+ android:cacheColorHint="@android:color/transparent"
+ android:divider="@null"
+ android:dividerHeight="0dp"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/combo_shadow_height"
+ android:layout_gravity="bottom"
+ android:background="@drawable/shadow_top" />
+ </FrameLayout>
<LinearLayout
- android:orientation="horizontal"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:background="@color/primary"
+ style="?android:attr/buttonBarStyle" >
<Button android:id="@+id/add_new_site"
- android:layout_width="150dip"
- android:layout_height="wrap_content"
- android:layout_margin="5dip"
- android:text="@string/website_settings_add_origin"
- android:visibility="gone" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/website_settings_add_origin"
+ style="?android:attr/buttonBarButtonStyle"
+ />
<Button android:id="@+id/clear_all_button"
- android:layout_width="150dip"
android:layout_height="wrap_content"
- android:layout_margin="5dip"
+ android:layout_width="wrap_content"
+ android:layout_weight="1"
android:text="@string/website_settings_clear_all"
- android:visibility="gone" />
+ style="?android:attr/buttonBarButtonStyle"
+ />
</LinearLayout>
</LinearLayout>
diff --git a/res/layout/website_settings_row.xml b/res/layout/website_settings_row.xml
index 68c38d9c..32d53c80 100644
--- a/res/layout/website_settings_row.xml
+++ b/res/layout/website_settings_row.xml
@@ -21,15 +21,13 @@
android:gravity="center_vertical"
android:padding="0dip">
- <ImageView android:id="@+id/icon"
- android:layout_width="20dip"
- android:layout_height="20dip"
- android:layout_marginStart="18dip"
- android:layout_marginEnd="18dip"
- android:layout_centerVertical="true"
- android:background="@drawable/bookmark_list_favicon_bg"
- android:padding="2dip" />
-
+ <com.android.browser.SiteTileView
+ android:id="@+id/icon"
+ android:layout_centerVertical="true"
+ android:layout_width="36dp"
+ android:layout_height="36dp"
+ android:layout_marginStart="6dip"
+ android:layout_marginEnd="6dip"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 481f10ce..374bc15b 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -228,7 +228,6 @@ public abstract class BaseUi implements UI {
@Override
public void onTabDataChanged(Tab tab) {
setUrlTitle(tab);
- setFavicon(tab);
updateTabSecurityState(tab);
updateNavigationState(tab);
mTitleBar.onTabDataChanged(tab);
@@ -305,6 +304,7 @@ public abstract class BaseUi implements UI {
mTitleBar.bringToFront();
tab.getTopWindow().requestFocus();
onTabDataChanged(tab);
+ setFavicon(tab);
onProgressChanged(tab);
mNavigationBar.setIncognitoMode(tab.isPrivateBrowsingEnabled());
mBlockFocusAnimations = false;
@@ -722,10 +722,8 @@ public abstract class BaseUi implements UI {
}
// Set the favicon in the title bar.
- protected void setFavicon(Tab tab) {
- if (tab.inForeground()) {
- mNavigationBar.setFavicon(tab.getWebView().getFavicon());
- }
+ public void setFavicon(Tab tab) {
+ mNavigationBar.showCurrentFavicon(tab);
}
// active tabs page
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 80e1da7e..282ad6cf 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -35,6 +35,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.DataSetObserver;
+import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -87,6 +88,7 @@ public class BrowserHistoryPage extends Fragment
private ViewGroup mPrefsContainer;
private FragmentBreadCrumbs mFragmentBreadCrumbs;
private ExpandableListView mHistoryList;
+ private static Bitmap sDefaultFavicon;
private View mRoot;
@@ -211,6 +213,10 @@ public class BrowserHistoryPage extends Fragment
mCallback = (CombinedBookmarksCallbacks) cb;
}
}
+ if (sDefaultFavicon == null) {
+ sDefaultFavicon = BitmapFactory.decodeResource(
+ this.getResources(), R.drawable.ic_deco_favicon_normal);
+ }
}
@Override
@@ -676,7 +682,7 @@ public class BrowserHistoryPage extends Fragment
item.setFavicon(BitmapFactory.decodeByteArray(data, 0,
data.length));
} else {
- item.setFavicon(null);
+ item.setFavicon(sDefaultFavicon);
}
item.setIsBookmark(cursor.getInt(HistoryQuery.INDEX_IS_BOOKMARK) == 1);
return item;
diff --git a/src/com/android/browser/BrowserSnapshotPage.java b/src/com/android/browser/BrowserSnapshotPage.java
index c01691ff..a5a35195 100644
--- a/src/com/android/browser/BrowserSnapshotPage.java
+++ b/src/com/android/browser/BrowserSnapshotPage.java
@@ -77,6 +77,7 @@ public class BrowserSnapshotPage extends Fragment implements
private static final int SNAPSHOT_FAVICON = 4;
private static final int SNAPSHOT_URL = 5;
private static final int SNAPSHOT_DATE_CREATED = 6;
+ private static Bitmap sDefaultFavicon;
GridView mGrid;
View mEmpty;
@@ -98,6 +99,9 @@ public class BrowserSnapshotPage extends Fragment implements
}
}
mAnimateId = getArguments().getLong(EXTRA_ANIMATE_ID);
+ if (sDefaultFavicon == null)
+ sDefaultFavicon = BitmapFactory.decodeResource(getResources(),
+ R.drawable.ic_deco_favicon_normal);
}
@Override
@@ -190,7 +194,13 @@ public class BrowserSnapshotPage extends Fragment implements
private void populateBookmarkItem(Cursor cursor, BookmarkItem item) {
item.setName(cursor.getString(SNAPSHOT_TITLE));
item.setUrl(cursor.getString(SNAPSHOT_URL));
- item.setFavicon(getBitmap(cursor, SNAPSHOT_FAVICON));
+ Bitmap favicon = getBitmap(cursor, SNAPSHOT_FAVICON);
+ if (favicon != null) {
+ item.setFavicon(favicon);
+ } else {
+ item.setFavicon(sDefaultFavicon);
+ }
+
}
static Bitmap getBitmap(Cursor cursor, int columnIndex) {
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 9aa044c6..afcca1a5 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -17,6 +17,8 @@
package com.android.browser;
import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.content.res.Resources;
import android.util.AttributeSet;
@@ -200,6 +202,16 @@ public class BrowserWebView extends WebView implements WebView.TitleBarDelegate
}
@Override
+ public Bitmap getFavicon() {
+ Tab currentTab = mTitleBar.getUiController().getCurrentTab();
+ if (currentTab != null){
+ return currentTab.getFavicon();
+ }
+ else return BitmapFactory.decodeResource(
+ this.getResources(), R.drawable.ic_deco_favicon_normal);
+ }
+
+ @Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
Tab currentTab = mTitleBar.getUiController().getCurrentTab();
if (currentTab != null && currentTab.isKeyboardShowing()){
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 3678608b..2b66988c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -47,7 +47,6 @@ import android.media.AudioManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
-import android.net.http.SslError;
import android.net.wifi.WifiManager;
import android.net.wifi.ScanResult;
import android.os.AsyncTask;
@@ -978,7 +977,7 @@ public class Controller
String url = tab.getUrl();
// update the bookmark database for favicon
- maybeUpdateFavicon(tab, null, url, favicon);
+ syncBookmarkFavicon(tab, null, url, favicon);
Performance.tracePageStart(url);
@@ -1000,7 +999,7 @@ public class Controller
}
tab.onPageFinished();
- maybeUpdateFavicon(tab, tab.getOriginalUrl(), tab.getUrl(), tab.getFavicon());
+ syncBookmarkFavicon(tab, tab.getOriginalUrl(), tab.getUrl(), tab.getFavicon());
Performance.tracePageFinished();
}
@@ -1068,8 +1067,8 @@ public class Controller
@Override
public void onFavicon(Tab tab, WebView view, Bitmap icon) {
- mUi.onTabDataChanged(tab);
- maybeUpdateFavicon(tab, view.getOriginalUrl(), view.getUrl(), icon);
+ syncBookmarkFavicon(tab, view.getOriginalUrl(), view.getUrl(), icon);
+ ((BaseUi)mUi).setFavicon(tab);
}
@Override
@@ -1263,8 +1262,8 @@ public class Controller
* Update the favorites icon if the private browsing isn't enabled and the
* icon is valid.
*/
- private void maybeUpdateFavicon(Tab tab, final String originalUrl,
- final String url, Bitmap favicon) {
+ private void syncBookmarkFavicon(Tab tab, final String originalUrl,
+ final String url, Bitmap favicon) {
if (favicon == null) {
return;
}
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index d1054b9c..973094ca 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -256,16 +256,20 @@ public class NavigationBarBase extends LinearLayout implements
return mDefaultStatusBarColor;
}
- public void setFavicon(Bitmap icon) {
- int color = ColorUtils.getDominantColorForBitmap(icon);
- Tab tab = mUiController.getCurrentTab();
+ // Sets the favicon for the given tab if it's in the foreground
+ // If the tab doesn't have a favicon, it sets the default favicon
+ public void showCurrentFavicon(Tab tab) {
+ int color;
+ if (tab == null) { return; }
- if (tab != null) {
+ if (tab.inForeground()) {
if (tab.hasFavicon()) {
+ color = ColorUtils.getDominantColorForBitmap(tab.getFavicon());
updateSiteIconColor(tab.getUrl(), color);
setStatusAndNavigationBarColor(mUiController.getActivity(),
adjustColor(color, 1, 1, 0.7f));
- } else {
+
+ } else {
color = getSiteIconColor(tab.getUrl());
if (color != 0) {
setStatusAndNavigationBarColor(mUiController.getActivity(),
@@ -275,14 +279,9 @@ public class NavigationBarBase extends LinearLayout implements
mDefaultStatusBarColor);
}
}
- } else {
- setStatusAndNavigationBarColor(mUiController.getActivity(), mDefaultStatusBarColor);
- }
-
- //Bitmap favicon = mUiController.getCurrentTopWebView().getFavicon();
-
- if (mFaviconTile != null) {
- mFaviconTile.replaceFavicon(mUiController.getCurrentTopWebView().getFavicon());
+ if (mFaviconTile != null) {
+ mFaviconTile.replaceFavicon(tab.getFavicon()); // Always set the tab's favicon
+ }
}
}
@@ -337,7 +336,7 @@ public class NavigationBarBase extends LinearLayout implements
Bitmap favicon = mUiController.getCurrentTopWebView().getFavicon();
if (favicon != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- favicon.compress(Bitmap.CompressFormat.PNG, 50, baos);
+ favicon.compress(Bitmap.CompressFormat.PNG, 100, baos);
bundle.putByteArray(SiteSpecificPreferencesFragment.EXTRA_FAVICON,
baos.toByteArray());
}
@@ -722,7 +721,6 @@ public class NavigationBarBase extends LinearLayout implements
mFaviconTile.setBadgeBlockedObjectsCount(0);
mFaviconTile.setTrustLevel(SiteTileView.TRUST_UNKNOWN);
mFaviconTile.setBadgeHasCertIssues(false);
- mFaviconTile.replaceFavicon(mDefaultFavicon);
setSecurityState(Tab.SecurityState.SECURITY_STATE_NOT_SECURE);
mHandler.removeMessages(WEBREFINER_COUNTER_MSG);
mHandler.sendEmptyMessageDelayed(WEBREFINER_COUNTER_MSG,
diff --git a/src/com/android/browser/SiteTileView.java b/src/com/android/browser/SiteTileView.java
index e2951ae2..8d69dbaf 100644
--- a/src/com/android/browser/SiteTileView.java
+++ b/src/com/android/browser/SiteTileView.java
@@ -41,12 +41,12 @@ import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
-import android.util.ArrayMap;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -359,7 +359,7 @@ public class SiteTileView extends View {
sBackgroundDrawable.getPadding(sBackgroundDrawablePadding);
// load all the badge drawables
- sBadges = new ArrayMap<>();
+ sBadges = new HashMap<>();
loadBadgeResources(r, TRUST_AVOID, R.drawable.img_deco_tile_avoid,
R.drawable.img_deco_tile_avoid_accent, R.color.TileBadgeTextAvoid);
loadBadgeResources(r, TRUST_UNTRUSTED, R.drawable.img_deco_tile_untrusted,
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index d3621ef5..8121ba4d 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -220,8 +220,9 @@ class Tab implements PictureListener {
String mUrl;
String mOriginalUrl;
String mTitle;
- SecurityState mSecurityState;
// This is non-null only when mSecurityState is SECURITY_STATE_BAD_CERTIFICATE.
+ SecurityState mSecurityState;
+ // This is non-null only when onReceivedIcon is called or SnapshotTab restores it.
Bitmap mFavicon;
boolean mIsBookmarkedSite;
boolean mIncognito;
@@ -237,14 +238,13 @@ class Tab implements PictureListener {
mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
}
- PageState(Context c, boolean incognito, String url, Bitmap favicon) {
+ PageState(Context c, boolean incognito, String url) {
mIncognito = incognito;
if (mIncognito)
mOriginalUrl = mUrl = "";
else
mOriginalUrl = mUrl = url;
mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
- mFavicon = favicon;
}
}
@@ -335,7 +335,7 @@ class Tab implements PictureListener {
mUpdateThumbnail = true;
mPageLoadProgress = INITIAL_PROGRESS;
mCurrentState = new PageState(mContext,
- view.isPrivateBrowsingEnabled(), url, favicon);
+ view.isPrivateBrowsingEnabled(), url);
mLoadStartTime = SystemClock.uptimeMillis();
// Need re-enable FullScreenMode on Page navigation if needed
if (BrowserSettings.getInstance().useFullscreen()){
@@ -549,6 +549,18 @@ class Tab implements PictureListener {
@Override
public void beforeNavigation(WebView view, String url) {
mTouchIconUrl = null;
+ TitleBar titleBar = null;
+ Controller controller = (Controller)mWebViewController;
+ UI ui = controller.getUi();
+
+ if (ui instanceof BaseUi) {
+ titleBar = ((BaseUi)ui).getTitleBar();
+ if (titleBar != null) {
+ NavigationBarBase navBar = titleBar.getNavigationBar();
+ navBar.showCurrentFavicon(Tab.this); // Show the default Favicon while loading a new page
+ }
+ }
+
if (BaseUi.isUiLowPowerMode()) {
return;
}
@@ -561,19 +573,11 @@ class Tab implements PictureListener {
return;
}
- if (view.getUrl().equals(url)) {
- return;
- }
-
final int idx = view.copyBackForwardList().getCurrentIndex();
boolean bitmapExists = view.hasSnapshot(idx);
int progress = 100;
- Controller controller = (Controller)mWebViewController;
- UI ui = controller.getUi();
- if (ui instanceof BaseUi) {
- BaseUi baseUi = (BaseUi) ui;
- TitleBar titleBar = baseUi.getTitleBar();
+ if (titleBar != null) {
progress = titleBar.getProgressView().getProgressPercent();
}
@@ -657,10 +661,10 @@ class Tab implements PictureListener {
url.contains(Controller.INCOGNITO_URI)) {
mCurrentState.mUrl = mCurrentState.mOriginalUrl = "";
}
+
else {
mCurrentState.mUrl = view.getUrl();
mCurrentState.mOriginalUrl = view.getOriginalUrl();
- mCurrentState.mFavicon = view.getFavicon();
}
if (mCurrentState.mUrl == null) {
@@ -1195,6 +1199,16 @@ class Tab implements PictureListener {
mId = TabControl.getNextId();
}
setWebView(w);
+
+ UI ui = ((Controller)mWebViewController).getUi();
+ if (ui instanceof BaseUi) {
+ TitleBar titleBar = ((BaseUi)ui).getTitleBar();
+ if (titleBar != null) {
+ NavigationBarBase navBar = titleBar.getNavigationBar();
+ navBar.showCurrentFavicon(this); // Show the default Favicon while loading a new page
+ }
+ }
+
mHandler = new Handler() {
@Override
public void handleMessage(Message m) {
@@ -1783,7 +1797,7 @@ class Tab implements PictureListener {
String url = b.getString(CURRURL);
String title = b.getString(CURRTITLE);
boolean incognito = b.getBoolean(INCOGNITO);
- mCurrentState = new PageState(mContext, incognito, url, null);
+ mCurrentState = new PageState(mContext, incognito, url);
mCurrentState.mTitle = title;
synchronized (Tab.this) {
if (mCapture != null) {
@@ -1914,7 +1928,7 @@ class Tab implements PictureListener {
if (mMainView != null) {
mPageLoadProgress = INITIAL_PROGRESS;
mCurrentState = new PageState(
- mContext, mMainView.isPrivateBrowsingEnabled(), url, null);
+ mContext, mMainView.isPrivateBrowsingEnabled(), url);
mMainView.loadUrl(url, headers);
}
}
diff --git a/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index 2b5c9ebe..bb4a8d3b 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -43,8 +43,10 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.browser.R;
+import com.android.browser.SiteTileView;
import com.android.browser.WebStorageSizeManager;
+import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -63,24 +65,37 @@ import org.codeaurora.swe.WebStorage;
public class WebsiteSettingsFragment extends ListFragment implements OnClickListener {
private SiteAdapter mAdapter = null;
- private class Site {
+ private class Site implements OnClickListener {
private String mOrigin;
private String mTitle;
private Bitmap mIcon;
+ private View mView;
+ private Bitmap mDefaultIcon = mAdapter.mDefaultIcon;
public Site(String origin) {
mOrigin = origin;
mTitle = null;
mIcon = null;
- PermissionsServiceFactory.getFavicon(origin, getActivity(),
+ fetchFavicon();
+ }
+
+ private void fetchFavicon() {
+ // Fetch favicon and set it
+ PermissionsServiceFactory.getFavicon(mOrigin, getActivity(),
new ValueCallback<Bitmap>() {
@Override
public void onReceiveValue(Bitmap value) {
- mIcon = value;
+ setIcon(value);
+
}
});
}
+ public void updateView(View view){
+ mView = view;
+ fetchFavicon();
+ }
+
public String getOrigin() {
return mOrigin;
}
@@ -89,8 +104,14 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
mTitle = title;
}
- public void setIcon(Bitmap icon) {
- mIcon = icon;
+ public void setIcon(Bitmap image) {
+ mIcon = image;
+ if (mView != null) {
+ SiteTileView icon = (SiteTileView) mView.findViewById(R.id.icon);
+ icon.replaceFavicon((image == null) ? mDefaultIcon : image);
+ icon.setVisibility(View.VISIBLE);
+ icon.setOnClickListener(this);
+ }
}
public Bitmap getIcon() {
@@ -111,6 +132,11 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
Uri uri = Uri.parse(str);
return "http".equals(uri.getScheme()) ? str.substring(7) : str;
}
+
+ @Override
+ public void onClick(View v) {
+ clickHandler(this);
+ }
}
class SiteAdapter extends ArrayAdapter<Site>
@@ -127,7 +153,6 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDefaultIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_deco_favicon_normal);
-
mReady = false;
askForOrigins();
}
@@ -207,7 +232,6 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
View view;
final TextView title;
final TextView subtitle;
- final ImageView icon;
if (convertView == null) {
view = mInflater.inflate(mResource, parent, false);
@@ -217,9 +241,9 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
title = (TextView) view.findViewById(R.id.title);
subtitle = (TextView) view.findViewById(R.id.subtitle);
- icon = (ImageView) view.findViewById(R.id.icon);
Site site = getItem(position);
+ site.updateView(view);
title.setText(site.getPrettyTitle());
String subtitleText = site.getPrettyOrigin();
if (subtitleText != null) {
@@ -232,13 +256,6 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
title.setMaxLines(2);
title.setSingleLine(false);
}
-
- icon.setVisibility(View.VISIBLE);
- Bitmap bmp = site.getIcon();
- if (bmp == null) {
- bmp = mDefaultIcon;
- }
- icon.setImageBitmap(bmp);
// We set the site as the view's tag,
// so that we can get it in onItemClick()
view.setTag(site);
@@ -250,21 +267,29 @@ public class WebsiteSettingsFragment extends ListFragment implements OnClickList
View view,
int position,
long id) {
- Site site = (Site) view.getTag();
- Activity activity = getActivity();
- if (activity != null) {
- Bundle args = new Bundle();
- args.putString(SiteSpecificPreferencesFragment.EXTRA_ORIGIN, site.getOrigin());
-
- FragmentManager fragmentManager = activity.getFragmentManager();
- FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-
- Fragment newFragment = new SiteSpecificPreferencesFragment();
- newFragment.setArguments(args);
- fragmentTransaction.replace(getId(), newFragment);
- fragmentTransaction.addToBackStack(null);
- fragmentTransaction.commit();
+ clickHandler((Site) view.getTag());
+ }
+ }
+
+ private void clickHandler(Site site) {
+ Activity activity = getActivity();
+ if (activity != null) {
+ Bundle args = new Bundle();
+ args.putString(SiteSpecificPreferencesFragment.EXTRA_ORIGIN, site.getOrigin());
+ if(site.getIcon() != null) {
+ ByteArrayOutputStream favicon = new ByteArrayOutputStream();
+ site.getIcon().compress(Bitmap.CompressFormat.PNG, 100, favicon);
+ args.putByteArray(SiteSpecificPreferencesFragment.EXTRA_FAVICON,
+ favicon.toByteArray());
}
+ FragmentManager fragmentManager = activity.getFragmentManager();
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+
+ Fragment newFragment = new SiteSpecificPreferencesFragment();
+ newFragment.setArguments(args);
+ fragmentTransaction.replace(getId(), newFragment);
+ fragmentTransaction.addToBackStack(null);
+ fragmentTransaction.commit();
}
}