am 612e5137: am 7e0c0bc7: am 3c0b8eea: Change Email vibrate setting from tri-state to checkbox
* commit '612e51375f00a71ff6d283d75c70ee1f1011858a':
Change Email vibrate setting from tri-state to checkbox
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/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/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);