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; 23112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.media.RingtoneManager; 24112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.net.Uri; 25112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.os.Handler; 26112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.os.Vibrator; 27112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.preference.Preference; 28112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.preference.PreferenceManager; 29112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.provider.MediaStore; 30112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.provider.Settings; 31112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport android.text.TextUtils; 32112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 33112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport com.android.phone.common.R; 34112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 35112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport java.lang.CharSequence; 36112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leeimport java.lang.String; 37112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 38112e85e36bf9bf2af9a67e138934b66877be868bAndrew Leepublic class SettingsUtil { 39112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee /** 40112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Obtain the setting for "vibrate when ringing" setting. 41112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 42112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Watch out: if the setting is missing in the device, this will try obtaining the old 43112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * "vibrate on ring" setting from AudioManager, and save the previous setting to the new one. 44112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee */ 45112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee public static boolean getVibrateWhenRingingSetting(Context context) { 46112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 47112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (vibrator == null || !vibrator.hasVibrator()) { 48112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee return false; 49112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 50112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee return Settings.System.getInt(context.getContentResolver(), 51112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee Settings.System.VIBRATE_WHEN_RINGING, 0) != 0; 52112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 53112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 54112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee /** 55112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * Queries for a ringtone name, and sets the name using a handler. 56112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * This is a method was originally copied from com.android.settings.SoundSettings. 57112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * 58112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param context The application context. 59112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param handler The handler, which takes the name of the ringtone as a String as a parameter. 60112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param type The type of sound. 61112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param preference The preference being updated. 62112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee * @param msg An integer identifying the message sent to the handler. 63112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee */ 64112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee public static void updateRingtoneName( 65112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee Context context, Handler handler, int type, Preference preference, int msg) { 66112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (preference == null) { 67112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee return; 68112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 69112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee 70112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee final Uri ringtoneUri; 71112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee boolean defaultRingtone = false; 72112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (type == RingtoneManager.TYPE_RINGTONE) { 73112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // For ringtones, we can just lookup the system default because changing the settings 74112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // in Call Settings changes the system default. 75112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 76112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 77112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 78112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // For voicemail notifications, we use the value saved in Phone's shared preferences. 79112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee String uriString = prefs.getString(preference.getKey(), null); 80112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (TextUtils.isEmpty(uriString)) { 81112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // silent ringtone 82112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = null; 83112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 84112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (uriString.equals(Settings.System.DEFAULT_NOTIFICATION_URI.toString())) { 85112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // If it turns out that the voicemail notification is set to the system 86112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // default notification, we retrieve the actual URI to prevent it from showing 87112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // up as "Unknown Ringtone". 88112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee defaultRingtone = true; 89112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); 90112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 91112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee ringtoneUri = Uri.parse(uriString); 92112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 93112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 94112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 95112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown); 96112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // Is it a silent ringtone? 97112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (ringtoneUri == null) { 98112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee summary = context.getString(com.android.internal.R.string.ringtone_silent); 99112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } else { 100112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // Fetch the ringtone title from the media provider 101112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee try { 102112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee Cursor cursor = context.getContentResolver().query(ringtoneUri, 103112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee new String[] { MediaStore.Audio.Media.TITLE }, null, null, null); 104112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (cursor != null) { 105112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (cursor.moveToFirst()) { 106112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee summary = cursor.getString(0); 107112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 108112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee cursor.close(); 109112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 110112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } catch (SQLiteException sqle) { 111112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee // Unknown title for the ringtone 112112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 113112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 114112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee if (defaultRingtone) { 115112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee summary = context.getString(R.string.default_notification_description, summary); 116112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 117112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee handler.sendMessage(handler.obtainMessage(msg, summary)); 118112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee } 119112e85e36bf9bf2af9a67e138934b66877be868bAndrew Lee} 120