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" />