package android.support.v7.preference;
import android.content.Context;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.AttributeSet;
import com.ubergeek42.WeechatAndroid.R;
import com.ubergeek42.WeechatAndroid.utils.Constants;
public class RingtonePreferenceFix extends DialogPreference {
public RingtonePreferenceFix(Context context, AttributeSet attrs) {
super(context, attrs);
}
public @NonNull String getRingtonePath() {
return getSharedPreferences().getString(getKey(), Constants.PREF_NOTIFICATION_SOUND_D);
}
public void setRingtonePath(String path) {
getSharedPreferences().edit().putString(getKey(), path).commit();
notifyChanged();
}
// this and the following methods are only here to keep activity's code cleaner
// since we cannot act as a receiver of startActivityForResult(),
// we at least prepare the intent here..
public @NonNull Intent makeRingtoneRequestIntent() {
String path = getRingtonePath();
Uri uri = !TextUtils.isEmpty(path) ? Uri.parse(path) : null;
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, uri);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
return intent;
}
// ..and deal with the result here
public void onActivityResult(@NonNull Intent intent) {
Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
setRingtonePath(uri == null ? "": uri.toString());
}
@Override public CharSequence getSummary() {
String tmp = getRingtonePath();
if ("".equals(tmp)) return getContext().getString(R.string.pref_ringtone_none);
else {
Ringtone ringtone = RingtoneManager.getRingtone(getContext(), Uri.parse(tmp));
return (ringtone == null) ? getContext().getString(R.string.pref_ringtone_unknown) : ringtone.getTitle(getContext());
}
}
}