Merge branch 'pr/105'
This commit is contained in:
commit
c8d0060622
2 changed files with 49 additions and 9 deletions
|
|
@ -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;
|
||||||
|
if (uri.getScheme() != null && uri.getAuthority() != null) {
|
||||||
|
if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
|
||||||
|
String songId = null;
|
||||||
|
if (uri.getAuthority().equals("com.android.providers.media.documents")) {
|
||||||
|
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,
|
musicService,
|
||||||
MediaStore.Audio.AudioColumns.DATA + "=?",
|
MediaStore.Audio.AudioColumns.DATA + "=?",
|
||||||
new String[]{path}
|
new String[]{songFile.getAbsolutePath()}
|
||||||
));
|
));
|
||||||
if (!songs.isEmpty()) {
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue