Allow selecting audio file for rule sounds

master
M66B 4 weeks ago
parent 83a70cdfea
commit d8241bb86b

@ -230,11 +230,12 @@ public class FragmentRule extends FragmentBase {
private static final int REQUEST_TO = 7; private static final int REQUEST_TO = 7;
private final static int REQUEST_TTS_CHECK = 8; private final static int REQUEST_TTS_CHECK = 8;
private final static int REQUEST_TTS_DATA = 9; private final static int REQUEST_TTS_DATA = 9;
private final static int REQUEST_SOUND = 10; private final static int REQUEST_RINGTONE = 10;
private final static int REQUEST_DATE_AFTER = 11; private final static int REQUEST_AUDIO = 11;
private final static int REQUEST_DATE_BEFORE = 12; private final static int REQUEST_DATE_AFTER = 12;
private final static int REQUEST_FOLDER = 13; private final static int REQUEST_DATE_BEFORE = 13;
private final static int REQUEST_COLOR_NOTES = 14; private final static int REQUEST_FOLDER = 14;
private final static int REQUEST_COLOR_NOTES = 15;
private static final List<String> HEADER_CONDITIONS = Collections.unmodifiableList(Arrays.asList( private static final List<String> HEADER_CONDITIONS = Collections.unmodifiableList(Arrays.asList(
"$$seen$", "$$seen$",
@ -811,12 +812,37 @@ public class FragmentRule extends FragmentBase {
btnSound.setOnClickListener(new View.OnClickListener() { btnSound.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), v);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.title_advanced_sound)); popupMenu.getMenu().add(Menu.NONE, R.string.title_rule_select_sound_ringtone, 1, R.string.title_rule_select_sound_ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); popupMenu.getMenu().add(Menu.NONE, R.string.title_rule_select_sound_audio, 2, R.string.title_rule_select_sound_audio);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sound);
startActivityForResult(Helper.getChooser(getContext(), intent), REQUEST_SOUND); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.string.title_rule_select_sound_ringtone) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.title_advanced_sound));
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sound);
startActivityForResult(Helper.getChooser(getContext(), intent), REQUEST_RINGTONE);
return true;
} else if (itemId == R.string.title_rule_select_sound_audio) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType("audio/*");
startActivityForResult(Helper.getChooser(getContext(), intent), REQUEST_AUDIO);
return true;
}
return false;
}
});
popupMenu.show();
} }
}); });
@ -1035,10 +1061,14 @@ public class FragmentRule extends FragmentBase {
break; break;
case REQUEST_TTS_DATA: case REQUEST_TTS_DATA:
break; break;
case REQUEST_SOUND: case REQUEST_RINGTONE:
if (resultCode == RESULT_OK && data != null) if (resultCode == RESULT_OK && data != null)
onSelectSound(data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)); onSelectSound(data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI));
break; break;
case REQUEST_AUDIO:
if (resultCode == RESULT_OK && data != null)
onSelectSound(data.getData());
break;
case REQUEST_DATE_AFTER: case REQUEST_DATE_AFTER:
if (resultCode == RESULT_OK && data != null) if (resultCode == RESULT_OK && data != null)
onDateAfter(data.getBundleExtra("args")); onDateAfter(data.getBundleExtra("args"));
@ -1091,6 +1121,8 @@ public class FragmentRule extends FragmentBase {
try { try {
Log.i("Selected sound uri=" + uri); Log.i("Selected sound uri=" + uri);
getContext().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); getContext().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (!Helper.isPersisted(getContext(), uri, true, false))
throw new IllegalStateException("No permission granted to access selected image " + uri);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.w(ex); Log.w(ex);
} }

@ -2136,6 +2136,8 @@
<string name="title_rule_tts_content">Text</string> <string name="title_rule_tts_content">Text</string>
<string name="title_rule_select_sound">Select sound</string> <string name="title_rule_select_sound">Select sound</string>
<string name="title_rule_select_sound_ringtone">Ringtone</string>
<string name="title_rule_select_sound_audio">Audio file</string>
<string name="title_rule_use_as_alarm">Use as alarm</string> <string name="title_rule_use_as_alarm">Use as alarm</string>
<string name="title_rule_alarm_hint">This will ignore "do not disturb" rules</string> <string name="title_rule_alarm_hint">This will ignore "do not disturb" rules</string>
<string name="title_rule_alarm_duration">Maximum alarm duration (seconds)</string> <string name="title_rule_alarm_duration">Maximum alarm duration (seconds)</string>

Loading…
Cancel
Save