2009-03-04 03:32:22 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2008 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.email;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.SharedPreferences;
|
2011-06-26 00:24:19 +00:00
|
|
|
import android.text.TextUtils;
|
2009-03-04 03:32:22 +00:00
|
|
|
import android.util.Log;
|
|
|
|
|
2011-06-26 00:24:19 +00:00
|
|
|
import com.android.emailcommon.Logging;
|
2011-10-10 22:53:27 +00:00
|
|
|
import com.android.emailcommon.provider.Account;
|
2011-06-26 00:24:19 +00:00
|
|
|
|
|
|
|
import org.json.JSONArray;
|
|
|
|
import org.json.JSONException;
|
|
|
|
|
|
|
|
import java.util.HashSet;
|
2010-02-01 23:53:46 +00:00
|
|
|
import java.util.UUID;
|
|
|
|
|
2009-03-04 03:32:22 +00:00
|
|
|
public class Preferences {
|
2009-08-14 00:43:25 +00:00
|
|
|
|
|
|
|
// Preferences file
|
2011-09-14 08:00:24 +00:00
|
|
|
public static final String PREFERENCES_FILE = "AndroidMail.Main";
|
2009-08-14 00:43:25 +00:00
|
|
|
|
|
|
|
// Preferences field names
|
|
|
|
private static final String ACCOUNT_UUIDS = "accountUuids";
|
|
|
|
private static final String ENABLE_DEBUG_LOGGING = "enableDebugLogging";
|
|
|
|
private static final String ENABLE_EXCHANGE_LOGGING = "enableExchangeLogging";
|
|
|
|
private static final String ENABLE_EXCHANGE_FILE_LOGGING = "enableExchangeFileLogging";
|
2010-11-01 23:15:15 +00:00
|
|
|
private static final String INHIBIT_GRAPHICS_ACCELERATION = "inhibitGraphicsAcceleration";
|
2011-01-27 22:31:26 +00:00
|
|
|
private static final String FORCE_ONE_MINUTE_REFRESH = "forceOneMinuteRefresh";
|
2011-03-02 00:48:06 +00:00
|
|
|
private static final String ENABLE_STRICT_MODE = "enableStrictMode";
|
2010-02-01 23:53:46 +00:00
|
|
|
private static final String DEVICE_UID = "deviceUID";
|
2010-01-28 18:07:51 +00:00
|
|
|
private static final String ONE_TIME_INITIALIZATION_PROGRESS = "oneTimeInitializationProgress";
|
2010-09-09 22:34:19 +00:00
|
|
|
private static final String AUTO_ADVANCE_DIRECTION = "autoAdvance";
|
2010-11-02 21:57:22 +00:00
|
|
|
private static final String TEXT_ZOOM = "textZoom";
|
2010-12-08 20:28:02 +00:00
|
|
|
private static final String BACKGROUND_ATTACHMENTS = "backgroundAttachments";
|
2011-06-26 00:24:19 +00:00
|
|
|
private static final String TRUSTED_SENDERS = "trustedSenders";
|
2011-10-10 22:53:27 +00:00
|
|
|
private static final String LAST_ACCOUNT_USED = "lastAccountUsed";
|
2010-09-09 22:34:19 +00:00
|
|
|
|
|
|
|
public static final int AUTO_ADVANCE_NEWER = 0;
|
|
|
|
public static final int AUTO_ADVANCE_OLDER = 1;
|
|
|
|
public static final int AUTO_ADVANCE_MESSAGE_LIST = 2;
|
|
|
|
// "move to older" was the behavior on older versions.
|
2011-04-13 18:30:56 +00:00
|
|
|
private static final int AUTO_ADVANCE_DEFAULT = AUTO_ADVANCE_OLDER;
|
2009-08-14 00:43:25 +00:00
|
|
|
|
2011-01-12 02:39:23 +00:00
|
|
|
// The following constants are used as offsets into TEXT_ZOOM_ARRAY (below)
|
2010-11-02 21:57:22 +00:00
|
|
|
public static final int TEXT_ZOOM_TINY = 0;
|
|
|
|
public static final int TEXT_ZOOM_SMALL = 1;
|
|
|
|
public static final int TEXT_ZOOM_NORMAL = 2;
|
|
|
|
public static final int TEXT_ZOOM_LARGE = 3;
|
|
|
|
public static final int TEXT_ZOOM_HUGE = 4;
|
2011-01-12 02:39:23 +00:00
|
|
|
// "normal" will be the default
|
|
|
|
public static final int TEXT_ZOOM_DEFAULT = TEXT_ZOOM_NORMAL;
|
2010-11-02 21:57:22 +00:00
|
|
|
|
2011-09-14 08:00:24 +00:00
|
|
|
// Starting something new here:
|
|
|
|
// REPLY_ALL is saved by the framework (CheckBoxPreference's parent, Preference).
|
|
|
|
// i.e. android:persistent=true in general_preferences.xml
|
|
|
|
public static final String REPLY_ALL = "reply_all";
|
|
|
|
// Reply All Default - when changing this, be sure to update general_preferences.xml
|
|
|
|
public static final boolean REPLY_ALL_DEFAULT = false;
|
|
|
|
|
2010-05-10 21:20:16 +00:00
|
|
|
private static Preferences sPreferences;
|
2009-03-04 03:32:22 +00:00
|
|
|
|
2011-06-26 00:24:19 +00:00
|
|
|
private final SharedPreferences mSharedPreferences;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A set of trusted senders for whom images and external resources should automatically be
|
|
|
|
* loaded for.
|
|
|
|
* Lazilly created.
|
|
|
|
*/
|
|
|
|
private HashSet<String> mTrustedSenders = null;
|
2009-03-04 03:32:22 +00:00
|
|
|
|
|
|
|
private Preferences(Context context) {
|
2009-08-14 00:43:25 +00:00
|
|
|
mSharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE);
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TODO need to think about what happens if this gets GCed along with the
|
|
|
|
* Activity that initialized it. Do we lose ability to read Preferences in
|
|
|
|
* further Activities? Maybe this should be stored in the Application
|
|
|
|
* context.
|
|
|
|
*/
|
|
|
|
public static synchronized Preferences getPreferences(Context context) {
|
2010-05-10 21:20:16 +00:00
|
|
|
if (sPreferences == null) {
|
|
|
|
sPreferences = new Preferences(context);
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
2010-05-10 21:20:16 +00:00
|
|
|
return sPreferences;
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
2011-09-14 08:00:24 +00:00
|
|
|
public static SharedPreferences getSharedPreferences(Context context) {
|
|
|
|
return getPreferences(context).mSharedPreferences;
|
|
|
|
}
|
|
|
|
|
2011-05-06 19:07:39 +00:00
|
|
|
public static String getLegacyBackupPreference(Context context) {
|
|
|
|
return getPreferences(context).mSharedPreferences.getString(ACCOUNT_UUIDS, null);
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
2011-05-06 19:07:39 +00:00
|
|
|
public static void clearLegacyBackupPreference(Context context) {
|
|
|
|
getPreferences(context).mSharedPreferences.edit().remove(ACCOUNT_UUIDS).apply();
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void setEnableDebugLogging(boolean value) {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putBoolean(ENABLE_DEBUG_LOGGING, value).apply();
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
2009-08-14 00:43:25 +00:00
|
|
|
public boolean getEnableDebugLogging() {
|
|
|
|
return mSharedPreferences.getBoolean(ENABLE_DEBUG_LOGGING, false);
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
2009-08-09 04:58:54 +00:00
|
|
|
public void setEnableExchangeLogging(boolean value) {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putBoolean(ENABLE_EXCHANGE_LOGGING, value).apply();
|
2009-08-09 04:58:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getEnableExchangeLogging() {
|
2009-08-14 00:43:25 +00:00
|
|
|
return mSharedPreferences.getBoolean(ENABLE_EXCHANGE_LOGGING, false);
|
2009-08-09 04:58:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void setEnableExchangeFileLogging(boolean value) {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putBoolean(ENABLE_EXCHANGE_FILE_LOGGING, value).apply();
|
2009-08-09 04:58:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getEnableExchangeFileLogging() {
|
2009-08-14 00:43:25 +00:00
|
|
|
return mSharedPreferences.getBoolean(ENABLE_EXCHANGE_FILE_LOGGING, false);
|
2009-08-09 04:58:54 +00:00
|
|
|
}
|
|
|
|
|
2010-11-01 23:15:15 +00:00
|
|
|
public void setInhibitGraphicsAcceleration(boolean value) {
|
|
|
|
mSharedPreferences.edit().putBoolean(INHIBIT_GRAPHICS_ACCELERATION, value).apply();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getInhibitGraphicsAcceleration() {
|
|
|
|
return mSharedPreferences.getBoolean(INHIBIT_GRAPHICS_ACCELERATION, false);
|
|
|
|
}
|
|
|
|
|
2011-01-27 22:31:26 +00:00
|
|
|
public void setForceOneMinuteRefresh(boolean value) {
|
|
|
|
mSharedPreferences.edit().putBoolean(FORCE_ONE_MINUTE_REFRESH, value).apply();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getForceOneMinuteRefresh() {
|
|
|
|
return mSharedPreferences.getBoolean(FORCE_ONE_MINUTE_REFRESH, false);
|
|
|
|
}
|
|
|
|
|
2011-03-02 00:48:06 +00:00
|
|
|
public void setEnableStrictMode(boolean value) {
|
|
|
|
mSharedPreferences.edit().putBoolean(ENABLE_STRICT_MODE, value).apply();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getEnableStrictMode() {
|
|
|
|
return mSharedPreferences.getBoolean(ENABLE_STRICT_MODE, false);
|
|
|
|
}
|
|
|
|
|
2010-02-01 23:53:46 +00:00
|
|
|
/**
|
|
|
|
* Generate a new "device UID". This is local to Email app only, to prevent possibility
|
|
|
|
* of correlation with any other user activities in any other apps.
|
|
|
|
* @return a persistent, unique ID
|
|
|
|
*/
|
|
|
|
public synchronized String getDeviceUID() {
|
|
|
|
String result = mSharedPreferences.getString(DEVICE_UID, null);
|
|
|
|
if (result == null) {
|
|
|
|
result = UUID.randomUUID().toString();
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putString(DEVICE_UID, result).apply();
|
2010-02-01 23:53:46 +00:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2010-01-28 18:07:51 +00:00
|
|
|
public int getOneTimeInitializationProgress() {
|
|
|
|
return mSharedPreferences.getInt(ONE_TIME_INITIALIZATION_PROGRESS, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setOneTimeInitializationProgress(int progress) {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putInt(ONE_TIME_INITIALIZATION_PROGRESS, progress).apply();
|
2010-01-28 18:07:51 +00:00
|
|
|
}
|
|
|
|
|
2010-09-09 22:34:19 +00:00
|
|
|
public int getAutoAdvanceDirection() {
|
|
|
|
return mSharedPreferences.getInt(AUTO_ADVANCE_DIRECTION, AUTO_ADVANCE_DEFAULT);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setAutoAdvanceDirection(int direction) {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().putInt(AUTO_ADVANCE_DIRECTION, direction).apply();
|
2010-09-09 22:34:19 +00:00
|
|
|
}
|
|
|
|
|
2010-11-02 21:57:22 +00:00
|
|
|
public int getTextZoom() {
|
|
|
|
return mSharedPreferences.getInt(TEXT_ZOOM, TEXT_ZOOM_DEFAULT);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setTextZoom(int zoom) {
|
|
|
|
mSharedPreferences.edit().putInt(TEXT_ZOOM, zoom).apply();
|
|
|
|
}
|
|
|
|
|
2010-12-08 20:28:02 +00:00
|
|
|
public boolean getBackgroundAttachments() {
|
|
|
|
return mSharedPreferences.getBoolean(BACKGROUND_ATTACHMENTS, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setBackgroundAttachments(boolean allowed) {
|
|
|
|
mSharedPreferences.edit().putBoolean(BACKGROUND_ATTACHMENTS, allowed).apply();
|
|
|
|
}
|
|
|
|
|
2011-06-26 00:24:19 +00:00
|
|
|
/**
|
|
|
|
* Determines whether or not a sender should be trusted and images should automatically be
|
|
|
|
* shown for messages by that sender.
|
|
|
|
*/
|
|
|
|
public boolean shouldShowImagesFor(String email) {
|
|
|
|
if (mTrustedSenders == null) {
|
|
|
|
try {
|
|
|
|
mTrustedSenders = parseEmailSet(mSharedPreferences.getString(TRUSTED_SENDERS, ""));
|
|
|
|
} catch (JSONException e) {
|
|
|
|
// Something went wrong, and the data is corrupt. Just clear it to be safe.
|
|
|
|
Log.w(Logging.LOG_TAG, "Trusted sender set corrupted. Clearing");
|
|
|
|
mSharedPreferences.edit().putString(TRUSTED_SENDERS, "").apply();
|
|
|
|
mTrustedSenders = new HashSet<String>();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return mTrustedSenders.contains(email);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Marks a sender as trusted so that images from that sender will automatically be shown.
|
|
|
|
*/
|
|
|
|
public void setSenderAsTrusted(String email) {
|
|
|
|
if (!mTrustedSenders.contains(email)) {
|
|
|
|
mTrustedSenders.add(email);
|
|
|
|
mSharedPreferences
|
|
|
|
.edit()
|
|
|
|
.putString(TRUSTED_SENDERS, packEmailSet(mTrustedSenders))
|
|
|
|
.apply();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-07-11 17:51:53 +00:00
|
|
|
/**
|
|
|
|
* Clears all trusted senders asynchronously.
|
|
|
|
*/
|
|
|
|
public void clearTrustedSenders() {
|
|
|
|
mTrustedSenders = new HashSet<String>();
|
|
|
|
mSharedPreferences
|
|
|
|
.edit()
|
|
|
|
.putString(TRUSTED_SENDERS, packEmailSet(mTrustedSenders))
|
|
|
|
.apply();
|
|
|
|
}
|
|
|
|
|
2011-06-26 00:24:19 +00:00
|
|
|
HashSet<String> parseEmailSet(String serialized) throws JSONException {
|
|
|
|
HashSet<String> result = new HashSet<String>();
|
|
|
|
if (!TextUtils.isEmpty(serialized)) {
|
|
|
|
JSONArray arr = new JSONArray(serialized);
|
|
|
|
for (int i = 0, len = arr.length(); i < len; i++) {
|
|
|
|
result.add((String) arr.get(i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
String packEmailSet(HashSet<String> set) {
|
|
|
|
return new JSONArray(set).toString();
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
2011-10-10 22:53:27 +00:00
|
|
|
/**
|
|
|
|
* Returns the last used account ID as set by {@link #setLastUsedAccountId}.
|
|
|
|
* The system makes no attempt to automatically track what is considered a "use" - clients
|
|
|
|
* are expected to call {@link #setLastUsedAccountId} manually.
|
|
|
|
*
|
|
|
|
* Note that the last used account may have been deleted in the background so there is also
|
|
|
|
* no guarantee that the account exists.
|
|
|
|
*/
|
|
|
|
public long getLastUsedAccountId() {
|
|
|
|
return mSharedPreferences.getLong(LAST_ACCOUNT_USED, Account.NO_ACCOUNT);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the specified ID of the last account used. Treated as an opaque ID and does not
|
|
|
|
* validate the value. Value is saved asynchronously.
|
|
|
|
*/
|
|
|
|
public void setLastUsedAccountId(long accountId) {
|
|
|
|
mSharedPreferences
|
|
|
|
.edit()
|
|
|
|
.putLong(LAST_ACCOUNT_USED, accountId)
|
|
|
|
.apply();
|
|
|
|
}
|
|
|
|
|
2009-03-04 03:32:22 +00:00
|
|
|
public void clear() {
|
2010-11-01 15:51:26 +00:00
|
|
|
mSharedPreferences.edit().clear().apply();
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void dump() {
|
2011-05-13 18:20:04 +00:00
|
|
|
if (Logging.LOGD) {
|
2009-03-04 03:32:22 +00:00
|
|
|
for (String key : mSharedPreferences.getAll().keySet()) {
|
2011-02-11 23:05:17 +00:00
|
|
|
Log.v(Logging.LOG_TAG, key + " = " + mSharedPreferences.getAll().get(key));
|
2009-03-04 03:32:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|