mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
player notification
This commit is contained in:
parent
4531cd6def
commit
dbc93c244e
@ -13,6 +13,7 @@ import android.os.Build
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.support.v4.media.session.MediaSessionCompat
|
||||
import android.text.Html
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
@ -57,10 +58,12 @@ import com.google.android.exoplayer2.MediaItem.fromUri
|
||||
import com.google.android.exoplayer2.Player
|
||||
import com.google.android.exoplayer2.audio.AudioAttributes
|
||||
import com.google.android.exoplayer2.ext.cronet.CronetDataSource
|
||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector
|
||||
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory
|
||||
import com.google.android.exoplayer2.source.MediaSource
|
||||
import com.google.android.exoplayer2.source.MergingMediaSource
|
||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource
|
||||
import com.google.android.exoplayer2.ui.PlayerNotificationManager
|
||||
import com.google.android.exoplayer2.ui.StyledPlayerView
|
||||
import com.google.android.exoplayer2.upstream.DataSource
|
||||
import com.google.android.exoplayer2.upstream.DefaultDataSource
|
||||
@ -69,12 +72,12 @@ import com.google.android.exoplayer2.util.RepeatModeUtil
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.squareup.picasso.Picasso
|
||||
import org.chromium.net.CronetEngine
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
import java.net.URLEncoder
|
||||
import java.util.concurrent.Executors
|
||||
import kotlin.math.abs
|
||||
import org.chromium.net.CronetEngine
|
||||
import retrofit2.HttpException
|
||||
|
||||
var isFullScreen = false
|
||||
|
||||
@ -105,6 +108,10 @@ class PlayerFragment : Fragment() {
|
||||
|
||||
private lateinit var relDownloadVideo: LinearLayout
|
||||
|
||||
private lateinit var mediaSession: MediaSessionCompat
|
||||
private lateinit var mediaSessionConnector: MediaSessionConnector
|
||||
private lateinit var playerNotification: PlayerNotificationManager
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
arguments?.let {
|
||||
@ -405,32 +412,14 @@ class PlayerFragment : Fragment() {
|
||||
)
|
||||
}
|
||||
|
||||
val cronetEngine: CronetEngine = CronetHelper.getCronetEngine()
|
||||
val cronetDataSourceFactory: CronetDataSource.Factory =
|
||||
CronetDataSource.Factory(cronetEngine, Executors.newCachedThreadPool())
|
||||
createExoPlayer(view)
|
||||
|
||||
val dataSourceFactory = DefaultDataSource.Factory(
|
||||
requireContext(),
|
||||
cronetDataSourceFactory
|
||||
)
|
||||
|
||||
val audioAttributes = AudioAttributes.Builder()
|
||||
.setUsage(C.USAGE_MEDIA)
|
||||
.setContentType(C.CONTENT_TYPE_MOVIE)
|
||||
.build()
|
||||
|
||||
exoPlayer = ExoPlayer.Builder(view.context)
|
||||
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
|
||||
.setSeekBackIncrementMs(5000)
|
||||
.setSeekForwardIncrementMs(5000)
|
||||
.build()
|
||||
exoPlayerView.setShowSubtitleButton(true)
|
||||
exoPlayerView.setShowNextButton(false)
|
||||
exoPlayerView.setShowPreviousButton(false)
|
||||
exoPlayerView.setRepeatToggleModes(RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL)
|
||||
// exoPlayerView.controllerShowTimeoutMs = 1500
|
||||
exoPlayerView.controllerHideOnTouch = true
|
||||
exoPlayer.setAudioAttributes(audioAttributes, true)
|
||||
exoPlayerView.player = exoPlayer
|
||||
val sharedPreferences =
|
||||
PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||
@ -829,6 +818,47 @@ class PlayerFragment : Fragment() {
|
||||
run()
|
||||
}
|
||||
|
||||
private fun createExoPlayer(view: View) {
|
||||
val cronetEngine: CronetEngine = CronetHelper.getCronetEngine()
|
||||
val cronetDataSourceFactory: CronetDataSource.Factory =
|
||||
CronetDataSource.Factory(cronetEngine, Executors.newCachedThreadPool())
|
||||
|
||||
val dataSourceFactory = DefaultDataSource.Factory(
|
||||
requireContext(),
|
||||
cronetDataSourceFactory
|
||||
)
|
||||
|
||||
val audioAttributes = AudioAttributes.Builder()
|
||||
.setUsage(C.USAGE_MEDIA)
|
||||
.setContentType(C.CONTENT_TYPE_MOVIE)
|
||||
.build()
|
||||
|
||||
exoPlayer = ExoPlayer.Builder(view.context)
|
||||
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
|
||||
.setSeekBackIncrementMs(5000)
|
||||
.setSeekForwardIncrementMs(5000)
|
||||
.build()
|
||||
|
||||
exoPlayer.setAudioAttributes(audioAttributes, true)
|
||||
|
||||
setMediaItem(requireContext())
|
||||
initializePlayerNotification(requireContext())
|
||||
}
|
||||
|
||||
private fun setMediaItem(c: Context) {
|
||||
mediaSession = MediaSessionCompat(c, this.javaClass.name)
|
||||
mediaSession.isActive = true
|
||||
|
||||
mediaSessionConnector = MediaSessionConnector(mediaSession)
|
||||
mediaSessionConnector.setPlayer(exoPlayer)
|
||||
}
|
||||
|
||||
private fun initializePlayerNotification(c: Context) {
|
||||
playerNotification = PlayerNotificationManager.Builder(c, 1, "background_mode").build()
|
||||
playerNotification.setPlayer(exoPlayer)
|
||||
playerNotification.setMediaSessionToken(mediaSession.sessionToken)
|
||||
}
|
||||
|
||||
private fun isSubscribed(button: MaterialButton, channel_id: String) {
|
||||
@SuppressLint("ResourceAsColor")
|
||||
fun run() {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.github.libretube
|
||||
|
||||
import android.Manifest
|
||||
import android.app.NotificationManager
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
@ -28,13 +29,14 @@ import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.json.JSONObject
|
||||
import org.json.JSONTokener
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipInputStream
|
||||
import org.json.JSONObject
|
||||
import org.json.JSONTokener
|
||||
import retrofit2.HttpException
|
||||
|
||||
|
||||
private var isCurrentViewMainSettings = true
|
||||
private var requireMainActivityRestart = false
|
||||
@ -389,6 +391,9 @@ class SettingsActivity :
|
||||
.unregisterOnSharedPreferenceChangeListener(this)
|
||||
if (requireMainActivityRestart) {
|
||||
requireMainActivityRestart = false
|
||||
// kill player notification
|
||||
val nManager = this.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
||||
nManager.cancelAll()
|
||||
restartMainActivity(this)
|
||||
finishAffinity()
|
||||
} else {
|
||||
|
@ -1,9 +1,11 @@
|
||||
package com.github.libretube
|
||||
|
||||
import android.app.NotificationManager
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.preference.PreferenceManager
|
||||
import java.util.*
|
||||
@ -79,6 +81,10 @@ fun changeIcon(context: Context, newLogoActivityAlias: String) {
|
||||
|
||||
// Needed due to different MainActivity Aliases because of the app icons
|
||||
fun restartMainActivity(context: Context) {
|
||||
// kill player notification
|
||||
val nManager = context.getSystemService(AppCompatActivity.NOTIFICATION_SERVICE) as NotificationManager
|
||||
nManager.cancelAll()
|
||||
// restart to MainActivity
|
||||
val pm: PackageManager = context.packageManager
|
||||
val intent = pm.getLaunchIntentForPackage(context.packageName)
|
||||
intent?.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||
|
Loading…
x
Reference in New Issue
Block a user