1e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard/* 2e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Copyright (C) 2009 The Android Open Source Project 3e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * 4e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Licensed under the Apache License, Version 2.0 (the "License"); 5e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * you may not use this file except in compliance with the License. 6e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * You may obtain a copy of the License at 7e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * 8e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * http://www.apache.org/licenses/LICENSE-2.0 9e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * 10e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Unless required by applicable law or agreed to in writing, software 11e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * distributed under the License is distributed on an "AS IS" BASIS, 12e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * See the License for the specific language governing permissions and 14e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * limitations under the License. 15e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 16e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 1710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckpackage com.android.browser.preferences; 1810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck 19e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.app.AlertDialog; 2010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.app.ListFragment; 21e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.content.Context; 22e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.content.DialogInterface; 23e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.database.Cursor; 24e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.graphics.Bitmap; 25e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.graphics.BitmapFactory; 26e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.net.Uri; 27a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdochimport android.os.AsyncTask; 28e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.os.Bundle; 296128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reckimport android.os.Parcel; 306128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reckimport android.os.Parcelable; 3110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.preference.PreferenceActivity; 32b4b87c66e241a7bda0c6c571a82d461775032438Ben Murdochimport android.provider.BrowserContract.Bookmarks; 33e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.util.Log; 34e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.LayoutInflater; 35e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.View; 3610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.view.View.OnClickListener; 37e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.ViewGroup; 38f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Blockimport android.webkit.GeolocationPermissions; 3999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roardimport android.webkit.ValueCallback; 40e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.webkit.WebStorage; 41e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.AdapterView; 4210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.widget.ArrayAdapter; 43e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.ImageView; 44e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.TextView; 45e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 466128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reckimport com.android.browser.R; 476128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reckimport com.android.browser.WebStorageSizeManager; 486128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 49e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.HashMap; 50ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Blockimport java.util.HashSet; 51e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Iterator; 52089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Blockimport java.util.Map; 53e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Set; 54e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 55e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard/** 56e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Manage the settings for an origin. 57089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * We use it to keep track of the 'HTML5' settings, i.e. database (webstorage) 58089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * and Geolocation. 59e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 6010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckpublic class WebsiteSettingsFragment extends ListFragment implements OnClickListener { 61e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 6210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private static final String EXTRA_SITE = "site"; 63e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String LOGTAG = "WebsiteSettingsActivity"; 64e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private static String sMBStored = null; 65e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private SiteAdapter mAdapter = null; 6610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private Site mSite = null; 67e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 686128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck static class Site implements Parcelable { 69e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mOrigin; 70e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mTitle; 71e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mIcon; 72089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block private int mFeatures; 73089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 74089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // These constants provide the set of features that a site may support 75089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // They must be consecutive. To add a new feature, add a new FEATURE_XXX 76089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // variable with value equal to the current value of FEATURE_COUNT, then 77089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // increment FEATURE_COUNT. 78089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block private final static int FEATURE_WEB_STORAGE = 0; 79f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block private final static int FEATURE_GEOLOCATION = 1; 80089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // The number of features available. 81f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block private final static int FEATURE_COUNT = 2; 82e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 831ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public Site(String origin) { 84e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mOrigin = origin; 851ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mTitle = null; 861ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mIcon = null; 87089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block mFeatures = 0; 88089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 89089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 90089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public void addFeature(int feature) { 91089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block mFeatures |= (1 << feature); 92089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 93089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 94be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch public void removeFeature(int feature) { 95be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mFeatures &= ~(1 << feature); 96be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 97be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch 98089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public boolean hasFeature(int feature) { 99089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return (mFeatures & (1 << feature)) != 0; 100089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 101089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 102089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 103089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Gets the number of features supported by this site. 104089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 105089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public int getFeatureCount() { 106089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block int count = 0; 107089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block for (int i = 0; i < FEATURE_COUNT; ++i) { 108089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block count += hasFeature(i) ? 1 : 0; 109089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 110089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return count; 111089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 112089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 113089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 114089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Gets the ID of the nth (zero-based) feature supported by this site. 115089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * The return value is a feature ID - one of the FEATURE_XXX values. 116089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * This is required to determine which feature is displayed at a given 117089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * position in the list of features for this site. This is used both 118f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block * when populating the view and when responding to clicks on the list. 119089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 120089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public int getFeatureByIndex(int n) { 121089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block int j = -1; 122089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block for (int i = 0; i < FEATURE_COUNT; ++i) { 123089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block j += hasFeature(i) ? 1 : 0; 124089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block if (j == n) { 125089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return i; 126089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 127089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 128089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return -1; 129e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 130e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 131e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public String getOrigin() { 132e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mOrigin; 133e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 134e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 135e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setTitle(String title) { 136e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mTitle = title; 137e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 138e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 139e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setIcon(Bitmap icon) { 140e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mIcon = icon; 141e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 142e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 143e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public Bitmap getIcon() { 144e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mIcon; 145e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 1461ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1471ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyOrigin() { 1481ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? null : hideHttp(mOrigin); 1491ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 1501ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1511ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyTitle() { 1521ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? hideHttp(mOrigin) : mTitle; 1531ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 1541ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1551ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block private String hideHttp(String str) { 1561ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block Uri uri = Uri.parse(str); 1571ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return "http".equals(uri.getScheme()) ? str.substring(7) : str; 1581ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 1596128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 1606128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck @Override 1616128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck public int describeContents() { 1626128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck return 0; 1636128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck } 1646128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 1656128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck @Override 1666128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck public void writeToParcel(Parcel dest, int flags) { 1676128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck dest.writeString(mOrigin); 1686128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck dest.writeString(mTitle); 1696128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck dest.writeInt(mFeatures); 1706128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck dest.writeParcelable(mIcon, flags); 1716128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck } 1726128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 1736128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck private Site(Parcel in) { 1746128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck mOrigin = in.readString(); 1756128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck mTitle = in.readString(); 1766128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck mFeatures = in.readInt(); 1776128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck mIcon = in.readParcelable(null); 1786128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck } 1796128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 1806128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck public static final Parcelable.Creator<Site> CREATOR 1816128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck = new Parcelable.Creator<Site>() { 1826128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck public Site createFromParcel(Parcel in) { 1836128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck return new Site(in); 1846128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck } 1856128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 1866128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck public Site[] newArray(int size) { 1876128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck return new Site[size]; 1886128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck } 1896128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck }; 1906128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck 191e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 192e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 193e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard class SiteAdapter extends ArrayAdapter<Site> 194e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard implements AdapterView.OnItemClickListener { 195e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private int mResource; 196e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private LayoutInflater mInflater; 197e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mDefaultIcon; 198c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageEmptyIcon; 199c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageLowIcon; 200c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageHighIcon; 2019cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard private Bitmap mLocationAllowedIcon; 2029cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard private Bitmap mLocationDisallowedIcon; 203e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Site mCurrentSite; 204e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 205e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public SiteAdapter(Context context, int rsc) { 20610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck this(context, rsc, null); 20710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 20810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck 20910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public SiteAdapter(Context context, int rsc, Site site) { 210e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard super(context, rsc); 211e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mResource = rsc; 212e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 213e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mDefaultIcon = BitmapFactory.decodeResource(getResources(), 214be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch R.drawable.app_web_browser_sm); 215c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageEmptyIcon = BitmapFactory.decodeResource(getResources(), 2169cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_off); 217c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageLowIcon = BitmapFactory.decodeResource(getResources(), 2189cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_small); 219c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageHighIcon = BitmapFactory.decodeResource(getResources(), 2209cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_large); 2219cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard mLocationAllowedIcon = BitmapFactory.decodeResource(getResources(), 2225a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb R.drawable.ic_gps_on_holo_dark); 2239cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard mLocationDisallowedIcon = BitmapFactory.decodeResource(getResources(), 2245a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb R.drawable.ic_gps_denied_holo_dark); 22510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mCurrentSite = site; 22610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mCurrentSite == null) { 22710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck askForOrigins(); 22810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 229e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 230e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 231089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 232089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Adds the specified feature to the site corresponding to supplied 233089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * origin in the map. Creates the site if it does not already exist. 234089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 23598f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard private void addFeatureToSite(Map<String, Site> sites, String origin, int feature) { 236089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block Site site = null; 237089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block if (sites.containsKey(origin)) { 238089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site = (Site) sites.get(origin); 239089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } else { 240089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site = new Site(origin); 241089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block sites.put(origin, site); 242089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 243089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site.addFeature(feature); 244089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 245089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 24699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void askForOrigins() { 247089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // Get the list of origins we want to display. 248089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // All 'HTML 5 modules' (Database, Geolocation etc) form these 249089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // origin strings using WebCore::SecurityOrigin::toString(), so it's 250089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // safe to group origins here. Note that WebCore::SecurityOrigin 251089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // uses 0 (which is not printed) for the port if the port is the 252089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // default for the protocol. Eg http://www.google.com and 253089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // http://www.google.com:80 both record a port of 0 and hence 254089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // toString() == 'http://www.google.com' for both. 25599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 25699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { 25799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Map origins) { 25898f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Map<String, Site> sites = new HashMap<String, Site>(); 25999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (origins != null) { 26099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard Iterator<String> iter = origins.keySet().iterator(); 26199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard while (iter.hasNext()) { 26299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard addFeatureToSite(sites, iter.next(), Site.FEATURE_WEB_STORAGE); 26399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 26499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 26599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForGeolocation(sites); 266e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 26799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 26899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 26999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 27098f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void askForGeolocation(final Map<String, Site> sites) { 2712a6a0f478fb9b67bf7398b1ba7c54ca9c9e430bfSteve Block GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { 2722a6a0f478fb9b67bf7398b1ba7c54ca9c9e430bfSteve Block public void onReceiveValue(Set<String> origins) { 27399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (origins != null) { 27499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard Iterator<String> iter = origins.iterator(); 27599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard while (iter.hasNext()) { 27699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard addFeatureToSite(sites, iter.next(), Site.FEATURE_GEOLOCATION); 27799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 27899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 27999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard populateIcons(sites); 28099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard populateOrigins(sites); 281f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block } 28299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 28399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 284e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 28598f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void populateIcons(Map<String, Site> sites) { 286ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // Create a map from host to origin. This is used to add metadata 287a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // (title, icon) for this origin from the bookmarks DB. We must do 288a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // the DB access on a background thread. 289a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch new UpdateFromBookmarksDbTask(this.getContext(), sites).execute(); 290a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 291a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 292a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private class UpdateFromBookmarksDbTask extends AsyncTask<Void, Void, Void> { 293a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 294a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private Context mContext; 295a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private boolean mDataSetChanged; 296a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private Map<String, Site> mSites; 297a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 298a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch public UpdateFromBookmarksDbTask(Context ctx, Map<String, Site> sites) { 299914c5591baeb86bf30a5bc28930071442a822d60Ben Murdoch mContext = ctx.getApplicationContext(); 300a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mSites = sites; 301ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } 302ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block 303a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch protected Void doInBackground(Void... unused) { 304a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch HashMap<String, Set<Site>> hosts = new HashMap<String, Set<Site>>(); 305a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set<Map.Entry<String, Site>> elements = mSites.entrySet(); 306a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Iterator<Map.Entry<String, Site>> originIter = elements.iterator(); 307a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch while (originIter.hasNext()) { 308a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Map.Entry<String, Site> entry = originIter.next(); 309a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Site site = entry.getValue(); 310a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String host = Uri.parse(entry.getKey()).getHost(); 311a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set<Site> hostSites = null; 312a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (hosts.containsKey(host)) { 313a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites = (Set<Site>)hosts.get(host); 314a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } else { 315a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites = new HashSet<Site>(); 316a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hosts.put(host, hostSites); 317a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 318a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites.add(site); 319a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 320a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 321a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // Check the bookmark DB. If we have data for a host used by any of 322a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // our origins, use it to set their title and favicon 323a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Cursor c = mContext.getContentResolver().query(Bookmarks.CONTENT_URI, 324a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch new String[] { Bookmarks.URL, Bookmarks.TITLE, Bookmarks.FAVICON }, 325a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Bookmarks.IS_FOLDER + " == 0", null, null); 326a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 327a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (c != null) { 328a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (c.moveToFirst()) { 329a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int urlIndex = c.getColumnIndex(Bookmarks.URL); 330a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int titleIndex = c.getColumnIndex(Bookmarks.TITLE); 331a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int faviconIndex = c.getColumnIndex(Bookmarks.FAVICON); 332a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch do { 333a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String url = c.getString(urlIndex); 334a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String host = Uri.parse(url).getHost(); 335a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (hosts.containsKey(host)) { 336a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String title = c.getString(titleIndex); 337a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Bitmap bmp = null; 338a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch byte[] data = c.getBlob(faviconIndex); 339a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (data != null) { 340a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 341fbbd2aced9ace1d063ad166d96a605446a9d2f7eThe Android Open Source Project } 342a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set matchingSites = (Set) hosts.get(host); 343a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Iterator<Site> sitesIter = matchingSites.iterator(); 344a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch while (sitesIter.hasNext()) { 345a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Site site = sitesIter.next(); 346a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // We should only set the title if the bookmark is for the root 347a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // (i.e. www.google.com), as website settings act on the origin 348a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // as a whole rather than a single page under that origin. If the 349a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // user has bookmarked a page under the root but *not* the root, 350a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // then we risk displaying the title of that page which may or 351a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // may not have any relevance to the origin. 352a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (url.equals(site.getOrigin()) || 353a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch (new String(site.getOrigin()+"/")).equals(url)) { 354a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mDataSetChanged = true; 355a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch site.setTitle(title); 356a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 357a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 358a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (bmp != null) { 359a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mDataSetChanged = true; 360a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch site.setIcon(bmp); 361a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 36298f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard } 363e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 364a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } while (c.moveToNext()); 365a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 366a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch c.close(); 367a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 368a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch return null; 369a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 370a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 371a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch protected void onPostExecute(Void unused) { 372a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (mDataSetChanged) { 373a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch notifyDataSetChanged(); 37498f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard } 375e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 37699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 37799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 37899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 37998f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void populateOrigins(Map<String, Site> sites) { 38099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard clear(); 381d95fb21110c4787a9a37c1616ab8490020ceb531Nicolas Roard 382e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We can now simply populate our array with Site instances 38398f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Set<Map.Entry<String, Site>> elements = sites.entrySet(); 38498f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Iterator<Map.Entry<String, Site>> entryIterator = elements.iterator(); 38598f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard while (entryIterator.hasNext()) { 38698f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Map.Entry<String, Site> entry = entryIterator.next(); 38798f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Site site = entry.getValue(); 388e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard add(site); 389e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 390e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 39199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard notifyDataSetChanged(); 39299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 393e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (getCount() == 0) { 394e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard finish(); // we close the screen 395e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 396e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 397e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 398e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public int getCount() { 399e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 400e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return super.getCount(); 401e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 402089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return mCurrentSite.getFeatureCount(); 403e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 404e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 405764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block public String sizeValueToString(long bytes) { 406764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block // We display the size in MB, to 1dp, rounding up to the next 0.1MB. 407764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block // bytes should always be greater than zero. 408764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block if (bytes <= 0) { 409be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch Log.e(LOGTAG, "sizeValueToString called with non-positive value: " + bytes); 410e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return "0"; 411e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 412764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block float megabytes = (float) bytes / (1024.0F * 1024.0F); 413764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block int truncated = (int) Math.ceil(megabytes * 10.0F); 414764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block float result = (float) (truncated / 10.0F); 415764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block return String.valueOf(result); 416e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 417e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 418e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard /* 419e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * If we receive the back event and are displaying 420e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * site's settings, we want to go back to the main 421e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * list view. If not, we just do nothing (see 422e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * dispatchKeyEvent() below). 423e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 424e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public boolean backKeyPressed() { 425e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 426e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mCurrentSite = null; 42799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 428e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return true; 429e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 430e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return false; 431e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 432e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 43399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard /** 43499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * @hide 43599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * Utility function 43699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * Set the icon according to the usage 43799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard */ 43899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void setIconForUsage(ImageView usageIcon, long usageInBytes) { 43999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard float usageInMegabytes = (float) usageInBytes / (1024.0F * 1024.0F); 44099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard // We set the correct icon: 44199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard // 0 < empty < 0.1MB 4429cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard // 0.1MB < low < 5MB 4439cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard // 5MB < high 44499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (usageInMegabytes <= 0.1) { 44599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageEmptyIcon); 4469cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else if (usageInMegabytes > 0.1 && usageInMegabytes <= 5) { 44799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageLowIcon); 4489cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else if (usageInMegabytes > 5) { 44999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageHighIcon); 45099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 45199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 45299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 45310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck @Override 454e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public View getView(int position, View convertView, ViewGroup parent) { 455e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view; 45699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final TextView title; 45799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final TextView subtitle; 458be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch final ImageView icon; 45999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final ImageView usageIcon; 4609cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard final ImageView locationIcon; 461be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch final ImageView featureIcon; 462e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 463e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (convertView == null) { 464e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = mInflater.inflate(mResource, parent, false); 465e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 466e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = convertView; 467e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 468e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 469e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard title = (TextView) view.findViewById(R.id.title); 470e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard subtitle = (TextView) view.findViewById(R.id.subtitle); 471e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon = (ImageView) view.findViewById(R.id.icon); 472be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon = (ImageView) view.findViewById(R.id.feature_icon); 473c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon = (ImageView) view.findViewById(R.id.usage_icon); 474c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon = (ImageView) view.findViewById(R.id.location_icon); 475c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon.setVisibility(View.GONE); 476c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon.setVisibility(View.GONE); 477e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 478e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 4794d055a532447cd1adfeac2abebdf365b38fb8a15Steve Block 480e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Site site = getItem(position); 4811ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block title.setText(site.getPrettyTitle()); 482be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch String subtitleText = site.getPrettyOrigin(); 483be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (subtitleText != null) { 484be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setMaxLines(1); 485be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setSingleLine(true); 486be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 487be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setText(subtitleText); 488be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } else { 489be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.GONE); 490be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setMaxLines(2); 491be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setSingleLine(false); 492be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 493be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch 494e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.VISIBLE); 495c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon.setVisibility(View.INVISIBLE); 496c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon.setVisibility(View.INVISIBLE); 497be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setVisibility(View.GONE); 498e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Bitmap bmp = site.getIcon(); 499e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (bmp == null) { 500e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard bmp = mDefaultIcon; 501e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 502e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setImageBitmap(bmp); 503e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We set the site as the view's tag, 504e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // so that we can get it in onItemClick() 505e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view.setTag(site); 506c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard 5079cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard String origin = site.getOrigin(); 508c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard if (site.hasFeature(Site.FEATURE_WEB_STORAGE)) { 5099cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard WebStorage.getInstance().getUsageForOrigin(origin, new ValueCallback<Long>() { 5109cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard public void onReceiveValue(Long value) { 5119cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (value != null) { 5129cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard setIconForUsage(usageIcon, value.longValue()); 513be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch usageIcon.setVisibility(View.VISIBLE); 5149cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5159cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5169cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard }); 517c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard } 518c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard 519c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard if (site.hasFeature(Site.FEATURE_GEOLOCATION)) { 5209cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setVisibility(View.VISIBLE); 5219cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard GeolocationPermissions.getInstance().getAllowed(origin, new ValueCallback<Boolean>() { 5229cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard public void onReceiveValue(Boolean allowed) { 5239cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (allowed != null) { 5249cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (allowed.booleanValue()) { 5259cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setImageBitmap(mLocationAllowedIcon); 5269cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else { 5279cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setImageBitmap(mLocationDisallowedIcon); 5289cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5299cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5309cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5319cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard }); 532c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard } 533e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 534e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.GONE); 535be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch locationIcon.setVisibility(View.GONE); 536be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch usageIcon.setVisibility(View.GONE); 537be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setVisibility(View.VISIBLE); 538089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block String origin = mCurrentSite.getOrigin(); 539089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block switch (mCurrentSite.getFeatureByIndex(position)) { 540089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block case Site.FEATURE_WEB_STORAGE: 54199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard WebStorage.getInstance().getUsageForOrigin(origin, new ValueCallback<Long>() { 54299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Long value) { 54399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (value != null) { 54499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard String usage = sizeValueToString(value.longValue()) + " " + sMBStored; 54599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard title.setText(R.string.webstorage_clear_data_title); 54699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(usage); 547be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 548be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch setIconForUsage(featureIcon, value.longValue()); 54999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 55099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 55199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 552089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block break; 553f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block case Site.FEATURE_GEOLOCATION: 554f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block title.setText(R.string.geolocation_settings_page_title); 55599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard GeolocationPermissions.getInstance().getAllowed(origin, new ValueCallback<Boolean>() { 55699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Boolean allowed) { 55799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (allowed != null) { 55899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (allowed.booleanValue()) { 55999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(R.string.geolocation_settings_page_summary_allowed); 560be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setImageBitmap(mLocationAllowedIcon); 56199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } else { 56299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(R.string.geolocation_settings_page_summary_not_allowed); 563be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setImageBitmap(mLocationDisallowedIcon); 56499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 565be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 56699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 56799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 56899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 569f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block break; 570e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 571e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 572e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 573e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return view; 574e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 575e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 576e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void onItemClick(AdapterView<?> parent, 577e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view, 578e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int position, 579e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard long id) { 580e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 581089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block switch (mCurrentSite.getFeatureByIndex(position)) { 582089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block case Site.FEATURE_WEB_STORAGE: 583089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block new AlertDialog.Builder(getContext()) 584089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setMessage(R.string.webstorage_clear_data_dialog_message) 585089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setPositiveButton(R.string.webstorage_clear_data_dialog_ok_button, 586089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block new AlertDialog.OnClickListener() { 587089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public void onClick(DialogInterface dlg, int which) { 588089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block WebStorage.getInstance().deleteOrigin(mCurrentSite.getOrigin()); 589be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch // If this site has no more features, then go back to the 590be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch // origins list. 591be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mCurrentSite.removeFeature(Site.FEATURE_WEB_STORAGE); 592be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (mCurrentSite.getFeatureCount() == 0) { 59310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 594be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 59599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 596be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch notifyDataSetChanged(); 597089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block }}) 598089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setNegativeButton(R.string.webstorage_clear_data_dialog_cancel_button, null) 599089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setIcon(android.R.drawable.ic_dialog_alert) 600089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .show(); 601089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block break; 602f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block case Site.FEATURE_GEOLOCATION: 603f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block new AlertDialog.Builder(getContext()) 604f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setMessage(R.string.geolocation_settings_page_dialog_message) 605f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setPositiveButton(R.string.geolocation_settings_page_dialog_ok_button, 606f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block new AlertDialog.OnClickListener() { 607f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block public void onClick(DialogInterface dlg, int which) { 608f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block GeolocationPermissions.getInstance().clear(mCurrentSite.getOrigin()); 609be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mCurrentSite.removeFeature(Site.FEATURE_GEOLOCATION); 610be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (mCurrentSite.getFeatureCount() == 0) { 61110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 612be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 61399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 614be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch notifyDataSetChanged(); 615f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block }}) 616f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setNegativeButton(R.string.geolocation_settings_page_dialog_cancel_button, null) 617f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setIcon(android.R.drawable.ic_dialog_alert) 618f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .show(); 619f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block break; 620e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 621e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 62210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Site site = (Site) view.getTag(); 62310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck PreferenceActivity activity = (PreferenceActivity) getActivity(); 62410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (activity != null) { 62510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle args = new Bundle(); 6266128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck args.putParcelable(EXTRA_SITE, site); 62710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck activity.startPreferencePanel(WebsiteSettingsFragment.class.getName(), args, 0, 62810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck site.getPrettyTitle(), null, 0); 62910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 630e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 631e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 6329e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch 6339e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch public Site currentSite() { 6349e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch return mCurrentSite; 6359e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch } 636e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 637e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 63810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck @Override 63910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public View onCreateView(LayoutInflater inflater, ViewGroup container, 64010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle savedInstanceState) { 64110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck View view = inflater.inflate(R.layout.website_settings, container, false); 64210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle args = getArguments(); 64310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (args != null) { 6446128f87cd69a3faabfd6bf101fc7c60f453e7a4dJohn Reck mSite = (Site) args.getParcelable(EXTRA_SITE); 64510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 64610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mSite == null) { 64710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck View clear = view.findViewById(R.id.clear_all_button); 64810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck clear.setVisibility(View.VISIBLE); 64910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck clear.setOnClickListener(this); 650e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 65110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck return view; 652e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 653e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 654e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard @Override 65510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onActivityCreated(Bundle savedInstanceState) { 65610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck super.onActivityCreated(savedInstanceState); 657e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (sMBStored == null) { 658e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard sMBStored = getString(R.string.webstorage_origin_summary_mb_stored); 659e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 66010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter = new SiteAdapter(getActivity(), R.layout.website_settings_row); 66110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mSite != null) { 66210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter.mCurrentSite = mSite; 66310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 66410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck getListView().setAdapter(mAdapter); 665e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard getListView().setOnItemClickListener(mAdapter); 666e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 667b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch 66879c702d5979e359b5513adc25eecf27dbae307fdJohn Reck @Override 66979c702d5979e359b5513adc25eecf27dbae307fdJohn Reck public void onResume() { 67079c702d5979e359b5513adc25eecf27dbae307fdJohn Reck super.onResume(); 67179c702d5979e359b5513adc25eecf27dbae307fdJohn Reck mAdapter.askForOrigins(); 67279c702d5979e359b5513adc25eecf27dbae307fdJohn Reck } 67379c702d5979e359b5513adc25eecf27dbae307fdJohn Reck 67410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private void finish() { 67510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck PreferenceActivity activity = (PreferenceActivity) getActivity(); 67610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (activity != null) { 67710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck activity.finishPreferencePanel(this, 0, null); 67810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 679b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 680b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch 681b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch @Override 68210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onClick(View v) { 68310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck switch (v.getId()) { 68410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck case R.id.clear_all_button: 68510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck // Show the prompt to clear all origins of their data and geolocation permissions. 68610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck new AlertDialog.Builder(getActivity()) 68710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setMessage(R.string.website_settings_clear_all_dialog_message) 68810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setPositiveButton(R.string.website_settings_clear_all_dialog_ok_button, 68910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck new AlertDialog.OnClickListener() { 69010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onClick(DialogInterface dlg, int which) { 69110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck WebStorage.getInstance().deleteAllData(); 69210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck GeolocationPermissions.getInstance().clearAll(); 69310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck WebStorageSizeManager.resetLastOutOfSpaceNotificationTime(); 69410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter.askForOrigins(); 69510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 69610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck }}) 69710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setNegativeButton(R.string.website_settings_clear_all_dialog_cancel_button, null) 69810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setIcon(android.R.drawable.ic_dialog_alert) 69910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .show(); 70010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck break; 701b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 702b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 703e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard} 704