blob: e80888af6bcb5f18ba814c58ba67cff01db3d0d3 [file] [log] [blame]
Nicolas Roard78a98e42009-05-11 13:34:17 +01001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.browser;
18
19import android.content.Context;
Nicolas Roard6f480422009-05-12 16:31:33 +010020import android.preference.Preference;
Nicolas Roard78a98e42009-05-11 13:34:17 +010021import android.preference.PreferenceActivity;
22import android.preference.PreferenceScreen;
23import android.util.Log;
24import android.webkit.WebStorage;
25
26/**
27 * Manage the settings for an origin.
28 * We use it to keep track of the HTML5 settings, i.e. database (webstorage).
29 */
30class OriginSettings {
31
32 private String TAG = "OriginSettings";
33 private String mOrigin = null;
34 private long mQuota = 0;
35 private long mUsage = 0;
36 private PreferenceScreen mInfoScreen;
37 private PreferenceScreen mRootScreen;
38 private PreferenceActivity mActivity;
39
40 private static String sMBUsed = null;
41 private static String sNoQuotaLeft = null;
42 private static String sMBLeft = null;
43
44 public OriginSettings(PreferenceActivity activity, String origin) {
45 mOrigin = origin;
46 mUsage = WebStorage.getInstance().getUsageForOrigin(mOrigin);
47 mQuota = WebStorage.getInstance().getQuotaForOrigin(mOrigin);
48 mActivity = activity;
49 if (sMBUsed == null) {
50 sMBUsed = mActivity.getString(
51 R.string.webstorage_origin_summary_mb_used);
52 sNoQuotaLeft = mActivity.getString(
53 R.string.webstorage_origin_summary_no_quota_left);
54 sMBLeft = mActivity.getString(
55 R.string.webstorage_origin_summary_mb_left);
56 }
57 }
58
59 public String getOrigin() {
60 return mOrigin;
61 }
62
63 public long getQuota() {
64 return mQuota;
65 }
66
Nicolas Roard6f480422009-05-12 16:31:33 +010067 public long getUsage() {
68 return mUsage;
69 }
70
Nicolas Roard78a98e42009-05-11 13:34:17 +010071 public void setScreen(PreferenceScreen screen) {
72 mInfoScreen = screen;
73 }
74
75 public void setRootScreen(PreferenceScreen screen) {
76 mRootScreen = screen;
77 }
78
79 private String sizeValueToString(long value) {
80 float mb = (float) value / (1024.0F * 1024.0F);
81 int val = (int) (mb * 10);
82 float ret = (float) (val / 10.0F);
83 if (ret <= 0) {
84 return "0";
85 }
86 return String.valueOf(ret);
87 }
88
89 public void updateSummary() {
90 String summary = sizeValueToString(mUsage) + " " + sMBUsed;
91 if ((mQuota <= 0) || ((mQuota - mUsage) <= 0)) {
92 summary += ", " + sNoQuotaLeft;
93 } else {
94 summary += " (" + sizeValueToString(mQuota - mUsage);
95 summary += " " + sMBLeft + ")";
96 }
97 mInfoScreen.setSummary(summary);
98 mActivity.onContentChanged();
99 }
100
101 public void setup() {
102 mInfoScreen.setTitle(mOrigin);
103 mInfoScreen.setKey(mOrigin);
104 updateSummary();
105
106 BrowserQuotaPreference manageSite = new BrowserQuotaPreference(mActivity, this);
107 BrowserYesNoPreference clearAllData = new BrowserYesNoPreference(mActivity, this);
108
109 manageSite.setTitle(R.string.webstorage_manage_quota_title);
110 manageSite.setSummary(R.string.webstorage_manage_quota_summary);
111 manageSite.setKey(BrowserSettings.PREF_MANAGE_QUOTA);
112 manageSite.setEntries(R.array.webstorage_quota_entries);
113 manageSite.setEntryValues(R.array.webstorage_quota_entries_values);
114
115 clearAllData.setTitle(R.string.webstorage_clear_data_title);
116 clearAllData.setSummary(R.string.webstorage_clear_data_summary);
117 clearAllData.setKey(BrowserSettings.PREF_CLEAR_ALL_DATA);
118 clearAllData.setDialogTitle(R.string.webstorage_clear_data_dialog_title);
119 clearAllData.setDialogMessage(R.string.webstorage_clear_data_dialog_message);
120 clearAllData.setDialogIcon(android.R.drawable.ic_dialog_alert);
121
122 mInfoScreen.addPreference(manageSite);
123 mInfoScreen.addPreference(clearAllData);
124 }
125
126 public void setQuota(long quota) {
127 mQuota = quota;
128 WebStorage.getInstance().setQuotaForOrigin(mOrigin, mQuota);
129 mInfoScreen.getDialog().dismiss();
130 updateSummary();
131 }
132
133 public void delete() {
134 WebStorage.getInstance().deleteOrigin(mOrigin);
135 mInfoScreen.removeAll();
136 mRootScreen.removePreference(mInfoScreen);
137 mInfoScreen.getDialog().dismiss();
Nicolas Roard6f480422009-05-12 16:31:33 +0100138 if (mRootScreen.getPreferenceCount() == 0) {
139 mRootScreen.getDialog().dismiss();
140 mRootScreen.setEnabled(false);
141 Preference clearDatabases = mActivity.findPreference(
142 BrowserSettings.PREF_WEBSTORAGE_CLEAR_ALL);
143 clearDatabases.setEnabled(false);
144 }
Nicolas Roard78a98e42009-05-11 13:34:17 +0100145 }
146}