1112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee/* 2112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Copyright (C) 2014 The Android Open Source Project 3112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 4112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * you may not use this file except in compliance with the License. 6112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * You may obtain a copy of the License at 7112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 8112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * http://www.apache.org/licenses/LICENSE-2.0 9112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 10112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Unless required by applicable law or agreed to in writing, software 11112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * distributed under the License is distributed on an "AS IS" BASIS, 12112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * See the License for the specific language governing permissions and 14112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * limitations under the License 15112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee */ 16112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 17112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leepackage com.android.phone.common.util; 18112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 19112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.content.Context; 20112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.content.SharedPreferences; 21112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.database.Cursor; 22112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.database.sqlite.SQLiteException; 2353845dd9c153aeb23999aac7f19dbb652976b565Yorke Leeimport android.media.Ringtone; 24112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.media.RingtoneManager; 25112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.net.Uri; 26112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.os.Handler; 27112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.os.Vibrator; 28112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.preference.Preference; 29112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.preference.PreferenceManager; 30112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.provider.MediaStore; 31112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.provider.Settings; 32112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.text.TextUtils; 33112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 34112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport com.android.phone.common.R; 35112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 36112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport java.lang.CharSequence; 37112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport java.lang.String; 38112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 39112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leepublic class SettingsUtil { 40895849b2484727546133da8b8762e1fdcc3ecd9bAndrew Lee private static final String DEFAULT_NOTIFICATION_URI_STRING = 41895849b2484727546133da8b8762e1fdcc3ecd9bAndrew Lee Settings.System.DEFAULT_NOTIFICATION_URI.toString(); 42895849b2484727546133da8b8762e1fdcc3ecd9bAndrew Lee 43112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee /** 44112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Queries for a ringtone name, and sets the name using a handler. 45112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * This is a method was originally copied from com.android.settings.SoundSettings. 46112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 47112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param context The application context. 48112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param handler The handler, which takes the name of the ringtone as a String as a parameter. 49112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param type The type of sound. 50c11bd1b0ac01d0bd3497d1e47e70e53792036e5aAndrew Lee * @param key The key to the shared preferences entry being updated. 51112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param msg An integer identifying the message sent to the handler. 52112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee */ 53112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee public static void updateRingtoneName( 54c11bd1b0ac01d0bd3497d1e47e70e53792036e5aAndrew Lee Context context, Handler handler, int type, String key, int msg) { 55112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee final Uri ringtoneUri; 56112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee boolean defaultRingtone = false; 57112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (type == RingtoneManager.TYPE_RINGTONE) { 58112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // For ringtones, we can just lookup the system default because changing the settings 59112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // in Call Settings changes the system default. 60112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 61112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 62112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 63112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // For voicemail notifications, we use the value saved in Phone's shared preferences. 64895849b2484727546133da8b8762e1fdcc3ecd9bAndrew Lee String uriString = prefs.getString(key, DEFAULT_NOTIFICATION_URI_STRING); 65112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (TextUtils.isEmpty(uriString)) { 66112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // silent ringtone 67112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = null; 68112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 69895849b2484727546133da8b8762e1fdcc3ecd9bAndrew Lee if (uriString.equals(DEFAULT_NOTIFICATION_URI_STRING)) { 70112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // If it turns out that the voicemail notification is set to the system 71112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // default notification, we retrieve the actual URI to prevent it from showing 72112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // up as "Unknown Ringtone". 73112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee defaultRingtone = true; 74112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 75112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 76112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = Uri.parse(uriString); 77112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 78112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 79112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 8053fcafb3caf6197451a4ed9e34411da52cf3bf86Brian Attwell CharSequence summary = context.getString(R.string.ringtone_unknown); 81112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // Is it a silent ringtone? 82112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (ringtoneUri == null) { 8353fcafb3caf6197451a4ed9e34411da52cf3bf86Brian Attwell summary = context.getString(R.string.ringtone_silent); 84112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 85112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // Fetch the ringtone title from the media provider 8653845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee final Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri); 8753845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee if (ringtone != null) { 8853845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee try { 8953845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee final String title = ringtone.getTitle(context); 9053845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee if (!TextUtils.isEmpty(title)) { 9153845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee summary = title; 92112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 9353845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee } catch (SQLiteException sqle) { 9453845dd9c153aeb23999aac7f19dbb652976b565Yorke Lee // Unknown title for the ringtone 95112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 96112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 97112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 98112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (defaultRingtone) { 99112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee summary = context.getString(R.string.default_notification_description, summary); 100112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 101112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee handler.sendMessage(handler.obtainMessage(msg, summary)); 102112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 103112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee} 104