fixed #832 and fixed #835

This commit is contained in:
LagradOst 2022-03-21 00:59:17 +01:00
parent c2ba8dc7e4
commit 2870ad435f
9 changed files with 444 additions and 394 deletions

View File

@ -101,7 +101,7 @@ object APIHolder {
)
}
var apis : List<MainAPI> = arrayListOf()
var apis: List<MainAPI> = arrayListOf()
fun getApiFromName(apiName: String?): MainAPI {
return getApiFromNameNull(apiName) ?: apis[defProvider]
@ -148,7 +148,7 @@ object APIHolder {
val domain = encodeToString(
(uri.scheme + "://" + uri.host + ":443").encodeToByteArray(),
0
).replace("\n", "").replace("=",".")
).replace("\n", "").replace("=", ".")
val vToken =
app.get(
@ -281,7 +281,8 @@ object APIHolder {
3 = restricted, must donate 30 benenes to use
*/
const val PROVIDER_STATUS_KEY = "PROVIDER_STATUS_KEY"
const val PROVIDER_STATUS_URL = "https://raw.githubusercontent.com/LagradOst/CloudStream-3/master/providers.json"
const val PROVIDER_STATUS_URL =
"https://raw.githubusercontent.com/LagradOst/CloudStream-3/master/providers.json"
const val PROVIDER_STATUS_BETA_ONLY = 3
const val PROVIDER_STATUS_SLOW = 2
const val PROVIDER_STATUS_OK = 1
@ -296,10 +297,10 @@ data class ProvidersInfoJson(
/**Every provider will **not** have try catch built in, so handle exceptions when calling these functions*/
abstract class MainAPI {
companion object {
var overrideData : HashMap<String, ProvidersInfoJson>? = null
var overrideData: HashMap<String, ProvidersInfoJson>? = null
}
public fun overrideWithNewData(data : ProvidersInfoJson) {
public fun overrideWithNewData(data: ProvidersInfoJson) {
this.name = data.name
this.mainUrl = data.url
}
@ -540,13 +541,28 @@ class HomePageList(
var list: List<SearchResponse>
)
enum class SearchQuality {
//https://en.wikipedia.org/wiki/Pirated_movie_release_types
Cam,
CamRip,
HdCam,
Telesync, // TS
WorkPrint,
Telecine, // TC
HQ,
HD,
BlueRay,
DVD,
}
interface SearchResponse {
val name: String
val url: String
val apiName: String
val type: TvType?
val posterUrl: String?
val id: Int?
var type: TvType?
var posterUrl: String?
var id: Int?
var quality : SearchQuality?
}
enum class ActorRole {
@ -571,49 +587,53 @@ data class AnimeSearchResponse(
override val name: String,
override val url: String,
override val apiName: String,
override val type: TvType,
override var type: TvType?,
override val posterUrl: String?,
override var posterUrl: String?,
val year: Int? = null,
val dubStatus: EnumSet<DubStatus>? = null,
val otherName: String? = null,
val dubEpisodes: Int? = null,
val subEpisodes: Int? = null,
override val id: Int? = null,
override var id: Int? = null,
override var quality: SearchQuality? = null,
) : SearchResponse
data class TorrentSearchResponse(
override val name: String,
override val url: String,
override val apiName: String,
override val type: TvType,
override var type: TvType?,
override val posterUrl: String?,
override val id: Int? = null,
override var posterUrl: String?,
override var id: Int? = null,
override var quality: SearchQuality? = null,
) : SearchResponse
data class MovieSearchResponse(
override val name: String,
override val url: String,
override val apiName: String,
override val type: TvType,
override var type: TvType?,
override val posterUrl: String?,
override var posterUrl: String?,
val year: Int? = null,
override val id: Int? = null,
override var id: Int? = null,
override var quality: SearchQuality? = null,
) : SearchResponse
data class TvSeriesSearchResponse(
override val name: String,
override val url: String,
override val apiName: String,
override val type: TvType,
override var type: TvType?,
override val posterUrl: String?,
override var posterUrl: String?,
val year: Int?,
val episodes: Int?,
override val id: Int? = null,
override var id: Int? = null,
override var quality: SearchQuality? = null,
) : SearchResponse
interface LoadResponse {
@ -630,6 +650,7 @@ interface LoadResponse {
val trailerUrl: String?
var recommendations: List<SearchResponse>?
var actors: List<ActorData>?
var comingSoon: Boolean
companion object {
@JvmName("addActorNames")
@ -715,6 +736,7 @@ data class TorrentLoadResponse(
override var trailerUrl: String? = null,
override var recommendations: List<SearchResponse>? = null,
override var actors: List<ActorData>? = null,
override var comingSoon: Boolean = false,
) : LoadResponse
data class AnimeLoadResponse(
@ -742,6 +764,7 @@ data class AnimeLoadResponse(
override var trailerUrl: String? = null,
override var recommendations: List<SearchResponse>? = null,
override var actors: List<ActorData>? = null,
override var comingSoon: Boolean = false,
) : LoadResponse
fun AnimeLoadResponse.addEpisodes(status: DubStatus, episodes: List<AnimeEpisode>?) {
@ -753,13 +776,31 @@ fun MainAPI.newAnimeLoadResponse(
name: String,
url: String,
type: TvType,
initializer: AnimeLoadResponse.() -> Unit = { }
comingSoonIfNone : Boolean,
initializer: AnimeLoadResponse.() -> Unit = { },
): AnimeLoadResponse {
val builder = AnimeLoadResponse(name = name, url = url, apiName = this.name, type = type)
builder.initializer()
if(comingSoonIfNone) {
builder.comingSoon = true
for (key in builder.episodes.keys)
if(!builder.episodes[key].isNullOrEmpty()) {
builder.comingSoon = false
break
}
}
return builder
}
fun MainAPI.newAnimeLoadResponse(
name: String,
url: String,
type: TvType,
initializer: AnimeLoadResponse.() -> Unit = { },
): AnimeLoadResponse {
return newAnimeLoadResponse(name, url, type, true, initializer)
}
data class MovieLoadResponse(
override var name: String,
override var url: String,
@ -778,6 +819,7 @@ data class MovieLoadResponse(
override var trailerUrl: String? = null,
override var recommendations: List<SearchResponse>? = null,
override var actors: List<ActorData>? = null,
override var comingSoon: Boolean = false,
) : LoadResponse
fun MainAPI.newMovieLoadResponse(
@ -792,7 +834,8 @@ fun MainAPI.newMovieLoadResponse(
url = url,
apiName = this.name,
type = type,
dataUrl = dataUrl
dataUrl = dataUrl,
comingSoon = dataUrl.isBlank()
)
builder.initializer()
return builder
@ -828,6 +871,7 @@ data class TvSeriesLoadResponse(
override var trailerUrl: String? = null,
override var recommendations: List<SearchResponse>? = null,
override var actors: List<ActorData>? = null,
override var comingSoon: Boolean = false,
) : LoadResponse
fun MainAPI.newTvSeriesLoadResponse(
@ -842,7 +886,8 @@ fun MainAPI.newTvSeriesLoadResponse(
url = url,
apiName = this.name,
type = type,
episodes = episodes
episodes = episodes,
comingSoon = episodes.isEmpty(),
)
builder.initializer()
return builder

View File

@ -157,7 +157,7 @@ open class SflixProvider() : MainAPI() {
val dataId = details.attr("data-id")
val id = if (dataId.isNullOrEmpty())
idRegex.find(url)?.groupValues?.get(1)
?: throw RuntimeException("Unable to get id from '$url'")
?: throw ErrorLoadingException("Unable to get id from '$url'")
else dataId
val recommendations =
@ -199,6 +199,8 @@ open class SflixProvider() : MainAPI() {
}
}
val comingSoon = sourceIds.isEmpty()
return newMovieLoadResponse(title, url, TvType.Movie, sourceIds.toJson()) {
this.year = year
this.posterUrl = posterUrl
@ -207,6 +209,7 @@ open class SflixProvider() : MainAPI() {
addActors(cast)
this.tags = tags
this.recommendations = recommendations
this.comingSoon = comingSoon
}
} else {
val seasonsDocument = app.get("$mainUrl/ajax/v2/tv/seasons/$id").document
@ -252,6 +255,7 @@ open class SflixProvider() : MainAPI() {
)
}
}
return newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodes) {
this.posterUrl = posterUrl
this.year = year

View File

@ -1375,12 +1375,13 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
val sourceDialog = sourceBuilder.create()
sourceDialog.show()
sourceDialog.findViewById<ImageView?>(R.id.imgPoster)?.apply {
setImageBitmap(bitmap)
setOnClickListener {
sourceDialog.dismissSafe()
sourceDialog.findViewById<ImageView?>(R.id.imgPoster)
?.apply {
setImageBitmap(bitmap)
setOnClickListener {
sourceDialog.dismissSafe()
}
}
}
}
} catch (e: Exception) {
logError(e)
@ -1423,6 +1424,11 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio
//result_tag_holder?.visibility = GONE
// result_status.visibility = GONE
d.comingSoon.let { soon ->
result_coming_soon?.isVisible = soon
result_data_holder?.isGone = soon
}
val tags = d.tags
if (tags.isNullOrEmpty()) {
//result_tag_holder?.visibility = GONE

View File

@ -150,7 +150,7 @@ object SearchResultBuilder {
playImg?.visibility = View.VISIBLE
if (!card.type.isMovieType()) {
if (card.type?.isMovieType() == false) {
cardText?.text =
cardText?.context?.getNameFull(card.name, card.episode, card.season)
}

View File

@ -4,11 +4,8 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.APIHolder.apis
import com.lagradost.cloudstream3.ErrorLoadingException
import com.lagradost.cloudstream3.SearchResponse
import com.lagradost.cloudstream3.TvType
import com.lagradost.cloudstream3.apmap
import com.lagradost.cloudstream3.mvvm.Resource
import com.lagradost.cloudstream3.mvvm.safeApiCall
import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.SyncApis
@ -54,9 +51,10 @@ class SearchViewModel : ViewModel() {
override val name: String,
override val url: String,
override val apiName: String,
override val type: TvType?,
override val posterUrl: String?,
override val id: Int?,
override var type: TvType?,
override var posterUrl: String?,
override var id: Int?,
override var quality: SearchQuality? = null
) : SearchResponse
private fun SyncAPI.SyncSearchResult.toSearchResponse(): SyncSearchResultSearchResponse {

View File

@ -63,7 +63,7 @@ object AppUtils {
context: Context,
card: DataStoreHelper.ResumeWatchingResult
): WatchNextProgram {
val isSeries = !card.type.isMovieType()
val isSeries = card.type?.isMovieType() == false
val title = if (isSeries) {
context.getNameFull(card.name, card.episode, card.season)
} else {

View File

@ -6,6 +6,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys
import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
import com.lagradost.cloudstream3.DubStatus
import com.lagradost.cloudstream3.SearchQuality
import com.lagradost.cloudstream3.SearchResponse
import com.lagradost.cloudstream3.TvType
import com.lagradost.cloudstream3.ui.WatchType
@ -33,31 +34,33 @@ object DataStoreHelper {
}
data class BookmarkedData(
@JsonProperty("id") override val id: Int?,
@JsonProperty("bookmarkedTime") val bookmarkedTime: Long,
@JsonProperty("latestUpdatedTime") val latestUpdatedTime: Long,
@JsonProperty("name") override val name: String,
@JsonProperty("url") override val url: String,
@JsonProperty("apiName") override val apiName: String,
@JsonProperty("type") override val type: TvType,
@JsonProperty("posterUrl") override val posterUrl: String?,
@JsonProperty("year") val year: Int?,
@JsonProperty("id") override var id: Int?,
@JsonProperty("bookmarkedTime") val bookmarkedTime: Long,
@JsonProperty("latestUpdatedTime") val latestUpdatedTime: Long,
@JsonProperty("name") override val name: String,
@JsonProperty("url") override val url: String,
@JsonProperty("apiName") override val apiName: String,
@JsonProperty("type") override var type: TvType? = null,
@JsonProperty("posterUrl") override var posterUrl: String?,
@JsonProperty("year") val year: Int?,
@JsonProperty("quality") override var quality: SearchQuality? = null
) : SearchResponse
data class ResumeWatchingResult(
@JsonProperty("name") override val name: String,
@JsonProperty("url") override val url: String,
@JsonProperty("apiName") override val apiName: String,
@JsonProperty("type") override val type: TvType,
@JsonProperty("posterUrl") override val posterUrl: String?,
@JsonProperty("type") override var type: TvType? = null,
@JsonProperty("posterUrl") override var posterUrl: String?,
@JsonProperty("watchPos") val watchPos: PosDur?,
@JsonProperty("id") override val id: Int?,
@JsonProperty("id") override var id: Int?,
@JsonProperty("parentId") val parentId: Int?,
@JsonProperty("episode") val episode: Int?,
@JsonProperty("season") val season: Int?,
@JsonProperty("isFromDownload") val isFromDownload: Boolean,
@JsonProperty("quality") override var quality: SearchQuality? = null
) : SearchResponse
var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION

View File

@ -459,67 +459,64 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.google.android.material.button.MaterialButton
<TextView
android:paddingTop="50dp"
android:visibility="gone"
android:text="@string/add_sync"
android:textColor="?attr/textColor"
android:id="@+id/result_coming_soon"
android:textSize="20sp"
android:gravity="center"
android:textStyle="bold"
android:layout_gravity="center"
android:text="@string/coming_soon"
android:layout_width="match_parent"
app:icon="@drawable/ic_baseline_add_24"
android:id="@+id/result_add_sync"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
android:layout_marginBottom="10dp"
style="@style/WhiteButton" />
android:layout_height="wrap_content" />
<LinearLayout
tools:visibility="visible"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:id="@+id/result_movie_parent"
android:id="@+id/result_data_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:visibility="gone"
android:text="@string/add_sync"
android:layout_width="match_parent"
app:icon="@drawable/ic_baseline_add_24"
android:id="@+id/result_add_sync"
android:id="@+id/result_play_movie"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
android:layout_gravity="center_vertical"
android:text="@string/play_movie_button"
app:icon="@drawable/ic_baseline_play_arrow_24"
android:layout_width="match_parent" />
<!--<com.google.android.material.button.MaterialButton
android:nextFocusUp="@id/result_play_movie"
android:nextFocusDown="@id/result_season_button"
android:layout_marginBottom="10dp"
android:id="@+id/result_download_movie"
style="@style/BlackButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
android:layout_gravity="center_vertical"
tools:text="Downloading"
tools:icon="@drawable/netflix_download"
android:layout_marginBottom="10dp"
style="@style/WhiteButton" />
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent" />-->
<FrameLayout
<LinearLayout
tools:visibility="visible"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:id="@+id/result_movie_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:id="@+id/result_play_movie"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
android:layout_gravity="center_vertical"
android:text="@string/play_movie_button"
app:icon="@drawable/ic_baseline_play_arrow_24"
android:layout_width="match_parent" />
<!--<com.google.android.material.button.MaterialButton
android:nextFocusUp="@id/result_play_movie"
android:nextFocusDown="@id/result_season_button"
android:layout_marginBottom="10dp"
android:id="@+id/result_download_movie"
style="@style/BlackButton"
@ -527,339 +524,324 @@
android:layout_marginEnd="0dp"
android:visibility="visible"
android:layout_gravity="center_vertical"
tools:text="Downloading"
tools:icon="@drawable/netflix_download"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent" />
android:layout_width="match_parent" />-->
<LinearLayout
android:gravity="center"
android:orientation="horizontal"
android:layout_gravity="center"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/result_movie_progress_downloaded"
android:layout_width="25dp"
android:layout_height="25dp"
android:indeterminate="false"
android:progressDrawable="@drawable/circular_progress_bar_filled"
android:background="@drawable/circle_shape"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_margin="5dp"
android:paddingEnd="5dp"
android:paddingStart="5dp"
android:layout_gravity="end|center_vertical"
android:progress="30"
android:visibility="visible" />
<com.google.android.material.button.MaterialButton
android:nextFocusUp="@id/result_play_movie"
android:nextFocusDown="@id/result_season_button"
<ImageView
android:id="@+id/result_movie_download_icon"
app:tint="?attr/white"
android:id="@+id/result_download_movie"
style="@style/BlackButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent" />
<LinearLayout
android:gravity="center"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_width="30dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_baseline_play_arrow_24"
android:contentDescription="@string/download" />
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/result_movie_download_text"
android:letterSpacing="0.09"
android:textColor="?attr/textColor"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:textAllCaps="false"
tools:text="Downloading"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/result_movie_progress_downloaded"
android:layout_width="25dp"
android:layout_height="25dp"
android:indeterminate="false"
android:progressDrawable="@drawable/circular_progress_bar_filled"
android:background="@drawable/circle_shape"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_margin="5dp"
android:paddingEnd="5dp"
android:paddingStart="5dp"
android:layout_gravity="end|center_vertical"
android:progress="30"
android:visibility="visible" />
<TextView
android:visibility="gone"
android:id="@+id/result_movie_download_text_precentage"
android:letterSpacing="0.09"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="?attr/textColor"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:textAllCaps="false"
tools:text="68%"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</FrameLayout>
<ImageView
android:id="@+id/result_movie_download_icon"
app:tint="?attr/white"
android:visibility="visible"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_width="30dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_baseline_play_arrow_24"
android:contentDescription="@string/download" />
<TextView
android:id="@+id/result_movie_download_text"
android:letterSpacing="0.09"
android:textColor="?attr/textColor"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:textAllCaps="false"
tools:text="Downloading"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:visibility="gone"
android:id="@+id/result_movie_download_text_precentage"
android:letterSpacing="0.09"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="?attr/textColor"
android:textSize="15sp"
android:textStyle="bold"
android:gravity="center"
android:textAllCaps="false"
tools:text="68%"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</FrameLayout>
<!--<androidx.core.widget.ContentLoadingProgressBar
android:layout_width="match_parent"
android:layout_height="20dp"
tools:progress="50"
android:id="@+id/result_movie_progress_downloaded"
android:indeterminate="false"
style="?android:attr/progressBarStyleHorizontal"
android:progressBackgroundTint="?attr/colorPrimary"
android:max="100"
android:layout_gravity="end|center_vertical"
android:progress="0"
android:visibility="gone"
tools:visibility="visible" />
-->
<!-- <TextView
android:id="@+id/result_movie_text_progress"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
tools:text="128MB / 237MB"
android:textColor="?attr/grayTextColor"
android:layout_width="wrap_content"
android:layout_height="match_parent" />-->
</LinearLayout>
<LinearLayout
android:visibility="gone"
tools:visibility="visible"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:id="@+id/result_series_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:id="@+id/result_resume_series_button"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
tools:visibility="visible"
android:layout_gravity="center_vertical"
android:text="@string/resume"
app:icon="@drawable/ic_baseline_play_arrow_24"
android:layout_width="match_parent" />
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:id="@+id/result_next_series_button"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:text="@string/next_episode"
app:icon="@drawable/cast_ic_mini_controller_skip_next"
android:layout_width="match_parent" />
<TextView
android:textColor="?attr/textColor"
android:id="@+id/result_resume_series_title"
android:textStyle="bold"
android:textSize="17sp"
tools:text="S1E1 Episode 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
tools:visibility="visible"
android:visibility="gone"
android:paddingTop="10dp"
android:id="@+id/result_resume_progress_holder"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.ContentLoadingProgressBar
android:layout_height="20dp"
tools:progress="50"
android:id="@+id/result_resume_series_progress"
android:indeterminate="false"
style="?android:attr/progressBarStyleHorizontal"
android:progressBackgroundTint="?attr/colorPrimary"
android:max="100"
android:layout_gravity="end|center_vertical"
android:progress="0"
android:layout_width="match_parent"
android:layout_weight="1"
android:visibility="visible"
tools:visibility="visible" />
<TextView
android:id="@+id/result_resume_series_progress_text"
android:layout_gravity="center"
android:paddingStart="10dp"
android:gravity="center"
tools:text="69m\nremaining"
android:layout_weight="0"
android:textColor="?attr/grayTextColor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="RtlSymmetry" />
</LinearLayout>
<!--<TextView
android:visibility="gone"
android:drawableLeft="@drawable/ic_baseline_play_arrow_24"
android:gravity="center_vertical"
android:textSize="20sp"
android:textColor="?attr/textColor"
android:text="More like this"
android:layout_width="wrap_content" android:layout_height="60dp">
</TextView>
<com.google.android.material.tabs.TabLayout
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabTextColor="?attr/textColor"
android:foreground="@color/transparent"
android:backgroundTint="@color/transparent"
app:tabIndicatorGravity="top"
android:textAllCaps="false"
app:tabIconTint="?attr/textColor"
app:tabIndicatorColor="?attr/textColor"
android:id="@+id/result_tabs"
app:tabGravity="start">
<com.google.android.material.tabs.TabItem
android:text="Episodes"
android:icon="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.google.android.material.tabs.TabItem>
<com.google.android.material.tabs.TabItem
android:text="Sync"
android:icon="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.google.android.material.tabs.TabItem>
</com.google.android.material.tabs.TabLayout>-->
<LinearLayout
android:id="@+id/result_episodes_tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_marginBottom="10dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="Season 1"
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_episode_select"
android:nextFocusLeft="@id/result_episode_select"
android:nextFocusDown="@id/result_episodes"
android:id="@+id/result_season_button"
<!--<androidx.core.widget.ContentLoadingProgressBar
android:layout_width="match_parent"
android:layout_height="20dp"
tools:progress="50"
android:id="@+id/result_movie_progress_downloaded"
android:indeterminate="false"
style="?android:attr/progressBarStyleHorizontal"
android:progressBackgroundTint="?attr/colorPrimary"
android:max="100"
android:layout_gravity="end|center_vertical"
android:progress="0"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="50-100"
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_season_button"
android:nextFocusLeft="@id/result_season_button"
android:nextFocusDown="@id/result_episodes"
android:id="@+id/result_episode_select"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="Dubbed"
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_season_button"
android:nextFocusLeft="@id/result_season_button"
android:nextFocusDown="@id/result_episodes"
android:id="@+id/result_dub_select"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/result_episodes_text"
tools:text="8 Episodes"
android:textSize="17sp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:layout_gravity="center_vertical"
android:textStyle="normal"
android:textColor="?attr/textColor" />
tools:visibility="visible" />
-->
<!-- <TextView
android:id="@+id/result_movie_text_progress"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
tools:text="128MB / 237MB"
android:textColor="?attr/grayTextColor"
android:layout_width="wrap_content"
android:layout_height="match_parent" />-->
</LinearLayout>
<com.facebook.shimmer.ShimmerFrameLayout
<LinearLayout
android:visibility="gone"
tools:visibility="visible"
app:shimmer_base_alpha="0.2"
app:shimmer_highlight_alpha="0.3"
app:shimmer_duration="@integer/loading_time"
app:shimmer_auto_start="true"
android:id="@+id/result_episode_loading"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:id="@+id/result_series_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:id="@+id/result_resume_series_button"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="visible"
tools:visibility="visible"
android:layout_gravity="center_vertical"
android:text="@string/resume"
app:icon="@drawable/ic_baseline_play_arrow_24"
android:layout_width="match_parent" />
<com.google.android.material.button.MaterialButton
android:layout_marginBottom="10dp"
android:nextFocusUp="@id/result_bookmark_button"
android:nextFocusDown="@id/result_download_movie"
android:id="@+id/result_next_series_button"
style="@style/WhiteButton"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:text="@string/next_episode"
app:icon="@drawable/cast_ic_mini_controller_skip_next"
android:layout_width="match_parent" />
<TextView
android:textColor="?attr/textColor"
android:id="@+id/result_resume_series_title"
android:textStyle="bold"
android:textSize="17sp"
tools:text="S1E1 Episode 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
tools:visibility="visible"
android:visibility="gone"
android:paddingTop="10dp"
android:id="@+id/result_resume_progress_holder"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.ContentLoadingProgressBar
android:layout_height="20dp"
tools:progress="50"
android:id="@+id/result_resume_series_progress"
android:indeterminate="false"
style="?android:attr/progressBarStyleHorizontal"
android:progressBackgroundTint="?attr/colorPrimary"
android:max="100"
android:layout_gravity="end|center_vertical"
android:progress="0"
android:layout_width="match_parent"
android:layout_weight="1"
android:visibility="visible"
tools:visibility="visible" />
<TextView
android:id="@+id/result_resume_series_progress_text"
android:layout_gravity="center"
android:paddingStart="10dp"
android:gravity="center"
tools:text="69m\nremaining"
android:layout_weight="0"
android:textColor="?attr/grayTextColor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="RtlSymmetry" />
</LinearLayout>
<LinearLayout
android:id="@+id/result_episodes_tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:orientation="vertical"
android:layout_marginBottom="10dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/loading_episode" />
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="Season 1"
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_episode_select"
android:nextFocusLeft="@id/result_episode_select"
android:nextFocusDown="@id/result_episodes"
<include layout="@layout/loading_episode" />
android:id="@+id/result_season_button"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<include layout="@layout/loading_episode" />
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="50-100"
<include layout="@layout/loading_episode" />
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_season_button"
android:nextFocusLeft="@id/result_season_button"
android:nextFocusDown="@id/result_episodes"
android:id="@+id/result_episode_select"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<com.google.android.material.button.MaterialButton
tools:visibility="visible"
tools:text="Dubbed"
android:nextFocusUp="@id/result_descript"
android:nextFocusRight="@id/result_season_button"
android:nextFocusLeft="@id/result_season_button"
android:nextFocusDown="@id/result_episodes"
android:id="@+id/result_dub_select"
android:visibility="gone"
android:layout_gravity="center_vertical"
android:layout_marginStart="0dp"
style="@style/MultiSelectButton" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/result_episodes_text"
tools:text="8 Episodes"
android:textSize="17sp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:layout_gravity="center_vertical"
android:textStyle="normal"
android:textColor="?attr/textColor" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<!--<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/result_episode_loading"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_gravity="center"
android:layout_width="50dp"
android:layout_height="50dp" />-->
<com.facebook.shimmer.ShimmerFrameLayout
tools:visibility="visible"
app:shimmer_base_alpha="0.2"
app:shimmer_highlight_alpha="0.3"
app:shimmer_duration="@integer/loading_time"
app:shimmer_auto_start="true"
android:id="@+id/result_episode_loading"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:descendantFocusability="afterDescendants"
android:id="@+id/result_episodes"
android:clipToPadding="false"
android:layout_marginTop="0dp"
android:paddingBottom="100dp"
tools:listitem="@layout/result_episode"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/loading_episode" />
<include layout="@layout/loading_episode" />
<include layout="@layout/loading_episode" />
<include layout="@layout/loading_episode" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<!--<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/result_episode_loading"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_gravity="center"
android:layout_width="50dp"
android:layout_height="50dp" />-->
<androidx.recyclerview.widget.RecyclerView
android:descendantFocusability="afterDescendants"
android:id="@+id/result_episodes"
android:clipToPadding="false"
android:layout_marginTop="0dp"
android:paddingBottom="100dp"
tools:listitem="@layout/result_episode"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -429,5 +429,17 @@
<string name="actor_background">Background</string>
<string name="home_source">Source</string>
<string name="coming_soon">Coming soon…</string>
<string name="quality_cam">Cam</string>
<string name="quality_cam_rip">Cam</string>
<string name="quality_cam_hd">Cam</string>
<string name="quality_hq">HQ</string>
<string name="quality_hd">HD</string>
<string name="quality_ts">TS</string>
<string name="quality_tc">TC</string>
<string name="quality_blueray">BlueRay</string>
<string name="quality_workprint">WP</string>
<string name="quality_dvd">DVD</string>
<string name="poster_image">Poster Image</string>
</resources>