diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java index b55c7f53e..eec529eb7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java @@ -37,6 +37,22 @@ public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNu ringtoneManager.setRingtone(activity, song.id); } return true; + case R.id.action_set_as_alarm: + if (RingtoneManager.requiresDialog(activity)) { + RingtoneManager.showDialog(activity); + } else { + RingtoneManager ringtoneManager = new RingtoneManager(); + ringtoneManager.setAlarm(activity, song.id); + } + return true; + case R.id.action_set_as_notification: + if (RingtoneManager.requiresDialog(activity)) { + RingtoneManager.showDialog(activity); + } else { + RingtoneManager ringtoneManager = new RingtoneManager(); + ringtoneManager.setNotifSound(activity, song.id); + } + return true; case R.id.action_share: activity.startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, activity), null)); return true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java index 5041a4208..d9ffb5d64 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java @@ -411,6 +411,8 @@ public void onFileMenuClicked(final File file, View view) { case R.id.action_tag_editor: case R.id.action_details: case R.id.action_set_as_ringtone: + case R.id.action_set_as_alarm: + case R.id.action_set_as_notification: case R.id.action_delete_from_device: new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> { if (!songs.isEmpty()) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/RingtoneManager.java b/app/src/main/java/com/kabouzeid/gramophone/util/RingtoneManager.java index 5e2a9ae22..31e9c8977 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/RingtoneManager.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/RingtoneManager.java @@ -41,7 +41,7 @@ public static MaterialDialog showDialog(Context context) { .show(); } - public void setRingtone(@NonNull final Context context, final int id) { + public void setRingtone(@NonNull final Context context, final int id) { final ContentResolver resolver = context.getContentResolver(); final Uri uri = MusicUtil.getSongFileUri(id); try { @@ -74,4 +74,72 @@ public void setRingtone(@NonNull final Context context, final int id) { } catch (SecurityException ignored) { } } + + public void setAlarm(@NonNull final Context context, final int id) { + final ContentResolver resolver = context.getContentResolver(); + final Uri uri = MusicUtil.getSongFileUri(id); + try { + final ContentValues values = new ContentValues(2); + values.put(MediaStore.Audio.AudioColumns.IS_ALARM, "1"); + resolver.update(uri, values, null, null); + } catch (@NonNull final UnsupportedOperationException ignored) { + return; + } + + try { + Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, + new String[]{MediaStore.MediaColumns.TITLE}, + BaseColumns._ID + "=?", + new String[]{String.valueOf(id)}, + null); + try { + if (cursor != null && cursor.getCount() == 1) { + cursor.moveToFirst(); + android.media.RingtoneManager.setActualDefaultRingtoneUri(context, android.media.RingtoneManager.TYPE_ALARM, uri); + Settings.System.putString(resolver, Settings.System.ALARM_ALERT, uri.toString()); + final String message = context.getString(R.string.x_has_been_set_as_alarm, cursor.getString(0)); + Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + } catch (SecurityException ignored) { + } + } + + public void setNotifSound(@NonNull final Context context, final int id) { + final ContentResolver resolver = context.getContentResolver(); + final Uri uri = MusicUtil.getSongFileUri(id); + try { + final ContentValues values = new ContentValues(2); + values.put(MediaStore.Audio.AudioColumns.IS_ALARM, "1"); + resolver.update(uri, values, null, null); + } catch (@NonNull final UnsupportedOperationException ignored) { + return; + } + + try { + Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, + new String[]{MediaStore.MediaColumns.TITLE}, + BaseColumns._ID + "=?", + new String[]{String.valueOf(id)}, + null); + try { + if (cursor != null && cursor.getCount() == 1) { + cursor.moveToFirst(); + android.media.RingtoneManager.setActualDefaultRingtoneUri(context, android.media.RingtoneManager.TYPE_NOTIFICATION, uri); + Settings.System.putString(resolver, Settings.System.NOTIFICATION_SOUND, uri.toString()); + final String message = context.getString(R.string.x_has_been_set_as_notif, cursor.getString(0)); + Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + } catch (SecurityException ignored) { + } + } } diff --git a/app/src/main/res/menu/menu_item_cannot_delete_single_songs_playlist_song.xml b/app/src/main/res/menu/menu_item_cannot_delete_single_songs_playlist_song.xml index dd2b985cc..d64ba8729 100644 --- a/app/src/main/res/menu/menu_item_cannot_delete_single_songs_playlist_song.xml +++ b/app/src/main/res/menu/menu_item_cannot_delete_single_songs_playlist_song.xml @@ -34,9 +34,24 @@ android:title="@string/action_details" app:showAsAction="never" /> + android:id="@+id/action_set_as" + android:title="@string/action_set_as" + app:showAsAction="never"> + + + + + + + android:id="@+id/action_set_as" + android:title="@string/action_set_as" + app:showAsAction="never"> + + + + + + + android:id="@+id/action_set_as" + android:title="@string/action_set_as" + app:showAsAction="never"> + + + + + + + android:id="@+id/action_set_as" + android:title="@string/action_set_as" + app:showAsAction="never"> + + + + + + + android:id="@+id/action_set_as" + android:title="@string/action_set_as" + app:showAsAction="never"> + + + + + + Currently listening to %1$s by %2$s. The audio file Set %1$s as your ringtone. + Set %1$s as your default alarm. + Set %1$s as your default notification sound. + Set as… Set as ringtone + Set as alarm ringtone + Set as default notification sound Share "Settings" Grant