diff --git a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/BaseDownloadTest.kt b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/BaseDownloadTest.kt index f821af4d..2bdc1046 100644 --- a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/BaseDownloadTest.kt +++ b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/BaseDownloadTest.kt @@ -19,5 +19,4 @@ abstract class BaseDownloadTest : BaseTest() { @Rule @JvmField var permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE) - } diff --git a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/DownloadHandlerTest.kt b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/DownloadHandlerTest.kt index 4a28f8d5..0b8a0beb 100644 --- a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/DownloadHandlerTest.kt +++ b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/DownloadHandlerTest.kt @@ -92,9 +92,10 @@ abstract class DownloadHandlerTest, // wait for download to start waitWhile({ - status?.state?.equals(DownloadStatus.State.DELETED) != false || - (status?.state?.equals(DownloadStatus.State.PENDING) != true && - status?.state?.equals(DownloadStatus.State.RUNNING) != true) + status?.state?.equals(DownloadStatus.State.DELETED) != false || ( + status?.state?.equals(DownloadStatus.State.PENDING) != true && + status?.state?.equals(DownloadStatus.State.RUNNING) != true + ) }) // test status after start @@ -179,7 +180,7 @@ abstract class DownloadHandlerTest, var downloaded = false downloadHandler.listen(downloadHandler.identify(successfulTestRequest)) { - if(it.state == DownloadStatus.State.DOWNLOADED){ + if (it.state == DownloadStatus.State.DOWNLOADED) { downloaded = true } } @@ -195,7 +196,7 @@ abstract class DownloadHandlerTest, // wait for result waitWhile({ nextCount == null }, 1000) - assertEquals(count!! + 1, nextCount); + assertEquals(count!! + 1, nextCount) } @Test diff --git a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/hlsvideodownload/AbstractHlsVideoDownloadHandlerTest.kt b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/hlsvideodownload/AbstractHlsVideoDownloadHandlerTest.kt index 8414f273..7a48513b 100644 --- a/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/hlsvideodownload/AbstractHlsVideoDownloadHandlerTest.kt +++ b/app/src/androidTest/java/de/xikolo/testing/instrumented/unit/download/hlsvideodownload/AbstractHlsVideoDownloadHandlerTest.kt @@ -18,7 +18,8 @@ abstract class AbstractHlsVideoDownloadHandlerTest : DownloadHandlerTest showEndState() DownloadStatus.State.DELETED -> { showStartState() - if(status.error != null){ + if (status.error != null) { activity.showToast(R.string.error) } } diff --git a/app/src/main/java/de/xikolo/controllers/video/VideoStreamPlayerFragment.kt b/app/src/main/java/de/xikolo/controllers/video/VideoStreamPlayerFragment.kt index f7579760..9edd1e22 100644 --- a/app/src/main/java/de/xikolo/controllers/video/VideoStreamPlayerFragment.kt +++ b/app/src/main/java/de/xikolo/controllers/video/VideoStreamPlayerFragment.kt @@ -602,7 +602,9 @@ open class VideoStreamPlayerFragment : BaseFragment() { } VideoSettingsHelper.PlaybackMode.LOW -> { playerView.setHLSVideoUri(Uri.parse(videoStream.hlsUrl)) - playerView.setDesiredQuality(VideoSettingsHelper.VideoQuality.LOW.qualityFraction) + playerView.setDesiredQuality( + VideoSettingsHelper.VideoQuality.LOW.qualityFraction + ) } VideoSettingsHelper.PlaybackMode.MEDIUM -> { playerView.setHLSVideoUri(Uri.parse(videoStream.hlsUrl)) @@ -612,11 +614,15 @@ open class VideoStreamPlayerFragment : BaseFragment() { } VideoSettingsHelper.PlaybackMode.HIGH -> { playerView.setHLSVideoUri(Uri.parse(videoStream.hlsUrl)) - playerView.setDesiredQuality(VideoSettingsHelper.VideoQuality.HIGH.qualityFraction) + playerView.setDesiredQuality( + VideoSettingsHelper.VideoQuality.HIGH.qualityFraction + ) } VideoSettingsHelper.PlaybackMode.BEST -> { playerView.setHLSVideoUri(Uri.parse(videoStream.hlsUrl)) - playerView.setDesiredQuality(VideoSettingsHelper.VideoQuality.BEST.qualityFraction) + playerView.setDesiredQuality( + VideoSettingsHelper.VideoQuality.BEST.qualityFraction + ) } VideoSettingsHelper.PlaybackMode.LEGACY_HD -> { playerView.setProgressiveVideoUri(Uri.parse(videoStream.hdUrl)) @@ -842,12 +848,7 @@ open class VideoStreamPlayerFragment : BaseFragment() { if (setVideo(videoSettingsHelper.currentMode)) { updateSubtitles() updatePlaybackSpeed() - if (isOfflineVideo) { - // ToDo - /*playerView.uri?.let { - playerView.setPreviewUri(it) - }*/ - } else if (context.isOnline) { + if (!isOfflineVideo && context.isOnline) { if (videoStream.sdUrl != null) { playerView.setPreviewUri(Uri.parse(videoStream.sdUrl)) } else if (videoStream.hdUrl != null) { diff --git a/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadHandler.kt b/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadHandler.kt index 4d1ebded..6f9b602e 100644 --- a/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadHandler.kt +++ b/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadHandler.kt @@ -218,9 +218,11 @@ object HlsVideoDownloadHandler : } val closestBitrate = closestFormat?.bitrate - val estimatedSize = (closestFormat?.averageBitrate - ?.takeUnless { it == Format.NO_VALUE } - ?: closestBitrate) + val estimatedSize = ( + closestFormat?.averageBitrate + ?.takeUnless { it == Format.NO_VALUE } + ?: closestBitrate + ) ?.times(manifest.mediaPlaylist.durationUs) ?.div(8000000) // to bytes and seconds @@ -274,7 +276,8 @@ object HlsVideoDownloadHandler : if (request.storage == context.internalStorage) { Log.i( TAG, - "Starting downloading to internal storage: ${request.url} aka $identifier" + "Starting downloading to internal storage: " + + "${request.url} aka $identifier" ) HlsVideoDownloadInternalStorageForegroundService::class.java } else if (request.storage == context.sdcardStorage && @@ -282,7 +285,8 @@ object HlsVideoDownloadHandler : ) { Log.i( TAG, - "Starting downloading to sdcard storage: ${request.url} aka $identifier" + "Starting downloading to sdcard storage: " + + "${request.url} aka $identifier" ) HlsVideoDownloadSdcardStorageForegroundService::class.java } else { @@ -409,7 +413,8 @@ object HlsVideoDownloadHandler : private fun getDownloadStatus(download: Download?): DownloadStatus { if (download == null) { Log.w( - TAG, "getDownloadStatus(): Download not found, default status is generated: " + + TAG, + "getDownloadStatus(): Download not found, default status is generated: " + "${download?.request?.id}" ) return DownloadStatus(null, null, DownloadStatus.State.DELETED, null) @@ -423,7 +428,9 @@ object HlsVideoDownloadHandler : ?: download.bytesDownloaded * 100 / download.percentDownloaded }.toLong() val state = when (download.state) { - Download.STATE_QUEUED, Download.STATE_RESTARTING, Download.STATE_REMOVING -> DownloadStatus.State.PENDING + Download.STATE_QUEUED, + Download.STATE_RESTARTING, + Download.STATE_REMOVING -> DownloadStatus.State.PENDING Download.STATE_DOWNLOADING -> DownloadStatus.State.RUNNING Download.STATE_COMPLETED -> DownloadStatus.State.DOWNLOADED else -> DownloadStatus.State.DELETED @@ -434,8 +441,9 @@ object HlsVideoDownloadHandler : } else null Log.d( - TAG, "getDownloadStatus(): Generated download status [${state.name}]" + - "${downloaded}/${totalSize} B (error: ${error}) for ${download.request.id}" + TAG, + "getDownloadStatus(): Generated download status [${state.name}]" + + "$downloaded/$totalSize B (error: ${error}) for ${download.request.id}" ) return DownloadStatus(totalSize, downloaded, state, error) } diff --git a/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadItem.kt b/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadItem.kt index 8070d3b3..51a5ff5f 100644 --- a/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadItem.kt +++ b/app/src/main/java/de/xikolo/download/hlsvideodownload/HlsVideoDownloadItem.kt @@ -50,7 +50,8 @@ open class HlsVideoDownloadItem( ) } - private fun getMediaSource(storage: Storage): Pair>? { + private fun getMediaSource(storage: Storage) + : Pair>? { return getIndexEntry(storage)?.let { indexEntry -> HlsMediaSource.Factory( CacheDataSource.Factory() diff --git a/app/src/main/java/de/xikolo/models/Video.kt b/app/src/main/java/de/xikolo/models/Video.kt index a62b8f02..949eec5d 100644 --- a/app/src/main/java/de/xikolo/models/Video.kt +++ b/app/src/main/java/de/xikolo/models/Video.kt @@ -105,13 +105,15 @@ open class Video : RealmObject() { val streamToPlay: VideoStream? get() { return if (singleStream != null && ( - singleStream?.hlsUrl != null || singleStream?.hdUrl != null || + singleStream?.hlsUrl != null || + singleStream?.hdUrl != null || singleStream?.sdUrl != null ) ) { singleStream } else if (lecturerStream != null && ( - lecturerStream?.hlsUrl != null || lecturerStream?.hdUrl != null || + lecturerStream?.hlsUrl != null || + lecturerStream?.hdUrl != null || lecturerStream?.sdUrl != null ) ) { diff --git a/app/src/main/java/de/xikolo/views/ExoPlayerVideoView.kt b/app/src/main/java/de/xikolo/views/ExoPlayerVideoView.kt index bc3353c5..3dc294c0 100644 --- a/app/src/main/java/de/xikolo/views/ExoPlayerVideoView.kt +++ b/app/src/main/java/de/xikolo/views/ExoPlayerVideoView.kt @@ -261,6 +261,8 @@ open class ExoPlayerVideoView : PlayerView { false } } + } finally { + mediaMetadataRetriever?.release() } } previewPrepareThread.start()