From ac442edd4e09a98ccf85cbaedbd5daee42d36e6d Mon Sep 17 00:00:00 2001 From: LagradOst Date: Fri, 11 Jun 2021 15:33:30 +0200 Subject: [PATCH] idk --- .../cloudstream3/ui/ControllerActivity.kt | 2 +- .../cloudstream3/ui/player/PlayerFragment.kt | 58 ++++++++++++++++--- .../cloudstream3/ui/result/ResultViewModel.kt | 5 +- .../cloudstream3/utils/CastOptionsProvider.kt | 8 ++- .../res/drawable/ic_baseline_skip_next_24.xml | 5 ++ .../res/drawable/ic_outline_settings_24.xml | 5 ++ app/src/main/res/layout/fragment_player.xml | 37 +++++++++--- app/src/main/res/menu/bottom_nav_menu.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 9 files changed, 100 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/drawable/ic_baseline_skip_next_24.xml create mode 100644 app/src/main/res/drawable/ic_outline_settings_24.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index c766d79b..cc69cdff 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -70,7 +70,7 @@ class SelectSourceController(val view: ImageView) : UIController() { super.onMediaStatusUpdated() // If there's 1 item it won't show val dataString = remoteMediaClient.mediaQueue.getItemAtIndex(1)?.media?.customData?.get("data") as? String - println("TEXT: " + dataString) + view.visibility = if (dataString != null) VISIBLE else INVISIBLE } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt index 6b08a1e0..637104ab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt @@ -30,6 +30,7 @@ import android.widget.Toast import android.widget.Toast.LENGTH_SHORT import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager @@ -215,7 +216,7 @@ class PlayerFragment : Fragment() { if (ctx.isShowing && !ctx.isLocked && ctx.doubleTapEnabled) { uiScope.launch { - delay(doubleClickQualificationSpanInMillis) + delay(doubleClickQualificationSpanInMillis + 1) check() } } else { @@ -511,8 +512,10 @@ class PlayerFragment : Fragment() { val alphaAnimation = AlphaAnimation(0f, 1f) alphaAnimation.duration = 100 alphaAnimation.fillAfter = true - loading_overlay.startAnimation(alphaAnimation) video_go_back_holder.visibility = VISIBLE + + overlay_loading_skip_button.visibility = VISIBLE + loading_overlay.startAnimation(alphaAnimation) if (this::exoPlayer.isInitialized) { isPlayerPlaying = exoPlayer.playWhenReady playbackPosition = exoPlayer.currentPosition @@ -812,8 +815,20 @@ class PlayerFragment : Fragment() { } } + overlay_loading_skip_button?.alpha = 0.5f observeDirectly(viewModel.allEpisodes) { _allEpisodes -> allEpisodes = _allEpisodes + + val current = getUrls() + if (current != null) { + if (current.isNotEmpty()) { + overlay_loading_skip_button?.alpha = 1f + } else { + overlay_loading_skip_button?.alpha = 0.5f + } + } else { + overlay_loading_skip_button?.alpha = 0.5f + } } observeDirectly(viewModel.resultResponse) { data -> @@ -880,6 +895,13 @@ class PlayerFragment : Fragment() { ffwrd() } + overlay_loading_skip_button.setOnClickListener { + setMirrorId(sortUrls(getUrls() ?: return@setOnClickListener).first() + .getId()) // BECAUSE URLS CANT BE REORDERED + if (!isCurrentlyPlaying) { + initPlayer(getCurrentUrl()) + } + } lock_player.setOnClickListener { isLocked = !isLocked @@ -1105,7 +1127,7 @@ class PlayerFragment : Fragment() { private fun setMirrorId(id: Int) { val copy = playerData.copy(mirrorId = id) playerData = copy - initPlayer() + //initPlayer() } override fun onStart() { @@ -1196,6 +1218,7 @@ class PlayerFragment : Fragment() { @SuppressLint("SetTextI18n") fun initPlayer(currentUrl: ExtractorLink?) { if (currentUrl == null) return + isCurrentlyPlaying = true hasUsedFirstRender = false try { @@ -1268,8 +1291,18 @@ class PlayerFragment : Fragment() { val alphaAnimation = AlphaAnimation(1f, 0f) alphaAnimation.duration = 300 alphaAnimation.fillAfter = true + alphaAnimation.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationStart(animation: Animation?) {} + + override fun onAnimationRepeat(animation: Animation?) {} + + override fun onAnimationEnd(animation: Animation?) { + loading_overlay.post { video_go_back_holder.visibility = GONE; } + } + }) + overlay_loading_skip_button.visibility = GONE + loading_overlay.startAnimation(alphaAnimation) - video_go_back_holder.visibility = GONE exoPlayer.setHandleAudioBecomingNoisy(true) // WHEN HEADPHONES ARE PLUGGED OUT https://github.com/google/ExoPlayer/issues/7288 player_view.player = exoPlayer @@ -1318,7 +1351,7 @@ class PlayerFragment : Fragment() { println("FIRST RENDER") changeSkip() exoPlayer - .createMessage { messageType, payload -> + .createMessage { _, _ -> changeSkip() } .setLooper(Looper.getMainLooper()) @@ -1327,7 +1360,7 @@ class PlayerFragment : Fragment() { .setDeleteAfterDelivery(false) .send() exoPlayer - .createMessage { messageType, payload -> + .createMessage { _, _ -> changeSkip() } .setLooper(Looper.getMainLooper()) @@ -1411,9 +1444,12 @@ class PlayerFragment : Fragment() { //http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 @SuppressLint("SetTextI18n") private fun initPlayer() { - isCurrentlyPlaying = true println("INIT PLAYER") view?.setOnTouchListener { _, _ -> return@setOnTouchListener true } // VERY IMPORTANT https://stackoverflow.com/questions/28818926/prevent-clicking-on-a-button-in-an-activity-while-showing-a-fragment + val tempCurrentUrls = getUrls() + if (tempCurrentUrls != null) { + setMirrorId(sortUrls(tempCurrentUrls).first().getId()) // BECAUSE URLS CANT BE REORDERED + } val tempUrl = getCurrentUrl() println("TEMP:" + tempUrl?.name) if (tempUrl == null) { @@ -1423,9 +1459,13 @@ class PlayerFragment : Fragment() { //if(it is Resource.Success && it.value == true) val currentUrls = getUrls() if (currentUrls != null && currentUrls.isNotEmpty()) { - setMirrorId(sortUrls(currentUrls)[0].getId()) // BECAUSE URLS CANT BE REORDERED + if (!isCurrentlyPlaying) { + setMirrorId(sortUrls(currentUrls).first().getId()) // BECAUSE URLS CANT BE REORDERED + initPlayer(getCurrentUrl()) + } + } else { + Toast.makeText(context, "No Links Found", Toast.LENGTH_SHORT).show() } - initPlayer(getCurrentUrl()) } } } else { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt index ae31da29..e4a95c39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt @@ -120,14 +120,15 @@ class ResultViewModel : ViewModel() { } val links = ArrayList() val localData = safeApiCall { - getApiFromName(_apiName.value).loadLinks(data, isCasting) { //TODO IMPLEMENT CASTING + getApiFromName(_apiName.value).loadLinks(data, isCasting) { for (i in links) { if (i.url == it.url) return@loadLinks } + println("LINK ADDED::::: " + it.url) links.add(it) _allEpisodes.value?.set(id, links) - + _allEpisodes.postValue(_allEpisodes.value) // _allEpisodes.value?.get(episode.id)?.add(it) } links diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt index 9403b74a..32961de4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.utils import android.content.Context import com.google.android.gms.cast.CastMediaControlIntent +import com.google.android.gms.cast.LaunchOptions import com.google.android.gms.cast.framework.CastOptions import com.google.android.gms.cast.framework.OptionsProvider import com.google.android.gms.cast.framework.SessionProvider @@ -13,14 +14,14 @@ import com.lagradost.cloudstream3.ui.ControllerActivity import java.util.* class CastOptionsProvider : OptionsProvider { - override fun getCastOptions(p0: Context?): CastOptions { + override fun getCastOptions(context: Context): CastOptions { val buttonActions = listOf( MediaIntentReceiver.ACTION_REWIND, MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK, MediaIntentReceiver.ACTION_FORWARD, MediaIntentReceiver.ACTION_STOP_CASTING ) - val compatButtonAction = intArrayOf(1,3) + val compatButtonAction = intArrayOf(1, 3) val notificationOptions = NotificationOptions.Builder() .setTargetActivityClassName(ControllerActivity::class.qualifiedName) @@ -36,7 +37,8 @@ class CastOptionsProvider : OptionsProvider { .build() return CastOptions.Builder() - .setReceiverApplicationId( CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID) + .setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID) + //.setReceiverApplicationId("C0868879") // C0868879 = SAMPLE, CHANGE TO A NICE ID at https://developers.google.com/cast/docs/registration .setStopReceiverApplicationWhenEndingSession(true) .setCastMediaOptions(mediaOptions) .build() diff --git a/app/src/main/res/drawable/ic_baseline_skip_next_24.xml b/app/src/main/res/drawable/ic_baseline_skip_next_24.xml new file mode 100644 index 00000000..46804207 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_skip_next_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_settings_24.xml b/app/src/main/res/drawable/ic_outline_settings_24.xml new file mode 100644 index 00000000..e1fe41b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_settings_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_player.xml b/app/src/main/res/layout/fragment_player.xml index 3a137bb5..fdc742b8 100644 --- a/app/src/main/res/layout/fragment_player.xml +++ b/app/src/main/res/layout/fragment_player.xml @@ -3,7 +3,7 @@ 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_height="match_parent" + android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:keepScreenOn="true" app:backgroundTint="@android:color/black" @@ -26,6 +26,8 @@ app:layout_constraintTop_toTopOf="parent" app:controller_layout_id="@layout/player_custom_layout" /> + + + + + + + app:tint="@android:color/white" + > + android:background="@drawable/video_tap_button_always_white"> diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index acd53108..a561df9c 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -17,7 +17,7 @@ android:title="@string/title_downloads"/> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9e1bcf7d..7258f9dd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,4 +21,5 @@ Genres Share Open In Browser + Skip Loading \ No newline at end of file