From 103cbf22700ad84e6b542431420ee9fbfa72c2eb Mon Sep 17 00:00:00 2001 From: hemanthStack Date: Wed, 18 Sep 2019 18:53:04 +0530 Subject: [PATCH] WIP for android auto --- .../retromusic/activities/MainActivity.kt | 6 +-- .../monkey/retromusic/auto/CarHelper.java | 15 ++++++ .../service/MediaSessionCallback.kt | 51 ++++++++++++++++--- .../retromusic/service/MusicService.java | 11 ++-- 4 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/auto/CarHelper.java diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index f5f38788..db646577 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -131,8 +131,8 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP val uri = intent.data val mimeType = intent.type var handled = false - - if (intent.action != null && intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) { + println("uri -> $uri") + /*if (intent.action != null && intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) { val songs = SearchQueryHelper.getSongs(this, intent.extras!!) if (MusicPlayerRemote.shuffleMode == MusicService.SHUFFLE_MODE_SHUFFLE) { MusicPlayerRemote.openAndShuffleQueue(songs, true) @@ -140,7 +140,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP MusicPlayerRemote.openQueue(songs, 0, true) } handled = true - } + }*/ if (uri != null && uri.toString().isNotEmpty()) { MusicPlayerRemote.playFromUri(uri) diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/CarHelper.java b/app/src/main/java/code/name/monkey/retromusic/auto/CarHelper.java new file mode 100644 index 00000000..c3e05e03 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/auto/CarHelper.java @@ -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; + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt b/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt index 38bc22ac..8f75dbda 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt @@ -17,7 +17,9 @@ package code.name.monkey.retromusic.service import android.content.Context import android.content.Intent import android.os.Bundle +import android.provider.MediaStore import android.support.v4.media.session.MediaSessionCompat +import android.text.TextUtils import code.name.monkey.retromusic.auto.AutoMediaIDHelper import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote.cycleRepeatMode @@ -35,7 +37,8 @@ import java.util.* */ class MediaSessionCallback(private val context: Context, - private val musicService: MusicService) : MediaSessionCompat.Callback() { + private val musicService: MusicService +) : MediaSessionCompat.Callback() { override fun 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_QUEUE -> { val tracks: List - if (category.equals(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY)) { - tracks = TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context) - } else if (category.equals(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS)) { - tracks = TopAndRecentlyPlayedTracksLoader.getTopTracks(context) - } else { - tracks = MusicPlaybackQueueStore.getInstance(context).savedOriginalPlayingQueue + tracks = when (category) { + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY -> TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context) + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS -> TopAndRecentlyPlayedTracksLoader.getTopTracks(context) + else -> MusicPlaybackQueueStore.getInstance(context).savedOriginalPlayingQueue } songs.addAll(tracks) 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?) { when (action) { CYCLE_REPEAT -> { diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 6e408f06..19306fd3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -68,6 +68,7 @@ import code.name.monkey.retromusic.appwidgets.AppWidgetSmall; import code.name.monkey.retromusic.appwidgets.AppWidgetText; import code.name.monkey.retromusic.auto.AutoMediaIDHelper; 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.SongGlideRequest; 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_TRACK_NUMBER, getPosition() + 1) .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) { - metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size()); + if (CarHelper.isCarUiMode(this)) { + 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 BitmapRequestBuilder request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) .checkIgnoreMediaStore(MusicService.this)