You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
package org.transdroid.core.gui.settings; |
|
|
|
import android.app.Activity; |
|
import android.content.Context; |
|
import android.content.Intent; |
|
import android.media.RingtoneManager; |
|
import android.net.Uri; |
|
import android.provider.Settings; |
|
import android.util.AttributeSet; |
|
|
|
import androidx.preference.Preference; |
|
|
|
@SuppressWarnings("unused") // Constructors for XML inflation |
|
public class RingtonePreference extends Preference { |
|
|
|
private static final int REQUEST_RINGTONE = 0; |
|
|
|
public RingtonePreference(Context context) { |
|
super(context); |
|
} |
|
|
|
public RingtonePreference(Context context, AttributeSet attrs) { |
|
super(context, attrs); |
|
} |
|
|
|
public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr) { |
|
super(context, attrs, defStyleAttr); |
|
} |
|
|
|
public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { |
|
super(context, attrs, defStyleAttr, defStyleRes); |
|
} |
|
|
|
@Override |
|
protected void onClick() { |
|
if (!(getContext() instanceof Activity)) { |
|
return; |
|
} |
|
|
|
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Settings.System.DEFAULT_NOTIFICATION_URI); |
|
|
|
String existingValue = getSharedPreferences().getString(getKey(), null); |
|
if (existingValue != null) { |
|
if (existingValue.isEmpty()) { |
|
// Select "Silent" |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null); |
|
} else { |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(existingValue)); |
|
} |
|
} else { |
|
// No ringtone has been selected, set to the default |
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Settings.System.DEFAULT_NOTIFICATION_URI); |
|
} |
|
|
|
((Activity) getContext()).startActivityForResult(intent, REQUEST_RINGTONE); |
|
} |
|
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) { |
|
if (requestCode == REQUEST_RINGTONE && resultCode == Activity.RESULT_OK && data != null && data.getExtras() != null) { |
|
Uri ringtone = (Uri) data.getExtras().get(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); |
|
getSharedPreferences().edit().putString(getKey(), ringtone == null ? "" : ringtone.toString()).apply(); |
|
} |
|
} |
|
}
|
|
|