Add UI support in the browser for HTML5 databases
diff --git a/src/com/android/browser/OriginSettings.java b/src/com/android/browser/OriginSettings.java
new file mode 100644
index 0000000..3c7273d
--- /dev/null
+++ b/src/com/android/browser/OriginSettings.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+import android.webkit.WebStorage;
+
+/**
+ * Manage the settings for an origin.
+ * We use it to keep track of the HTML5 settings, i.e. database (webstorage).
+ */
+class OriginSettings {
+
+    private String TAG = "OriginSettings";
+    private String mOrigin = null;
+    private long mQuota = 0;
+    private long mUsage = 0;
+    private PreferenceScreen mInfoScreen;
+    private PreferenceScreen mRootScreen;
+    private PreferenceActivity mActivity;
+
+    private static String sMBUsed = null;
+    private static String sNoQuotaLeft = null;
+    private static String sMBLeft = null;
+
+    public OriginSettings(PreferenceActivity activity, String origin) {
+        mOrigin = origin;
+        mUsage = WebStorage.getInstance().getUsageForOrigin(mOrigin);
+        mQuota = WebStorage.getInstance().getQuotaForOrigin(mOrigin);
+        mActivity = activity;
+        if (sMBUsed == null) {
+          sMBUsed = mActivity.getString(
+              R.string.webstorage_origin_summary_mb_used);
+          sNoQuotaLeft = mActivity.getString(
+              R.string.webstorage_origin_summary_no_quota_left);
+          sMBLeft = mActivity.getString(
+              R.string.webstorage_origin_summary_mb_left);
+        }
+    }
+
+    public String getOrigin() {
+        return mOrigin;
+    }
+
+    public long getQuota() {
+        return mQuota;
+    }
+
+    public void setScreen(PreferenceScreen screen) {
+        mInfoScreen = screen;
+    }
+
+    public void setRootScreen(PreferenceScreen screen) {
+        mRootScreen = screen;
+    }
+
+    private String sizeValueToString(long value) {
+        float mb = (float) value / (1024.0F * 1024.0F);
+        int val = (int) (mb * 10);
+        float ret = (float) (val / 10.0F);
+        if (ret <= 0) {
+            return "0";
+        }
+        return String.valueOf(ret);
+    }
+
+    public void updateSummary() {
+        String summary = sizeValueToString(mUsage) + " " + sMBUsed;
+        if ((mQuota <= 0) || ((mQuota - mUsage) <= 0)) {
+            summary += ", " + sNoQuotaLeft;
+        } else {
+            summary += " (" + sizeValueToString(mQuota - mUsage);
+            summary += " " + sMBLeft + ")";
+        }
+        mInfoScreen.setSummary(summary);
+        mActivity.onContentChanged();
+    }
+
+    public void setup() {
+        mInfoScreen.setTitle(mOrigin);
+        mInfoScreen.setKey(mOrigin);
+        updateSummary();
+
+        BrowserQuotaPreference manageSite = new BrowserQuotaPreference(mActivity, this);
+        BrowserYesNoPreference clearAllData = new BrowserYesNoPreference(mActivity, this);
+
+        manageSite.setTitle(R.string.webstorage_manage_quota_title);
+        manageSite.setSummary(R.string.webstorage_manage_quota_summary);
+        manageSite.setKey(BrowserSettings.PREF_MANAGE_QUOTA);
+        manageSite.setEntries(R.array.webstorage_quota_entries);
+        manageSite.setEntryValues(R.array.webstorage_quota_entries_values);
+
+        clearAllData.setTitle(R.string.webstorage_clear_data_title);
+        clearAllData.setSummary(R.string.webstorage_clear_data_summary);
+        clearAllData.setKey(BrowserSettings.PREF_CLEAR_ALL_DATA);
+        clearAllData.setDialogTitle(R.string.webstorage_clear_data_dialog_title);
+        clearAllData.setDialogMessage(R.string.webstorage_clear_data_dialog_message);
+        clearAllData.setDialogIcon(android.R.drawable.ic_dialog_alert);
+
+        mInfoScreen.addPreference(manageSite);
+        mInfoScreen.addPreference(clearAllData);
+    }
+
+    public void setQuota(long quota) {
+        mQuota = quota;
+        WebStorage.getInstance().setQuotaForOrigin(mOrigin, mQuota);
+        mInfoScreen.getDialog().dismiss();
+        updateSummary();
+    }
+
+    public void delete() {
+        WebStorage.getInstance().deleteOrigin(mOrigin);
+        mInfoScreen.removeAll();
+        mRootScreen.removePreference(mInfoScreen);
+        mInfoScreen.getDialog().dismiss();
+    }
+}