Merge branch 'pr/105'

This commit is contained in:
Karim Abou Zeid 2017-04-22 16:35:03 +02:00
commit c8d0060622
2 changed files with 49 additions and 9 deletions

View file

@ -1,12 +1,18 @@
package com.kabouzeid.gramophone.helper; package com.kabouzeid.gramophone.helper;
import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import android.provider.DocumentsContract;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -17,6 +23,7 @@ import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.service.MusicService;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
import java.util.WeakHashMap; import java.util.WeakHashMap;
@ -374,14 +381,43 @@ public class MusicPlayerRemote {
return -1; return -1;
} }
public static void playFile(String path) { public static void playFromUri(Uri uri) {
if (musicService != null) { if (musicService != null) {
ArrayList<Song> songs = SongLoader.getSongs(SongLoader.makeSongCursor( ArrayList<Song> songs = null;
musicService, if (uri.getScheme() != null && uri.getAuthority() != null) {
MediaStore.Audio.AudioColumns.DATA + "=?", if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
new String[]{path} String songId = null;
)); if (uri.getAuthority().equals("com.android.providers.media.documents")) {
if (!songs.isEmpty()) { songId = getSongIdFromMediaProvider(uri);
} else if (uri.getAuthority().equals("media")) {
songId = uri.getLastPathSegment();
}
if (songId != null) {
songs = SongLoader.getSongs(SongLoader.makeSongCursor(
musicService,
MediaStore.Audio.AudioColumns._ID + "=?",
new String[]{songId}
));
}
}
}
if (songs == null) {
File songFile = null;
if (uri.getAuthority() != null && uri.getAuthority().equals("com.android.externalstorage.documents")) {
songFile = new File(Environment.getExternalStorageDirectory(), uri.getPath().split(":", 2)[1]);
}
if (songFile == null && uri.getPath() != null) {
songFile = new File(uri.getPath());
}
if (songFile != null) {
songs = SongLoader.getSongs(SongLoader.makeSongCursor(
musicService,
MediaStore.Audio.AudioColumns.DATA + "=?",
new String[]{songFile.getAbsolutePath()}
));
}
}
if (songs != null && !songs.isEmpty()) {
openQueue(songs, 0, true); openQueue(songs, 0, true);
} else { } else {
//TODO the file is not listed in the media store //TODO the file is not listed in the media store
@ -389,6 +425,11 @@ public class MusicPlayerRemote {
} }
} }
@TargetApi(Build.VERSION_CODES.KITKAT)
private static String getSongIdFromMediaProvider(Uri uri) {
return DocumentsContract.getDocumentId(uri).split(":")[1];
}
public static boolean isServiceConnected() { public static boolean isServiceConnected() {
return musicService != null; return musicService != null;
} }

View file

@ -46,7 +46,6 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import butterknife.BindView; import butterknife.BindView;
@ -300,7 +299,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
} }
if (uri != null && uri.toString().length() > 0) { if (uri != null && uri.toString().length() > 0) {
MusicPlayerRemote.playFile(new File(uri.getPath()).getAbsolutePath()); MusicPlayerRemote.playFromUri(uri);
handled = true; handled = true;
} else if (MediaStore.Audio.Playlists.CONTENT_TYPE.equals(mimeType)) { } else if (MediaStore.Audio.Playlists.CONTENT_TYPE.equals(mimeType)) {
final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist"); final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");