forked from recloudstream/cloudstream
		
	
							parent
							
								
									c2ba8dc7e4
								
							
						
					
					
						commit
						2870ad435f
					
				
					 9 changed files with 444 additions and 394 deletions
				
			
		|  | @ -101,7 +101,7 @@ object APIHolder { | ||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     var apis : List<MainAPI> = arrayListOf() |     var apis: List<MainAPI> = arrayListOf() | ||||||
| 
 | 
 | ||||||
|     fun getApiFromName(apiName: String?): MainAPI { |     fun getApiFromName(apiName: String?): MainAPI { | ||||||
|         return getApiFromNameNull(apiName) ?: apis[defProvider] |         return getApiFromNameNull(apiName) ?: apis[defProvider] | ||||||
|  | @ -148,7 +148,7 @@ object APIHolder { | ||||||
|         val domain = encodeToString( |         val domain = encodeToString( | ||||||
|             (uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), |             (uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), | ||||||
|             0 |             0 | ||||||
|         ).replace("\n", "").replace("=",".") |         ).replace("\n", "").replace("=", ".") | ||||||
| 
 | 
 | ||||||
|         val vToken = |         val vToken = | ||||||
|             app.get( |             app.get( | ||||||
|  | @ -281,7 +281,8 @@ object APIHolder { | ||||||
| 3 = restricted, must donate 30 benenes to use | 3 = restricted, must donate 30 benenes to use | ||||||
|  */ |  */ | ||||||
| const val PROVIDER_STATUS_KEY = "PROVIDER_STATUS_KEY" | 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_BETA_ONLY = 3 | ||||||
| const val PROVIDER_STATUS_SLOW = 2 | const val PROVIDER_STATUS_SLOW = 2 | ||||||
| const val PROVIDER_STATUS_OK = 1 | 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*/ | /**Every provider will **not** have try catch built in, so handle exceptions when calling these functions*/ | ||||||
| abstract class MainAPI { | abstract class MainAPI { | ||||||
|     companion object { |     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.name = data.name | ||||||
|         this.mainUrl = data.url |         this.mainUrl = data.url | ||||||
|     } |     } | ||||||
|  | @ -540,13 +541,28 @@ class HomePageList( | ||||||
|     var list: List<SearchResponse> |     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 { | interface SearchResponse { | ||||||
|     val name: String |     val name: String | ||||||
|     val url: String |     val url: String | ||||||
|     val apiName: String |     val apiName: String | ||||||
|     val type: TvType? |     var type: TvType? | ||||||
|     val posterUrl: String? |     var posterUrl: String? | ||||||
|     val id: Int? |     var id: Int? | ||||||
|  |     var quality : SearchQuality? | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| enum class ActorRole { | enum class ActorRole { | ||||||
|  | @ -571,49 +587,53 @@ data class AnimeSearchResponse( | ||||||
|     override val name: String, |     override val name: String, | ||||||
|     override val url: String, |     override val url: String, | ||||||
|     override val apiName: 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 year: Int? = null, | ||||||
|     val dubStatus: EnumSet<DubStatus>? = null, |     val dubStatus: EnumSet<DubStatus>? = null, | ||||||
| 
 | 
 | ||||||
|     val otherName: String? = null, |     val otherName: String? = null, | ||||||
|     val dubEpisodes: Int? = null, |     val dubEpisodes: Int? = null, | ||||||
|     val subEpisodes: Int? = null, |     val subEpisodes: Int? = null, | ||||||
|     override val id: Int? = null, |     override var id: Int? = null, | ||||||
|  |     override var quality: SearchQuality? = null, | ||||||
| ) : SearchResponse | ) : SearchResponse | ||||||
| 
 | 
 | ||||||
| data class TorrentSearchResponse( | data class TorrentSearchResponse( | ||||||
|     override val name: String, |     override val name: String, | ||||||
|     override val url: String, |     override val url: String, | ||||||
|     override val apiName: String, |     override val apiName: String, | ||||||
|     override val type: TvType, |     override var type: TvType?, | ||||||
| 
 | 
 | ||||||
|     override val posterUrl: String?, |     override var posterUrl: String?, | ||||||
|     override val id: Int? = null, |     override var id: Int? = null, | ||||||
|  |     override var quality: SearchQuality? = null, | ||||||
| ) : SearchResponse | ) : SearchResponse | ||||||
| 
 | 
 | ||||||
| data class MovieSearchResponse( | data class MovieSearchResponse( | ||||||
|     override val name: String, |     override val name: String, | ||||||
|     override val url: String, |     override val url: String, | ||||||
|     override val apiName: 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 year: Int? = null, | ||||||
|     override val id: Int? = null, |     override var id: Int? = null, | ||||||
|  |     override var quality: SearchQuality? = null, | ||||||
| ) : SearchResponse | ) : SearchResponse | ||||||
| 
 | 
 | ||||||
| data class TvSeriesSearchResponse( | data class TvSeriesSearchResponse( | ||||||
|     override val name: String, |     override val name: String, | ||||||
|     override val url: String, |     override val url: String, | ||||||
|     override val apiName: 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 year: Int?, | ||||||
|     val episodes: Int?, |     val episodes: Int?, | ||||||
|     override val id: Int? = null, |     override var id: Int? = null, | ||||||
|  |     override var quality: SearchQuality? = null, | ||||||
| ) : SearchResponse | ) : SearchResponse | ||||||
| 
 | 
 | ||||||
| interface LoadResponse { | interface LoadResponse { | ||||||
|  | @ -630,6 +650,7 @@ interface LoadResponse { | ||||||
|     val trailerUrl: String? |     val trailerUrl: String? | ||||||
|     var recommendations: List<SearchResponse>? |     var recommendations: List<SearchResponse>? | ||||||
|     var actors: List<ActorData>? |     var actors: List<ActorData>? | ||||||
|  |     var comingSoon: Boolean | ||||||
| 
 | 
 | ||||||
|     companion object { |     companion object { | ||||||
|         @JvmName("addActorNames") |         @JvmName("addActorNames") | ||||||
|  | @ -715,6 +736,7 @@ data class TorrentLoadResponse( | ||||||
|     override var trailerUrl: String? = null, |     override var trailerUrl: String? = null, | ||||||
|     override var recommendations: List<SearchResponse>? = null, |     override var recommendations: List<SearchResponse>? = null, | ||||||
|     override var actors: List<ActorData>? = null, |     override var actors: List<ActorData>? = null, | ||||||
|  |     override var comingSoon: Boolean = false, | ||||||
| ) : LoadResponse | ) : LoadResponse | ||||||
| 
 | 
 | ||||||
| data class AnimeLoadResponse( | data class AnimeLoadResponse( | ||||||
|  | @ -742,6 +764,7 @@ data class AnimeLoadResponse( | ||||||
|     override var trailerUrl: String? = null, |     override var trailerUrl: String? = null, | ||||||
|     override var recommendations: List<SearchResponse>? = null, |     override var recommendations: List<SearchResponse>? = null, | ||||||
|     override var actors: List<ActorData>? = null, |     override var actors: List<ActorData>? = null, | ||||||
|  |     override var comingSoon: Boolean = false, | ||||||
| ) : LoadResponse | ) : LoadResponse | ||||||
| 
 | 
 | ||||||
| fun AnimeLoadResponse.addEpisodes(status: DubStatus, episodes: List<AnimeEpisode>?) { | fun AnimeLoadResponse.addEpisodes(status: DubStatus, episodes: List<AnimeEpisode>?) { | ||||||
|  | @ -753,13 +776,31 @@ fun MainAPI.newAnimeLoadResponse( | ||||||
|     name: String, |     name: String, | ||||||
|     url: String, |     url: String, | ||||||
|     type: TvType, |     type: TvType, | ||||||
|     initializer: AnimeLoadResponse.() -> Unit = { } |     comingSoonIfNone : Boolean, | ||||||
|  |     initializer: AnimeLoadResponse.() -> Unit = { }, | ||||||
| ): AnimeLoadResponse { | ): AnimeLoadResponse { | ||||||
|     val builder = AnimeLoadResponse(name = name, url = url, apiName = this.name, type = type) |     val builder = AnimeLoadResponse(name = name, url = url, apiName = this.name, type = type) | ||||||
|     builder.initializer() |     builder.initializer() | ||||||
|  |     if(comingSoonIfNone) { | ||||||
|  |         builder.comingSoon = true | ||||||
|  |         for (key in builder.episodes.keys) | ||||||
|  |             if(!builder.episodes[key].isNullOrEmpty()) { | ||||||
|  |                 builder.comingSoon = false | ||||||
|  |                 break | ||||||
|  |             } | ||||||
|  |     } | ||||||
|     return builder |     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( | data class MovieLoadResponse( | ||||||
|     override var name: String, |     override var name: String, | ||||||
|     override var url: String, |     override var url: String, | ||||||
|  | @ -778,6 +819,7 @@ data class MovieLoadResponse( | ||||||
|     override var trailerUrl: String? = null, |     override var trailerUrl: String? = null, | ||||||
|     override var recommendations: List<SearchResponse>? = null, |     override var recommendations: List<SearchResponse>? = null, | ||||||
|     override var actors: List<ActorData>? = null, |     override var actors: List<ActorData>? = null, | ||||||
|  |     override var comingSoon: Boolean = false, | ||||||
| ) : LoadResponse | ) : LoadResponse | ||||||
| 
 | 
 | ||||||
| fun MainAPI.newMovieLoadResponse( | fun MainAPI.newMovieLoadResponse( | ||||||
|  | @ -792,7 +834,8 @@ fun MainAPI.newMovieLoadResponse( | ||||||
|         url = url, |         url = url, | ||||||
|         apiName = this.name, |         apiName = this.name, | ||||||
|         type = type, |         type = type, | ||||||
|         dataUrl = dataUrl |         dataUrl = dataUrl, | ||||||
|  |         comingSoon = dataUrl.isBlank() | ||||||
|     ) |     ) | ||||||
|     builder.initializer() |     builder.initializer() | ||||||
|     return builder |     return builder | ||||||
|  | @ -828,6 +871,7 @@ data class TvSeriesLoadResponse( | ||||||
|     override var trailerUrl: String? = null, |     override var trailerUrl: String? = null, | ||||||
|     override var recommendations: List<SearchResponse>? = null, |     override var recommendations: List<SearchResponse>? = null, | ||||||
|     override var actors: List<ActorData>? = null, |     override var actors: List<ActorData>? = null, | ||||||
|  |     override var comingSoon: Boolean = false, | ||||||
| ) : LoadResponse | ) : LoadResponse | ||||||
| 
 | 
 | ||||||
| fun MainAPI.newTvSeriesLoadResponse( | fun MainAPI.newTvSeriesLoadResponse( | ||||||
|  | @ -842,7 +886,8 @@ fun MainAPI.newTvSeriesLoadResponse( | ||||||
|         url = url, |         url = url, | ||||||
|         apiName = this.name, |         apiName = this.name, | ||||||
|         type = type, |         type = type, | ||||||
|         episodes = episodes |         episodes = episodes, | ||||||
|  |         comingSoon = episodes.isEmpty(), | ||||||
|     ) |     ) | ||||||
|     builder.initializer() |     builder.initializer() | ||||||
|     return builder |     return builder | ||||||
|  |  | ||||||
|  | @ -157,7 +157,7 @@ open class SflixProvider() : MainAPI() { | ||||||
|         val dataId = details.attr("data-id") |         val dataId = details.attr("data-id") | ||||||
|         val id = if (dataId.isNullOrEmpty()) |         val id = if (dataId.isNullOrEmpty()) | ||||||
|             idRegex.find(url)?.groupValues?.get(1) |             idRegex.find(url)?.groupValues?.get(1) | ||||||
|                 ?: throw RuntimeException("Unable to get id from '$url'") |                 ?: throw ErrorLoadingException("Unable to get id from '$url'") | ||||||
|         else dataId |         else dataId | ||||||
| 
 | 
 | ||||||
|         val recommendations = |         val recommendations = | ||||||
|  | @ -199,6 +199,8 @@ open class SflixProvider() : MainAPI() { | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             val comingSoon = sourceIds.isEmpty() | ||||||
|  | 
 | ||||||
|             return newMovieLoadResponse(title, url, TvType.Movie, sourceIds.toJson()) { |             return newMovieLoadResponse(title, url, TvType.Movie, sourceIds.toJson()) { | ||||||
|                 this.year = year |                 this.year = year | ||||||
|                 this.posterUrl = posterUrl |                 this.posterUrl = posterUrl | ||||||
|  | @ -207,6 +209,7 @@ open class SflixProvider() : MainAPI() { | ||||||
|                 addActors(cast) |                 addActors(cast) | ||||||
|                 this.tags = tags |                 this.tags = tags | ||||||
|                 this.recommendations = recommendations |                 this.recommendations = recommendations | ||||||
|  |                 this.comingSoon = comingSoon | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             val seasonsDocument = app.get("$mainUrl/ajax/v2/tv/seasons/$id").document |             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) { |             return newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodes) { | ||||||
|                 this.posterUrl = posterUrl |                 this.posterUrl = posterUrl | ||||||
|                 this.year = year |                 this.year = year | ||||||
|  |  | ||||||
|  | @ -1375,12 +1375,13 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | ||||||
|                                         val sourceDialog = sourceBuilder.create() |                                         val sourceDialog = sourceBuilder.create() | ||||||
|                                         sourceDialog.show() |                                         sourceDialog.show() | ||||||
| 
 | 
 | ||||||
|                                         sourceDialog.findViewById<ImageView?>(R.id.imgPoster)?.apply { |                                         sourceDialog.findViewById<ImageView?>(R.id.imgPoster) | ||||||
|                                             setImageBitmap(bitmap) |                                             ?.apply { | ||||||
|                                             setOnClickListener { |                                                 setImageBitmap(bitmap) | ||||||
|                                                 sourceDialog.dismissSafe() |                                                 setOnClickListener { | ||||||
|  |                                                     sourceDialog.dismissSafe() | ||||||
|  |                                                 } | ||||||
|                                             } |                                             } | ||||||
|                                         } |  | ||||||
|                                     } |                                     } | ||||||
|                                 } catch (e: Exception) { |                                 } catch (e: Exception) { | ||||||
|                                     logError(e) |                                     logError(e) | ||||||
|  | @ -1423,6 +1424,11 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | ||||||
|                         //result_tag_holder?.visibility = GONE |                         //result_tag_holder?.visibility = GONE | ||||||
|                         // result_status.visibility = GONE |                         // result_status.visibility = GONE | ||||||
| 
 | 
 | ||||||
|  |                         d.comingSoon.let { soon -> | ||||||
|  |                             result_coming_soon?.isVisible = soon | ||||||
|  |                             result_data_holder?.isGone = soon | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|                         val tags = d.tags |                         val tags = d.tags | ||||||
|                         if (tags.isNullOrEmpty()) { |                         if (tags.isNullOrEmpty()) { | ||||||
|                             //result_tag_holder?.visibility = GONE |                             //result_tag_holder?.visibility = GONE | ||||||
|  |  | ||||||
|  | @ -150,7 +150,7 @@ object SearchResultBuilder { | ||||||
| 
 | 
 | ||||||
|                 playImg?.visibility = View.VISIBLE |                 playImg?.visibility = View.VISIBLE | ||||||
| 
 | 
 | ||||||
|                 if (!card.type.isMovieType()) { |                 if (card.type?.isMovieType() == false) { | ||||||
|                     cardText?.text = |                     cardText?.text = | ||||||
|                         cardText?.context?.getNameFull(card.name, card.episode, card.season) |                         cardText?.context?.getNameFull(card.name, card.episode, card.season) | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  | @ -4,11 +4,8 @@ import androidx.lifecycle.LiveData | ||||||
| import androidx.lifecycle.MutableLiveData | import androidx.lifecycle.MutableLiveData | ||||||
| import androidx.lifecycle.ViewModel | import androidx.lifecycle.ViewModel | ||||||
| import androidx.lifecycle.viewModelScope | import androidx.lifecycle.viewModelScope | ||||||
|  | import com.lagradost.cloudstream3.* | ||||||
| import com.lagradost.cloudstream3.APIHolder.apis | 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.Resource | ||||||
| import com.lagradost.cloudstream3.mvvm.safeApiCall | import com.lagradost.cloudstream3.mvvm.safeApiCall | ||||||
| import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.SyncApis | import com.lagradost.cloudstream3.syncproviders.OAuth2API.Companion.SyncApis | ||||||
|  | @ -54,9 +51,10 @@ class SearchViewModel : ViewModel() { | ||||||
|         override val name: String, |         override val name: String, | ||||||
|         override val url: String, |         override val url: String, | ||||||
|         override val apiName: String, |         override val apiName: String, | ||||||
|         override val type: TvType?, |         override var type: TvType?, | ||||||
|         override val posterUrl: String?, |         override var posterUrl: String?, | ||||||
|         override val id: Int?, |         override var id: Int?, | ||||||
|  |         override var quality: SearchQuality? = null | ||||||
|     ) : SearchResponse |     ) : SearchResponse | ||||||
| 
 | 
 | ||||||
|     private fun SyncAPI.SyncSearchResult.toSearchResponse(): SyncSearchResultSearchResponse { |     private fun SyncAPI.SyncSearchResult.toSearchResponse(): SyncSearchResultSearchResponse { | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ object AppUtils { | ||||||
|         context: Context, |         context: Context, | ||||||
|         card: DataStoreHelper.ResumeWatchingResult |         card: DataStoreHelper.ResumeWatchingResult | ||||||
|     ): WatchNextProgram { |     ): WatchNextProgram { | ||||||
|         val isSeries = !card.type.isMovieType() |         val isSeries = card.type?.isMovieType() == false | ||||||
|         val title = if (isSeries) { |         val title = if (isSeries) { | ||||||
|             context.getNameFull(card.name, card.episode, card.season) |             context.getNameFull(card.name, card.episode, card.season) | ||||||
|         } else { |         } else { | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys | ||||||
| import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey | import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey | ||||||
| import com.lagradost.cloudstream3.AcraApplication.Companion.setKey | import com.lagradost.cloudstream3.AcraApplication.Companion.setKey | ||||||
| import com.lagradost.cloudstream3.DubStatus | import com.lagradost.cloudstream3.DubStatus | ||||||
|  | import com.lagradost.cloudstream3.SearchQuality | ||||||
| import com.lagradost.cloudstream3.SearchResponse | import com.lagradost.cloudstream3.SearchResponse | ||||||
| import com.lagradost.cloudstream3.TvType | import com.lagradost.cloudstream3.TvType | ||||||
| import com.lagradost.cloudstream3.ui.WatchType | import com.lagradost.cloudstream3.ui.WatchType | ||||||
|  | @ -33,31 +34,33 @@ object DataStoreHelper { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     data class BookmarkedData( |     data class BookmarkedData( | ||||||
|        @JsonProperty("id") override val id: Int?, |         @JsonProperty("id") override var id: Int?, | ||||||
|        @JsonProperty("bookmarkedTime") val bookmarkedTime: Long, |         @JsonProperty("bookmarkedTime") val bookmarkedTime: Long, | ||||||
|        @JsonProperty("latestUpdatedTime") val latestUpdatedTime: Long, |         @JsonProperty("latestUpdatedTime") val latestUpdatedTime: Long, | ||||||
|        @JsonProperty("name") override val name: String, |         @JsonProperty("name") override val name: String, | ||||||
|        @JsonProperty("url") override val url: String, |         @JsonProperty("url") override val url: String, | ||||||
|        @JsonProperty("apiName") override val apiName: String, |         @JsonProperty("apiName") override val apiName: String, | ||||||
|        @JsonProperty("type") override val type: TvType, |         @JsonProperty("type") override var type: TvType? = null, | ||||||
|        @JsonProperty("posterUrl") override val posterUrl: String?, |         @JsonProperty("posterUrl") override var posterUrl: String?, | ||||||
|        @JsonProperty("year") val year: Int?, |         @JsonProperty("year") val year: Int?, | ||||||
|  |         @JsonProperty("quality") override var quality: SearchQuality? = null | ||||||
|     ) : SearchResponse |     ) : SearchResponse | ||||||
| 
 | 
 | ||||||
|     data class ResumeWatchingResult( |     data class ResumeWatchingResult( | ||||||
|         @JsonProperty("name") override val name: String, |         @JsonProperty("name") override val name: String, | ||||||
|         @JsonProperty("url") override val url: String, |         @JsonProperty("url") override val url: String, | ||||||
|         @JsonProperty("apiName") override val apiName: String, |         @JsonProperty("apiName") override val apiName: String, | ||||||
|         @JsonProperty("type") override val type: TvType, |         @JsonProperty("type") override var type: TvType? = null, | ||||||
|         @JsonProperty("posterUrl") override val posterUrl: String?, |         @JsonProperty("posterUrl") override var posterUrl: String?, | ||||||
| 
 | 
 | ||||||
|         @JsonProperty("watchPos") val watchPos: PosDur?, |         @JsonProperty("watchPos") val watchPos: PosDur?, | ||||||
| 
 | 
 | ||||||
|         @JsonProperty("id") override val id: Int?, |         @JsonProperty("id") override var id: Int?, | ||||||
|         @JsonProperty("parentId") val parentId: Int?, |         @JsonProperty("parentId") val parentId: Int?, | ||||||
|         @JsonProperty("episode") val episode: Int?, |         @JsonProperty("episode") val episode: Int?, | ||||||
|         @JsonProperty("season") val season: Int?, |         @JsonProperty("season") val season: Int?, | ||||||
|         @JsonProperty("isFromDownload") val isFromDownload: Boolean, |         @JsonProperty("isFromDownload") val isFromDownload: Boolean, | ||||||
|  |         @JsonProperty("quality") override var quality: SearchQuality? = null | ||||||
|     ) : SearchResponse |     ) : SearchResponse | ||||||
| 
 | 
 | ||||||
|     var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION |     var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION | ||||||
|  |  | ||||||
|  | @ -459,67 +459,64 @@ | ||||||
|                             android:layout_width="match_parent" |                             android:layout_width="match_parent" | ||||||
|                             android:layout_height="wrap_content" /> |                             android:layout_height="wrap_content" /> | ||||||
| 
 | 
 | ||||||
|                     <com.google.android.material.button.MaterialButton |                     <TextView | ||||||
|  |                             android:paddingTop="50dp" | ||||||
|                             android:visibility="gone" |                             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" |                             android:layout_width="match_parent" | ||||||
|                             app:icon="@drawable/ic_baseline_add_24" |                             android:layout_height="wrap_content" /> | ||||||
|                             android:id="@+id/result_add_sync" |  | ||||||
| 
 |  | ||||||
|                             android:layout_gravity="center_vertical" |  | ||||||
|                             android:layout_marginStart="0dp" |  | ||||||
|                             android:layout_marginBottom="10dp" |  | ||||||
|                             style="@style/WhiteButton" /> |  | ||||||
| 
 | 
 | ||||||
|                     <LinearLayout |                     <LinearLayout | ||||||
|                             tools:visibility="visible" |  | ||||||
|                             android:layout_marginTop="5dp" |  | ||||||
|                             android:orientation="vertical" |                             android:orientation="vertical" | ||||||
|                             android:id="@+id/result_movie_parent" |                             android:id="@+id/result_data_holder" | ||||||
|                             android:layout_width="match_parent" |                             android:layout_width="match_parent" | ||||||
|                             android:layout_height="wrap_content"> |                             android:layout_height="wrap_content"> | ||||||
| 
 |  | ||||||
|                         <com.google.android.material.button.MaterialButton |                         <com.google.android.material.button.MaterialButton | ||||||
|                                 android:layout_marginBottom="10dp" |                                 android:visibility="gone" | ||||||
|                                 android:nextFocusUp="@id/result_bookmark_button" |                                 android:text="@string/add_sync" | ||||||
|                                 android:nextFocusDown="@id/result_download_movie" |                                 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: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_marginStart="0dp" | ||||||
|                                 android:layout_marginEnd="0dp" |                                 android:layout_marginBottom="10dp" | ||||||
|                                 android:visibility="visible" |                                 style="@style/WhiteButton" /> | ||||||
|                                 android:layout_gravity="center_vertical" |  | ||||||
|                                 tools:text="Downloading" |  | ||||||
|                                 tools:icon="@drawable/netflix_download" |  | ||||||
| 
 | 
 | ||||||
|                                 android:clickable="true" |                         <LinearLayout | ||||||
|                                 android:focusable="true" |                                 tools:visibility="visible" | ||||||
|                                 android:layout_width="match_parent" />--> |                                 android:layout_marginTop="5dp" | ||||||
| 
 |                                 android:orientation="vertical" | ||||||
|                         <FrameLayout |                                 android:id="@+id/result_movie_parent" | ||||||
|                                 android:layout_width="match_parent" |                                 android:layout_width="match_parent" | ||||||
|                                 android:layout_height="wrap_content"> |                                 android:layout_height="wrap_content"> | ||||||
| 
 | 
 | ||||||
|                             <com.google.android.material.button.MaterialButton |                             <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:nextFocusUp="@id/result_play_movie" | ||||||
|                                     android:nextFocusDown="@id/result_season_button" |                                     android:nextFocusDown="@id/result_season_button" | ||||||
|  |                                     android:layout_marginBottom="10dp" | ||||||
| 
 | 
 | ||||||
|                                     android:id="@+id/result_download_movie" |                                     android:id="@+id/result_download_movie" | ||||||
|                                     style="@style/BlackButton" |                                     style="@style/BlackButton" | ||||||
|  | @ -527,339 +524,324 @@ | ||||||
|                                     android:layout_marginEnd="0dp" |                                     android:layout_marginEnd="0dp" | ||||||
|                                     android:visibility="visible" |                                     android:visibility="visible" | ||||||
|                                     android:layout_gravity="center_vertical" |                                     android:layout_gravity="center_vertical" | ||||||
|  |                                     tools:text="Downloading" | ||||||
|  |                                     tools:icon="@drawable/netflix_download" | ||||||
| 
 | 
 | ||||||
|                                     android:clickable="true" |                                     android:clickable="true" | ||||||
|                                     android:focusable="true" |                                     android:focusable="true" | ||||||
|                                     android:layout_width="match_parent" /> |                                     android:layout_width="match_parent" />--> | ||||||
| 
 | 
 | ||||||
|                             <LinearLayout |                             <FrameLayout | ||||||
|                                     android:gravity="center" |  | ||||||
|                                     android:orientation="horizontal" |  | ||||||
|                                     android:layout_gravity="center" |  | ||||||
|                                     android:layout_width="match_parent" |                                     android:layout_width="match_parent" | ||||||
|                                     android:layout_height="wrap_content"> |                                     android:layout_height="wrap_content"> | ||||||
| 
 | 
 | ||||||
|                                 <androidx.core.widget.ContentLoadingProgressBar |                                 <com.google.android.material.button.MaterialButton | ||||||
|                                         android:id="@+id/result_movie_progress_downloaded" |                                         android:nextFocusUp="@id/result_play_movie" | ||||||
|                                         android:layout_width="25dp" |                                         android:nextFocusDown="@id/result_season_button" | ||||||
|                                         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" /> |  | ||||||
| 
 | 
 | ||||||
|                                 <ImageView |                                         android:id="@+id/result_download_movie" | ||||||
|                                         android:id="@+id/result_movie_download_icon" |                                         style="@style/BlackButton" | ||||||
|                                         app:tint="?attr/white" |                                         android:layout_marginStart="0dp" | ||||||
|  |                                         android:layout_marginEnd="0dp" | ||||||
|                                         android:visibility="visible" |                                         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_gravity="center" | ||||||
|                                         android:layout_width="30dp" |                                         android:layout_width="match_parent" | ||||||
|                                         android:background="?selectableItemBackgroundBorderless" |                                         android:layout_height="wrap_content"> | ||||||
|                                         android:src="@drawable/ic_baseline_play_arrow_24" |  | ||||||
|                                         android:contentDescription="@string/download" /> |  | ||||||
| 
 | 
 | ||||||
|                                 <TextView |                                     <androidx.core.widget.ContentLoadingProgressBar | ||||||
|                                         android:id="@+id/result_movie_download_text" |                                             android:id="@+id/result_movie_progress_downloaded" | ||||||
|                                         android:letterSpacing="0.09" |                                             android:layout_width="25dp" | ||||||
|                                         android:textColor="?attr/textColor" |                                             android:layout_height="25dp" | ||||||
|                                         android:textSize="15sp" |                                             android:indeterminate="false" | ||||||
|                                         android:textStyle="bold" |                                             android:progressDrawable="@drawable/circular_progress_bar_filled" | ||||||
|                                         android:gravity="center" |                                             android:background="@drawable/circle_shape" | ||||||
|                                         android:textAllCaps="false" |                                             style="?android:attr/progressBarStyleHorizontal" | ||||||
|                                         tools:text="Downloading" |                                             android:max="100" | ||||||
|                                         android:layout_width="wrap_content" |                                             android:layout_margin="5dp" | ||||||
|                                         android:layout_height="match_parent" /> |                                             android:paddingEnd="5dp" | ||||||
|  |                                             android:paddingStart="5dp" | ||||||
|  |                                             android:layout_gravity="end|center_vertical" | ||||||
|  |                                             android:progress="30" | ||||||
|  |                                             android:visibility="visible" /> | ||||||
| 
 | 
 | ||||||
|                                 <TextView |                                     <ImageView | ||||||
|                                         android:visibility="gone" |                                             android:id="@+id/result_movie_download_icon" | ||||||
|                                         android:id="@+id/result_movie_download_text_precentage" |                                             app:tint="?attr/white" | ||||||
|                                         android:letterSpacing="0.09" |                                             android:visibility="visible" | ||||||
|                                         android:paddingStart="5dp" |                                             android:layout_height="wrap_content" | ||||||
|                                         android:paddingEnd="5dp" |                                             android:layout_gravity="center" | ||||||
|                                         android:textColor="?attr/textColor" |                                             android:layout_width="30dp" | ||||||
|                                         android:textSize="15sp" |                                             android:background="?selectableItemBackgroundBorderless" | ||||||
|                                         android:textStyle="bold" |                                             android:src="@drawable/ic_baseline_play_arrow_24" | ||||||
|                                         android:gravity="center" |                                             android:contentDescription="@string/download" /> | ||||||
|                                         android:textAllCaps="false" | 
 | ||||||
|                                         tools:text="68%" |                                     <TextView | ||||||
|                                         android:layout_width="wrap_content" |                                             android:id="@+id/result_movie_download_text" | ||||||
|                                         android:layout_height="match_parent" /> |                                             android:letterSpacing="0.09" | ||||||
|                             </LinearLayout> |                                             android:textColor="?attr/textColor" | ||||||
|                         </FrameLayout> |                                             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 |                             <!--<androidx.core.widget.ContentLoadingProgressBar | ||||||
|                                 android:layout_width="match_parent" |                                     android:layout_width="match_parent" | ||||||
|                                 android:layout_height="20dp" |                                     android:layout_height="20dp" | ||||||
|                                 tools:progress="50" |                                     tools:progress="50" | ||||||
|                                 android:id="@+id/result_movie_progress_downloaded" |                                     android:id="@+id/result_movie_progress_downloaded" | ||||||
|                                 android:indeterminate="false" |                                     android:indeterminate="false" | ||||||
|                                 style="?android:attr/progressBarStyleHorizontal" |                                     style="?android:attr/progressBarStyleHorizontal" | ||||||
|                                 android:progressBackgroundTint="?attr/colorPrimary" |                                     android:progressBackgroundTint="?attr/colorPrimary" | ||||||
|                                 android:max="100" |                                     android:max="100" | ||||||
|                                 android:layout_gravity="end|center_vertical" |                                     android:layout_gravity="end|center_vertical" | ||||||
|                                 android:progress="0" |                                     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" |  | ||||||
|                                     android:visibility="gone" |                                     android:visibility="gone" | ||||||
|                                     android:layout_gravity="center_vertical" |                                     tools:visibility="visible" /> | ||||||
|                                     android:layout_marginStart="0dp" |     --> | ||||||
|                                     style="@style/MultiSelectButton" /> |                             <!--  <TextView | ||||||
| 
 |                                       android:id="@+id/result_movie_text_progress" | ||||||
|                             <com.google.android.material.button.MaterialButton |                                       android:layout_gravity="center_vertical" | ||||||
|                                     tools:visibility="visible" |                                       android:gravity="center_vertical" | ||||||
|                                     tools:text="50-100" |                                       tools:text="128MB / 237MB" | ||||||
| 
 |                                       android:textColor="?attr/grayTextColor" | ||||||
|                                     android:nextFocusUp="@id/result_descript" |                                       android:layout_width="wrap_content" | ||||||
|                                     android:nextFocusRight="@id/result_season_button" |                                       android:layout_height="match_parent" />--> | ||||||
|                                     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> |                         </LinearLayout> | ||||||
| 
 | 
 | ||||||
|                         <com.facebook.shimmer.ShimmerFrameLayout |                         <LinearLayout | ||||||
|  |                                 android:visibility="gone" | ||||||
|                                 tools:visibility="visible" |                                 tools:visibility="visible" | ||||||
|                                 app:shimmer_base_alpha="0.2" |                                 android:layout_marginTop="5dp" | ||||||
|                                 app:shimmer_highlight_alpha="0.3" |                                 android:orientation="vertical" | ||||||
|                                 app:shimmer_duration="@integer/loading_time" |                                 android:id="@+id/result_series_parent" | ||||||
|                                 app:shimmer_auto_start="true" |  | ||||||
|                                 android:id="@+id/result_episode_loading" |  | ||||||
|                                 android:layout_width="match_parent" |                                 android:layout_width="match_parent" | ||||||
|                                 android:layout_height="match_parent" |                                 android:layout_height="wrap_content"> | ||||||
|                                 android:layout_gravity="center" | 
 | ||||||
|                                 android:layout_marginTop="15dp" |                             <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"> |                                 android:orientation="vertical"> | ||||||
| 
 | 
 | ||||||
|                             <LinearLayout |                             <LinearLayout | ||||||
|                                     android:orientation="vertical" |                                     android:layout_marginBottom="10dp" | ||||||
|  |                                     android:orientation="horizontal" | ||||||
|  |                                     android:gravity="center_vertical" | ||||||
|                                     android:layout_width="match_parent" |                                     android:layout_width="match_parent" | ||||||
|                                     android:layout_height="wrap_content"> |                                     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> |                             </LinearLayout> | ||||||
|                         </com.facebook.shimmer.ShimmerFrameLayout> |  | ||||||
|                         <!--<androidx.core.widget.ContentLoadingProgressBar |  | ||||||
|                                 android:id="@+id/result_episode_loading" |  | ||||||
| 
 | 
 | ||||||
|                                 style="@style/Widget.AppCompat.ProgressBar" |                             <com.facebook.shimmer.ShimmerFrameLayout | ||||||
|                                 android:layout_gravity="center" |                                     tools:visibility="visible" | ||||||
|                                 android:layout_width="50dp" |                                     app:shimmer_base_alpha="0.2" | ||||||
|                                 android:layout_height="50dp" />--> |                                     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 |                                 <LinearLayout | ||||||
|                                 android:descendantFocusability="afterDescendants" |                                         android:orientation="vertical" | ||||||
|                                 android:id="@+id/result_episodes" |                                         android:layout_width="match_parent" | ||||||
|                                 android:clipToPadding="false" |                                         android:layout_height="wrap_content"> | ||||||
|                                 android:layout_marginTop="0dp" | 
 | ||||||
|                                 android:paddingBottom="100dp" |                                     <include layout="@layout/loading_episode" /> | ||||||
|                                 tools:listitem="@layout/result_episode" | 
 | ||||||
|                                 android:layout_width="match_parent" |                                     <include layout="@layout/loading_episode" /> | ||||||
|                                 android:layout_height="wrap_content" /> | 
 | ||||||
|  |                                     <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> |                 </LinearLayout> | ||||||
|             </LinearLayout> |             </LinearLayout> | ||||||
|         </androidx.core.widget.NestedScrollView> |         </androidx.core.widget.NestedScrollView> | ||||||
|  |  | ||||||
|  | @ -429,5 +429,17 @@ | ||||||
|     <string name="actor_background">Background</string> |     <string name="actor_background">Background</string> | ||||||
| 
 | 
 | ||||||
|     <string name="home_source">Source</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> |     <string name="poster_image">Poster Image</string> | ||||||
| </resources> | </resources> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue