18d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee/* 28d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Copyright (C) 2014 The Android Open Source Project 38d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * 48d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Licensed under the Apache License, Version 2.0 (the "License"); 58d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * you may not use this file except in compliance with the License. 68d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * You may obtain a copy of the License at 78d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * 88d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * http://www.apache.org/licenses/LICENSE-2.0 98d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * 108d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Unless required by applicable law or agreed to in writing, software 118d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * distributed under the License is distributed on an "AS IS" BASIS, 128d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * See the License for the specific language governing permissions and 148d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * limitations under the License. 158d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee */ 168d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 178d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leepackage com.android.phone.settings; 188d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 198d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.content.Context; 208d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.content.SharedPreferences; 218d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.net.Uri; 228d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.preference.PreferenceManager; 238d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.provider.Settings; 241ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Leeimport android.telephony.TelephonyManager; 258d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.text.TextUtils; 268d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 271ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Leeimport com.android.internal.telephony.Phone; 288d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport com.android.phone.R; 298d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 308d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leepublic class VoicemailNotificationSettingsUtil { 311ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static final String VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX = 321ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee "voicemail_notification_ringtone_"; 331ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static final String VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX = 341ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee "voicemail_notification_vibrate_"; 358d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 368d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee // Old voicemail notification vibration string constants used for migration. 371ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static final String OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY = 381ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee "button_voicemail_notification_ringtone_key"; 391ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static final String OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY = 401ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee "button_voicemail_notification_vibrate_key"; 418d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee private static final String OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY = 428d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee "button_voicemail_notification_vibrate_when_key"; 438d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee private static final String OLD_VOICEMAIL_RINGTONE_SHARED_PREFS_KEY = 448d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee "button_voicemail_notification_ringtone_key"; 458d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee private static final String OLD_VOICEMAIL_VIBRATION_ALWAYS = "always"; 468d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee private static final String OLD_VOICEMAIL_VIBRATION_NEVER = "never"; 478d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 481ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee public static void setVibrationEnabled(Phone phone, boolean isEnabled) { 491ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext()); 508d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 511ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.putBoolean(getVoicemailVibrationSharedPrefsKey(phone), isEnabled); 528d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee editor.commit(); 538d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 548d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 551ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee public static boolean isVibrationEnabled(Phone phone) { 561ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext()); 571ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee migrateVoicemailVibrationSettingsIfNeeded(phone, prefs); 581ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return prefs.getBoolean(getVoicemailVibrationSharedPrefsKey(phone), false /* defValue */); 591ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 601ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 611ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee public static void setRingtoneUri(Phone phone, Uri ringtoneUri) { 621ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext()); 631ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee String ringtoneUriStr = ringtoneUri != null ? ringtoneUri.toString() : ""; 641ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 651ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 661ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.putString(getVoicemailRingtoneSharedPrefsKey(phone), ringtoneUriStr); 671ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.commit(); 681ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 691ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 701ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee public static Uri getRingtoneUri(Phone phone) { 711ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext()); 721ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee migrateVoicemailRingtoneSettingsIfNeeded(phone, prefs); 731ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee String uriString = prefs.getString( 74fa3de753c544675d95504623706a2eb9cd618468Andrew Lee getVoicemailRingtoneSharedPrefsKey(phone), 75fa3de753c544675d95504623706a2eb9cd618468Andrew Lee Settings.System.DEFAULT_NOTIFICATION_URI.toString()); 761ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null; 778d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 788d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 798d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee /** 801ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * Migrate voicemail settings from {@link #OLD_VIBRATE_WHEN_KEY} or 811ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * {@link #OLD_VOICEMAIL_NOTIFICATION_VIBRATE_KEY}. 821ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * 831ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * TODO: Add helper which migrates settings from old version to new version. 848d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee */ 851ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static void migrateVoicemailVibrationSettingsIfNeeded( 861ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee Phone phone, SharedPreferences prefs) { 871ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee String key = getVoicemailVibrationSharedPrefsKey(phone); 881ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee TelephonyManager telephonyManager = TelephonyManager.from(phone.getContext()); 891ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 901ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee // Skip if a preference exists, or if phone is MSIM. 911ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) { 921ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return; 931ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 941ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 951ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY)) { 961ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee boolean voicemailVibrate = prefs.getBoolean( 971ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY, false /* defValue */); 981ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 991ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 1001ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.putBoolean(key, voicemailVibrate) 1011ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee .remove(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY) 1021ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee .commit(); 1031ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 1041ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 1051ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee if (prefs.contains(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY)) { 1068d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee // If vibrateWhen is always, then voicemailVibrate should be true. 1078d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee // If it is "only in silent mode", or "never", then voicemailVibrate should be false. 1088d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee String vibrateWhen = prefs.getString( 1098d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY, OLD_VOICEMAIL_VIBRATION_NEVER); 1108d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee boolean voicemailVibrate = vibrateWhen.equals(OLD_VOICEMAIL_VIBRATION_ALWAYS); 1118d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 1128d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 1131ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.putBoolean(key, voicemailVibrate) 1141ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee .remove(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY) 1158d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee .commit(); 1168d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 1178d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 1188d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 1191ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee /** 1201ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * Migrate voicemail settings from OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY. 1211ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * 1221ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee * TODO: Add helper which migrates settings from old version to new version. 1231ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee */ 1241ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static void migrateVoicemailRingtoneSettingsIfNeeded( 1251ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee Phone phone, SharedPreferences prefs) { 1261ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee String key = getVoicemailRingtoneSharedPrefsKey(phone); 1271ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee TelephonyManager telephonyManager = TelephonyManager.from(phone.getContext()); 1288d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 1291ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee // Skip if a preference exists, or if phone is MSIM. 1301ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) { 1311ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return; 1321ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 1331ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 1341ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY)) { 1351ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee String uriString = prefs.getString( 1361ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY, null /* defValue */); 1378d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 1381ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 1391ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee editor.putString(key, uriString) 1401ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee .remove(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY) 1411ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee .commit(); 1428d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 1438d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 1448d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 1451ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private static String getVoicemailVibrationSharedPrefsKey(Phone phone) { 1461ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX + phone.getSubId(); 1471ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee } 1481ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 1491ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee public static String getVoicemailRingtoneSharedPrefsKey(Phone phone) { 1501ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX + phone.getSubId(); 1518d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 1528d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee} 153