Move to media3: buggy!
This commit is contained in:
parent
f08bec487b
commit
f1d43a0cdc
|
@ -110,13 +110,13 @@ dependencies {
|
||||||
implementation 'androidx.core:core-ktx:1.7.0'
|
implementation 'androidx.core:core-ktx:1.7.0'
|
||||||
implementation 'androidx.preference:preference-ktx:1.2.0'
|
implementation 'androidx.preference:preference-ktx:1.2.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
||||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
||||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
||||||
implementation "androidx.browser:browser:1.4.0"
|
implementation "androidx.browser:browser:1.4.0"
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
||||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
||||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
||||||
implementation 'androidx.paging:paging-runtime-ktx:3.1.1'
|
implementation 'androidx.paging:paging-runtime-ktx:3.1.1'
|
||||||
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
|
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
|
||||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
|
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
|
||||||
|
@ -128,12 +128,44 @@ dependencies {
|
||||||
implementation "androidx.activity:activity-ktx:1.4.0"
|
implementation "androidx.activity:activity-ktx:1.4.0"
|
||||||
implementation 'androidx.fragment:fragment-ktx:1.4.1'
|
implementation 'androidx.fragment:fragment-ktx:1.4.1'
|
||||||
implementation 'androidx.work:work-runtime-ktx:2.7.1'
|
implementation 'androidx.work:work-runtime-ktx:2.7.1'
|
||||||
implementation 'androidx.media2:media2-widget:1.2.1'
|
|
||||||
implementation 'androidx.media2:media2-player:1.2.1'
|
|
||||||
|
|
||||||
|
def media3_version = "1.0.0-alpha03"
|
||||||
|
|
||||||
|
// For media playback using ExoPlayer
|
||||||
|
implementation "androidx.media3:media3-exoplayer:$media3_version"
|
||||||
|
|
||||||
|
// For DASH playback support with ExoPlayer
|
||||||
|
implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
|
||||||
|
// For HLS playback support with ExoPlayer
|
||||||
|
implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
|
||||||
|
// For RTSP playback support with ExoPlayer
|
||||||
|
implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
|
||||||
|
|
||||||
|
// For loading data using the OkHttp network stack
|
||||||
|
implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
|
||||||
|
|
||||||
|
// For building media playback UIs
|
||||||
|
implementation "androidx.media3:media3-ui:$media3_version"
|
||||||
|
|
||||||
|
// For exposing and controlling media sessions
|
||||||
|
implementation "androidx.media3:media3-session:$media3_version"
|
||||||
|
|
||||||
|
// For extracting data from media containers
|
||||||
|
implementation "androidx.media3:media3-extractor:$media3_version"
|
||||||
|
|
||||||
|
// For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
|
||||||
|
implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"
|
||||||
|
|
||||||
|
// For transforming media files
|
||||||
|
implementation "androidx.media3:media3-transformer:$media3_version"
|
||||||
|
|
||||||
|
// Common functionality for loading data
|
||||||
|
implementation "androidx.media3:media3-datasource:$media3_version"
|
||||||
|
// Common functionality used across multiple media libraries
|
||||||
|
implementation "androidx.media3:media3-common:$media3_version"
|
||||||
|
|
||||||
// Use the most recent version of CameraX
|
// Use the most recent version of CameraX
|
||||||
def cameraX_version = '1.1.0-beta02'
|
def cameraX_version = '1.1.0-rc01'
|
||||||
implementation "androidx.camera:camera-core:$cameraX_version"
|
implementation "androidx.camera:camera-core:$cameraX_version"
|
||||||
implementation "androidx.camera:camera-camera2:$cameraX_version"
|
implementation "androidx.camera:camera-camera2:$cameraX_version"
|
||||||
// CameraX Lifecycle library
|
// CameraX Lifecycle library
|
||||||
|
@ -154,7 +186,7 @@ dependencies {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
implementation 'com.google.android.material:material:1.5.0'
|
implementation 'com.google.android.material:material:1.6.0'
|
||||||
|
|
||||||
//Dagger (dependency injection)
|
//Dagger (dependency injection)
|
||||||
implementation 'com.google.dagger:dagger-android:2.40.5'
|
implementation 'com.google.dagger:dagger-android:2.40.5'
|
||||||
|
@ -163,7 +195,7 @@ dependencies {
|
||||||
kapt 'com.google.dagger:dagger-android-processor:2.40.5'
|
kapt 'com.google.dagger:dagger-android-processor:2.40.5'
|
||||||
kapt 'com.google.dagger:dagger-compiler:2.40.5'
|
kapt 'com.google.dagger:dagger-compiler:2.40.5'
|
||||||
|
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
|
||||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||||
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
|
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
|
||||||
|
@ -227,7 +259,7 @@ dependencies {
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0'
|
||||||
androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
|
androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
|
||||||
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.9.0'
|
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.9.2'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -303,7 +303,6 @@ class LoginActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalPagingApi::class)
|
|
||||||
private suspend fun storeUser(accessToken: String, refreshToken: String?, clientId: String, clientSecret: String, instance: String) {
|
private suspend fun storeUser(accessToken: String, refreshToken: String?, clientId: String, clientSecret: String, instance: String) {
|
||||||
try {
|
try {
|
||||||
val user = pixelfedAPI.verifyCredentials("Bearer $accessToken")
|
val user = pixelfedAPI.verifyCredentials("Bearer $accessToken")
|
||||||
|
|
|
@ -10,17 +10,21 @@ import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
import androidx.media.AudioAttributesCompat
|
import androidx.media.AudioAttributesCompat
|
||||||
import androidx.media2.common.MediaMetadata
|
import androidx.media3.common.MediaItem
|
||||||
import androidx.media2.common.UriMediaItem
|
import androidx.media3.common.MediaMetadata
|
||||||
import androidx.media2.player.MediaPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
|
import androidx.media3.session.MediaSession
|
||||||
import org.pixeldroid.app.databinding.ActivityMediaviewerBinding
|
import org.pixeldroid.app.databinding.ActivityMediaviewerBinding
|
||||||
import org.pixeldroid.app.utils.BaseActivity
|
import org.pixeldroid.app.utils.BaseActivity
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
class MediaViewerActivity : BaseActivity() {
|
class MediaViewerActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var mediaPlayer: MediaPlayer
|
private lateinit var mediaPlayer: ExoPlayer
|
||||||
|
private lateinit var session: MediaSession
|
||||||
private lateinit var binding: ActivityMediaviewerBinding
|
private lateinit var binding: ActivityMediaviewerBinding
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val VIDEO_URL_TAG = "video_url_mediavieweractivity"
|
const val VIDEO_URL_TAG = "video_url_mediavieweractivity"
|
||||||
const val VIDEO_DESCRIPTION_TAG = "video_description_mediavieweractivity"
|
const val VIDEO_DESCRIPTION_TAG = "video_description_mediavieweractivity"
|
||||||
|
@ -41,15 +45,14 @@ class MediaViewerActivity : BaseActivity() {
|
||||||
val uri: String = intent.getStringExtra(VIDEO_URL_TAG).orEmpty()
|
val uri: String = intent.getStringExtra(VIDEO_URL_TAG).orEmpty()
|
||||||
val description: String? = intent.getStringExtra(VIDEO_DESCRIPTION_TAG)
|
val description: String? = intent.getStringExtra(VIDEO_DESCRIPTION_TAG)
|
||||||
|
|
||||||
val mediaItem: UriMediaItem = UriMediaItem.Builder(uri.toUri()).build()
|
val mediaItem: MediaItem = MediaItem.Builder().setUri(uri)
|
||||||
mediaItem.metadata = MediaMetadata.Builder()
|
.setMediaMetadata(MediaMetadata.Builder().setTitle(description).build()).build()
|
||||||
.putString(MediaMetadata.METADATA_KEY_TITLE, description ?: "")
|
|
||||||
.build()
|
mediaPlayer = ExoPlayer.Builder(this).build()
|
||||||
|
|
||||||
mediaPlayer = MediaPlayer(this)
|
|
||||||
mediaPlayer.setMediaItem(mediaItem)
|
mediaPlayer.setMediaItem(mediaItem)
|
||||||
|
|
||||||
binding.videoView.mediaControlView?.setOnFullScreenListener{ view, fullscreen ->
|
binding.videoView.setControllerOnFullScreenModeChangedListener { fullscreen ->
|
||||||
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView)
|
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView)
|
||||||
if (!fullscreen) {
|
if (!fullscreen) {
|
||||||
// Configure the behavior of the hidden system bars
|
// Configure the behavior of the hidden system bars
|
||||||
|
@ -74,17 +77,9 @@ class MediaViewerActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure audio
|
|
||||||
mediaPlayer.setAudioAttributes(AudioAttributesCompat.Builder()
|
|
||||||
.setLegacyStreamType(STREAM_MUSIC)
|
|
||||||
.setUsage(AudioAttributesCompat.USAGE_MEDIA)
|
|
||||||
.setContentType(AudioAttributesCompat.CONTENT_TYPE_MOVIE)
|
|
||||||
.build()
|
|
||||||
)
|
|
||||||
|
|
||||||
mediaPlayer.prepare()
|
mediaPlayer.prepare()
|
||||||
|
|
||||||
binding.videoView.setPlayer(mediaPlayer)
|
binding.videoView.player = mediaPlayer
|
||||||
|
|
||||||
// Start actually playing the video
|
// Start actually playing the video
|
||||||
mediaPlayer.play()
|
mediaPlayer.play()
|
||||||
|
@ -93,10 +88,21 @@ class MediaViewerActivity : BaseActivity() {
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
mediaPlayer.pause()
|
mediaPlayer.pause()
|
||||||
|
binding.videoView.onPause()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onResume() {
|
||||||
super.onDestroy()
|
super.onResume()
|
||||||
mediaPlayer.close()
|
binding.videoView.onResume()
|
||||||
|
mediaPlayer.play()
|
||||||
|
}
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
binding.videoView.player = null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
binding.videoView.player = mediaPlayer
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,12 +1,15 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.media2.widget.VideoView
|
<androidx.media3.ui.PlayerView
|
||||||
android:id="@+id/videoView"
|
android:id="@+id/videoView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="#000000" />
|
android:background="#000000"
|
||||||
|
app:use_artwork="true" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,13 +1,13 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.10'
|
ext.kotlin_version = '1.6.21'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#Sat Sep 18 21:24:34 CEST 2021
|
#Mon May 16 20:35:20 CEST 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
distributionSha256Sum=f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd
|
distributionSha256Sum=29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda
|
||||||
|
|
Loading…
Reference in New Issue