1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2014 The Android Open Source Project 3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License. 6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at 7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and 14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License 15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 17ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpackage com.android.dialer.util; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.Context; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.SharedPreferences; 21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.database.sqlite.SQLiteException; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.media.Ringtone; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.media.RingtoneManager; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.net.Uri; 25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.os.Handler; 26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.preference.PreferenceManager; 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.provider.Settings; 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils; 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic class SettingsUtil { 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private static final String DEFAULT_NOTIFICATION_URI_STRING = 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Settings.System.DEFAULT_NOTIFICATION_URI.toString(); 34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Queries for a ringtone name, and sets the name using a handler. This is a method was originally 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * copied from com.android.settings.SoundSettings. 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param context The application context. 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param handler The handler, which takes the name of the ringtone as a String as a parameter. 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param type The type of sound. 42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param key The key to the shared preferences entry being updated. 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param msg An integer identifying the message sent to the handler. 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static void updateRingtoneName( 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, Handler handler, int type, String key, int msg) { 47ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final Uri ringtoneUri; 48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian boolean defaultRingtone = false; 49ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (type == RingtoneManager.TYPE_RINGTONE) { 50ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // For ringtones, we can just lookup the system default because changing the settings 51ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // in Call Settings changes the system default. 52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else { 54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // For voicemail notifications, we use the value saved in Phone's shared preferences. 56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian String uriString = prefs.getString(key, DEFAULT_NOTIFICATION_URI_STRING); 57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (TextUtils.isEmpty(uriString)) { 58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // silent ringtone 59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ringtoneUri = null; 60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else { 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (uriString.equals(DEFAULT_NOTIFICATION_URI_STRING)) { 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // If it turns out that the voicemail notification is set to the system 63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // default notification, we retrieve the actual URI to prevent it from showing 64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // up as "Unknown Ringtone". 65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian defaultRingtone = true; 66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else { 68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian ringtoneUri = Uri.parse(uriString); 69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian getRingtoneName(context, handler, ringtoneUri, msg, defaultRingtone); 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static void getRingtoneName(Context context, Handler handler, Uri ringtoneUri, int msg) { 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian getRingtoneName(context, handler, ringtoneUri, msg, false); 77d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static void getRingtoneName( 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Context context, Handler handler, Uri ringtoneUri, int msg, boolean defaultRingtone) { 81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence summary = context.getString(R.string.ringtone_unknown); 82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Is it a silent ringtone? 83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (ringtoneUri == null) { 84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian summary = context.getString(R.string.ringtone_silent); 85ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else { 86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Fetch the ringtone title from the media provider 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri); 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (ringtone != null) { 89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian try { 90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final String title = ringtone.getTitle(context); 91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!TextUtils.isEmpty(title)) { 92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian summary = title; 93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } catch (SQLiteException sqle) { 95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // Unknown title for the ringtone 96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (defaultRingtone) { 100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian summary = context.getString(R.string.default_notification_description, summary); 101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian handler.sendMessage(handler.obtainMessage(msg, summary)); 103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 105