Remote Volume Provider for Chromecast Service
This commit is contained in:
parent
4a6d58301f
commit
cee98fd0f4
8 changed files with 90 additions and 4 deletions
|
@ -73,6 +73,7 @@
|
||||||
<entry key="../../../../../layout/compose-model-1657532602169.xml" value="1.0" />
|
<entry key="../../../../../layout/compose-model-1657532602169.xml" value="1.0" />
|
||||||
<entry key="../../../../../layout/compose-model-1657534975618.xml" value="0.33" />
|
<entry key="../../../../../layout/compose-model-1657534975618.xml" value="0.33" />
|
||||||
<entry key="../../../../../layout/compose-model-1657549343896.xml" value="0.1" />
|
<entry key="../../../../../layout/compose-model-1657549343896.xml" value="0.1" />
|
||||||
|
<entry key="../../../../../layout/compose-model-1662485842885.xml" value="0.11655405405405406" />
|
||||||
<entry key="app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.1" />
|
<entry key="app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.1" />
|
||||||
<entry key="app/src/main/res/drawable/forward.xml" value="0.1" />
|
<entry key="app/src/main/res/drawable/forward.xml" value="0.1" />
|
||||||
<entry key="app/src/main/res/drawable/ic_launcher_adaptive_foreground.xml" value="0.1" />
|
<entry key="app/src/main/res/drawable/ic_launcher_adaptive_foreground.xml" value="0.1" />
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package eu.toldi.balazs.caster.helpers
|
||||||
|
|
||||||
|
import android.media.VolumeProvider
|
||||||
|
import android.os.Parcel
|
||||||
|
import android.os.Parcelable
|
||||||
|
import androidx.media.VolumeProviderCompat
|
||||||
|
import eu.toldi.balazs.caster.ChromeCastHelper
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
|
||||||
|
class ChromecastVolumeProviderCompat(currentVolume: Float) : VolumeProviderCompat( VOLUME_CONTROL_ABSOLUTE,100,(currentVolume*100).toInt()) {
|
||||||
|
override fun onSetVolumeTo(volume: Int) {
|
||||||
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
|
ChromeCastHelper.setVolume(volume.toFloat() / 100.0f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAdjustVolume(direction: Int) {
|
||||||
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
|
ChromeCastHelper.setVolume(ChromeCastHelper.chromeCast.status.volume.level + direction.toFloat()/1000.0f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,10 +14,12 @@ import android.support.v4.media.session.MediaSessionCompat
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.media.VolumeProviderCompat
|
||||||
import eu.toldi.balazs.caster.App.Companion.CHANNEL_ID
|
import eu.toldi.balazs.caster.App.Companion.CHANNEL_ID
|
||||||
import eu.toldi.balazs.caster.ChromeCastHelper
|
import eu.toldi.balazs.caster.ChromeCastHelper
|
||||||
import eu.toldi.balazs.caster.ChromecastManagerActivity
|
import eu.toldi.balazs.caster.ChromecastManagerActivity
|
||||||
import eu.toldi.balazs.caster.R
|
import eu.toldi.balazs.caster.R
|
||||||
|
import eu.toldi.balazs.caster.helpers.ChromecastVolumeProviderCompat
|
||||||
import eu.toldi.balazs.caster.model.SponsorBlock
|
import eu.toldi.balazs.caster.model.SponsorBlock
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.features.*
|
import io.ktor.features.*
|
||||||
|
@ -53,6 +55,7 @@ class ChromecastManagerService : Service() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mMediaPlayer = MediaPlayer()
|
private val mMediaPlayer = MediaPlayer()
|
||||||
|
private lateinit var mVolmeProvider : VolumeProviderCompat;
|
||||||
private lateinit var mSession: MediaSessionCompat
|
private lateinit var mSession: MediaSessionCompat
|
||||||
private lateinit var mController: MediaControllerCompat
|
private lateinit var mController: MediaControllerCompat
|
||||||
private lateinit var pendingIntent : PendingIntent
|
private lateinit var pendingIntent : PendingIntent
|
||||||
|
@ -163,7 +166,10 @@ class ChromecastManagerService : Service() {
|
||||||
"${chromeCast.name} is ready for casting"
|
"${chromeCast.name} is ready for casting"
|
||||||
}
|
}
|
||||||
mediaStatus = ChromeCastHelper.fetchMediaStatus()
|
mediaStatus = ChromeCastHelper.fetchMediaStatus()
|
||||||
Log.e("Caster_Service","Sb enabled: "+prefs.getBoolean("sponsorblock_enabled",false).toString()+ " yt: ${yt_video.toString()}")
|
if(mediaStatus != null) {
|
||||||
|
mVolmeProvider = ChromecastVolumeProviderCompat(mediaStatus!!.volume.level)
|
||||||
|
mSession.setPlaybackToRemote(mVolmeProvider)
|
||||||
|
}
|
||||||
if(prefs.getBoolean("sponsorblock_enabled",false) && yt_video != null){
|
if(prefs.getBoolean("sponsorblock_enabled",false) && yt_video != null){
|
||||||
try {
|
try {
|
||||||
if(yt_video!!.url.startsWith("https://youtu.be/")){
|
if(yt_video!!.url.startsWith("https://youtu.be/")){
|
||||||
|
@ -240,7 +246,7 @@ class ChromecastManagerService : Service() {
|
||||||
notification = if(mediaStatus!!.playerState == MediaStatus.PlayerState.PLAYING) {
|
notification = if(mediaStatus!!.playerState == MediaStatus.PlayerState.PLAYING) {
|
||||||
NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
||||||
.setContentTitle(status_message)
|
.setContentTitle(status_message)
|
||||||
.setSmallIcon(R.drawable.ic_caster_logo)
|
.setSmallIcon(R.drawable.ic_caster_new_monochrome_notification)
|
||||||
.setContentText(mediaStatus!!.media.metadata[Media.METADATA_TITLE].toString())
|
.setContentText(mediaStatus!!.media.metadata[Media.METADATA_TITLE].toString())
|
||||||
.addAction(
|
.addAction(
|
||||||
generateAction(
|
generateAction(
|
||||||
|
@ -273,7 +279,7 @@ class ChromecastManagerService : Service() {
|
||||||
} else {
|
} else {
|
||||||
NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
||||||
.setContentTitle(status_message)
|
.setContentTitle(status_message)
|
||||||
.setSmallIcon(R.drawable.ic_caster_logo)
|
.setSmallIcon(R.drawable.ic_caster_new_monochrome_notification)
|
||||||
.setContentText(mediaStatus!!.media.metadata[Media.METADATA_TITLE].toString())
|
.setContentText(mediaStatus!!.media.metadata[Media.METADATA_TITLE].toString())
|
||||||
.addAction(
|
.addAction(
|
||||||
generateAction(
|
generateAction(
|
||||||
|
@ -311,7 +317,7 @@ class ChromecastManagerService : Service() {
|
||||||
} else {
|
} else {
|
||||||
notification = NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
notification = NotificationCompat.Builder(baseContext, CHANNEL_ID)
|
||||||
.setContentTitle(status_message)
|
.setContentTitle(status_message)
|
||||||
.setSmallIcon(R.drawable.ic_caster_logo)
|
.setSmallIcon(R.drawable.ic_caster_new_monochrome_notification)
|
||||||
.setContentIntent(pendingIntent).build()
|
.setContentIntent(pendingIntent).build()
|
||||||
|
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="#FFFFFF">
|
||||||
|
<group android:scaleX="0.04043956"
|
||||||
|
android:scaleY="0.04043956"
|
||||||
|
android:translateX="1.8901099"
|
||||||
|
android:translateY="2.3113554">
|
||||||
|
<path
|
||||||
|
android:pathData="M125.67,37.64h361.61v220.93h-361.61z"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="20"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M217.94,298.36h177.75v54.12h-177.75z"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="20"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M282.15,261.97h48.97v36.25h-48.97z"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="20"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m27.62,354.13a63.86,63.86 0,0 1,82.15 3.48,63.86 63.86,0 0,1 10.64,81.53"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="25"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m34.3,401.3a27.68,30.75 90,0 1,39.56 1.51,27.68 30.75,90 0,1 5.12,35.34"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="25"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m31.57,307.13a97.94,97.94 45,0 1,125.99 5.33,97.94 97.94,0 0,1 16.32,125.04"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="25"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
</group>
|
||||||
|
</vector>
|
Binary file not shown.
After Width: | Height: | Size: 468 B |
Binary file not shown.
After Width: | Height: | Size: 360 B |
Binary file not shown.
After Width: | Height: | Size: 538 B |
Binary file not shown.
After Width: | Height: | Size: 859 B |
Loading…
Reference in a new issue