Make menus inactive when needed and only show possible quotas
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index e093ced..c6ce8a6 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -70,20 +70,29 @@
         e = findPreference(BrowserSettings.PREF_GEARS_SETTINGS);
         e.setOnPreferenceClickListener(this);
 
-        PreferenceScreen s = (PreferenceScreen)
+        PreferenceScreen manageDatabases = (PreferenceScreen)
             findPreference(BrowserSettings.PREF_WEBSTORAGE_SETTINGS);
 
+        Preference clearDatabases =
+            findPreference(BrowserSettings.PREF_WEBSTORAGE_CLEAR_ALL);
+
         Vector origins = WebStorage.getInstance().getOrigins();
+        manageDatabases.setEnabled(false);
+        clearDatabases.setEnabled(false);
         if (origins != null) {
+            if (origins.size() > 0) {
+                manageDatabases.setEnabled(true);
+                clearDatabases.setEnabled(true);
+            }
             for (int i = 0;  i < origins.size(); i++) {
                 OriginSettings origin =
                     new OriginSettings(this, (String) origins.get(i));
                 PreferenceScreen screen =
                     getPreferenceManager().createPreferenceScreen(this);
                 origin.setScreen(screen);
-                origin.setRootScreen(s);
+                origin.setRootScreen(manageDatabases);
                 origin.setup();
-                s.addPreference(screen);
+                manageDatabases.addPreference(screen);
             }
         }
     }
diff --git a/src/com/android/browser/BrowserQuotaPreference.java b/src/com/android/browser/BrowserQuotaPreference.java
index 653c085..e635bb2 100644
--- a/src/com/android/browser/BrowserQuotaPreference.java
+++ b/src/com/android/browser/BrowserQuotaPreference.java
@@ -24,6 +24,8 @@
 import android.view.View;
 import android.webkit.WebStorage;
 
+import java.util.Vector;
+
 /**
  * Utility class to display and manage the choosen quota
  * for an origin (HTML5 WebStorage feature)
@@ -44,25 +46,41 @@
         mOrigin = origin;
     }
 
-    public void setCurrentIndex () {
+    /**
+     * Find the minimum quota fitting the current usage
+     * and only show larger quotas in the list
+     */
+    public void setQuotaList () {
+        CharSequence[] entries = getEntries();
         CharSequence[] values = getEntryValues();
-        long quota = 0;
+        Vector<CharSequence> listEntries = new Vector<CharSequence>();
+        Vector<CharSequence> listValues = new Vector<CharSequence>();
+        long usage = 0;
         if (mOrigin != null) {
-            quota = mOrigin.getQuota();
+          usage = mOrigin.getUsage();
         }
         for (int i = 0; i < values.length; i++) {
             long value = Long.parseLong(values[i].toString());
             value *= sOneMB; // the string array is expressed in MB
-            if (value >= quota) {
-                setValueIndex(i);
-                break;
+            if (value >= usage) {
+                listEntries.add(entries[i]);
+                listValues.add(values[i]);
             }
         }
+        CharSequence[] newEntries = new CharSequence[listEntries.size()];
+        CharSequence[] newValues = new CharSequence[listValues.size()];
+        for (int i = 0; i < listEntries.size(); i++) {
+            newEntries[i] = listEntries.get(i);
+            newValues[i] = listValues.get(i);
+        }
+        setEntries(newEntries);
+        setEntryValues(newValues);
+        setValueIndex(0);
     }
 
     @Override
     protected View onCreateDialogView() {
-        setCurrentIndex();
+        setQuotaList();
         return super.onCreateDialogView();
     }
 
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 9be22ea..36a9d3f 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -128,6 +128,7 @@
     public final static String PREF_DEBUG_SETTINGS = "debug_menu";
     public final static String PREF_GEARS_SETTINGS = "gears_settings";
     public final static String PREF_WEBSTORAGE_SETTINGS = "webstorage_manage_databases";
+    public final static String PREF_WEBSTORAGE_CLEAR_ALL = "webstorage_clear_databases";
     public final static String PREF_TEXT_SIZE = "text_size";
     public final static String PREF_DEFAULT_TEXT_ENCODING =
             "default_text_encoding";
@@ -492,6 +493,7 @@
         PreferenceScreen screen = (PreferenceScreen)
             activity.findPreference(BrowserSettings.PREF_WEBSTORAGE_SETTINGS);
         screen.removeAll();
+        screen.setEnabled(false);
     }
 
     /*package*/ void resetDefaultPreferences(Context ctx) {
diff --git a/src/com/android/browser/OriginSettings.java b/src/com/android/browser/OriginSettings.java
index 3c7273d..e80888a 100644
--- a/src/com/android/browser/OriginSettings.java
+++ b/src/com/android/browser/OriginSettings.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.util.Log;
@@ -63,6 +64,10 @@
         return mQuota;
     }
 
+    public long getUsage() {
+        return mUsage;
+    }
+
     public void setScreen(PreferenceScreen screen) {
         mInfoScreen = screen;
     }
@@ -130,5 +135,12 @@
         mInfoScreen.removeAll();
         mRootScreen.removePreference(mInfoScreen);
         mInfoScreen.getDialog().dismiss();
+        if (mRootScreen.getPreferenceCount() == 0) {
+            mRootScreen.getDialog().dismiss();
+            mRootScreen.setEnabled(false);
+            Preference clearDatabases = mActivity.findPreference(
+                    BrowserSettings.PREF_WEBSTORAGE_CLEAR_ALL);
+            clearDatabases.setEnabled(false);
+        }
     }
 }