178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leepackage com.android.phone.settings; 278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.content.Context; 478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.media.RingtoneManager; 578ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.net.Uri; 678ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.os.Handler; 778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.os.Message; 878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.preference.Preference; 978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.preference.RingtonePreference; 1078ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport android.util.AttributeSet; 1178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 121ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Leeimport com.android.internal.telephony.Phone; 1378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leeimport com.android.phone.common.util.SettingsUtil; 1478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 1578ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee/** 1678ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee * Looks up the voicemail ringtone's name asynchronously and updates the preference's summary when 1778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee * it is created or updated. 1878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee */ 1978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Leepublic class VoicemailRingtonePreference extends RingtonePreference { 2078ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee private static final int MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY = 1; 2178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 2278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee private Runnable mVoicemailRingtoneLookupRunnable; 2378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee private Handler mVoicemailRingtoneLookupComplete; 2478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 251ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee private Phone mPhone; 261ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee 2778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee public VoicemailRingtonePreference(Context context, AttributeSet attrs) { 2878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee super(context, attrs); 2978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 3078ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee mVoicemailRingtoneLookupComplete = new Handler() { 3178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee @Override 3278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee public void handleMessage(Message msg) { 3378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee switch (msg.what) { 3478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee case MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY: 3578ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee setSummary((CharSequence) msg.obj); 3678ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee break; 3778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 3878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 3978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee }; 402592332454a376141b32eea66c82b60d13ba1103Andrew Lee } 412592332454a376141b32eea66c82b60d13ba1103Andrew Lee 422592332454a376141b32eea66c82b60d13ba1103Andrew Lee public void init(Phone phone) { 432592332454a376141b32eea66c82b60d13ba1103Andrew Lee mPhone = phone; 4478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 4543b6d3a4565a557841983b7e07c39f02bfc532a7Santos Cordon // Requesting the ringtone will trigger migration if necessary. 4643b6d3a4565a557841983b7e07c39f02bfc532a7Santos Cordon VoicemailNotificationSettingsUtil.getRingtoneUri(phone); 4743b6d3a4565a557841983b7e07c39f02bfc532a7Santos Cordon 4878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee final Preference preference = this; 491ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee final String preferenceKey = 501ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee VoicemailNotificationSettingsUtil.getVoicemailRingtoneSharedPrefsKey(mPhone); 5178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee mVoicemailRingtoneLookupRunnable = new Runnable() { 5278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee @Override 5378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee public void run() { 5478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee SettingsUtil.updateRingtoneName( 5578ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee preference.getContext(), 5678ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee mVoicemailRingtoneLookupComplete, 5778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee RingtoneManager.TYPE_NOTIFICATION, 581ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee preferenceKey, 5978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY); 6078ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 6178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee }; 6278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 6378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee updateRingtoneName(); 6478ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 6578ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 6678ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee @Override 678d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee protected Uri onRestoreRingtone() { 681ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee return VoicemailNotificationSettingsUtil.getRingtoneUri(mPhone); 698d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee } 708d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 718d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee @Override 7278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee protected void onSaveRingtone(Uri ringtoneUri) { 738d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee // Don't call superclass method because it uses the pref key as the SharedPreferences key. 748d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee // Delegate to the voicemail notification utility to save the ringtone instead. 751ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee VoicemailNotificationSettingsUtil.setRingtoneUri(mPhone, ringtoneUri); 768d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee 7778ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee updateRingtoneName(); 7878ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 7978ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee 8078ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee private void updateRingtoneName() { 8178ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee new Thread(mVoicemailRingtoneLookupRunnable).start(); 8278ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee } 8378ee0b24e3079f20304746aeb4ab940f2042b256Andrew Lee} 84