Enable android auto support

Meet min requirements for Android Auto to connect to our mediasession

Still to go:
1. File browsing
2. Additional playback controls
This commit is contained in:
Derek Schmidt 2020-05-31 14:16:23 -07:00
parent fb22b9f79e
commit 6a26098528
No known key found for this signature in database
GPG Key ID: 0F5D491793B4035A
3 changed files with 44 additions and 7 deletions

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.github.apognu.otter">
xmlns:tools="http://schemas.android.com/tools"
package="com.github.apognu.otter">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@ -16,6 +17,13 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.gms.car.notification.SmallIcon"
android:resource="@drawable/ottershape" />
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<!-- <meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.android.exoplayer2.ext.cast.DefaultCastOptionsProvider"/> -->
@ -44,7 +52,14 @@
<activity android:name="com.github.apognu.otter.activities.SettingsActivity" />
<activity android:name="com.github.apognu.otter.activities.LicencesActivity" />
<service android:name="com.github.apognu.otter.playback.PlayerService" />
<service
android:name="com.github.apognu.otter.playback.PlayerService"
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
<service
android:name=".playback.PinService"

View File

@ -1,7 +1,6 @@
package com.github.apognu.otter.playback
import android.annotation.SuppressLint
import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
@ -9,10 +8,13 @@ import android.media.AudioAttributes
import android.media.AudioFocusRequest
import android.media.AudioManager
import android.os.Build
import android.os.IBinder
import android.os.Bundle
import android.support.v4.media.MediaBrowserCompat
import android.support.v4.media.MediaDescriptionCompat
import android.support.v4.media.session.MediaSessionCompat
import android.view.KeyEvent
import com.github.apognu.otter.Otter
import androidx.media.MediaBrowserServiceCompat
import com.github.apognu.otter.R
import com.github.apognu.otter.utils.*
import com.google.android.exoplayer2.C
@ -30,7 +32,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
class PlayerService : Service() {
class PlayerService : MediaBrowserServiceCompat() {
private lateinit var queue: QueueManager
private val jobs = mutableListOf<Job>()
@ -84,6 +86,8 @@ class PlayerService : Service() {
isActive = true
}
sessionToken = mediaSession.sessionToken
mediaControlsManager = MediaControlsManager(this, mediaSession)
player = SimpleExoPlayer.Builder(this).build().apply {
@ -224,8 +228,6 @@ class PlayerService : Service() {
})
}
override fun onBind(intent: Intent?): IBinder? = null
@SuppressLint("NewApi")
override fun onDestroy() {
jobs.forEach { it.cancel() }
@ -437,4 +439,20 @@ class PlayerService : Service() {
}
}
}
override fun onGetRoot(
clientPackageName: String,
clientUid: Int,
rootHints: Bundle?
): BrowserRoot? {
return BrowserRoot("/", null)
}
override fun onLoadChildren(
parentId: String,
result: Result<List<MediaBrowserCompat.MediaItem>>
) {
val list = mutableListOf<MediaBrowserCompat.MediaItem>()
result.sendResult(list)
}
}

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp>
<uses name="media"/>
</automotiveApp>