diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 6279630c0c..61b33c50b5 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -81,21 +81,22 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac private boolean hasAccount; static final int REQUEST_SOUND_INBOUND = 1; - static final int REQUEST_SOUND_OUTBOUND = 2; - static final int REQUEST_CHOOSE_ACCOUNT = 3; - static final int REQUEST_DONE = 4; - static final int REQUEST_IMPORT_CERTIFICATE = 5; - static final int REQUEST_OAUTH = 6; - static final int REQUEST_STILL = 7; - static final int REQUEST_SELECT_IDENTITY = 8; - static final int REQUEST_EDIT_SIGNATURE = 9; - static final int REQUEST_CHANGE_PASSWORD = 10; - static final int REQUEST_EDIT_ACCOUNT_COLOR = 11; - static final int REQUEST_DELETE_ACCOUNT = 12; - static final int REQUEST_EDIT_IDENITY_COLOR = 13; - static final int REQUEST_IMPORT_PROVIDERS = 14; - static final int REQUEST_GRAPH_CONTACTS = 15; - static final int REQUEST_GRAPH_CONTACTS_OAUTH = 16; + static final int REQUEST_RINGTONE_OUTBOUND = 2; + static final int REQUEST_AUDIO_OUTBOUND = 3; + static final int REQUEST_CHOOSE_ACCOUNT = 4; + static final int REQUEST_DONE = 5; + static final int REQUEST_IMPORT_CERTIFICATE = 6; + static final int REQUEST_OAUTH = 7; + static final int REQUEST_STILL = 8; + static final int REQUEST_SELECT_IDENTITY = 9; + static final int REQUEST_EDIT_SIGNATURE = 10; + static final int REQUEST_CHANGE_PASSWORD = 11; + static final int REQUEST_EDIT_ACCOUNT_COLOR = 12; + static final int REQUEST_DELETE_ACCOUNT = 13; + static final int REQUEST_EDIT_IDENITY_COLOR = 14; + static final int REQUEST_IMPORT_PROVIDERS = 15; + static final int REQUEST_GRAPH_CONTACTS = 16; + static final int REQUEST_GRAPH_CONTACTS_OAUTH = 17; static final int REQUEST_DEBUG_INFO = 7000; static final int PI_CONNECTION = 1; diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java index 6c3e2b3435..c8b41ae4c7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java @@ -51,6 +51,7 @@ import android.widget.Spinner; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.SwitchCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.preference.PreferenceManager; @@ -467,14 +468,39 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc btnSound.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - String sound = prefs.getString("sound_sent", null); - Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); - intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); - intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.title_advanced_sound)); - intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); - intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); - intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sound == null ? null : Uri.parse(sound)); - startActivityForResult(Helper.getChooser(getContext(), intent), ActivitySetup.REQUEST_SOUND_OUTBOUND); + PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), v); + + popupMenu.getMenu().add(Menu.NONE, R.string.title_rule_select_sound_ringtone, 1, R.string.title_rule_select_sound_ringtone); + popupMenu.getMenu().add(Menu.NONE, R.string.title_rule_select_sound_audio, 2, R.string.title_rule_select_sound_audio); + + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.string.title_rule_select_sound_ringtone) { + String sound = prefs.getString("sound_sent", null); + Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); + intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); + intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.title_advanced_sound)); + intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); + intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); + intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sound == null ? null : Uri.parse(sound)); + startActivityForResult(Helper.getChooser(getContext(), intent), ActivitySetup.REQUEST_RINGTONE_OUTBOUND); + 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), ActivitySetup.REQUEST_AUDIO_OUTBOUND); + return true; + } + return false; + } + }); + + popupMenu.show(); } }); @@ -998,10 +1024,14 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc try { switch (requestCode) { - case ActivitySetup.REQUEST_SOUND_OUTBOUND: + case ActivitySetup.REQUEST_RINGTONE_OUTBOUND: if (resultCode == RESULT_OK && data != null) onSelectSound(data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)); break; + case ActivitySetup.REQUEST_AUDIO_OUTBOUND: + if (resultCode == RESULT_OK && data != null) + onSelectSound(data.getData()); + break; } } catch (Throwable ex) { Log.e(ex);