|
|
@@ -1,604 +1,624 @@
|
|
|
-///*
|
|
|
-// * Copyright (c) Milan Jurkulák 2023.
|
|
|
-// * Contact:
|
|
|
-// * e: mimoccc@gmail.com
|
|
|
-// * e: mj@mjdev.org
|
|
|
-// * w: https://mjdev.org
|
|
|
-// */
|
|
|
-//
|
|
|
-//package org.mjdev.tvlib.ui.components.media
|
|
|
-//
|
|
|
-//import android.media.MediaPlayer
|
|
|
-//import android.net.Uri
|
|
|
-//import android.os.Looper
|
|
|
-//import android.view.Surface
|
|
|
-//import android.view.SurfaceHolder
|
|
|
-//import android.view.SurfaceView
|
|
|
-//import android.view.TextureView
|
|
|
-//import androidx.compose.foundation.background
|
|
|
-//import androidx.compose.foundation.layout.Box
|
|
|
-//import androidx.compose.foundation.layout.size
|
|
|
-//import androidx.compose.runtime.Composable
|
|
|
-//import androidx.compose.ui.Modifier
|
|
|
-//import androidx.compose.ui.graphics.Color
|
|
|
-//import androidx.compose.ui.graphics.RectangleShape
|
|
|
-//import androidx.compose.ui.platform.LocalConfiguration
|
|
|
-//import androidx.compose.ui.unit.dp
|
|
|
-//import androidx.compose.ui.viewinterop.AndroidView
|
|
|
-//import androidx.media3.common.AudioAttributes
|
|
|
-//import androidx.media3.common.DeviceInfo
|
|
|
-//import androidx.media3.common.MediaItem
|
|
|
-//import androidx.media3.common.MediaMetadata
|
|
|
-//import androidx.media3.common.PlaybackException
|
|
|
-//import androidx.media3.common.PlaybackParameters
|
|
|
-//import androidx.media3.common.Player
|
|
|
-//import androidx.media3.common.Timeline
|
|
|
-//import androidx.media3.common.TrackSelectionParameters
|
|
|
-//import androidx.media3.common.Tracks
|
|
|
-//import androidx.media3.common.VideoSize
|
|
|
-//import androidx.media3.common.text.CueGroup
|
|
|
-//import androidx.media3.common.util.Size
|
|
|
-//import org.mjdev.tvlib.extensions.ComposeExt
|
|
|
-//import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
|
|
|
-//
|
|
|
-//// todo
|
|
|
-//@Suppress("unused")
|
|
|
-//class NativePlayerImpl(
|
|
|
-// private val mediaPlayer: MediaPlayer
|
|
|
-//) : IMediaPlayer {
|
|
|
-//
|
|
|
-// @Composable
|
|
|
-// override fun GetPlayerView() {
|
|
|
-// val width = LocalConfiguration.current.screenWidthDp
|
|
|
-// val height = LocalConfiguration.current.screenHeightDp
|
|
|
-// val isEdit = ComposeExt.isEditMode()
|
|
|
-// Box(
|
|
|
-// modifier = Modifier
|
|
|
-// .recomposeHighlighter()
|
|
|
-// .size(width.dp, height.dp)
|
|
|
-// .background(Color.Black, RectangleShape)
|
|
|
-// ) {
|
|
|
-// if (!isEdit) {
|
|
|
-// AndroidView(
|
|
|
-// modifier = Modifier
|
|
|
-// .size(width.dp, height.dp)
|
|
|
-// .recomposeHighlighter(),
|
|
|
-// factory = { context ->
|
|
|
-// SurfaceView(context).apply {
|
|
|
-// mediaPlayer.setDisplay(holder)
|
|
|
-// }
|
|
|
-// }
|
|
|
-// )
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaUri(uri: Uri) {
|
|
|
-// mediaPlayer.setDataSource(uri.toString())
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun prepare() {
|
|
|
-// mediaPlayer.prepareAsync()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun play() {
|
|
|
-// mediaPlayer.start()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun pause() {
|
|
|
-// mediaPlayer.pause()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun resume() {
|
|
|
-// mediaPlayer.start()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun stop() {
|
|
|
-// mediaPlayer.stop()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun dispose() {
|
|
|
-// mediaPlayer.release()
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekTo(value: Long) {
|
|
|
-// mediaPlayer.seekTo(value.toInt())
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekTo(mediaItemIndex: Int, positionMs: Long) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getApplicationLooper(): Looper {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun addListener(listener: Player.Listener) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun removeListener(listener: Player.Listener) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItems(mediaItems: MutableList<MediaItem>) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItems(mediaItems: MutableList<MediaItem>, resetPosition: Boolean) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItems(
|
|
|
-// mediaItems: MutableList<MediaItem>,
|
|
|
-// startIndex: Int,
|
|
|
-// startPositionMs: Long
|
|
|
-// ) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItem(mediaItem: MediaItem) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItem(mediaItem: MediaItem, startPositionMs: Long) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setMediaItem(mediaItem: MediaItem, resetPosition: Boolean) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun addMediaItem(mediaItem: MediaItem) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun addMediaItem(index: Int, mediaItem: MediaItem) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun addMediaItems(mediaItems: MutableList<MediaItem>) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun addMediaItems(index: Int, mediaItems: MutableList<MediaItem>) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun moveMediaItem(currentIndex: Int, newIndex: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun moveMediaItems(fromIndex: Int, toIndex: Int, newIndex: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun replaceMediaItem(index: Int, mediaItem: MediaItem) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun replaceMediaItems(
|
|
|
-// fromIndex: Int,
|
|
|
-// toIndex: Int,
|
|
|
-// mediaItems: MutableList<MediaItem>
|
|
|
-// ) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun removeMediaItem(index: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun removeMediaItems(fromIndex: Int, toIndex: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearMediaItems() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCommandAvailable(command: Int): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun canAdvertiseSession(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getAvailableCommands(): Player.Commands {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlaybackState(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlaybackSuppressionReason(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isPlaying(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlayerError(): PlaybackException? {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setPlayWhenReady(playWhenReady: Boolean) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlayWhenReady(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setRepeatMode(repeatMode: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getRepeatMode(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setShuffleModeEnabled(shuffleModeEnabled: Boolean) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getShuffleModeEnabled(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isLoading(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToDefaultPosition() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToDefaultPosition(mediaItemIndex: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getSeekBackIncrement(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekBack() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getSeekForwardIncrement(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekForward() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasPrevious(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasPreviousWindow(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasPreviousMediaItem(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun previous() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToPreviousWindow() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToPreviousMediaItem() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getMaxSeekToPreviousPosition(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToPrevious() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasNext(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasNextWindow(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun hasNextMediaItem(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun next() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToNextWindow() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToNextMediaItem() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun seekToNext() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setPlaybackParameters(playbackParameters: PlaybackParameters) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setPlaybackSpeed(speed: Float) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlaybackParameters(): PlaybackParameters {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun release() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentTracks(): Tracks {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getTrackSelectionParameters(): TrackSelectionParameters {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setTrackSelectionParameters(parameters: TrackSelectionParameters) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getMediaMetadata(): MediaMetadata {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPlaylistMetadata(): MediaMetadata {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setPlaylistMetadata(mediaMetadata: MediaMetadata) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentManifest(): Any? {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentTimeline(): Timeline {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentPeriodIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentWindowIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentMediaItemIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getNextWindowIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getNextMediaItemIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPreviousWindowIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getPreviousMediaItemIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentMediaItem(): MediaItem? {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getMediaItemCount(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getMediaItemAt(index: Int): MediaItem {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getDuration(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentPosition(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getBufferedPosition(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getBufferedPercentage(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getTotalBufferedDuration(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentWindowDynamic(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentMediaItemDynamic(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentWindowLive(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentMediaItemLive(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentLiveOffset(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentWindowSeekable(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isCurrentMediaItemSeekable(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isPlayingAd(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentAdGroupIndex(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentAdIndexInAdGroup(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getContentDuration(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getContentPosition(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getContentBufferedPosition(): Long {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getAudioAttributes(): AudioAttributes {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setVolume(volume: Float) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getVolume(): Float {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearVideoSurface() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearVideoSurface(surface: Surface?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setVideoSurface(surface: Surface?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setVideoSurfaceHolder(surfaceHolder: SurfaceHolder?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearVideoSurfaceHolder(surfaceHolder: SurfaceHolder?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setVideoSurfaceView(surfaceView: SurfaceView?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearVideoSurfaceView(surfaceView: SurfaceView?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setVideoTextureView(textureView: TextureView?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun clearVideoTextureView(textureView: TextureView?) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getVideoSize(): VideoSize {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getSurfaceSize(): Size {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getCurrentCues(): CueGroup {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getDeviceInfo(): DeviceInfo {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun getDeviceVolume(): Int {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun isDeviceMuted(): Boolean {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setDeviceVolume(volume: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setDeviceVolume(volume: Int, flags: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun increaseDeviceVolume() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun increaseDeviceVolume(flags: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun decreaseDeviceVolume() {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun decreaseDeviceVolume(flags: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setDeviceMuted(muted: Boolean) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-// override fun setDeviceMuted(muted: Boolean, flags: Int) {
|
|
|
-// TODO("Not yet implemented")
|
|
|
-// }
|
|
|
-//
|
|
|
-//}
|
|
|
+/*
|
|
|
+ * Copyright (c) Milan Jurkulák 2023.
|
|
|
+ * Contact:
|
|
|
+ * e: mimoccc@gmail.com
|
|
|
+ * e: mj@mjdev.org
|
|
|
+ * w: https://mjdev.org
|
|
|
+ */
|
|
|
+
|
|
|
+package org.mjdev.tvlib.ui.components.media
|
|
|
+
|
|
|
+import android.annotation.SuppressLint
|
|
|
+import android.media.MediaPlayer
|
|
|
+import android.net.Uri
|
|
|
+import android.os.Looper
|
|
|
+import android.view.Surface
|
|
|
+import android.view.SurfaceHolder
|
|
|
+import android.view.SurfaceView
|
|
|
+import android.view.TextureView
|
|
|
+import androidx.compose.foundation.background
|
|
|
+import androidx.compose.foundation.layout.Box
|
|
|
+import androidx.compose.foundation.layout.size
|
|
|
+import androidx.compose.runtime.Composable
|
|
|
+import androidx.compose.ui.Modifier
|
|
|
+import androidx.compose.ui.graphics.Color
|
|
|
+import androidx.compose.ui.graphics.RectangleShape
|
|
|
+import androidx.compose.ui.platform.LocalConfiguration
|
|
|
+import androidx.compose.ui.unit.dp
|
|
|
+import androidx.compose.ui.viewinterop.AndroidView
|
|
|
+import androidx.media3.common.AudioAttributes
|
|
|
+import androidx.media3.common.DeviceInfo
|
|
|
+import androidx.media3.common.MediaItem
|
|
|
+import androidx.media3.common.MediaMetadata
|
|
|
+import androidx.media3.common.PlaybackException
|
|
|
+import androidx.media3.common.PlaybackParameters
|
|
|
+import androidx.media3.common.Player
|
|
|
+import androidx.media3.common.Timeline
|
|
|
+import androidx.media3.common.TrackSelectionParameters
|
|
|
+import androidx.media3.common.Tracks
|
|
|
+import androidx.media3.common.VideoSize
|
|
|
+import androidx.media3.common.text.CueGroup
|
|
|
+import androidx.media3.common.util.Size
|
|
|
+import org.mjdev.tvlib.extensions.ComposeExt
|
|
|
+import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
|
|
|
+
|
|
|
+// todo
|
|
|
+@Suppress("unused", "DeprecatedCallableAddReplaceWith")
|
|
|
+@SuppressLint("UnsafeOptInUsageError")
|
|
|
+class NativePlayerImpl(
|
|
|
+ private val mediaPlayer: MediaPlayer
|
|
|
+) : IMediaPlayer {
|
|
|
+
|
|
|
+ @Composable
|
|
|
+ override fun GetPlayerView() {
|
|
|
+ val width = LocalConfiguration.current.screenWidthDp
|
|
|
+ val height = LocalConfiguration.current.screenHeightDp
|
|
|
+ val isEdit = ComposeExt.isEditMode()
|
|
|
+ Box(
|
|
|
+ modifier = Modifier
|
|
|
+ .recomposeHighlighter()
|
|
|
+ .size(width.dp, height.dp)
|
|
|
+ .background(Color.Black, RectangleShape)
|
|
|
+ ) {
|
|
|
+ if (!isEdit) {
|
|
|
+ AndroidView(
|
|
|
+ modifier = Modifier
|
|
|
+ .size(width.dp, height.dp)
|
|
|
+ .recomposeHighlighter(),
|
|
|
+ factory = { context ->
|
|
|
+ SurfaceView(context).apply {
|
|
|
+ mediaPlayer.setDisplay(holder)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaUri(uri: Uri) {
|
|
|
+ mediaPlayer.setDataSource(uri.toString())
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun prepare() {
|
|
|
+ mediaPlayer.prepareAsync()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun play() {
|
|
|
+ mediaPlayer.start()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun pause() {
|
|
|
+ mediaPlayer.pause()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun resume() {
|
|
|
+ mediaPlayer.start()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun stop() {
|
|
|
+ mediaPlayer.stop()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun dispose() {
|
|
|
+ mediaPlayer.release()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekTo(value: Long) {
|
|
|
+ mediaPlayer.seekTo(value.toInt())
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekTo(mediaItemIndex: Int, positionMs: Long) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getApplicationLooper(): Looper {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun addListener(listener: Player.Listener) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun removeListener(listener: Player.Listener) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItems(mediaItems: MutableList<MediaItem>) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItems(mediaItems: MutableList<MediaItem>, resetPosition: Boolean) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItems(
|
|
|
+ mediaItems: MutableList<MediaItem>,
|
|
|
+ startIndex: Int,
|
|
|
+ startPositionMs: Long
|
|
|
+ ) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItem(mediaItem: MediaItem) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItem(mediaItem: MediaItem, startPositionMs: Long) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setMediaItem(mediaItem: MediaItem, resetPosition: Boolean) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun addMediaItem(mediaItem: MediaItem) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun addMediaItem(index: Int, mediaItem: MediaItem) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun addMediaItems(mediaItems: MutableList<MediaItem>) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun addMediaItems(index: Int, mediaItems: MutableList<MediaItem>) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun moveMediaItem(currentIndex: Int, newIndex: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun moveMediaItems(fromIndex: Int, toIndex: Int, newIndex: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun replaceMediaItem(index: Int, mediaItem: MediaItem) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun replaceMediaItems(
|
|
|
+ fromIndex: Int,
|
|
|
+ toIndex: Int,
|
|
|
+ mediaItems: MutableList<MediaItem>
|
|
|
+ ) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun removeMediaItem(index: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun removeMediaItems(fromIndex: Int, toIndex: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearMediaItems() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isCommandAvailable(command: Int): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun canAdvertiseSession(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getAvailableCommands(): Player.Commands {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlaybackState(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlaybackSuppressionReason(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isPlaying(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlayerError(): PlaybackException? {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setPlayWhenReady(playWhenReady: Boolean) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlayWhenReady(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setRepeatMode(repeatMode: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getRepeatMode(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setShuffleModeEnabled(shuffleModeEnabled: Boolean) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getShuffleModeEnabled(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isLoading(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToDefaultPosition() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToDefaultPosition(mediaItemIndex: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getSeekBackIncrement(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekBack() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getSeekForwardIncrement(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekForward() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun hasPrevious(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun hasPreviousWindow(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun hasPreviousMediaItem(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun previous() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun seekToPreviousWindow() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToPreviousMediaItem() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getMaxSeekToPreviousPosition(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToPrevious() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun hasNext(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun hasNextWindow(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun hasNextMediaItem(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun next() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun seekToNextWindow() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToNextMediaItem() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun seekToNext() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setPlaybackParameters(playbackParameters: PlaybackParameters) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setPlaybackSpeed(speed: Float) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlaybackParameters(): PlaybackParameters {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun release() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentTracks(): Tracks {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getTrackSelectionParameters(): TrackSelectionParameters {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setTrackSelectionParameters(parameters: TrackSelectionParameters) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getMediaMetadata(): MediaMetadata {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPlaylistMetadata(): MediaMetadata {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setPlaylistMetadata(mediaMetadata: MediaMetadata) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentManifest(): Any? {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentTimeline(): Timeline {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentPeriodIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun getCurrentWindowIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentMediaItemIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun getNextWindowIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getNextMediaItemIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun getPreviousWindowIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getPreviousMediaItemIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentMediaItem(): MediaItem? {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getMediaItemCount(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getMediaItemAt(index: Int): MediaItem {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getDuration(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentPosition(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getBufferedPosition(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getBufferedPercentage(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getTotalBufferedDuration(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun isCurrentWindowDynamic(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isCurrentMediaItemDynamic(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun isCurrentWindowLive(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isCurrentMediaItemLive(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentLiveOffset(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun isCurrentWindowSeekable(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isCurrentMediaItemSeekable(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isPlayingAd(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentAdGroupIndex(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentAdIndexInAdGroup(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getContentDuration(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getContentPosition(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getContentBufferedPosition(): Long {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getAudioAttributes(): AudioAttributes {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setVolume(volume: Float) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getVolume(): Float {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearVideoSurface() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearVideoSurface(surface: Surface?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setVideoSurface(surface: Surface?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setVideoSurfaceHolder(surfaceHolder: SurfaceHolder?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearVideoSurfaceHolder(surfaceHolder: SurfaceHolder?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setVideoSurfaceView(surfaceView: SurfaceView?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearVideoSurfaceView(surfaceView: SurfaceView?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setVideoTextureView(textureView: TextureView?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clearVideoTextureView(textureView: TextureView?) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getVideoSize(): VideoSize {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getSurfaceSize(): Size {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getCurrentCues(): CueGroup {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getDeviceInfo(): DeviceInfo {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getDeviceVolume(): Int {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun isDeviceMuted(): Boolean {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun setDeviceVolume(volume: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setDeviceVolume(volume: Int, flags: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun increaseDeviceVolume() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun increaseDeviceVolume(flags: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun decreaseDeviceVolume() {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun decreaseDeviceVolume(flags: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ @Deprecated("Deprecated in Java")
|
|
|
+ override fun setDeviceMuted(muted: Boolean) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun setDeviceMuted(muted: Boolean, flags: Int) {
|
|
|
+ TODO("Not yet implemented")
|
|
|
+ }
|
|
|
+
|
|
|
+}
|