Fix rintone sharing (#687)
This commit is contained in:
parent
12a1517929
commit
18cdb4a72e
4 changed files with 86 additions and 33 deletions
|
|
@ -19,6 +19,7 @@ import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.RingtoneManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
|
@ -29,7 +30,12 @@ public class SongMenuHelper {
|
||||||
public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull Song song, int menuItemId) {
|
public static boolean handleMenuClick(@NonNull FragmentActivity activity, @NonNull Song song, int menuItemId) {
|
||||||
switch (menuItemId) {
|
switch (menuItemId) {
|
||||||
case R.id.action_set_as_ringtone:
|
case R.id.action_set_as_ringtone:
|
||||||
MusicUtil.setRingtone(activity, song.id);
|
if (RingtoneManager.requiresDialog(activity)) {
|
||||||
|
RingtoneManager.showDialog(activity);
|
||||||
|
} else {
|
||||||
|
RingtoneManager ringtoneManager = new RingtoneManager();
|
||||||
|
ringtoneManager.setRingtone(activity, song.id);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_share:
|
case R.id.action_share:
|
||||||
activity.startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, activity), null));
|
activity.startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, activity), null));
|
||||||
|
|
|
||||||
|
|
@ -70,39 +70,7 @@ public class MusicUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setRingtone(@NonNull final Context context, final int id) {
|
|
||||||
final ContentResolver resolver = context.getContentResolver();
|
|
||||||
final Uri uri = getSongFileUri(id);
|
|
||||||
try {
|
|
||||||
final ContentValues values = new ContentValues(2);
|
|
||||||
values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1");
|
|
||||||
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();
|
|
||||||
Settings.System.putString(resolver, Settings.System.RINGTONE, uri.toString());
|
|
||||||
final String message = context.getString(R.string.x_has_been_set_as_ringtone, cursor.getString(0));
|
|
||||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (cursor != null) {
|
|
||||||
cursor.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SecurityException ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static String getArtistInfoString(@NonNull final Context context, @NonNull final Artist artist) {
|
public static String getArtistInfoString(@NonNull final Context context, @NonNull final Artist artist) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.kabouzeid.gramophone.util;
|
||||||
|
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.provider.BaseColumns;
|
||||||
|
import android.provider.MediaStore;
|
||||||
|
import android.provider.Settings;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
|
import com.kabouzeid.gramophone.R;
|
||||||
|
|
||||||
|
public class RingtoneManager {
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean requiresDialog(@NonNull Context context) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
return !Settings.System.canWrite(context);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MaterialDialog showDialog(Context context) {
|
||||||
|
return new MaterialDialog.Builder(context)
|
||||||
|
.title(R.string.dialog_ringtone_title)
|
||||||
|
.content(R.string.dialog_ringtone_message)
|
||||||
|
.positiveText(android.R.string.ok)
|
||||||
|
.negativeText(android.R.string.cancel)
|
||||||
|
.onPositive((dialog, which) -> {
|
||||||
|
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
|
||||||
|
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
||||||
|
context.startActivity(intent);
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRingtone(@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_RINGTONE, "1");
|
||||||
|
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();
|
||||||
|
Settings.System.putString(resolver, Settings.System.RINGTONE, uri.toString());
|
||||||
|
final String message = context.getString(R.string.x_has_been_set_as_ringtone, cursor.getString(0));
|
||||||
|
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (cursor != null) {
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SecurityException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -308,4 +308,6 @@
|
||||||
<string name="sort_order_album">Album</string>
|
<string name="sort_order_album">Album</string>
|
||||||
<string name="sort_order_year">Year</string>
|
<string name="sort_order_year">Year</string>
|
||||||
<string name="finish_current_music_sleep_timer">Finish last song</string>
|
<string name="finish_current_music_sleep_timer">Finish last song</string>
|
||||||
|
<string name="dialog_ringtone_title">Set ringtone</string>
|
||||||
|
<string name="dialog_ringtone_message">Allow phonograph to modify audio settings</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue