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