1 /* 2 * Copyright (C) 2014 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 17 package com.android.internal.telephony.util; 18 19 import android.app.NotificationChannel; 20 import android.content.Context; 21 import android.content.SharedPreferences; 22 import android.net.Uri; 23 import android.preference.PreferenceManager; 24 import android.provider.Settings; 25 import android.telephony.SubscriptionManager; 26 import android.telephony.TelephonyManager; 27 import android.text.TextUtils; 28 29 public class VoicemailNotificationSettingsUtil { 30 private static final String VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX = 31 "voicemail_notification_ringtone_"; 32 private static final String VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX = 33 "voicemail_notification_vibrate_"; 34 35 // Old voicemail notification vibration string constants used for migration. 36 private static final String OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY = 37 "button_voicemail_notification_ringtone_key"; 38 private static final String OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY = 39 "button_voicemail_notification_vibrate_key"; 40 private static final String OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY = 41 "button_voicemail_notification_vibrate_when_key"; 42 private static final String OLD_VOICEMAIL_RINGTONE_SHARED_PREFS_KEY = 43 "button_voicemail_notification_ringtone_key"; 44 private static final String OLD_VOICEMAIL_VIBRATION_ALWAYS = "always"; 45 private static final String OLD_VOICEMAIL_VIBRATION_NEVER = "never"; 46 setVibrationEnabled(Context context, boolean isEnabled)47 public static void setVibrationEnabled(Context context, boolean isEnabled) { 48 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 49 SharedPreferences.Editor editor = prefs.edit(); 50 editor.putBoolean(getVoicemailVibrationSharedPrefsKey(), isEnabled); 51 editor.commit(); 52 } 53 isVibrationEnabled(Context context)54 public static boolean isVibrationEnabled(Context context) { 55 final NotificationChannel channel = NotificationChannelController.getChannel( 56 NotificationChannelController.CHANNEL_ID_VOICE_MAIL, context); 57 return (channel != null) ? channel.shouldVibrate() : getVibrationPreference(context); 58 } 59 getVibrationPreference(Context context)60 public static boolean getVibrationPreference(Context context) { 61 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 62 migrateVoicemailVibrationSettingsIfNeeded(context, prefs); 63 return prefs.getBoolean(getVoicemailVibrationSharedPrefsKey(), false /* defValue */); 64 } 65 setRingtoneUri(Context context, Uri ringtoneUri)66 public static void setRingtoneUri(Context context, Uri ringtoneUri) { 67 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 68 String ringtoneUriStr = ringtoneUri != null ? ringtoneUri.toString() : ""; 69 70 SharedPreferences.Editor editor = prefs.edit(); 71 editor.putString(getVoicemailRingtoneSharedPrefsKey(), ringtoneUriStr); 72 editor.commit(); 73 } 74 getRingtoneUri(Context context)75 public static Uri getRingtoneUri(Context context) { 76 final NotificationChannel channel = NotificationChannelController.getChannel( 77 NotificationChannelController.CHANNEL_ID_VOICE_MAIL, context); 78 return (channel != null) ? channel.getSound() : getRingTonePreference(context); 79 } 80 getRingTonePreference(Context context)81 public static Uri getRingTonePreference(Context context) { 82 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 83 migrateVoicemailRingtoneSettingsIfNeeded(context, prefs); 84 String uriString = prefs.getString( 85 getVoicemailRingtoneSharedPrefsKey(), 86 Settings.System.DEFAULT_NOTIFICATION_URI.toString()); 87 return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null; 88 } 89 90 /** 91 * Migrate voicemail settings from {@link #OLD_VIBRATE_WHEN_KEY} or 92 * {@link #OLD_VOICEMAIL_NOTIFICATION_VIBRATE_KEY}. 93 * 94 * TODO: Add helper which migrates settings from old version to new version. 95 */ migrateVoicemailVibrationSettingsIfNeeded( Context context, SharedPreferences prefs)96 private static void migrateVoicemailVibrationSettingsIfNeeded( 97 Context context, SharedPreferences prefs) { 98 String key = getVoicemailVibrationSharedPrefsKey(); 99 TelephonyManager telephonyManager = TelephonyManager.from(context); 100 101 // Skip if a preference exists, or if phone is MSIM. 102 if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) { 103 return; 104 } 105 106 if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY)) { 107 boolean voicemailVibrate = prefs.getBoolean( 108 OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY, false /* defValue */); 109 110 SharedPreferences.Editor editor = prefs.edit(); 111 editor.putBoolean(key, voicemailVibrate) 112 .remove(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY) 113 .commit(); 114 } 115 116 if (prefs.contains(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY)) { 117 // If vibrateWhen is always, then voicemailVibrate should be true. 118 // If it is "only in silent mode", or "never", then voicemailVibrate should be false. 119 String vibrateWhen = prefs.getString( 120 OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY, OLD_VOICEMAIL_VIBRATION_NEVER); 121 boolean voicemailVibrate = vibrateWhen.equals(OLD_VOICEMAIL_VIBRATION_ALWAYS); 122 123 SharedPreferences.Editor editor = prefs.edit(); 124 editor.putBoolean(key, voicemailVibrate) 125 .remove(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY) 126 .commit(); 127 } 128 } 129 130 /** 131 * Migrate voicemail settings from OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY. 132 * 133 * TODO: Add helper which migrates settings from old version to new version. 134 */ migrateVoicemailRingtoneSettingsIfNeeded( Context context, SharedPreferences prefs)135 private static void migrateVoicemailRingtoneSettingsIfNeeded( 136 Context context, SharedPreferences prefs) { 137 String key = getVoicemailRingtoneSharedPrefsKey(); 138 TelephonyManager telephonyManager = TelephonyManager.from(context); 139 140 // Skip if a preference exists, or if phone is MSIM. 141 if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) { 142 return; 143 } 144 145 if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY)) { 146 String uriString = prefs.getString( 147 OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY, null /* defValue */); 148 149 SharedPreferences.Editor editor = prefs.edit(); 150 editor.putString(key, uriString) 151 .remove(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY) 152 .commit(); 153 } 154 } 155 getVoicemailVibrationSharedPrefsKey()156 private static String getVoicemailVibrationSharedPrefsKey() { 157 return VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX 158 + SubscriptionManager.getDefaultSubscriptionId(); 159 } 160 getVoicemailRingtoneSharedPrefsKey()161 private static String getVoicemailRingtoneSharedPrefsKey() { 162 return VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX 163 + SubscriptionManager.getDefaultSubscriptionId(); 164 } 165 } 166