WebsiteSettingsFragment.java revision 5a72f1858c2f73be3558c6cdaa2c84b4c36fa748
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 1910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport com.android.browser.R; 2010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport com.android.browser.WebStorageSizeManager; 21e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 22e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.app.AlertDialog; 2310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.app.FragmentTransaction; 2410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.app.ListFragment; 25e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.content.Context; 26e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.content.DialogInterface; 2710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.content.res.Resources; 28e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.database.Cursor; 29e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.graphics.Bitmap; 30e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.graphics.BitmapFactory; 31e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.net.Uri; 32a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdochimport android.os.AsyncTask; 33e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.os.Bundle; 3410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.preference.PreferenceActivity; 3510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.preference.PreferenceFragment; 36b4b87c66e241a7bda0c6c571a82d461775032438Ben Murdochimport android.provider.BrowserContract.Bookmarks; 37e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.util.Log; 38e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.LayoutInflater; 39b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdochimport android.view.MenuItem; 40e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.View; 4110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.view.View.OnClickListener; 42e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.ViewGroup; 43f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Blockimport android.webkit.GeolocationPermissions; 4499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roardimport android.webkit.ValueCallback; 45e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.webkit.WebStorage; 46e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.AdapterView; 47e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.AdapterView.OnItemClickListener; 4810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport android.widget.ArrayAdapter; 49e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.ImageView; 50e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.TextView; 51e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 5210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckimport java.io.Serializable; 53e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.HashMap; 54ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Blockimport java.util.HashSet; 55e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Iterator; 56089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Blockimport java.util.Map; 57e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Set; 58e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 59e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard/** 60e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Manage the settings for an origin. 61089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * We use it to keep track of the 'HTML5' settings, i.e. database (webstorage) 62089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * and Geolocation. 63e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 6410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reckpublic class WebsiteSettingsFragment extends ListFragment implements OnClickListener { 65e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 6610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private static final String EXTRA_SITE = "site"; 67e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String LOGTAG = "WebsiteSettingsActivity"; 68e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private static String sMBStored = null; 69e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private SiteAdapter mAdapter = null; 7010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private Site mSite = null; 71e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 7210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck static class Site implements Serializable { 73e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mOrigin; 74e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mTitle; 75e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mIcon; 76089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block private int mFeatures; 77089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 78089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // These constants provide the set of features that a site may support 79089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // They must be consecutive. To add a new feature, add a new FEATURE_XXX 80089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // variable with value equal to the current value of FEATURE_COUNT, then 81089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // increment FEATURE_COUNT. 82089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block private final static int FEATURE_WEB_STORAGE = 0; 83f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block private final static int FEATURE_GEOLOCATION = 1; 84089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // The number of features available. 85f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block private final static int FEATURE_COUNT = 2; 86e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 871ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public Site(String origin) { 88e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mOrigin = origin; 891ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mTitle = null; 901ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mIcon = null; 91089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block mFeatures = 0; 92089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 93089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 94089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public void addFeature(int feature) { 95089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block mFeatures |= (1 << feature); 96089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 97089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 98be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch public void removeFeature(int feature) { 99be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mFeatures &= ~(1 << feature); 100be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 101be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch 102089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public boolean hasFeature(int feature) { 103089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return (mFeatures & (1 << feature)) != 0; 104089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 105089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 106089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 107089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Gets the number of features supported by this site. 108089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 109089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public int getFeatureCount() { 110089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block int count = 0; 111089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block for (int i = 0; i < FEATURE_COUNT; ++i) { 112089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block count += hasFeature(i) ? 1 : 0; 113089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 114089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return count; 115089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 116089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 117089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 118089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Gets the ID of the nth (zero-based) feature supported by this site. 119089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * The return value is a feature ID - one of the FEATURE_XXX values. 120089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * This is required to determine which feature is displayed at a given 121089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * position in the list of features for this site. This is used both 122f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block * when populating the view and when responding to clicks on the list. 123089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 124089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public int getFeatureByIndex(int n) { 125089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block int j = -1; 126089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block for (int i = 0; i < FEATURE_COUNT; ++i) { 127089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block j += hasFeature(i) ? 1 : 0; 128089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block if (j == n) { 129089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return i; 130089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 131089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 132089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return -1; 133e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 134e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 135e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public String getOrigin() { 136e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mOrigin; 137e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 138e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 139e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setTitle(String title) { 140e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mTitle = title; 141e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 142e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 143e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setIcon(Bitmap icon) { 144e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mIcon = icon; 145e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 146e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 147e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public Bitmap getIcon() { 148e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mIcon; 149e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 1501ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1511ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyOrigin() { 1521ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? null : hideHttp(mOrigin); 1531ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 1541ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1551ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyTitle() { 1561ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? hideHttp(mOrigin) : mTitle; 1571ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 1581ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 1591ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block private String hideHttp(String str) { 1601ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block Uri uri = Uri.parse(str); 1611ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return "http".equals(uri.getScheme()) ? str.substring(7) : str; 1621ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 163e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 164e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 165e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard class SiteAdapter extends ArrayAdapter<Site> 166e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard implements AdapterView.OnItemClickListener { 167e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private int mResource; 168e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private LayoutInflater mInflater; 169e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mDefaultIcon; 170c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageEmptyIcon; 171c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageLowIcon; 172c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard private Bitmap mUsageHighIcon; 1739cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard private Bitmap mLocationAllowedIcon; 1749cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard private Bitmap mLocationDisallowedIcon; 175e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Site mCurrentSite; 176e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 177e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public SiteAdapter(Context context, int rsc) { 17810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck this(context, rsc, null); 17910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 18010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck 18110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public SiteAdapter(Context context, int rsc, Site site) { 182e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard super(context, rsc); 183e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mResource = rsc; 184e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 185e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mDefaultIcon = BitmapFactory.decodeResource(getResources(), 186be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch R.drawable.app_web_browser_sm); 187c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageEmptyIcon = BitmapFactory.decodeResource(getResources(), 1889cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_off); 189c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageLowIcon = BitmapFactory.decodeResource(getResources(), 1909cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_small); 191c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard mUsageHighIcon = BitmapFactory.decodeResource(getResources(), 1929cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard R.drawable.ic_list_data_large); 1939cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard mLocationAllowedIcon = BitmapFactory.decodeResource(getResources(), 1945a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb R.drawable.ic_gps_on_holo_dark); 1959cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard mLocationDisallowedIcon = BitmapFactory.decodeResource(getResources(), 1965a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb R.drawable.ic_gps_denied_holo_dark); 19710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mCurrentSite = site; 19810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mCurrentSite == null) { 19910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck askForOrigins(); 20010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 201e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 202e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 203089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block /** 204089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * Adds the specified feature to the site corresponding to supplied 205089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block * origin in the map. Creates the site if it does not already exist. 206089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block */ 20798f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard private void addFeatureToSite(Map<String, Site> sites, String origin, int feature) { 208089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block Site site = null; 209089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block if (sites.containsKey(origin)) { 210089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site = (Site) sites.get(origin); 211089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } else { 212089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site = new Site(origin); 213089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block sites.put(origin, site); 214089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 215089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block site.addFeature(feature); 216089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block } 217089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block 21899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void askForOrigins() { 219089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // Get the list of origins we want to display. 220089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // All 'HTML 5 modules' (Database, Geolocation etc) form these 221089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // origin strings using WebCore::SecurityOrigin::toString(), so it's 222089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // safe to group origins here. Note that WebCore::SecurityOrigin 223089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // uses 0 (which is not printed) for the port if the port is the 224089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // default for the protocol. Eg http://www.google.com and 225089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // http://www.google.com:80 both record a port of 0 and hence 226089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block // toString() == 'http://www.google.com' for both. 22799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 22899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard WebStorage.getInstance().getOrigins(new ValueCallback<Map>() { 22999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Map origins) { 23098f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Map<String, Site> sites = new HashMap<String, Site>(); 23199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (origins != null) { 23299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard Iterator<String> iter = origins.keySet().iterator(); 23399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard while (iter.hasNext()) { 23499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard addFeatureToSite(sites, iter.next(), Site.FEATURE_WEB_STORAGE); 23599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 23699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 23799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForGeolocation(sites); 238e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 23999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 24099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 24199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 24298f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void askForGeolocation(final Map<String, Site> sites) { 2432a6a0f478fb9b67bf7398b1ba7c54ca9c9e430bfSteve Block GeolocationPermissions.getInstance().getOrigins(new ValueCallback<Set<String> >() { 2442a6a0f478fb9b67bf7398b1ba7c54ca9c9e430bfSteve Block public void onReceiveValue(Set<String> origins) { 24599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (origins != null) { 24699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard Iterator<String> iter = origins.iterator(); 24799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard while (iter.hasNext()) { 24899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard addFeatureToSite(sites, iter.next(), Site.FEATURE_GEOLOCATION); 24999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 25099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 25199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard populateIcons(sites); 25299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard populateOrigins(sites); 253f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block } 25499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 25599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 256e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 25798f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void populateIcons(Map<String, Site> sites) { 258ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // Create a map from host to origin. This is used to add metadata 259a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // (title, icon) for this origin from the bookmarks DB. We must do 260a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // the DB access on a background thread. 261a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch new UpdateFromBookmarksDbTask(this.getContext(), sites).execute(); 262a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 263a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 264a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private class UpdateFromBookmarksDbTask extends AsyncTask<Void, Void, Void> { 265a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 266a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private Context mContext; 267a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private boolean mDataSetChanged; 268a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch private Map<String, Site> mSites; 269a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 270a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch public UpdateFromBookmarksDbTask(Context ctx, Map<String, Site> sites) { 271a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mContext = ctx; 272a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mSites = sites; 273ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } 274ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block 275a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch protected Void doInBackground(Void... unused) { 276a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch HashMap<String, Set<Site>> hosts = new HashMap<String, Set<Site>>(); 277a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set<Map.Entry<String, Site>> elements = mSites.entrySet(); 278a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Iterator<Map.Entry<String, Site>> originIter = elements.iterator(); 279a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch while (originIter.hasNext()) { 280a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Map.Entry<String, Site> entry = originIter.next(); 281a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Site site = entry.getValue(); 282a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String host = Uri.parse(entry.getKey()).getHost(); 283a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set<Site> hostSites = null; 284a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (hosts.containsKey(host)) { 285a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites = (Set<Site>)hosts.get(host); 286a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } else { 287a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites = new HashSet<Site>(); 288a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hosts.put(host, hostSites); 289a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 290a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch hostSites.add(site); 291a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 292a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 293a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // Check the bookmark DB. If we have data for a host used by any of 294a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // our origins, use it to set their title and favicon 295a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Cursor c = mContext.getContentResolver().query(Bookmarks.CONTENT_URI, 296a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch new String[] { Bookmarks.URL, Bookmarks.TITLE, Bookmarks.FAVICON }, 297a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Bookmarks.IS_FOLDER + " == 0", null, null); 298a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 299a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (c != null) { 300a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (c.moveToFirst()) { 301a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int urlIndex = c.getColumnIndex(Bookmarks.URL); 302a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int titleIndex = c.getColumnIndex(Bookmarks.TITLE); 303a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch int faviconIndex = c.getColumnIndex(Bookmarks.FAVICON); 304a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch do { 305a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String url = c.getString(urlIndex); 306a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String host = Uri.parse(url).getHost(); 307a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (hosts.containsKey(host)) { 308a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch String title = c.getString(titleIndex); 309a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Bitmap bmp = null; 310a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch byte[] data = c.getBlob(faviconIndex); 311a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (data != null) { 312a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 313fbbd2aced9ace1d063ad166d96a605446a9d2f7eThe Android Open Source Project } 314a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Set matchingSites = (Set) hosts.get(host); 315a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Iterator<Site> sitesIter = matchingSites.iterator(); 316a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch while (sitesIter.hasNext()) { 317a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch Site site = sitesIter.next(); 318a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // We should only set the title if the bookmark is for the root 319a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // (i.e. www.google.com), as website settings act on the origin 320a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // as a whole rather than a single page under that origin. If the 321a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // user has bookmarked a page under the root but *not* the root, 322a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // then we risk displaying the title of that page which may or 323a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch // may not have any relevance to the origin. 324a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (url.equals(site.getOrigin()) || 325a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch (new String(site.getOrigin()+"/")).equals(url)) { 326a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mDataSetChanged = true; 327a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch site.setTitle(title); 328a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 329a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 330a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (bmp != null) { 331a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch mDataSetChanged = true; 332a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch site.setIcon(bmp); 333a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 33498f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard } 335e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 336a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } while (c.moveToNext()); 337a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 338a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch c.close(); 339a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 340a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch return null; 341a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch } 342a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch 343a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch protected void onPostExecute(Void unused) { 344a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch if (mDataSetChanged) { 345a7c9a5505a0a1de5da3041a704070c3de9c129d9Ben Murdoch notifyDataSetChanged(); 34698f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard } 347e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 34899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 34999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 35099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 35198f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard public void populateOrigins(Map<String, Site> sites) { 35299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard clear(); 353d95fb21110c4787a9a37c1616ab8490020ceb531Nicolas Roard 354e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We can now simply populate our array with Site instances 35598f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Set<Map.Entry<String, Site>> elements = sites.entrySet(); 35698f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Iterator<Map.Entry<String, Site>> entryIterator = elements.iterator(); 35798f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard while (entryIterator.hasNext()) { 35898f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Map.Entry<String, Site> entry = entryIterator.next(); 35998f42de9a48ee87c007a2d233b6d790779b494b5Henrik Baard Site site = entry.getValue(); 360e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard add(site); 361e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 362e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 36399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard notifyDataSetChanged(); 36499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 365e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (getCount() == 0) { 366e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard finish(); // we close the screen 367e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 368e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 369e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 370e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public int getCount() { 371e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 372e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return super.getCount(); 373e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 374089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block return mCurrentSite.getFeatureCount(); 375e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 376e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 377764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block public String sizeValueToString(long bytes) { 378764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block // We display the size in MB, to 1dp, rounding up to the next 0.1MB. 379764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block // bytes should always be greater than zero. 380764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block if (bytes <= 0) { 381be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch Log.e(LOGTAG, "sizeValueToString called with non-positive value: " + bytes); 382e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return "0"; 383e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 384764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block float megabytes = (float) bytes / (1024.0F * 1024.0F); 385764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block int truncated = (int) Math.ceil(megabytes * 10.0F); 386764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block float result = (float) (truncated / 10.0F); 387764f0c9765aadeaadd3fbad11b18ab67dd96967dSteve Block return String.valueOf(result); 388e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 389e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 390e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard /* 391e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * If we receive the back event and are displaying 392e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * site's settings, we want to go back to the main 393e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * list view. If not, we just do nothing (see 394e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * dispatchKeyEvent() below). 395e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 396e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public boolean backKeyPressed() { 397e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 398e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mCurrentSite = null; 39999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 400e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return true; 401e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 402e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return false; 403e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 404e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 40599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard /** 40699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * @hide 40799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * Utility function 40899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard * Set the icon according to the usage 40999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard */ 41099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void setIconForUsage(ImageView usageIcon, long usageInBytes) { 41199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard float usageInMegabytes = (float) usageInBytes / (1024.0F * 1024.0F); 41299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard // We set the correct icon: 41399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard // 0 < empty < 0.1MB 4149cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard // 0.1MB < low < 5MB 4159cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard // 5MB < high 41699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (usageInMegabytes <= 0.1) { 41799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageEmptyIcon); 4189cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else if (usageInMegabytes > 0.1 && usageInMegabytes <= 5) { 41999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageLowIcon); 4209cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else if (usageInMegabytes > 5) { 42199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard usageIcon.setImageBitmap(mUsageHighIcon); 42299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 42399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 42499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard 42510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck @Override 426e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public View getView(int position, View convertView, ViewGroup parent) { 427e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view; 42899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final TextView title; 42999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final TextView subtitle; 430be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch final ImageView icon; 43199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard final ImageView usageIcon; 4329cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard final ImageView locationIcon; 433be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch final ImageView featureIcon; 434e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 435e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (convertView == null) { 436e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = mInflater.inflate(mResource, parent, false); 437e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 438e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = convertView; 439e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 440e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 441e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard title = (TextView) view.findViewById(R.id.title); 442e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard subtitle = (TextView) view.findViewById(R.id.subtitle); 443e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon = (ImageView) view.findViewById(R.id.icon); 444be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon = (ImageView) view.findViewById(R.id.feature_icon); 445c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon = (ImageView) view.findViewById(R.id.usage_icon); 446c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon = (ImageView) view.findViewById(R.id.location_icon); 447c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon.setVisibility(View.GONE); 448c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon.setVisibility(View.GONE); 449e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 450e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 4514d055a532447cd1adfeac2abebdf365b38fb8a15Steve Block 452e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Site site = getItem(position); 4531ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block title.setText(site.getPrettyTitle()); 454be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch String subtitleText = site.getPrettyOrigin(); 455be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (subtitleText != null) { 456be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setMaxLines(1); 457be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setSingleLine(true); 458be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 459be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setText(subtitleText); 460be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } else { 461be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.GONE); 462be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setMaxLines(2); 463be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch title.setSingleLine(false); 464be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 465be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch 466e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.VISIBLE); 467c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard usageIcon.setVisibility(View.INVISIBLE); 468c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard locationIcon.setVisibility(View.INVISIBLE); 469be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setVisibility(View.GONE); 470e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Bitmap bmp = site.getIcon(); 471e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (bmp == null) { 472e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard bmp = mDefaultIcon; 473e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 474e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setImageBitmap(bmp); 475e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We set the site as the view's tag, 476e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // so that we can get it in onItemClick() 477e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view.setTag(site); 478c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard 4799cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard String origin = site.getOrigin(); 480c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard if (site.hasFeature(Site.FEATURE_WEB_STORAGE)) { 4819cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard WebStorage.getInstance().getUsageForOrigin(origin, new ValueCallback<Long>() { 4829cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard public void onReceiveValue(Long value) { 4839cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (value != null) { 4849cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard setIconForUsage(usageIcon, value.longValue()); 485be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch usageIcon.setVisibility(View.VISIBLE); 4869cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 4879cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 4889cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard }); 489c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard } 490c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard 491c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard if (site.hasFeature(Site.FEATURE_GEOLOCATION)) { 4929cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setVisibility(View.VISIBLE); 4939cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard GeolocationPermissions.getInstance().getAllowed(origin, new ValueCallback<Boolean>() { 4949cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard public void onReceiveValue(Boolean allowed) { 4959cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (allowed != null) { 4969cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard if (allowed.booleanValue()) { 4979cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setImageBitmap(mLocationAllowedIcon); 4989cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } else { 4999cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard locationIcon.setImageBitmap(mLocationDisallowedIcon); 5009cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5019cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5029cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard } 5039cdaba5e3f22fe9bdfc3b89c45e71d7497f5e9daNicolas Roard }); 504c5702320cd0c66520de57ce8fea9676476cc042aNicolas Roard } 505e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 506e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.GONE); 507be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch locationIcon.setVisibility(View.GONE); 508be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch usageIcon.setVisibility(View.GONE); 509be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setVisibility(View.VISIBLE); 510089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block String origin = mCurrentSite.getOrigin(); 511089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block switch (mCurrentSite.getFeatureByIndex(position)) { 512089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block case Site.FEATURE_WEB_STORAGE: 51399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard WebStorage.getInstance().getUsageForOrigin(origin, new ValueCallback<Long>() { 51499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Long value) { 51599b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (value != null) { 51699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard String usage = sizeValueToString(value.longValue()) + " " + sMBStored; 51799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard title.setText(R.string.webstorage_clear_data_title); 51899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(usage); 519be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 520be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch setIconForUsage(featureIcon, value.longValue()); 52199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 52299b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 52399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 524089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block break; 525f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block case Site.FEATURE_GEOLOCATION: 526f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block title.setText(R.string.geolocation_settings_page_title); 52799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard GeolocationPermissions.getInstance().getAllowed(origin, new ValueCallback<Boolean>() { 52899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard public void onReceiveValue(Boolean allowed) { 52999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (allowed != null) { 53099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard if (allowed.booleanValue()) { 53199b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(R.string.geolocation_settings_page_summary_allowed); 532be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setImageBitmap(mLocationAllowedIcon); 53399b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } else { 53499b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard subtitle.setText(R.string.geolocation_settings_page_summary_not_allowed); 535be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch featureIcon.setImageBitmap(mLocationDisallowedIcon); 53699b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 537be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch subtitle.setVisibility(View.VISIBLE); 53899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 53999b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard } 54099b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard }); 541f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block break; 542e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 543e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 544e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 545e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return view; 546e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 547e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 548e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void onItemClick(AdapterView<?> parent, 549e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view, 550e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int position, 551e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard long id) { 552e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 553089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block switch (mCurrentSite.getFeatureByIndex(position)) { 554089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block case Site.FEATURE_WEB_STORAGE: 555089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block new AlertDialog.Builder(getContext()) 556089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setTitle(R.string.webstorage_clear_data_dialog_title) 557089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setMessage(R.string.webstorage_clear_data_dialog_message) 558089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setPositiveButton(R.string.webstorage_clear_data_dialog_ok_button, 559089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block new AlertDialog.OnClickListener() { 560089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block public void onClick(DialogInterface dlg, int which) { 561089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block WebStorage.getInstance().deleteOrigin(mCurrentSite.getOrigin()); 562be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch // If this site has no more features, then go back to the 563be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch // origins list. 564be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mCurrentSite.removeFeature(Site.FEATURE_WEB_STORAGE); 565be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (mCurrentSite.getFeatureCount() == 0) { 56610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 567be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 56899b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 569be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch notifyDataSetChanged(); 570089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block }}) 571089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setNegativeButton(R.string.webstorage_clear_data_dialog_cancel_button, null) 572089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .setIcon(android.R.drawable.ic_dialog_alert) 573089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block .show(); 574089ce3ae9bca8a7f5bb84605dfabb7c65aa8aa5bSteve Block break; 575f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block case Site.FEATURE_GEOLOCATION: 576f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block new AlertDialog.Builder(getContext()) 577f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setTitle(R.string.geolocation_settings_page_dialog_title) 578f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setMessage(R.string.geolocation_settings_page_dialog_message) 579f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setPositiveButton(R.string.geolocation_settings_page_dialog_ok_button, 580f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block new AlertDialog.OnClickListener() { 581f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block public void onClick(DialogInterface dlg, int which) { 582f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block GeolocationPermissions.getInstance().clear(mCurrentSite.getOrigin()); 583be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch mCurrentSite.removeFeature(Site.FEATURE_GEOLOCATION); 584be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch if (mCurrentSite.getFeatureCount() == 0) { 58510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 586be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch } 58799b3ae1a384981f96fca5432f3d20bf4e8d13667Nicolas Roard askForOrigins(); 588be9560dbeb44338070170816b1ca45b2125b7ad9Ben Murdoch notifyDataSetChanged(); 589f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block }}) 590f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setNegativeButton(R.string.geolocation_settings_page_dialog_cancel_button, null) 591f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .setIcon(android.R.drawable.ic_dialog_alert) 592f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block .show(); 593f344d03c0b01d30575ba1ddd1ed340705c6f5a97Steve Block break; 594e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 595e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 59610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Site site = (Site) view.getTag(); 59710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck PreferenceActivity activity = (PreferenceActivity) getActivity(); 59810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (activity != null) { 59910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle args = new Bundle(); 60010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck args.putSerializable(EXTRA_SITE, site); 60110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck activity.startPreferencePanel(WebsiteSettingsFragment.class.getName(), args, 0, 60210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck site.getPrettyTitle(), null, 0); 60310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 604e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 605e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 6069e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch 6079e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch public Site currentSite() { 6089e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch return mCurrentSite; 6099e19e44f0b27f12cd07913548c23a885d822e716Ben Murdoch } 610e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 611e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 61210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck @Override 61310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public View onCreateView(LayoutInflater inflater, ViewGroup container, 61410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle savedInstanceState) { 61510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck View view = inflater.inflate(R.layout.website_settings, container, false); 61610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck Bundle args = getArguments(); 61710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (args != null) { 61810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mSite = (Site) args.getSerializable(EXTRA_SITE); 61910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 62010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mSite == null) { 62110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck View clear = view.findViewById(R.id.clear_all_button); 62210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck clear.setVisibility(View.VISIBLE); 62310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck clear.setOnClickListener(this); 624e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 62510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck return view; 626e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 627e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 628e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard @Override 62910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onActivityCreated(Bundle savedInstanceState) { 63010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck super.onActivityCreated(savedInstanceState); 631e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (sMBStored == null) { 632e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard sMBStored = getString(R.string.webstorage_origin_summary_mb_stored); 633e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 63410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter = new SiteAdapter(getActivity(), R.layout.website_settings_row); 63510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (mSite != null) { 63610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter.mCurrentSite = mSite; 63710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 63810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck getListView().setAdapter(mAdapter); 639e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard getListView().setOnItemClickListener(mAdapter); 640e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 641b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch 64210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck private void finish() { 64310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck PreferenceActivity activity = (PreferenceActivity) getActivity(); 64410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck if (activity != null) { 64510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck activity.finishPreferencePanel(this, 0, null); 64610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck } 647b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 648b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch 649b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch @Override 65010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onClick(View v) { 65110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck switch (v.getId()) { 65210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck case R.id.clear_all_button: 65310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck // Show the prompt to clear all origins of their data and geolocation permissions. 65410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck new AlertDialog.Builder(getActivity()) 65510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setTitle(R.string.website_settings_clear_all_dialog_title) 65610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setMessage(R.string.website_settings_clear_all_dialog_message) 65710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setPositiveButton(R.string.website_settings_clear_all_dialog_ok_button, 65810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck new AlertDialog.OnClickListener() { 65910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck public void onClick(DialogInterface dlg, int which) { 66010200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck WebStorage.getInstance().deleteAllData(); 66110200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck GeolocationPermissions.getInstance().clearAll(); 66210200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck WebStorageSizeManager.resetLastOutOfSpaceNotificationTime(); 66310200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck mAdapter.askForOrigins(); 66410200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck finish(); 66510200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck }}) 66610200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setNegativeButton(R.string.website_settings_clear_all_dialog_cancel_button, null) 66710200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .setIcon(android.R.drawable.ic_dialog_alert) 66810200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck .show(); 66910200795554ffeb16bf5662fd66ae6442c6f5cf0John Reck break; 670b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 671b9daacb7513c5a42000285ad456cc614af1915c0Ben Murdoch } 672e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard} 673