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