WIP for android auto

main
hemanthStack 2019-09-18 18:53:04 +05:30
parent 3858d65a57
commit 103cbf2270
4 changed files with 69 additions and 14 deletions

View File

@ -131,8 +131,8 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
val uri = intent.data val uri = intent.data
val mimeType = intent.type val mimeType = intent.type
var handled = false var handled = false
println("uri -> $uri")
if (intent.action != null && intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) { /*if (intent.action != null && intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) {
val songs = SearchQueryHelper.getSongs(this, intent.extras!!) val songs = SearchQueryHelper.getSongs(this, intent.extras!!)
if (MusicPlayerRemote.shuffleMode == MusicService.SHUFFLE_MODE_SHUFFLE) { if (MusicPlayerRemote.shuffleMode == MusicService.SHUFFLE_MODE_SHUFFLE) {
MusicPlayerRemote.openAndShuffleQueue(songs, true) MusicPlayerRemote.openAndShuffleQueue(songs, true)
@ -140,7 +140,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
MusicPlayerRemote.openQueue(songs, 0, true) MusicPlayerRemote.openQueue(songs, 0, true)
} }
handled = true handled = true
} }*/
if (uri != null && uri.toString().isNotEmpty()) { if (uri != null && uri.toString().isNotEmpty()) {
MusicPlayerRemote.playFromUri(uri) MusicPlayerRemote.playFromUri(uri)

View File

@ -0,0 +1,15 @@
package code.name.monkey.retromusic.auto;
import android.app.UiModeManager;
import android.content.Context;
import android.content.res.Configuration;
public class CarHelper {
private static final String TAG = "CarHelper";
public static boolean isCarUiMode(Context c) {
UiModeManager uiModeManager = (UiModeManager) c.getSystemService(Context.UI_MODE_SERVICE);
return uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR;
}
}

View File

@ -17,7 +17,9 @@ package code.name.monkey.retromusic.service
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.text.TextUtils
import code.name.monkey.retromusic.auto.AutoMediaIDHelper import code.name.monkey.retromusic.auto.AutoMediaIDHelper
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicPlayerRemote.cycleRepeatMode import code.name.monkey.retromusic.helper.MusicPlayerRemote.cycleRepeatMode
@ -35,7 +37,8 @@ import java.util.*
*/ */
class MediaSessionCallback(private val context: Context, class MediaSessionCallback(private val context: Context,
private val musicService: MusicService) : MediaSessionCompat.Callback() { private val musicService: MusicService
) : MediaSessionCompat.Callback() {
override fun onPlay() { override fun onPlay() {
super.onPlay() super.onPlay()
@ -101,12 +104,10 @@ class MediaSessionCallback(private val context: Context,
AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS, AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS,
AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_QUEUE -> { AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_QUEUE -> {
val tracks: List<Song> val tracks: List<Song>
if (category.equals(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY)) { tracks = when (category) {
tracks = TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context) AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY -> TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context)
} else if (category.equals(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS)) { AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS -> TopAndRecentlyPlayedTracksLoader.getTopTracks(context)
tracks = TopAndRecentlyPlayedTracksLoader.getTopTracks(context) else -> MusicPlaybackQueueStore.getInstance(context).savedOriginalPlayingQueue
} else {
tracks = MusicPlaybackQueueStore.getInstance(context).savedOriginalPlayingQueue
} }
songs.addAll(tracks) songs.addAll(tracks)
var songIndex = MusicUtil.indexOfSongInList(tracks, itemId) var songIndex = MusicUtil.indexOfSongInList(tracks, itemId)
@ -124,6 +125,42 @@ class MediaSessionCallback(private val context: Context,
} }
override fun onPlayFromSearch(query: String?, extras: Bundle?) {
print("query: $query -> extras: ${extras.toString()}")
if (TextUtils.isEmpty(query)) {
if (MusicPlayerRemote.playingQueue.isEmpty()) {
openQueue(SongLoader.getAllSongs(context), 0, true);
} else {
MusicPlayerRemote.resumePlaying()
}
} else {
handlePlayFromSearch(query, extras)
}
}
private fun handlePlayFromSearch(query: String?, extras: Bundle?) {
val mediaFocus: String? = extras?.getString(MediaStore.EXTRA_MEDIA_FOCUS)
println(mediaFocus)
when (mediaFocus) {
MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE -> {
extras.getString(MediaStore.EXTRA_MEDIA_ARTIST)?.let { artist ->
println("Artist name $artist")
}
}
MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE -> {
extras.getString(MediaStore.EXTRA_MEDIA_ALBUM)?.let { album ->
println("Artist name $album")
}
}
MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE -> {
extras.getString(MediaStore.EXTRA_MEDIA_GENRE)?.let { genre ->
println("Artist name $genre")
}
}
}
}
override fun onCustomAction(action: String, extras: Bundle?) { override fun onCustomAction(action: String, extras: Bundle?) {
when (action) { when (action) {
CYCLE_REPEAT -> { CYCLE_REPEAT -> {

View File

@ -68,6 +68,7 @@ import code.name.monkey.retromusic.appwidgets.AppWidgetSmall;
import code.name.monkey.retromusic.appwidgets.AppWidgetText; import code.name.monkey.retromusic.appwidgets.AppWidgetText;
import code.name.monkey.retromusic.auto.AutoMediaIDHelper; import code.name.monkey.retromusic.auto.AutoMediaIDHelper;
import code.name.monkey.retromusic.auto.AutoMusicProvider; import code.name.monkey.retromusic.auto.AutoMusicProvider;
import code.name.monkey.retromusic.auto.CarHelper;
import code.name.monkey.retromusic.glide.BlurTransformation; import code.name.monkey.retromusic.glide.BlurTransformation;
import code.name.monkey.retromusic.glide.SongGlideRequest; import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.helper.ShuffleHelper; import code.name.monkey.retromusic.helper.ShuffleHelper;
@ -740,13 +741,15 @@ public class MusicService extends MediaBrowserServiceCompat implements
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, song.getDuration()) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, song.getDuration())
.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, getPosition() + 1) .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, getPosition() + 1)
.putLong(MediaMetadataCompat.METADATA_KEY_YEAR, song.getYear()) .putLong(MediaMetadataCompat.METADATA_KEY_YEAR, song.getYear())
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null); .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null)
.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (CarHelper.isCarUiMode(this)) {
metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size()); mediaSession.setMetadata(metaData.build());
} }
if (PreferenceUtil.getInstance(this).albumArtOnLockscreen()) {
if (PreferenceUtil.getInstance(this).albumArtOnLockscreen() || CarHelper.isCarUiMode(this)) {
final Point screenSize = RetroUtil.getScreenSize(MusicService.this); final Point screenSize = RetroUtil.getScreenSize(MusicService.this);
final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song)
.checkIgnoreMediaStore(MusicService.this) .checkIgnoreMediaStore(MusicService.this)