WebsiteSettingsFragment.java revision ee0d639003a5dec32cf45416b0c751def2d4d25a
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 17e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardpackage com.android.browser; 18e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 19e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.app.AlertDialog; 20e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.app.ListActivity; 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; 27e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.os.Bundle; 28e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.provider.Browser; 29e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.util.Log; 30e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.KeyEvent; 31e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.LayoutInflater; 32e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.View; 33e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.view.ViewGroup; 34e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.webkit.WebIconDatabase; 35e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.webkit.WebStorage; 36e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.ArrayAdapter; 37e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.AdapterView; 38e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.AdapterView.OnItemClickListener; 39e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.ImageView; 40e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport android.widget.TextView; 41e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 42e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.HashMap; 43ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Blockimport java.util.HashSet; 44e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Iterator; 45e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Set; 46e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardimport java.util.Vector; 47e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 48e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard/** 49e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Manage the settings for an origin. 50e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * We use it to keep track of the HTML5 settings, i.e. database (webstorage). 51e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 52e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roardpublic class WebsiteSettingsActivity extends ListActivity { 53e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 54e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String LOGTAG = "WebsiteSettingsActivity"; 55e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private static String sMBStored = null; 56e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private SiteAdapter mAdapter = null; 57e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 58e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard class Site { 59e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mOrigin; 60e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private String mTitle; 61e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mIcon; 62e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 631ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public Site(String origin) { 64e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mOrigin = origin; 651ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mTitle = null; 661ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block mIcon = null; 67e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 68e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 69e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public String getOrigin() { 70e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mOrigin; 71e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 72e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 73e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setTitle(String title) { 74e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mTitle = title; 75e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 76e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 77e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void setIcon(Bitmap icon) { 78e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mIcon = icon; 79e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 80e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 81e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public Bitmap getIcon() { 82e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return mIcon; 83e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 841ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 851ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyOrigin() { 861ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? null : hideHttp(mOrigin); 871ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 881ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 891ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block public String getPrettyTitle() { 901ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return mTitle == null ? hideHttp(mOrigin) : mTitle; 911ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 921ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block 931ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block private String hideHttp(String str) { 941ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block Uri uri = Uri.parse(str); 951ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block return "http".equals(uri.getScheme()) ? str.substring(7) : str; 961ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block } 97e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 98e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 99e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard class SiteAdapter extends ArrayAdapter<Site> 100e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard implements AdapterView.OnItemClickListener { 101e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private int mResource; 102e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private LayoutInflater mInflater; 103e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Bitmap mDefaultIcon; 104e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private Site mCurrentSite; 105e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard private final static int STORED_DATA = 0; 106e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 107e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public SiteAdapter(Context context, int rsc) { 108e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard super(context, rsc); 109e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mResource = rsc; 110e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 111e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mDefaultIcon = BitmapFactory.decodeResource(getResources(), 112e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard R.drawable.ic_launcher_shortcut_browser_bookmark); 113e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard populateOrigins(); 114e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 115e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 116e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void populateOrigins() { 117e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard clear(); 118e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 119e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // Get the list of origins we want to display 120824faebe51bae769395ec1d7f590530df94b58d3Andrei Popescu Set origins = WebStorage.getInstance().getOrigins(); 121ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Set sites = new HashSet<Site>(); 122e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (origins != null) { 123824faebe51bae769395ec1d7f590530df94b58d3Andrei Popescu Iterator<String> iter = origins.iterator(); 124824faebe51bae769395ec1d7f590530df94b58d3Andrei Popescu while (iter.hasNext()) { 125824faebe51bae769395ec1d7f590530df94b58d3Andrei Popescu String origin = iter.next(); 1261ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block Site site = new Site(origin); 127ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block sites.add(site); 128e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 129e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 130e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 131ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // Create a map from host to origin. This is used to add metadata 132ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // (title, icon) for this origin from the bookmarks DB. 133ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block HashMap hosts = new HashMap<String, Set<Site> >(); 134ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Iterator<Site> sitesIter = sites.iterator(); 135ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block while (sitesIter.hasNext()) { 136ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Site site = sitesIter.next(); 137ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block String host = Uri.parse(site.getOrigin()).getHost(); 138ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Set hostSites = null; 139ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block if (hosts.containsKey(host)) { 140ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block hostSites = (Set) hosts.get(host); 141ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } else { 142ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block hostSites = new HashSet<Site>(); 143ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block hosts.put(host, hostSites); 144ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } 145ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block hostSites.add(site); 146ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } 147ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block 148ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // Check the bookmark DB. If we have data for a host used by any of 149ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block // our origins, use it to set their title and favicon 150e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Cursor c = getContext().getContentResolver().query(Browser.BOOKMARKS_URI, 151e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard new String[] { Browser.BookmarkColumns.URL, Browser.BookmarkColumns.TITLE, 152e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Browser.BookmarkColumns.FAVICON }, "bookmark = 1", null, null); 153e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 154e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if ((c != null) && c.moveToFirst()) { 155e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int urlIndex = c.getColumnIndex(Browser.BookmarkColumns.URL); 156e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int titleIndex = c.getColumnIndex(Browser.BookmarkColumns.TITLE); 157e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int faviconIndex = c.getColumnIndex(Browser.BookmarkColumns.FAVICON); 158e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard do { 159e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard String url = c.getString(urlIndex); 160e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard String host = Uri.parse(url).getHost(); 161ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block if (hosts.containsKey(host)) { 162e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard String title = c.getString(titleIndex); 163ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Bitmap bmp = null; 164e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard byte[] data = c.getBlob(faviconIndex); 165e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (data != null) { 166ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 167ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block } 168ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Set matchingSites = (Set) hosts.get(host); 169ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block sitesIter = matchingSites.iterator(); 170ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block while (sitesIter.hasNext()) { 171ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Site site = sitesIter.next(); 172ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block site.setTitle(title); 173e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (bmp != null) { 174e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard site.setIcon(bmp); 175e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 176e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 177e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 178e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } while (c.moveToNext()); 179e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 180e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 181e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We can now simply populate our array with Site instances 182ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block sitesIter = sites.iterator(); 183ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block while (sitesIter.hasNext()) { 184ee0d639003a5dec32cf45416b0c751def2d4d25aSteve Block Site site = sitesIter.next(); 185e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard add(site); 186e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 187e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 188e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (getCount() == 0) { 189e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard finish(); // we close the screen 190e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 191e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 192e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 193e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public int getCount() { 194e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 195e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return super.getCount(); 196e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 197e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return 1; // db view 198e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 199e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 200e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public String sizeValueToString(long value) { 201e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard float mb = (float) value / (1024.0F * 1024.0F); 202e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int val = (int) (mb * 10); 203e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard float ret = (float) (val / 10.0F); 204e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (ret <= 0) { 205e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return "0"; 206e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 207e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return String.valueOf(ret); 208e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 209e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 210e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard /* 211e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * If we receive the back event and are displaying 212e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * site's settings, we want to go back to the main 213e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * list view. If not, we just do nothing (see 214e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * dispatchKeyEvent() below). 215e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 216e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public boolean backKeyPressed() { 217e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 218e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mCurrentSite = null; 219e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard populateOrigins(); 220e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard notifyDataSetChanged(); 221e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return true; 222e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 223e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return false; 224e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 225e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 226e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public View getView(int position, View convertView, ViewGroup parent) { 227e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view; 228e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard TextView title; 229e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard TextView subtitle; 230e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard ImageView icon; 231e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 232e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (convertView == null) { 233e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = mInflater.inflate(mResource, parent, false); 234e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 235e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view = convertView; 236e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 237e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 238e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard title = (TextView) view.findViewById(R.id.title); 239e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard subtitle = (TextView) view.findViewById(R.id.subtitle); 240e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon = (ImageView) view.findViewById(R.id.icon); 241e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 242e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite == null) { 243e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Site site = getItem(position); 2441ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block title.setText(site.getPrettyTitle()); 2451ad98cf1e4fb36e7164024f8c1a1098ac2ecaed6Steve Block subtitle.setText(site.getPrettyOrigin()); 246e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.VISIBLE); 247e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard Bitmap bmp = site.getIcon(); 248e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (bmp == null) { 249e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard bmp = mDefaultIcon; 250e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 251e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setImageBitmap(bmp); 252e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // We set the site as the view's tag, 253e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard // so that we can get it in onItemClick() 254e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard view.setTag(site); 255e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 256e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard icon.setVisibility(View.GONE); 257e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (position == STORED_DATA) { 258e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard String origin = mCurrentSite.getOrigin(); 259e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard long usageValue = WebStorage.getInstance().getUsageForOrigin(origin); 260e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard String usage = sizeValueToString(usageValue) + " " + sMBStored; 261e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 262e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard title.setText(R.string.webstorage_clear_data_title); 263e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard subtitle.setText(usage); 264e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 265e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 266e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 267e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return view; 268e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 269e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 270e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void onItemClick(AdapterView<?> parent, 271e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard View view, 272e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard int position, 273e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard long id) { 274e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (mCurrentSite != null) { 275e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (position == STORED_DATA) { 276e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard new AlertDialog.Builder(getContext()) 277e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .setTitle(R.string.webstorage_clear_data_dialog_title) 278e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .setMessage(R.string.webstorage_clear_data_dialog_message) 279e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .setPositiveButton(R.string.webstorage_clear_data_dialog_ok_button, 280e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard new AlertDialog.OnClickListener() { 281e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public void onClick(DialogInterface dlg, int which) { 282e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard WebStorage.getInstance().deleteOrigin(mCurrentSite.getOrigin()); 283e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mCurrentSite = null; 284e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard populateOrigins(); 285e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard notifyDataSetChanged(); 286e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard }}) 287e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .setNegativeButton(R.string.webstorage_clear_data_dialog_cancel_button, null) 288e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .setIcon(android.R.drawable.ic_dialog_alert) 289e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard .show(); 290e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 291e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } else { 292e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mCurrentSite = (Site) view.getTag(); 293e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard notifyDataSetChanged(); 294e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 295e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 296e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 297e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 298e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard /** 299e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * Intercepts the back key to immediately notify 300e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard * NativeDialog that we are done. 301e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard */ 302e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard public boolean dispatchKeyEvent(KeyEvent event) { 303e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) 304e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard && (event.getAction() == KeyEvent.ACTION_DOWN)) { 305e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if ((mAdapter != null) && (mAdapter.backKeyPressed())){ 306e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return true; // event consumed 307e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 308e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 309e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard return super.dispatchKeyEvent(event); 310e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 311e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard 312e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard @Override 313e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard protected void onCreate(Bundle icicle) { 314e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard super.onCreate(icicle); 315e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard if (sMBStored == null) { 316e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard sMBStored = getString(R.string.webstorage_origin_summary_mb_stored); 317e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 318e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard mAdapter = new SiteAdapter(this, R.layout.application); 319e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard setListAdapter(mAdapter); 320e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard getListView().setOnItemClickListener(mAdapter); 321e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard } 322e46990ea925f41bdb4d504c91a681e826f4b6eb1Nicolas Roard} 323