Reconcile with jb-mr1.1-release - do not merge
Change-Id: I12e03896390996549ed7bb210df226b99d4de21d
diff --git a/emailcommon/src/com/android/emailcommon/provider/Account.java b/emailcommon/src/com/android/emailcommon/provider/Account.java
index 97a6f12..1215155 100755
--- a/emailcommon/src/com/android/emailcommon/provider/Account.java
+++ b/emailcommon/src/com/android/emailcommon/provider/Account.java
@@ -70,7 +70,7 @@
// Whether or not the user has asked for notifications of new mail in this account
public final static int FLAGS_NOTIFY_NEW_MAIL = 1<<0;
// Whether or not the user has asked for vibration notifications with all new mail
- public final static int FLAGS_VIBRATE_ALWAYS = 1<<1;
+ public final static int FLAGS_VIBRATE = 1<<1;
// Bit mask for the account's deletion policy (see DELETE_POLICY_x below)
public static final int FLAGS_DELETE_POLICY_MASK = 1<<2 | 1<<3;
public static final int FLAGS_DELETE_POLICY_SHIFT = 2;
@@ -82,8 +82,6 @@
// required by the server; in this state, the user MUST be alerted to the need to update
// security settings. Sync adapters SHOULD NOT attempt to sync when this flag is set.
public static final int FLAGS_SECURITY_HOLD = 1<<5;
- // Whether or not the user has asked for vibration notifications when the ringer is silent
- public static final int FLAGS_VIBRATE_WHEN_SILENT = 1<<6;
// Whether the account supports "smart forward" (i.e. the server appends the original
// message along with any attachments to the outgoing message)
public static final int FLAGS_SUPPORTS_SMART_FORWARD = 1<<7;
@@ -373,8 +371,7 @@
/**
* @return the flags for this account
* @see #FLAGS_NOTIFY_NEW_MAIL
- * @see #FLAGS_VIBRATE_ALWAYS
- * @see #FLAGS_VIBRATE_WHEN_SILENT
+ * @see #FLAGS_VIBRATE
*/
public int getFlags() {
return mFlags;
@@ -383,8 +380,7 @@
/**
* Set the flags for this account
* @see #FLAGS_NOTIFY_NEW_MAIL
- * @see #FLAGS_VIBRATE_ALWAYS
- * @see #FLAGS_VIBRATE_WHEN_SILENT
+ * @see #FLAGS_VIBRATE
* @param newFlags the new value for the flags
*/
public void setFlags(int newFlags) {
diff --git a/emailcommon/src/com/android/emailcommon/utility/EmailClientConnectionManager.java b/emailcommon/src/com/android/emailcommon/utility/EmailClientConnectionManager.java
index 15d1cca..55ae014 100644
--- a/emailcommon/src/com/android/emailcommon/utility/EmailClientConnectionManager.java
+++ b/emailcommon/src/com/android/emailcommon/utility/EmailClientConnectionManager.java
@@ -99,7 +99,7 @@
KeyManager keyManager =
KeyChainKeyManager.fromAlias(context, hostAuth.mClientCertAlias);
SSLCertificateSocketFactory underlying = SSLUtils.getSSLSocketFactory(
- hostAuth.shouldTrustAllServerCerts());
+ hostAuth.shouldTrustAllServerCerts(), 0 /* no timeout */);
underlying.setKeyManagers(new KeyManager[] { keyManager });
registry.register(
new Scheme(schemeName, new SSLSocketFactory(underlying), hostAuth.mPort));
diff --git a/emailcommon/src/com/android/emailcommon/utility/SSLUtils.java b/emailcommon/src/com/android/emailcommon/utility/SSLUtils.java
index b21c68f..85b77c1 100644
--- a/emailcommon/src/com/android/emailcommon/utility/SSLUtils.java
+++ b/emailcommon/src/com/android/emailcommon/utility/SSLUtils.java
@@ -47,19 +47,20 @@
* Optionally bypass all SSL certificate checks.
*
* @param insecure if true, bypass all SSL certificate checks
+ * @param timeout the timeout value in milliseconds or {@code 0} for an infinite timeout.
*/
public synchronized static SSLCertificateSocketFactory getSSLSocketFactory(
- boolean insecure) {
+ boolean insecure, int timeout) {
if (insecure) {
if (sInsecureFactory == null) {
sInsecureFactory = (SSLCertificateSocketFactory)
- SSLCertificateSocketFactory.getInsecure(0, null);
+ SSLCertificateSocketFactory.getInsecure(timeout, null);
}
return sInsecureFactory;
} else {
if (sSecureFactory == null) {
sSecureFactory = (SSLCertificateSocketFactory)
- SSLCertificateSocketFactory.getDefault(0, null);
+ SSLCertificateSocketFactory.getDefault(timeout, null);
}
return sSecureFactory;
}
@@ -70,7 +71,7 @@
* Apache HTTP stack.
*/
public static SSLSocketFactory getHttpSocketFactory(boolean insecure, KeyManager keyManager) {
- SSLCertificateSocketFactory underlying = getSSLSocketFactory(insecure);
+ SSLCertificateSocketFactory underlying = getSSLSocketFactory(insecure, 0 /* no timeout */);
if (keyManager != null) {
underlying.setKeyManagers(new KeyManager[] { keyManager });
}
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c881e6e..33a1928 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -109,23 +109,6 @@
<item>6</item>
</string-array>
- <!-- The vibrate notification modes -->
- <string-array name="account_settings_vibrate_when_entries">
- <!-- Always -->
- <item>@string/account_settings_vibrate_when_always</item>
- <!-- Only when the phone is in Silent mode -->
- <item>@string/account_settings_vibrate_when_silent</item>
- <!-- Never -->
- <item>@string/account_settings_vibrate_when_never</item>
- </string-array>
-
- <!-- The vibrate notification values -->
- <string-array translatable="false" name="account_settings_vibrate_when_values">
- <item>always</item>
- <item>silent</item>
- <item>never</item>
- </string-array>
-
<!-- Auto-advance options (DO NOT change the order. Code assumes this order)-->
<string-array name="general_preference_auto_advance_entries">
<!-- Move to newer -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 74280a4..c39ee4a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -988,17 +988,6 @@
<!-- On Settings screen, vibrate pop-up menu label -->
<string name="account_settings_vibrate_when_label">Vibrate</string>
- <!-- On Settings screen, vibrate pop-up menu summary text -->
- <string name="account_settings_vibrate_when_summary">Also vibrate when email arrives</string>
- <!-- On Settings screen, vibrate pop-up menu option "always" text -->
- <string name="account_settings_vibrate_when_always">Always</string>
- <!-- On Settings screen, vibrate pop-up menu option "silent" text -->
- <string name="account_settings_vibrate_when_silent">Only when silent</string>
- <!-- On Settings screen, vibrate pop-up menu option "never" text -->
- <string name="account_settings_vibrate_when_never">Never</string>
-
- <!-- Dialog title for the Vibrate dialog -->
- <string name="account_settings_vibrate_when_dlg_title">Vibrate</string>
<!-- On Settings screen, setting option name -->
<string name="account_settings_ringtone">Choose ringtone</string>
diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml
index 7b6fa9b..66a71f3 100644
--- a/res/xml/account_settings_preferences.xml
+++ b/res/xml/account_settings_preferences.xml
@@ -107,16 +107,11 @@
android:ringtoneType="notification"
android:defaultValue="content://settings/system/notification_sound" />
- <ListPreference
- android:key="account_settings_vibrate_when"
- android:layout="?android:attr/preferenceLayoutChild"
+ <CheckBoxPreference
+ android:key="account_settings_vibrate"
android:dependency="account_notify"
- android:defaultValue="never"
- android:title="@string/account_settings_vibrate_when_label"
- android:summary="@string/account_settings_vibrate_when_summary"
- android:entries="@array/account_settings_vibrate_when_entries"
- android:entryValues="@array/account_settings_vibrate_when_values"
- android:dialogTitle="@string/account_settings_vibrate_when_dlg_title" />
+ android:defaultValue="false"
+ android:title="@string/account_settings_vibrate_when_label" />
</PreferenceCategory>
diff --git a/src/com/android/email/NotificationController.java b/src/com/android/email/NotificationController.java
index 1dc2149..529d721 100644
--- a/src/com/android/email/NotificationController.java
+++ b/src/com/android/email/NotificationController.java
@@ -668,12 +668,10 @@
void setupSoundAndVibration(Notification.Builder builder, Account account) {
final int flags = account.mFlags;
final String ringtoneUri = account.mRingtoneUri;
- final boolean vibrate = (flags & Account.FLAGS_VIBRATE_ALWAYS) != 0;
- final boolean vibrateWhenSilent = (flags & Account.FLAGS_VIBRATE_WHEN_SILENT) != 0;
- final boolean isRingerSilent = getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
+ final boolean vibrate = (flags & Account.FLAGS_VIBRATE) != 0;
int defaults = Notification.DEFAULT_LIGHTS;
- if (vibrate || (vibrateWhenSilent && isRingerSilent)) {
+ if (vibrate) {
defaults |= Notification.DEFAULT_VIBRATE;
}
diff --git a/src/com/android/email/activity/setup/AccountSettingsFragment.java b/src/com/android/email/activity/setup/AccountSettingsFragment.java
index 7e19076..02ef74c 100644
--- a/src/com/android/email/activity/setup/AccountSettingsFragment.java
+++ b/src/com/android/email/activity/setup/AccountSettingsFragment.java
@@ -78,7 +78,8 @@
private static final String PREFERENCE_CATEGORY_DATA_USAGE = "data_usage";
private static final String PREFERENCE_CATEGORY_NOTIFICATIONS = "account_notifications";
private static final String PREFERENCE_NOTIFY = "account_notify";
- private static final String PREFERENCE_VIBRATE_WHEN = "account_settings_vibrate_when";
+ private static final String PREFERENCE_VIBRATE = "account_settings_vibrate";
+ private static final String PREFERENCE_VIBRATE_OLD = "account_settings_vibrate_when";
private static final String PREFERENCE_RINGTONE = "account_ringtone";
private static final String PREFERENCE_CATEGORY_SERVER = "account_servers";
private static final String PREFERENCE_INCOMING = "incoming";
@@ -88,11 +89,6 @@
private static final String PREFERENCE_SYNC_EMAIL = "account_sync_email";
private static final String PREFERENCE_DELETE_ACCOUNT = "delete_account";
- // These strings must match account_settings_vibrate_when_* strings in strings.xml
- private static final String PREFERENCE_VALUE_VIBRATE_WHEN_ALWAYS = "always";
- private static final String PREFERENCE_VALUE_VIBRATE_WHEN_SILENT = "silent";
- private static final String PREFERENCE_VALUE_VIBRATE_WHEN_NEVER = "never";
-
private EditTextPreference mAccountDescription;
private EditTextPreference mAccountName;
private EditTextPreference mAccountSignature;
@@ -101,7 +97,7 @@
private CheckBoxPreference mAccountBackgroundAttachments;
private CheckBoxPreference mAccountDefault;
private CheckBoxPreference mAccountNotify;
- private ListPreference mAccountVibrateWhen;
+ private CheckBoxPreference mAccountVibrate;
private RingtonePreference mAccountRingtone;
private CheckBoxPreference mSyncContacts;
private CheckBoxPreference mSyncCalendar;
@@ -175,6 +171,8 @@
}
super.onCreate(savedInstanceState);
+ upgradeVibrateSetting();
+
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.account_settings_preferences);
@@ -192,6 +190,20 @@
mAccountDirty = false;
}
+ /**
+ * Upgrades the old tri-state vibrate setting to the new boolean value.
+ */
+ private void upgradeVibrateSetting() {
+ final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
+
+ if (!sharedPreferences.contains(PREFERENCE_VIBRATE)) {
+ // Try to migrate the old one
+ final boolean vibrate =
+ "always".equals(sharedPreferences.getString(PREFERENCE_VIBRATE_OLD, ""));
+ sharedPreferences.edit().putBoolean(PREFERENCE_VIBRATE, vibrate);
+ }
+ }
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
@@ -502,33 +514,21 @@
prefs.edit().putString(PREFERENCE_RINGTONE, mAccount.getRingtone()).apply();
// Set the vibrator value, or hide it on devices w/o a vibrator
- mAccountVibrateWhen = (ListPreference) findPreference(PREFERENCE_VIBRATE_WHEN);
+ mAccountVibrate = (CheckBoxPreference) findPreference(PREFERENCE_VIBRATE);
Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator.hasVibrator()) {
// Calculate the value to set based on the choices, and set the value.
- final boolean vibrateAlways = 0 != (mAccount.getFlags() & Account.FLAGS_VIBRATE_ALWAYS);
- final boolean vibrateWhenSilent =
- 0 != (mAccount.getFlags() & Account.FLAGS_VIBRATE_WHEN_SILENT);
- final String vibrateSetting =
- vibrateAlways ? PREFERENCE_VALUE_VIBRATE_WHEN_ALWAYS :
- vibrateWhenSilent ? PREFERENCE_VALUE_VIBRATE_WHEN_SILENT :
- PREFERENCE_VALUE_VIBRATE_WHEN_NEVER;
- mAccountVibrateWhen.setValue(vibrateSetting);
+ final boolean vibrate = 0 != (mAccount.getFlags() & Account.FLAGS_VIBRATE);
+ mAccountVibrate.setChecked(vibrate);
- // Update the summary string.
- final int index = mAccountVibrateWhen.findIndexOfValue(vibrateSetting);
- mAccountVibrateWhen.setSummary(mAccountVibrateWhen.getEntries()[index]);
-
- // When the value is changed, update the summary in addition to the setting.
- mAccountVibrateWhen.setOnPreferenceChangeListener(
+ // When the value is changed, update the setting.
+ mAccountVibrate.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- final String vibrateSetting = newValue.toString();
- final int index = mAccountVibrateWhen.findIndexOfValue(vibrateSetting);
- mAccountVibrateWhen.setSummary(mAccountVibrateWhen.getEntries()[index]);
- mAccountVibrateWhen.setValue(vibrateSetting);
- onPreferenceChanged(PREFERENCE_VIBRATE_WHEN, newValue);
+ final boolean vibrateSetting = (Boolean) newValue;
+ mAccountVibrate.setChecked(vibrateSetting);
+ onPreferenceChanged(PREFERENCE_VIBRATE, newValue);
return false;
}
});
@@ -536,7 +536,7 @@
// No vibrator present. Remove the preference altogether.
PreferenceCategory notificationsCategory = (PreferenceCategory)
findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS);
- notificationsCategory.removePreference(mAccountVibrateWhen);
+ notificationsCategory.removePreference(mAccountVibrate);
}
findPreference(PREFERENCE_INCOMING).setOnPreferenceClickListener(
@@ -639,7 +639,7 @@
// Turn off all controlled flags - will turn them back on while checking UI elements
int newFlags = mAccount.getFlags() &
~(Account.FLAGS_NOTIFY_NEW_MAIL |
- Account.FLAGS_VIBRATE_ALWAYS | Account.FLAGS_VIBRATE_WHEN_SILENT |
+ Account.FLAGS_VIBRATE |
Account.FLAGS_BACKGROUND_ATTACHMENTS);
newFlags |= mAccountBackgroundAttachments.isChecked() ?
@@ -655,10 +655,8 @@
if (mSyncWindow != null) {
mAccount.setSyncLookback(Integer.parseInt(mSyncWindow.getValue()));
}
- if (mAccountVibrateWhen.getValue().equals(PREFERENCE_VALUE_VIBRATE_WHEN_ALWAYS)) {
- newFlags |= Account.FLAGS_VIBRATE_ALWAYS;
- } else if (mAccountVibrateWhen.getValue().equals(PREFERENCE_VALUE_VIBRATE_WHEN_SILENT)) {
- newFlags |= Account.FLAGS_VIBRATE_WHEN_SILENT;
+ if (mAccountVibrate.isChecked()) {
+ newFlags |= Account.FLAGS_VIBRATE;
}
SharedPreferences prefs = mAccountRingtone.getPreferenceManager().getSharedPreferences();
mAccount.setRingtone(prefs.getString(PREFERENCE_RINGTONE, null));
diff --git a/src/com/android/email/mail/transport/MailTransport.java b/src/com/android/email/mail/transport/MailTransport.java
index 751be50..3f4d7bc 100644
--- a/src/com/android/email/mail/transport/MailTransport.java
+++ b/src/com/android/email/mail/transport/MailTransport.java
@@ -167,7 +167,8 @@
try {
SocketAddress socketAddress = new InetSocketAddress(getHost(), getPort());
if (canTrySslSecurity()) {
- mSocket = SSLUtils.getSSLSocketFactory(canTrustAllCertificates()).createSocket();
+ mSocket = SSLUtils.getSSLSocketFactory(
+ canTrustAllCertificates(), SOCKET_CONNECT_TIMEOUT).createSocket();
} else {
mSocket = new Socket();
}
@@ -203,8 +204,9 @@
@Override
public void reopenTls() throws MessagingException {
try {
- mSocket = SSLUtils.getSSLSocketFactory(canTrustAllCertificates())
- .createSocket(mSocket, getHost(), getPort(), true);
+ mSocket =
+ SSLUtils.getSSLSocketFactory(canTrustAllCertificates(), SOCKET_CONNECT_TIMEOUT)
+ .createSocket(mSocket, getHost(), getPort(), true);
mSocket.setSoTimeout(SOCKET_READ_TIMEOUT);
mIn = new BufferedInputStream(mSocket.getInputStream(), 1024);
mOut = new BufferedOutputStream(mSocket.getOutputStream(), 512);
@@ -281,20 +283,34 @@
*/
@Override
public void close() {
+ if (Email.DEBUG) {
+ Log.d(Logging.LOG_TAG, "*** " + mDebugLabel + " close " +
+ getHost() + ":" + String.valueOf(getPort()));
+ }
+
try {
mIn.close();
} catch (Exception e) {
// May fail if the connection is already closed.
+ if (Email.DEBUG) {
+ Log.d(Logging.LOG_TAG, e.toString());
+ }
}
try {
mOut.close();
} catch (Exception e) {
// May fail if the connection is already closed.
+ if (Email.DEBUG) {
+ Log.d(Logging.LOG_TAG, e.toString());
+ }
}
try {
mSocket.close();
} catch (Exception e) {
// May fail if the connection is already closed.
+ if (Email.DEBUG) {
+ Log.d(Logging.LOG_TAG, e.toString());
+ }
}
mIn = null;
mOut = null;
diff --git a/tests/src/com/android/email/NotificationControllerTest.java b/tests/src/com/android/email/NotificationControllerTest.java
index 8f36300..8ce1823 100644
--- a/tests/src/com/android/email/NotificationControllerTest.java
+++ b/tests/src/com/android/email/NotificationControllerTest.java
@@ -70,8 +70,8 @@
// === Ringer mode change ===
mRingerMode = AudioManager.RINGER_MODE_NORMAL;
- // VIBRATE_ALWAYS, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_ALWAYS;
+ // VIBRATE, with a ringer tone
+ a1.mFlags = Account.FLAGS_VIBRATE;
nb.setDefaults(0);
nb.setSound(null);
@@ -83,19 +83,6 @@
assertTrue((n.flags & Notification.FLAG_SHOW_LIGHTS) != 0); // always set
assertTrue((n.defaults & Notification.DEFAULT_LIGHTS) != 0); // always set
- // FLAGS_VIBRATE_WHEN_SILENT, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_WHEN_SILENT;
-
- nb.setDefaults(0);
- nb.setSound(null);
- mTarget.setupSoundAndVibration(nb, a1);
- n = nb.getNotification();
-
- assertEquals(expectedRingtone, n.sound);
- assertFalse((n.defaults & Notification.DEFAULT_VIBRATE) != 0); // no vibe
- assertTrue((n.flags & Notification.FLAG_SHOW_LIGHTS) != 0); // always set
- assertTrue((n.defaults & Notification.DEFAULT_LIGHTS) != 0); // always set
-
// No VIBRATE flags, with a ringer tone
a1.mFlags = 0;
@@ -112,21 +99,8 @@
// === Ringer mode change ===
mRingerMode = AudioManager.RINGER_MODE_VIBRATE;
- // VIBRATE_ALWAYS, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_ALWAYS;
-
- nb.setDefaults(0);
- nb.setSound(null);
- mTarget.setupSoundAndVibration(nb, a1);
- n = nb.getNotification();
-
- assertEquals(expectedRingtone, n.sound);
- assertTrue((n.defaults & Notification.DEFAULT_VIBRATE) != 0);
- assertTrue((n.flags & Notification.FLAG_SHOW_LIGHTS) != 0); // always set
- assertTrue((n.defaults & Notification.DEFAULT_LIGHTS) != 0); // always set
-
- // FLAGS_VIBRATE_WHEN_SILENT, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_WHEN_SILENT;
+ // VIBRATE, with a ringer tone
+ a1.mFlags = Account.FLAGS_VIBRATE;
nb.setDefaults(0);
nb.setSound(null);
@@ -154,21 +128,8 @@
// === Ringer mode change ===
mRingerMode = AudioManager.RINGER_MODE_SILENT;
- // VIBRATE_ALWAYS, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_ALWAYS;
-
- nb.setDefaults(0);
- nb.setSound(null);
- mTarget.setupSoundAndVibration(nb, a1);
- n = nb.getNotification();
-
- assertEquals(expectedRingtone, n.sound);
- assertTrue((n.defaults & Notification.DEFAULT_VIBRATE) != 0);
- assertTrue((n.flags & Notification.FLAG_SHOW_LIGHTS) != 0); // always set
- assertTrue((n.defaults & Notification.DEFAULT_LIGHTS) != 0); // always set
-
- // FLAGS_VIBRATE_WHEN_SILENT, with a ringer tone
- a1.mFlags = Account.FLAGS_VIBRATE_WHEN_SILENT;
+ // VIBRATE, with a ringer tone
+ a1.mFlags = Account.FLAGS_VIBRATE;
nb.setDefaults(0);
nb.setSound(null);