chore(android): migrate DataSourceUtil to Kotlin (#3984)
* Rename .java to .kt * chore(android): migrate DataSourceUtil to Kotlin * fix: type issue in DataSourceUtil * fix: lint error * chore: refactor DataSourceUtil with object & @JvmStatic * fix: lint error
This commit is contained in:
committed by
GitHub
parent
452e42f1dd
commit
b25e43ee79
@@ -0,0 +1,88 @@
|
||||
package com.brentvatne.exoplayer
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.media3.common.util.Util
|
||||
import androidx.media3.datasource.AssetDataSource
|
||||
import androidx.media3.datasource.DataSource
|
||||
import androidx.media3.datasource.DataSpec
|
||||
import androidx.media3.datasource.DefaultDataSource
|
||||
import androidx.media3.datasource.HttpDataSource
|
||||
import androidx.media3.datasource.okhttp.OkHttpDataSource
|
||||
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter
|
||||
import com.facebook.react.bridge.ReactContext
|
||||
import com.facebook.react.modules.network.CookieJarContainer
|
||||
import com.facebook.react.modules.network.ForwardingCookieHandler
|
||||
import com.facebook.react.modules.network.OkHttpClientProvider
|
||||
import okhttp3.Call
|
||||
import okhttp3.JavaNetCookieJar
|
||||
|
||||
object DataSourceUtil {
|
||||
private var defaultDataSourceFactory: DataSource.Factory? = null
|
||||
private var defaultHttpDataSourceFactory: HttpDataSource.Factory? = null
|
||||
private var userAgent: String? = null
|
||||
|
||||
private fun getUserAgent(context: ReactContext): String {
|
||||
if (userAgent == null) {
|
||||
userAgent = Util.getUserAgent(context, context.packageName)
|
||||
}
|
||||
return userAgent as String
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getDefaultDataSourceFactory(context: ReactContext, bandwidthMeter: DefaultBandwidthMeter?, requestHeaders: Map<String, String>?): DataSource.Factory {
|
||||
if (defaultDataSourceFactory == null || !requestHeaders.isNullOrEmpty()) {
|
||||
defaultDataSourceFactory = buildDataSourceFactory(context, bandwidthMeter, requestHeaders)
|
||||
}
|
||||
return defaultDataSourceFactory as DataSource.Factory
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getDefaultHttpDataSourceFactory(
|
||||
context: ReactContext,
|
||||
bandwidthMeter: DefaultBandwidthMeter?,
|
||||
requestHeaders: Map<String, String>?
|
||||
): HttpDataSource.Factory {
|
||||
if (defaultHttpDataSourceFactory == null || !requestHeaders.isNullOrEmpty()) {
|
||||
defaultHttpDataSourceFactory = buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders)
|
||||
}
|
||||
return defaultHttpDataSourceFactory as HttpDataSource.Factory
|
||||
}
|
||||
|
||||
private fun buildDataSourceFactory(
|
||||
context: ReactContext,
|
||||
bandwidthMeter: DefaultBandwidthMeter?,
|
||||
requestHeaders: Map<String, String>?
|
||||
): DataSource.Factory = DefaultDataSource.Factory(context, buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders))
|
||||
|
||||
private fun buildHttpDataSourceFactory(
|
||||
context: ReactContext,
|
||||
bandwidthMeter: DefaultBandwidthMeter?,
|
||||
requestHeaders: Map<String, String>?
|
||||
): HttpDataSource.Factory {
|
||||
val client = OkHttpClientProvider.getOkHttpClient()
|
||||
val container = client.cookieJar as CookieJarContainer
|
||||
val handler = ForwardingCookieHandler(context)
|
||||
container.setCookieJar(JavaNetCookieJar(handler))
|
||||
val okHttpDataSourceFactory = OkHttpDataSource.Factory(client as Call.Factory)
|
||||
.setTransferListener(bandwidthMeter)
|
||||
|
||||
if (requestHeaders != null) {
|
||||
okHttpDataSourceFactory.setDefaultRequestProperties(requestHeaders)
|
||||
if (!requestHeaders.containsKey("User-Agent")) {
|
||||
okHttpDataSourceFactory.setUserAgent(getUserAgent(context))
|
||||
}
|
||||
} else {
|
||||
okHttpDataSourceFactory.setUserAgent(getUserAgent(context))
|
||||
}
|
||||
|
||||
return okHttpDataSourceFactory
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun buildAssetDataSourceFactory(context: ReactContext?, srcUri: Uri?): DataSource.Factory {
|
||||
val dataSpec = DataSpec(srcUri!!)
|
||||
val rawResourceDataSource = AssetDataSource(context!!)
|
||||
rawResourceDataSource.open(dataSpec)
|
||||
return DataSource.Factory { rawResourceDataSource }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user