From 69657b63d2dfb79d0a6ac2c6839beaaa0f6559a3 Mon Sep 17 00:00:00 2001 From: LagradOst Date: Sun, 6 Jun 2021 20:06:01 +0200 Subject: [PATCH] UI and chromecast stuff --- app/build.gradle | 8 +- app/src/main/AndroidManifest.xml | 3 + app/src/main/ic_launcher-playstore.png | Bin 0 -> 8775 bytes .../com/lagradost/cloudstream3/UIHelper.kt | 118 +++++++++++++++++- .../animeproviders/ShiroProvider.kt | 6 +- .../cloudstream3/ui/ControllerActivity.kt | 113 +++++++++++++++++ .../cloudstream3/ui/player/PlayerFragment.kt | 98 ++++++++++++--- .../cloudstream3/ui/result/EpisodeAdapter.kt | 27 ++-- .../cloudstream3/ui/result/ResultFragment.kt | 98 ++++++++++----- .../cloudstream3/ui/search/SearchAdaptor.kt | 11 +- .../cloudstream3/ui/search/SearchFragment.kt | 21 +++- .../cloudstream3/ui/search/SearchViewModel.kt | 2 +- .../cloudstream3/utils/CastOptionsProvider.kt | 47 +++++++ .../utils/extractors/Vidstream.kt | 11 +- .../cloudstream3/widget/FlowLayout.kt | 98 +++++++++++++++ app/src/main/res/anim/.idea/.gitignore | 3 + app/src/main/res/anim/.idea/misc.xml | 6 + app/src/main/res/anim/.idea/modules.xml | 8 ++ app/src/main/res/anim/.idea/vcs.xml | 6 + .../drawable-v24/ic_launcher_foreground.xml | 31 ----- app/src/main/res/drawable/cs3_cloud.xml | 15 +++ app/src/main/res/drawable/go_back_30.xml | 19 +++ app/src/main/res/drawable/go_forward_30.xml | 19 +++ .../drawable/ic_baseline_arrow_back_24.xml | 2 +- .../drawable/ic_baseline_aspect_ratio_24.xml | 2 +- .../res/drawable/ic_baseline_bookmark_24.xml | 2 +- .../drawable/ic_baseline_brightness_7_24.xml | 2 +- .../res/drawable/ic_baseline_more_vert_24.xml | 2 +- .../drawable/ic_baseline_play_arrow_24.xml | 2 +- .../drawable/ic_baseline_playlist_play_24.xml | 2 +- .../res/drawable/ic_baseline_speed_24.xml | 2 +- .../main/res/drawable/ic_baseline_star_24.xml | 2 +- .../res/drawable/ic_baseline_subtitles_24.xml | 2 +- .../main/res/drawable/ic_baseline_tune_24.xml | 2 +- .../res/drawable/ic_baseline_volume_up_24.xml | 2 +- .../res/drawable/ic_launcher_foreground.xml | 19 +++ .../main/res/drawable/netflix_download.xml | 2 +- app/src/main/res/drawable/netflix_play.xml | 2 +- app/src/main/res/drawable/search_icon.xml | 4 +- app/src/main/res/layout/fragment_player.xml | 1 - app/src/main/res/layout/fragment_result.xml | 117 +++++++++++++---- app/src/main/res/layout/fragment_search.xml | 2 +- .../main/res/layout/player_custom_layout.xml | 7 +- app/src/main/res/layout/result_episode.xml | 9 +- app/src/main/res/layout/result_tag.xml | 28 +++++ .../main/res/layout/search_result_compact.xml | 8 +- .../layout/search_result_super_compact.xml | 6 +- .../menu/cast_expanded_controller_menu.xml | 9 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3593 -> 1364 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5339 -> 3287 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2636 -> 981 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3388 -> 2076 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4926 -> 1849 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7472 -> 4692 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7909 -> 2871 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 11873 -> 7365 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 10652 -> 3903 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 16570 -> 10616 bytes app/src/main/res/values/attrs.xml | 22 ++++ app/src/main/res/values/colors.xml | 11 +- .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/styles.xml | 11 ++ 65 files changed, 876 insertions(+), 185 deletions(-) create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt create mode 100644 app/src/main/res/anim/.idea/.gitignore create mode 100644 app/src/main/res/anim/.idea/misc.xml create mode 100644 app/src/main/res/anim/.idea/modules.xml create mode 100644 app/src/main/res/anim/.idea/vcs.xml delete mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/cs3_cloud.xml create mode 100644 app/src/main/res/drawable/go_back_30.xml create mode 100644 app/src/main/res/drawable/go_forward_30.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/layout/result_tag.xml create mode 100644 app/src/main/res/menu/cast_expanded_controller_menu.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml diff --git a/app/build.gradle b/app/build.gradle index 9ffbc147..cad0a6f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,8 +43,8 @@ repositories { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.3.2' - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.core:core-ktx:1.5.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' @@ -68,11 +68,11 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'jp.wasabeef:glide-transformations:4.0.0' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' // Exoplayer implementation 'com.google.android.exoplayer:exoplayer:2.14.0' implementation 'com.google.android.exoplayer:extension-cast:2.14.0' implementation "com.google.android.exoplayer:extension-mediasession:2.14.0" - implementation "com.google.android.exoplayer:extension-leanback:2.14.0" + //implementation "com.google.android.exoplayer:extension-leanback:2.14.0" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0318a76c..c62789a7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,9 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + VGF|2u-JkpEq~e6EX_p%(67#f~em(FDsoG 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 0) { @@ -56,6 +62,15 @@ object UIHelper { return result } + fun Context.getNavigationBarHeight(): Int { + var result = 0 + val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") + if (resourceId > 0) { + result = resources.getDimensionPixelSize(resourceId) + } + return result + } + fun Activity.fixPaddingStatusbar(v: View) { v.setPadding(v.paddingLeft, v.paddingTop + getStatusBarHeight(), v.paddingRight, v.paddingBottom) } @@ -97,7 +112,7 @@ object UIHelper { var onAudioFocusEvent = Event() fun getAudioListener(): AudioManager.OnAudioFocusChangeListener? { - if(_OnAudioFocusChangeListener != null) return _OnAudioFocusChangeListener + if (_OnAudioFocusChangeListener != null) return _OnAudioFocusChangeListener _OnAudioFocusChangeListener = AudioManager.OnAudioFocusChangeListener { onAudioFocusEvent.invoke( when (it) { @@ -111,6 +126,20 @@ object UIHelper { return _OnAudioFocusChangeListener } + fun Context.isCastApiAvailable(): Boolean { + val isCastApiAvailable = + GoogleApiAvailability.getInstance() + .isGooglePlayServicesAvailable(applicationContext) == ConnectionResult.SUCCESS + try { + applicationContext?.let { CastContext.getSharedInstance(it) } + } catch (e: Exception) { + println(e) + // track non-fatal + return false + } + return isCastApiAvailable + } + fun getFocusRequest(): AudioFocusRequest? { if (_AudioFocusRequest != null) return _AudioFocusRequest return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -130,4 +159,89 @@ object UIHelper { null } } + + fun Activity.hideSystemUI() { + // Enables regular immersive mode. + // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE. + // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY + window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + // Set the content to appear under the system bars so that the + // content doesn't resize when the system bars hide and show. + or View.SYSTEM_UI_FLAG_LAYOUT_STABLE + or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + // Hide the nav bar and status bar + or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_FULLSCREEN + // or View.SYSTEM_UI_FLAG_LOW_PROFILE + ) + // window.addFlags(View.KEEP_SCREEN_ON) + } + + fun FragmentActivity.popCurrentPage(isInPlayer: Boolean, isInExpandedView: Boolean, isInResults: Boolean) { + val currentFragment = supportFragmentManager.fragments.lastOrNull { + it.isVisible + } + ?: //this.onBackPressed() + return + +/* + if (tvActivity == null) { + requestedOrientation = if (settingsManager?.getBoolean("force_landscape", false) == true) { + ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE + } else { + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + } + }*/ + + // No fucked animations leaving the player :) + when { + isInPlayer -> { + supportFragmentManager.beginTransaction() + //.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit) + .remove(currentFragment) + .commitAllowingStateLoss() + } + isInExpandedView && !isInResults -> { + supportFragmentManager.beginTransaction() + .setCustomAnimations( + R.anim.enter_anim,//R.anim.enter_from_right, + R.anim.exit_anim,//R.anim.exit_to_right, + R.anim.pop_enter, + R.anim.pop_exit + ) + .remove(currentFragment) + .commitAllowingStateLoss() + } + else -> { + supportFragmentManager.beginTransaction() + .setCustomAnimations(R.anim.enter_anim, R.anim.exit_anim, R.anim.pop_enter, R.anim.pop_exit) + .remove(currentFragment) + .commitAllowingStateLoss() + } + } + } + + + fun Activity.changeStatusBarState(hide: Boolean): Int { + return if (hide) { + window?.setFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN + ) + 0 + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + this.getStatusBarHeight() + } + } + + // Shows the system bars by removing all the flags + // except for the ones that make the content appear under the system bars. + fun Activity.showSystemUI() { + window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE + or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) + // window.clearFlags(View.KEEP_SCREEN_ON) + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt index b8a4c662..900b14e0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt @@ -24,12 +24,12 @@ class ShiroProvider : MainAPI() { } } - fun autoLoadToken(): Boolean { + private fun autoLoadToken(): Boolean { if (token != null) return true return loadToken() } - fun loadToken(): Boolean { + private fun loadToken(): Boolean { return try { val response = khttp.get(mainUrl, headers = baseHeader) @@ -188,7 +188,7 @@ class ShiroProvider : MainAPI() { return AnimeLoadResponse( data.english, data.japanese, - data.canonicalTitle ?: data.name.replace("Dubbed", ""), + data.name.replace("Dubbed", ""),//data.canonicalTitle ?: data.name.replace("Dubbed", ""), "$mainUrl/${slug}", this.name, getType(data.type ?: ""), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt new file mode 100644 index 00000000..23f04b0c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -0,0 +1,113 @@ +package com.lagradost.cloudstream3.ui + +import android.os.Bundle +import android.view.Menu +import android.view.View.INVISIBLE +import android.view.View.VISIBLE +import android.widget.ImageView +import androidx.appcompat.app.AlertDialog +import com.google.android.gms.cast.MediaStatus.REPEAT_MODE_REPEAT_SINGLE +import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.gms.cast.framework.CastSession +import com.google.android.gms.cast.framework.media.uicontroller.UIController +import com.google.android.gms.cast.framework.media.widget.ExpandedControllerActivity +import com.lagradost.cloudstream3.R + +import org.json.JSONObject + +class SkipOpController(val view: ImageView) : UIController() { + init { + view.setImageResource(R.drawable.exo_controls_fastforward) + view.setOnClickListener { + remoteMediaClient.seek(remoteMediaClient.approximateStreamPosition + 85000) + } + } +} + +class SelectSourceController(val view: ImageView) : UIController() { + + init { + view.setImageResource(R.drawable.ic_baseline_playlist_play_24) + view.setOnClickListener { + //remoteMediaClient.mediaQueue.itemCount + //println(remoteMediaClient.mediaInfo.customData) + //remoteMediaClient.queueJumpToItem() + lateinit var dialog: AlertDialog + val items = mutableListOf>() + for (i in 0 until remoteMediaClient.mediaQueue.itemCount) { + (remoteMediaClient.mediaQueue.getItemAtIndex(i)?.media?.customData?.get("data") as? String)?.let { name -> + items.add( + remoteMediaClient.mediaQueue.getItemAtIndex(i)!!.itemId to name + ) + } + } + + // TODO FIX + if (items.isNotEmpty()) { + val builder = AlertDialog.Builder(view.context, R.style.AlertDialogCustom) + builder.setTitle("Pick source") + + builder.setSingleChoiceItems( + items.map { it.second }.toTypedArray(), + remoteMediaClient.currentItem.itemId - 1 + ) { _, which -> + println( + remoteMediaClient.queueJumpToItem( + items[which].first, + remoteMediaClient.approximateStreamPosition, + null + ) + ) + dialog.dismiss() + } + dialog = builder.create() + dialog.show() + } + } + } + + override fun onMediaStatusUpdated() { + super.onMediaStatusUpdated() + // If there's 1 item it won't show + val dataString = remoteMediaClient.mediaQueue.getItemAtIndex(1)?.media?.customData?.get("data") as? String + view.visibility = if (dataString != null) VISIBLE else INVISIBLE + } + + override fun onSessionConnected(castSession: CastSession?) { + super.onSessionConnected(castSession) + remoteMediaClient.queueSetRepeatMode(REPEAT_MODE_REPEAT_SINGLE, JSONObject()) + } +} + +class SkipTimeController(val view: ImageView, forwards: Boolean) : UIController() { + init { + //val settingsManager = PreferenceManager.getDefaultSharedPreferences() + //val time = settingsManager?.getInt("chromecast_tap_time", 30) ?: 30 + val time = 30 + view.setImageResource(if (forwards) R.drawable.netflix_skip_forward else R.drawable.netflix_skip_back) + view.setOnClickListener { + remoteMediaClient.seek(remoteMediaClient.approximateStreamPosition + time * 1000 * if (forwards) 1 else -1) + } + } +} + +class ControllerActivity : ExpandedControllerActivity() { + override fun onCreateOptionsMenu(menu: Menu): Boolean { + super.onCreateOptionsMenu(menu) + menuInflater.inflate(R.menu.cast_expanded_controller_menu, menu) + CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.media_route_menu_item) + return true + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val sourcesButton: ImageView = getButtonImageViewAt(0) + val skipBackButton: ImageView = getButtonImageViewAt(1) + val skipForwardButton: ImageView = getButtonImageViewAt(2) + val skipOpButton: ImageView = getButtonImageViewAt(3) + uiMediaController.bindViewToUIController(sourcesButton, SelectSourceController(sourcesButton)) + uiMediaController.bindViewToUIController(skipBackButton, SkipTimeController(skipBackButton, false)) + uiMediaController.bindViewToUIController(skipForwardButton, SkipTimeController(skipForwardButton, true)) + uiMediaController.bindViewToUIController(skipOpButton, SkipOpController(skipOpButton)) + } +} \ No newline at end of file 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 44ab4832..9804abdc 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 @@ -12,6 +12,7 @@ import android.graphics.Color import android.media.AudioManager import android.net.Uri import android.os.* +import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.MotionEvent import android.view.View @@ -20,7 +21,7 @@ import android.view.ViewGroup import android.view.animation.* import android.widget.ProgressBar import android.widget.Toast -import android.widget.Toast.LENGTH_LONG +import android.widget.Toast.LENGTH_SHORT import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment @@ -33,6 +34,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.KotlinModule import com.google.android.exoplayer2.* +import com.google.android.exoplayer2.C.TIME_UNSET import com.google.android.exoplayer2.source.DefaultMediaSourceFactory import com.google.android.exoplayer2.trackselection.DefaultTrackSelector import com.google.android.exoplayer2.ui.AspectRatioFrameLayout @@ -43,7 +45,12 @@ import com.google.android.exoplayer2.util.MimeTypes import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.UIHelper.getFocusRequest +import com.lagradost.cloudstream3.UIHelper.getNavigationBarHeight +import com.lagradost.cloudstream3.UIHelper.getStatusBarHeight +import com.lagradost.cloudstream3.UIHelper.hideSystemUI +import com.lagradost.cloudstream3.UIHelper.popCurrentPage import com.lagradost.cloudstream3.UIHelper.requestLocalAudioFocus +import com.lagradost.cloudstream3.UIHelper.showSystemUI import com.lagradost.cloudstream3.UIHelper.toPx import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observeDirectly @@ -64,6 +71,7 @@ import javax.net.ssl.SSLSession import kotlin.concurrent.thread import kotlin.math.abs import kotlin.math.ceil +import kotlin.properties.Delegates //http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 @@ -123,11 +131,13 @@ class PlayerFragment : Fragment() { //private var currentPercentage = 0 // private var hasNextEpisode = true - val formatBuilder = StringBuilder() - val formatter = Formatter(formatBuilder, Locale.getDefault()) + // val formatBuilder = StringBuilder() + // val formatter = Formatter(formatBuilder, Locale.getDefault()) private var width = Resources.getSystem().displayMetrics.heightPixels private var height = Resources.getSystem().displayMetrics.widthPixels + private var statusBarHeight by Delegates.notNull() + private var navigationBarHeight by Delegates.notNull() private var isLocked = false @@ -271,27 +281,38 @@ class PlayerFragment : Fragment() { private val swipeVerticalEnabled = true//settingsManager.getBoolean("swipe_vertical_enabled", true) private val playBackSpeedEnabled = true//settingsManager!!.getBoolean("playback_speed_enabled", false) private val playerResizeEnabled = true//settingsManager!!.getBoolean("player_resize_enabled", false) + private val swipeEdgeSize = 10.toPx private var isMovingStartTime = 0L private var currentX = 0F private var currentY = 0F private var cachedVolume = 0f + private var isValidTouch = false fun handleMotionEvent(motionEvent: MotionEvent) { // TIME_UNSET == -9223372036854775807L // No swiping on unloaded // https://exoplayer.dev/doc/reference/constant-values.html - if (isLocked || exoPlayer.duration == -9223372036854775807L || (!swipeEnabled && !swipeVerticalEnabled)) return + if (isLocked || exoPlayer.duration == TIME_UNSET || (!swipeEnabled && !swipeVerticalEnabled)) return + + val audioManager = activity?.getSystemService(AUDIO_SERVICE) as? AudioManager when (motionEvent.action) { MotionEvent.ACTION_DOWN -> { - currentX = motionEvent.rawX - currentY = motionEvent.rawY - //println("DOWN: " + currentX) - isMovingStartTime = exoPlayer.currentPosition + // SO YOU CAN PULL DOWN STATUSBAR OR NAVBAR + if (motionEvent.rawY > statusBarHeight && motionEvent.rawX < width - navigationBarHeight) { + currentX = motionEvent.rawX + currentY = motionEvent.rawY + isValidTouch = true + //println("DOWN: " + currentX) + isMovingStartTime = exoPlayer.currentPosition + } else { + isValidTouch = false + } } MotionEvent.ACTION_MOVE -> { + if (!isValidTouch) return if (swipeVerticalEnabled) { val distanceMultiplierY = 2F val distanceY = (motionEvent.rawY - currentY) * distanceMultiplierY @@ -382,6 +403,7 @@ class PlayerFragment : Fragment() { } } MotionEvent.ACTION_UP -> { + if (!isValidTouch) return val transition: Transition = Fade() transition.duration = 1000 @@ -417,7 +439,9 @@ class PlayerFragment : Fragment() { } fun changeSkip(position: Long? = null) { - if (exoPlayer.currentPosition >= 0) { + val data = localData + + if (this::exoPlayer.isInitialized && exoPlayer.currentPosition >= 0) { val percentage = ((position ?: exoPlayer.currentPosition) * 100 / exoPlayer.contentDuration).toInt() val hasNext = hasNextEpisode() @@ -433,13 +457,17 @@ class PlayerFragment : Fragment() { } val nextEp = percentage >= OPENING_PROCENTAGE - val data = localData - skip_op_text.text = if (nextEp) "Next Episode" else "Skip OP" val isVis = if (nextEp) hasNext //&& !isCurrentlySkippingEp else (data is AnimeLoadResponse && (data.type == TvType.Anime || data.type == TvType.ONA)) skip_op.visibility = if (isVis) View.VISIBLE else View.GONE + } else { + if(data is AnimeLoadResponse) { + val isVis = ((data.type == TvType.Anime || data.type == TvType.ONA)) + skip_op_text.text = "Skip OP" + skip_op.visibility = if (isVis) View.VISIBLE else View.GONE + } } } @@ -557,6 +585,9 @@ class PlayerFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + navigationBarHeight = requireContext().getNavigationBarHeight() + statusBarHeight = requireContext().getStatusBarHeight() + if (savedInstanceState != null) { currentWindow = savedInstanceState.getInt(STATE_RESUME_WINDOW) playbackPosition = savedInstanceState.getLong(STATE_RESUME_POSITION) @@ -711,7 +742,7 @@ class PlayerFragment : Fragment() { override fun onSingleClick() { onClickChange() - // activity?.hideSystemUI() + activity?.hideSystemUI() } override fun onMotionEvent(event: MotionEvent) { @@ -727,6 +758,14 @@ class PlayerFragment : Fragment() { Listener() ) + video_go_back.setOnClickListener { + activity?.popCurrentPage(isInPlayer = true, isInExpandedView = false, isInResults = false) + } + video_go_back_holder.setOnClickListener { + println("video_go_back_pressed") + activity?.popCurrentPage(isInPlayer = true, isInExpandedView = false, isInResults = false) + } + playback_speed_btt.visibility = if (playBackSpeedEnabled) VISIBLE else GONE playback_speed_btt.setOnClickListener { lateinit var dialog: AlertDialog @@ -799,6 +838,8 @@ class PlayerFragment : Fragment() { skipOP() } } + + changeSkip() } private fun getCurrentUrl(): ExtractorLink? { @@ -844,6 +885,24 @@ class PlayerFragment : Fragment() { private var isCurrentlySkippingEp = false + + fun tryNextMirror() { + val urls = getUrls() + val current = getCurrentUrl() + if (urls != null && current != null) { + val id = current.getId() + val sorted = sortUrls(urls) + for ((i, item) in sorted.withIndex()) { + if (item.getId() == id) { + if (sorted.size > i + 1) { + setMirrorId(sorted[i + 1].getId()) + initPlayer() + } + } + } + } + } + private fun skipToNextEpisode() { if (isCurrentlySkippingEp) return isCurrentlySkippingEp = true @@ -868,6 +927,7 @@ class PlayerFragment : Fragment() { override fun onResume() { super.onResume() + activity?.hideSystemUI() activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE thread { initPlayer() @@ -878,6 +938,8 @@ class PlayerFragment : Fragment() { override fun onDestroy() { super.onDestroy() // releasePlayer() + + activity?.showSystemUI() activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER } @@ -1084,11 +1146,12 @@ class PlayerFragment : Fragment() { override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { // updatePIPModeActions() + if(activity == null) return if (playWhenReady) { when (playbackState) { Player.STATE_READY -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - requireActivity().requestLocalAudioFocus(getFocusRequest()) + activity?.requestLocalAudioFocus(getFocusRequest()) } } Player.STATE_ENDED -> { @@ -1113,20 +1176,21 @@ class PlayerFragment : Fragment() { Toast.makeText( activity, "Source error\n" + error.sourceException.message, - LENGTH_LONG + LENGTH_SHORT ) .show() + tryNextMirror() } } ExoPlaybackException.TYPE_REMOTE -> { - Toast.makeText(activity, "Remote error", LENGTH_LONG) + Toast.makeText(activity, "Remote error", LENGTH_SHORT) .show() } ExoPlaybackException.TYPE_RENDERER -> { Toast.makeText( activity, "Renderer error\n" + error.rendererException.message, - LENGTH_LONG + LENGTH_SHORT ) .show() } @@ -1134,7 +1198,7 @@ class PlayerFragment : Fragment() { Toast.makeText( activity, "Unexpected player error\n" + error.unexpectedException.message, - LENGTH_LONG + LENGTH_SHORT ).show() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 03dd26d1..7f6a1dde 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -9,8 +9,6 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.APIHolder.getApiFromName -import com.lagradost.cloudstream3.utils.ExtractorLink import kotlinx.android.synthetic.main.result_episode.view.* const val ACTION_PLAY_EPISODE = 1 @@ -50,20 +48,19 @@ class EpisodeAdapter( class CardViewHolder constructor( itemView: View, - _activity: Activity, + val activity: Activity, resView: RecyclerView, - clickCallback: (EpisodeClickEvent) -> Unit, + private val clickCallback: (EpisodeClickEvent) -> Unit, ) : RecyclerView.ViewHolder(itemView) { - val activity = _activity - val episode_view_procentage: View = itemView.episode_view_procentage - val episode_view_procentage_off: View = itemView.episode_view_procentage_off - val episode_text: TextView = itemView.episode_text - val episode_extra: ImageView = itemView.episode_extra - val episode_play: ImageView = itemView.episode_play - val clickCallback = clickCallback + private val episodeViewPrecentage: View = itemView.episode_view_procentage + private val episodeViewPercentageOff: View = itemView.episode_view_procentage_off + private val episodeText: TextView = itemView.episode_text + val episodeExtra: ImageView = itemView.episode_extra + private val episodePlay: ImageView = itemView.episode_play + private val episodeHolder = itemView.episode_holder fun bind(card: ResultEpisode) { - episode_text.text = card.name ?: "Episode ${card.episode}" + episodeText.text = card.name ?: "Episode ${card.episode}" fun setWidth(v: View, procentage: Float) { val param = LinearLayout.LayoutParams( @@ -73,10 +70,10 @@ class EpisodeAdapter( ) v.layoutParams = param } - setWidth(episode_view_procentage, card.watchProgress) - setWidth(episode_view_procentage_off, 1 - card.watchProgress) + setWidth(episodeViewPrecentage, card.watchProgress) + setWidth(episodeViewPercentageOff, 1 - card.watchProgress) - episode_play.setOnClickListener { + episodeHolder.setOnClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_PLAY_EPISODE, card)) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index cd107b68..b5a5eee2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -1,35 +1,33 @@ package com.lagradost.cloudstream3.ui.result -import android.Manifest import android.annotation.SuppressLint -import android.app.Activity -import android.content.ComponentName -import android.content.Intent -import android.content.Intent.* -import android.content.pm.PackageManager import android.os.Bundle import android.view.LayoutInflater import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import androidx.core.content.FileProvider -import androidx.core.net.toUri import androidx.core.widget.NestedScrollView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.mediarouter.app.MediaRouteButton import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.model.GlideUrl import com.bumptech.glide.request.RequestOptions.bitmapTransform -import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.UIHelper.checkWrite +import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.gms.cast.framework.CastContext +import com.google.android.gms.cast.framework.CastState +import com.google.android.material.button.MaterialButton +import com.lagradost.cloudstream3.AnimeLoadResponse +import com.lagradost.cloudstream3.LoadResponse +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ShowStatus import com.lagradost.cloudstream3.UIHelper.fixPaddingStatusbar -import com.lagradost.cloudstream3.UIHelper.loadResult -import com.lagradost.cloudstream3.UIHelper.requestRW +import com.lagradost.cloudstream3.UIHelper.isCastApiAvailable import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.player.PlayerData @@ -37,10 +35,8 @@ import com.lagradost.cloudstream3.ui.player.PlayerFragment import com.lagradost.cloudstream3.utils.ExtractorLink import jp.wasabeef.glide.transformations.BlurTransformation import kotlinx.android.synthetic.main.fragment_result.* -import java.io.File - -const val MAX_SYNO_LENGH = 600 +const val MAX_SYNO_LENGH = 300 data class ResultEpisode( val name: String?, @@ -89,17 +85,34 @@ class ResultFragment : Fragment() { super.onViewCreated(view, savedInstanceState) activity?.fixPaddingStatusbar(result_scroll) activity?.fixPaddingStatusbar(result_barstatus) + + if (activity?.isCastApiAvailable() == true) { + val mMediaRouteButton = view.findViewById(R.id.media_route_button) + + CastButtonFactory.setUpMediaRouteButton(activity, media_route_button) + val castContext = CastContext.getSharedInstance(requireActivity().applicationContext) + + if (castContext.castState != CastState.NO_DEVICES_AVAILABLE) media_route_button.visibility = VISIBLE + castContext.addCastStateListener { state -> + if (media_route_button != null) { + if (state == CastState.NO_DEVICES_AVAILABLE) media_route_button.visibility = GONE else { + if (media_route_button.visibility == GONE) media_route_button.visibility = VISIBLE + } + } + } + } // activity?.fixPaddingStatusbar(result_toolbar) val url = arguments?.getString("url") val slug = arguments?.getString("slug") val apiName = arguments?.getString("apiName") - result_scroll.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY -> + result_scroll.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, _ -> if (result_poster_blur == null) return@OnScrollChangeListener - result_poster_blur.alpha = maxOf(0f, (0.3f - scrollY / 1000f)) - result_barstatus.alpha = scrollY / 200f - result_barstatus.visibility = if (scrollY > 0) View.VISIBLE else View.GONE + result_poster_blur.alpha = maxOf(0f, (0.7f - scrollY / 1000f)) + result_poster_blur_holder.translationY = -scrollY.toFloat() + //result_barstatus.alpha = scrollY / 200f + //result_barstatus.visibility = if (scrollY > 0) View.VISIBLE else View.GONEĀ§ }) result_toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) @@ -159,6 +172,7 @@ class ResultFragment : Fragment() { observe(viewModel.episodes) { episodes -> if (result_episodes == null || result_episodes.adapter == null) return@observe + result_episodes_text.text = "${episodes.size} Episode${if (episodes.size == 1) "" else "s"}" (result_episodes.adapter as EpisodeAdapter).cardList = episodes (result_episodes.adapter as EpisodeAdapter).notifyDataSetChanged() } @@ -180,15 +194,15 @@ class ResultFragment : Fragment() { if (d.posterUrl != null) { val glideUrl = GlideUrl(d.posterUrl) - context!!.let { - /* - Glide.with(it) - .load(glideUrl) - .into(result_poster)*/ + requireContext().let { Glide.with(it) .load(glideUrl) - .apply(bitmapTransform(BlurTransformation(10, 3))) + .into(result_poster) + + Glide.with(it) + .load(glideUrl) + .apply(bitmapTransform(BlurTransformation(80, 3))) .into(result_poster_blur) } } @@ -265,14 +279,38 @@ activity?.startActivityForResult(vlcIntent, REQUEST_CODE) result_descript.text = "No Plot found" } + result_tag.removeAllViews() + result_tag_holder.visibility = View.GONE + result_status.visibility = View.GONE + when (d) { is AnimeLoadResponse -> { - val preferEnglish = true - val titleName = (if (preferEnglish) d.engName else d.japName) ?: d.name + result_status.visibility = View.VISIBLE + result_status.text = when (d.showStatus) { + null -> "" + ShowStatus.Ongoing -> "Ongoing" + ShowStatus.Completed -> "Completed" + } + + // val preferEnglish = true + //val titleName = (if (preferEnglish) d.engName else d.japName) ?: d.name + val titleName = d.name result_title.text = titleName result_toolbar.title = titleName - result_tags.text = (d.tags ?: ArrayList()).joinToString(separator = " | ") + if (d.tags == null) { + result_tag_holder.visibility = View.GONE + } else { + result_tag_holder.visibility = View.VISIBLE + + for ((index, tag) in d.tags.withIndex()) { + val viewBtt = layoutInflater.inflate(R.layout.result_tag, null) + val btt = viewBtt.findViewById(R.id.result_tag_card) + btt.text = tag + + result_tag.addView(viewBtt, index) + } + } } else -> result_title.text = d.name } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt index 703ba153..5cd47546 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt @@ -24,21 +24,18 @@ import kotlinx.android.synthetic.main.search_result_grid.view.* import kotlin.math.roundToInt class SearchAdapter( - activity: Activity, - animeList: ArrayList, - resView: AutofitRecyclerView, + private var activity: Activity, + var cardList: ArrayList, + private val resView: AutofitRecyclerView, ) : RecyclerView.Adapter() { - var cardList = animeList - private var activity: Activity = activity - var resView: AutofitRecyclerView? = resView override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val layout = activity.getGridFormatId() return CardViewHolder( LayoutInflater.from(parent.context).inflate(layout, parent, false), activity, - resView!! + resView ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index c7ac7062..701c6c28 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -20,6 +20,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiSettings import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.UIHelper.getGridIsCompact +import com.lagradost.cloudstream3.UIHelper.loadResult import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.player.PlayerData @@ -41,11 +42,7 @@ class SearchFragment : Fragment() { return inflater.inflate(R.layout.fragment_search, container, false) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - activity?.fixPaddingStatusbar(searchRoot) - + private fun fixGrid() { val compactView = activity?.getGridIsCompact() ?: false val spanCountLandscape = if (compactView) 2 else 6 val spanCountPortrait = if (compactView) 1 else 3 @@ -56,6 +53,18 @@ class SearchFragment : Fragment() { } else { cardSpace.spanCount = spanCountPortrait } + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + fixGrid() + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + activity?.fixPaddingStatusbar(searchRoot) + fixGrid() val adapter: RecyclerView.Adapter? = activity?.let { SearchAdapter( @@ -129,7 +138,7 @@ class SearchFragment : Fragment() { search_exit_icon.alpha = 1f search_loading_bar.alpha = 0f } - + (activity as AppCompatActivity).loadResult("https://shiro.is/overlord-dubbed", "overlord-dubbed", "Shiro") /* (requireActivity() as AppCompatActivity).supportFragmentManager.beginTransaction() .setCustomAnimations(R.anim.enter_anim, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt index d75cbd15..8e9c7a4b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt @@ -11,7 +11,7 @@ import com.lagradost.cloudstream3.mvvm.safeApiCall import kotlinx.coroutines.launch class SearchViewModel : ViewModel() { - val api: MainAPI = apis[0] + val api: MainAPI = apis[0] //TODO MULTI API private val _searchResponse: MutableLiveData>> = MutableLiveData() val searchResponse: LiveData>> get() = _searchResponse diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt new file mode 100644 index 00000000..908a8668 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/CastOptionsProvider.kt @@ -0,0 +1,47 @@ +package com.lagradost.cloudstream3.utils + +import android.content.Context +import com.google.android.gms.cast.framework.CastOptions +import com.google.android.gms.cast.framework.OptionsProvider +import com.google.android.gms.cast.framework.SessionProvider +import com.google.android.gms.cast.framework.media.CastMediaOptions +import com.google.android.gms.cast.framework.media.MediaIntentReceiver +import com.google.android.gms.cast.framework.media.NotificationOptions +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.ControllerActivity +import java.util.* + +class CastOptionsProvider : OptionsProvider { + override fun getCastOptions(p0: 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 notificationOptions = + NotificationOptions.Builder() + .setTargetActivityClassName(ControllerActivity::class.qualifiedName) + .setActions(buttonActions, compatButtonAction) + .setForward30DrawableResId(R.drawable.go_forward_30) + .setRewind30DrawableResId(R.drawable.go_back_30) + .setSkipStepMs(30000) + .build() + + val mediaOptions = CastMediaOptions.Builder() + .setNotificationOptions(notificationOptions) + .setExpandedControllerActivityClassName(ControllerActivity::class.qualifiedName) + .build() + + return CastOptions.Builder() + .setReceiverApplicationId("A12D4273") + .setStopReceiverApplicationWhenEndingSession(true) + .setCastMediaOptions(mediaOptions) + .build() + } + + override fun getAdditionalSessionProviders(p0: Context?): MutableList { + return Collections.emptyList() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/extractors/Vidstream.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/extractors/Vidstream.kt index 1d61c40e..7cc510cc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/extractors/Vidstream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/extractors/Vidstream.kt @@ -17,17 +17,18 @@ class Vidstream { // https://gogo-stream.com/streaming.php?id=MTE3NDg5 fun getUrl(id: String, isCasting: Boolean = false, callback: (ExtractorLink) -> Unit) : Boolean { try { + normalApis.pmap { api -> + val url = api.getExtractorUrl(id) + val source = api.getUrl(url) + source?.forEach { callback.invoke(it) } + } + val url = getExtractorUrl(id) with(khttp.get(url)) { val document = Jsoup.parse(this.text) val primaryLinks = document.select("ul.list-server-items > li.linkserver") val extractedLinksList: MutableList = mutableListOf() - normalApis.pmap { api -> - val url = api.getExtractorUrl(id) - val source = api.getUrl(url) - source?.forEach { callback.invoke(it) } - } // All vidstream links passed to extractors primaryLinks.forEach { element -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt new file mode 100644 index 00000000..892701f6 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt @@ -0,0 +1,98 @@ +package com.lagradost.cloudstream3.widget + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import android.view.ViewGroup +import com.lagradost.cloudstream3.R +import kotlin.math.max + +class FlowLayout : ViewGroup { + constructor(context: Context?) : super(context) {} + + @JvmOverloads + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int = 0) : super(context, attrs, defStyleAttr) { + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + val realWidth = MeasureSpec.getSize(widthMeasureSpec) + var currentHeight = 0 + var currentWidth = 0 + var currentChildHookPointx = 0 + var currentChildHookPointy = 0 + val childCount = this.childCount + for (i in 0 until childCount) { + val child = getChildAt(i) + measureChild(child, widthMeasureSpec, heightMeasureSpec) + val childWidth = child.measuredWidth + val childHeight = child.measuredHeight + + //check if child can be placed in the current row, else go to next line + if (currentChildHookPointx + childWidth > realWidth) { + //new line + currentWidth = Math.max(currentWidth, currentChildHookPointx) + + //reset for new line + currentChildHookPointx = 0 + currentChildHookPointy += childHeight + } + val nextChildHookPointx = currentChildHookPointx + childWidth + val nextChildHookPointy = currentChildHookPointy + currentHeight = max(currentHeight, currentChildHookPointy + childHeight) + val lp = child.layoutParams as LayoutParams + lp.x = currentChildHookPointx + lp.y = currentChildHookPointy + currentChildHookPointx = nextChildHookPointx + currentChildHookPointy = nextChildHookPointy + } + currentWidth = Math.max(currentChildHookPointx, currentWidth) + setMeasuredDimension(resolveSize(currentWidth, widthMeasureSpec), + resolveSize(currentHeight, heightMeasureSpec)) + } + + override fun onLayout(b: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + //call layout on children + val childCount = this.childCount + for (i in 0 until childCount) { + val child = getChildAt(i) + val lp = child.layoutParams as LayoutParams + child.layout(lp.x, lp.y, lp.x + child.measuredWidth, lp.y + child.measuredHeight) + } + } + + override fun generateLayoutParams(attrs: AttributeSet): LayoutParams { + return LayoutParams(context, attrs) + } + + override fun generateDefaultLayoutParams(): LayoutParams { + return LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + + override fun generateLayoutParams(p: ViewGroup.LayoutParams): LayoutParams { + return LayoutParams(p) + } + + override fun checkLayoutParams(p: ViewGroup.LayoutParams): Boolean { + return p is LayoutParams + } + + class LayoutParams : MarginLayoutParams { + var spacing = -1 + var x = 0 + var y = 0 + + @SuppressLint("CustomViewStyleable") + internal constructor(c: Context, attrs: AttributeSet?) : super(c, attrs) { + val t = c.obtainStyledAttributes(attrs, R.styleable.FlowLayout_Layout) + spacing = 0 //t.getDimensionPixelSize(R.styleable.FlowLayout_Layout_layout_space, 0); + t.recycle() + } + + internal constructor(width: Int, height: Int) : super(width, height) { + spacing = 0 + } + + constructor(source: MarginLayoutParams?) : super(source) {} + internal constructor(source: ViewGroup.LayoutParams?) : super(source) {} + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/.idea/.gitignore b/app/src/main/res/anim/.idea/.gitignore new file mode 100644 index 00000000..26d33521 --- /dev/null +++ b/app/src/main/res/anim/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/app/src/main/res/anim/.idea/misc.xml b/app/src/main/res/anim/.idea/misc.xml new file mode 100644 index 00000000..639900d1 --- /dev/null +++ b/app/src/main/res/anim/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/.idea/modules.xml b/app/src/main/res/anim/.idea/modules.xml new file mode 100644 index 00000000..787e58e6 --- /dev/null +++ b/app/src/main/res/anim/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/.idea/vcs.xml b/app/src/main/res/anim/.idea/vcs.xml new file mode 100644 index 00000000..bc599707 --- /dev/null +++ b/app/src/main/res/anim/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 1ee14938..00000000 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/cs3_cloud.xml b/app/src/main/res/drawable/cs3_cloud.xml new file mode 100644 index 00000000..d8fc1dbd --- /dev/null +++ b/app/src/main/res/drawable/cs3_cloud.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/go_back_30.xml b/app/src/main/res/drawable/go_back_30.xml new file mode 100644 index 00000000..8ab536ee --- /dev/null +++ b/app/src/main/res/drawable/go_back_30.xml @@ -0,0 +1,19 @@ + + + + diff --git a/app/src/main/res/drawable/go_forward_30.xml b/app/src/main/res/drawable/go_forward_30.xml new file mode 100644 index 00000000..d3ba0af9 --- /dev/null +++ b/app/src/main/res/drawable/go_forward_30.xml @@ -0,0 +1,19 @@ + + + + diff --git a/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml index 31e7df2e..a6108143 100644 --- a/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml +++ b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml @@ -1,5 +1,5 @@ diff --git a/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml b/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml index c7b8b5f5..d93d1b64 100644 --- a/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml +++ b/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_bookmark_24.xml b/app/src/main/res/drawable/ic_baseline_bookmark_24.xml index 8f0b1b18..542456d8 100644 --- a/app/src/main/res/drawable/ic_baseline_bookmark_24.xml +++ b/app/src/main/res/drawable/ic_baseline_bookmark_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_brightness_7_24.xml b/app/src/main/res/drawable/ic_baseline_brightness_7_24.xml index dc94884a..191109b7 100644 --- a/app/src/main/res/drawable/ic_baseline_brightness_7_24.xml +++ b/app/src/main/res/drawable/ic_baseline_brightness_7_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_more_vert_24.xml b/app/src/main/res/drawable/ic_baseline_more_vert_24.xml index 6a7f2748..249fe2a2 100644 --- a/app/src/main/res/drawable/ic_baseline_more_vert_24.xml +++ b/app/src/main/res/drawable/ic_baseline_more_vert_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml b/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml index 0870be8f..f880379f 100644 --- a/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml +++ b/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_playlist_play_24.xml b/app/src/main/res/drawable/ic_baseline_playlist_play_24.xml index 6ff89010..6295ffae 100644 --- a/app/src/main/res/drawable/ic_baseline_playlist_play_24.xml +++ b/app/src/main/res/drawable/ic_baseline_playlist_play_24.xml @@ -1,5 +1,5 @@ diff --git a/app/src/main/res/drawable/ic_baseline_speed_24.xml b/app/src/main/res/drawable/ic_baseline_speed_24.xml index 1add8a09..046754aa 100644 --- a/app/src/main/res/drawable/ic_baseline_speed_24.xml +++ b/app/src/main/res/drawable/ic_baseline_speed_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_star_24.xml b/app/src/main/res/drawable/ic_baseline_star_24.xml index 954e7723..ab099425 100644 --- a/app/src/main/res/drawable/ic_baseline_star_24.xml +++ b/app/src/main/res/drawable/ic_baseline_star_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_subtitles_24.xml b/app/src/main/res/drawable/ic_baseline_subtitles_24.xml index f1863edf..75f674c9 100644 --- a/app/src/main/res/drawable/ic_baseline_subtitles_24.xml +++ b/app/src/main/res/drawable/ic_baseline_subtitles_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_tune_24.xml b/app/src/main/res/drawable/ic_baseline_tune_24.xml index c7cae9e0..2ce603c5 100644 --- a/app/src/main/res/drawable/ic_baseline_tune_24.xml +++ b/app/src/main/res/drawable/ic_baseline_tune_24.xml @@ -1,4 +1,4 @@ - diff --git a/app/src/main/res/drawable/ic_baseline_volume_up_24.xml b/app/src/main/res/drawable/ic_baseline_volume_up_24.xml index 45bf404e..e3ae9806 100644 --- a/app/src/main/res/drawable/ic_baseline_volume_up_24.xml +++ b/app/src/main/res/drawable/ic_baseline_volume_up_24.xml @@ -1,5 +1,5 @@ diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..da9562ff --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/src/main/res/drawable/netflix_download.xml b/app/src/main/res/drawable/netflix_download.xml index a939de44..9d9531d8 100644 --- a/app/src/main/res/drawable/netflix_download.xml +++ b/app/src/main/res/drawable/netflix_download.xml @@ -8,7 +8,7 @@ diff --git a/app/src/main/res/drawable/netflix_play.xml b/app/src/main/res/drawable/netflix_play.xml index 00d17877..816d1069 100644 --- a/app/src/main/res/drawable/netflix_play.xml +++ b/app/src/main/res/drawable/netflix_play.xml @@ -5,5 +5,5 @@ android:viewportHeight="850.4"> + android:fillColor="?attr/white"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/search_icon.xml b/app/src/main/res/drawable/search_icon.xml index 4eb4677d..870d0db6 100644 --- a/app/src/main/res/drawable/search_icon.xml +++ b/app/src/main/res/drawable/search_icon.xml @@ -8,13 +8,13 @@ diff --git a/app/src/main/res/layout/fragment_player.xml b/app/src/main/res/layout/fragment_player.xml index 7bf599d7..3a137bb5 100644 --- a/app/src/main/res/layout/fragment_player.xml +++ b/app/src/main/res/layout/fragment_player.xml @@ -38,7 +38,6 @@ android:backgroundTint="@android:color/black" > - - + + android:layout_width="match_parent" android:layout_height="30dp"> - - + - - + + + + + + + + + + - + + + - - - - + + + + - + android:textSize="17sp" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:textStyle="normal" + android:textColor="?attr/textColor" + /> diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 7279edb3..638d1b2c 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -370,7 +370,7 @@ android:textColor="@android:color/white" android:textSize="14sp" android:textStyle="normal"/> - + diff --git a/app/src/main/res/layout/result_episode.xml b/app/src/main/res/layout/result_episode.xml index f3a3c0b9..c26ff182 100644 --- a/app/src/main/res/layout/result_episode.xml +++ b/app/src/main/res/layout/result_episode.xml @@ -6,8 +6,11 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" app:cardCornerRadius="@dimen/roundedImageRadius" - app:cardBackgroundColor="@color/itemBackground" - android:layout_marginBottom="2dp" + app:cardBackgroundColor="@color/transparent" + app:cardElevation="0dp" + android:id="@+id/episode_holder" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:layout_marginBottom="5dp" > + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/search_result_compact.xml b/app/src/main/res/layout/search_result_compact.xml index ed73bb01..d756e50c 100644 --- a/app/src/main/res/layout/search_result_compact.xml +++ b/app/src/main/res/layout/search_result_compact.xml @@ -20,7 +20,7 @@ android:elevation="0dp" app:cardCornerRadius="@dimen/roundedImageRadius" - app:cardBackgroundColor="@color/itemBackground" + app:cardBackgroundColor="?attr/boxItemBackground" android:clickable="true" android:focusable="true" > @@ -50,7 +50,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="17sp" - android:textColor="@color/textColor" + android:textColor="?attr/textColor" android:id="@+id/imageText" android:textStyle="bold" android:maxLines="3" @@ -59,7 +59,7 @@ tools:text="@string/no_data" android:layout_width="match_parent" android:layout_height="wrap_content" - android:textColor="@color/lightGrayTextColor" + android:textColor="?attr/grayTextColor" android:id="@+id/imageTextExtra" android:textSize="13sp" android:textStyle="bold" @@ -70,7 +70,7 @@ android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content" - android:textColor="@color/colorPrimary" + android:textColor="?attr/colorPrimary" android:id="@+id/imageTextProvider" android:maxLines="1" /> diff --git a/app/src/main/res/layout/search_result_super_compact.xml b/app/src/main/res/layout/search_result_super_compact.xml index d5ba157a..2e7fb8f0 100644 --- a/app/src/main/res/layout/search_result_super_compact.xml +++ b/app/src/main/res/layout/search_result_super_compact.xml @@ -48,7 +48,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="17sp" - android:textColor="@color/textColor" + android:textColor="?attr/textColor" android:id="@+id/imageText" android:textStyle="normal" android:maxLines="3" @@ -58,7 +58,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" - android:textColor="@color/lightGrayTextColor" + android:textColor="?attr/grayTextColor" android:id="@+id/imageTextExtra" android:textSize="13sp" android:textStyle="bold" @@ -69,7 +69,7 @@ android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content" - android:textColor="@color/colorPrimary" + android:textColor="?attr/colorPrimary" android:id="@+id/imageTextProvider" android:maxLines="1" /> diff --git a/app/src/main/res/menu/cast_expanded_controller_menu.xml b/app/src/main/res/menu/cast_expanded_controller_menu.xml new file mode 100644 index 00000000..7fbf6ec9 --- /dev/null +++ b/app/src/main/res/menu/cast_expanded_controller_menu.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index bbd3e021..7353dbd1 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index bbd3e021..7353dbd1 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index a571e60098c92c2baca8a5df62f2929cbff01b52..6df27f85781f393d1a5a9bad2f836fb9ea9545af 100644 GIT binary patch delta 1346 zcmV-I1-<%-9MlSsBYy=ONklzQLwJeXcr%KLCS|-#Fk`gWZEiz12aJtT z+_1>Hwaw4xcipn?uG`bQL2q|?e#vJq?cHFoD`YF zbh-@N#g$`nVt;%RYR16@jkX3z%Q;pUojI-=**M9Ve_^|J1$lxd`z1)rJ@GYWl_O|| z!CGG$X;6cLNG6lrjU&j3S>*_txzuuI?`UJ<1E?H+1i2wK>u4orl_khvIa3yCP`iQ_ zXCJA;tg-~9TTYip8q~C)?=UM9B!mf~zywiXf+#RS6n~f?3QQ0MCWwOC1ZBSHfxH4Q z$l=CtNg=^bj$DVFDe$oeZ^#kzhseahEzZc$I-wwIU@1v~gE@=7dEpY57 zAKV=bLO2{2F*Fq7WvyD%3TB6R|0y$_1r-oE&8>GtQettVZwL+@>4VbB9@xJ78WgQ- z7qusg>3=FHm&`G)vjZX#@em4yAwWjfFRp%AR@fqHTN2YnkaeXO-Y@QeZ}we>J=nZle>bx>23N{gccHD(c+q$5;Cm?!nB7aW&d`tcWuB0HmJlCC*HqZRg{vW?D zUiNWcyow385ptHCW{y?OkoA&`<$#iciq^G(@79ng&}57XLM$u1u)F*^+@!S8KQIjL zCO_2v;Dgm~w~G2PDM|`@Z(~PXBOsb+K?ts_OTN7p_k@ni1{_VozD$Ucg5LS)FBptt zVt~Ny_o6LLo6^gKbF-fGL=L@{Bb8k1)|9%@9 zIlm&{u{V6uDeBvVBvOznVS*?yK@^xE3QQ0MCWrzPM1cvSzywiXf+#RS6qq0iOn(ps zCWrzPM1cvSa4!TcwbW_;S&h`}nkvjHOHld?8XiIR$m38`8bRq6*DkF;P?wr@upG0> z60|sT|C+JJVjM)J@L3#O(2#!~o>}tcddzAzm(3D-n56gzTpu7jnU;655r-l+h@!Ls z$Ddw{G7o!5#`%$~5+3U1>$UGukbhpEY|l^4uJstK^ zj5^zv_)o8K^|b9l@^c=+_|(FWix(J652R!`YZsU*su!6mYsOO{_*?jYyxZK5HY;jU zOwMY)?<50e!AyL%`FRhG4=t^dbo0y)liyDeQV7oxmZ%)efLZ41=B7WQ!#j*qFY_$D z-l(55XJPW}+0Q<%W-tS0!A!!G_oC3Y7GTAS6)RQL|G0mqY1KjJRR91007*qoM6N<$ Ef+!t-8~^|S literal 3593 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 P00000NkvXXu0mjfP=x?Y diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 61da551c5594a1f9d26193983d2cd69189014603..814f61c0f0f86e4ee174b0a2d8805d4f9fd5fcd5 100644 GIT binary patch delta 3284 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 W$;WXnupB1<0000! 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index b216f2d313cc673d8b8c4da591c174ebed52795c..38a51ad261f2a38e5f26e070862dfd7fb72cf993 100644 GIT binary patch literal 7365 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 literal 10652 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 diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 00000000..fb66e72c --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1b96a836..45a2e76d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -12,11 +12,11 @@ #2B2C30 #1C1C20 #1C1C20 - #131217 + #17171B #e9eaee #9ba0a4 - #9f9fa0 + @color/textColor #1AFFFFFF #00000000 @@ -33,6 +33,9 @@ #66000000 #C0121212 #121212 - #66B5B5B5 - #617EFF + #66B5B5B5 + + @color/colorPrimary + + #9ba0a6 \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 00000000..7bbb50f4 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #3242D3 + \ 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 5e4b57b9..bb91e1eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,4 +15,7 @@ Go back Next episode 10 + Poster + Plot + Genres \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5ce0aa82..ce927e25 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -27,6 +27,17 @@ @style/AppBottomSheetDialogTheme @style/AppSearchViewStyle @style/Theme.Widget.Tabs + + + @color/textColor + @color/colorItemSeen + @color/grayTextColor + @color/darkBackground + @color/bitDarkerGrayBackground + @color/grayBackground + @color/itemBackground + @color/iconColor + #FFF