forked from recloudstream/cloudstream
		
	heavily improved android tv anime page navigation
This commit is contained in:
		
							parent
							
								
									ad2f2ec412
								
							
						
					
					
						commit
						83f3f7ff2e
					
				
					 7 changed files with 667 additions and 579 deletions
				
			
		|  | @ -379,7 +379,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { | |||
|                                 apis = allProviders.filter { api -> | ||||
|                                     val name = api.javaClass.simpleName | ||||
|                                     // if the provider does not exist in the json file, then it is shown by default | ||||
|                                     !providersJsonMap.containsKey(name) || acceptableProviders.contains(name) || restrictedApis.contains(name) | ||||
|                                     !providersJsonMap.containsKey(name) || acceptableProviders.contains( | ||||
|                                         name | ||||
|                                     ) || restrictedApis.contains(name) | ||||
|                                 } | ||||
|                             } | ||||
|                         } catch (e: Exception) { | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ import com.google.android.gms.cast.framework.CastContext | |||
| import com.google.android.gms.cast.framework.CastState | ||||
| import com.google.android.material.button.MaterialButton | ||||
| import com.lagradost.cloudstream3.* | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiFromName | ||||
| import com.lagradost.cloudstream3.APIHolder.getId | ||||
| import com.lagradost.cloudstream3.AcraApplication.Companion.context | ||||
|  | @ -583,7 +584,6 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|     @SuppressLint("SetTextI18n") | ||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||||
|         super.onViewCreated(view, savedInstanceState) | ||||
| 
 | ||||
|         result_cast_items?.let { | ||||
|             PanelsChildGestureRegionObserver.Provider.get().register(it) | ||||
|         } | ||||
|  | @ -1077,6 +1077,65 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /** | ||||
|          * Sets next focus to allow navigation up and down between 2 views | ||||
|          * if either of them is null nothing happens. | ||||
|          **/ | ||||
|         fun setFocusUpAndDown(upper: View?, down: View?) { | ||||
|             if (upper == null || down == null) return | ||||
|             upper.nextFocusDownId = down.id | ||||
|             down.nextFocusUpId = upper.id | ||||
|         } | ||||
| 
 | ||||
|         // This is to band-aid FireTV navigation | ||||
|         result_season_button?.isFocusableInTouchMode = context?.isTvSettings() == true | ||||
|         result_episode_select?.isFocusableInTouchMode = context?.isTvSettings() == true | ||||
|         result_dub_select?.isFocusableInTouchMode = context?.isTvSettings() == true | ||||
| 
 | ||||
|         observe(viewModel.selectedSeason) { season -> | ||||
|             result_season_button?.text = fromIndexToSeasonText(season) | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.seasonSelections) { seasonList -> | ||||
|             result_season_button?.visibility = if (seasonList.size <= 1) GONE else VISIBLE.also { | ||||
| 
 | ||||
|                 // If the season button is visible the result season button will be next focus down | ||||
|                 if (result_series_parent?.isVisible == true) | ||||
|                     setFocusUpAndDown(result_resume_series_button, result_season_button) | ||||
|                 else | ||||
|                     setFocusUpAndDown(result_bookmark_button, result_season_button) | ||||
|             } | ||||
| 
 | ||||
|             result_season_button?.setOnClickListener { | ||||
|                 result_season_button?.popupMenuNoIconsAndNoStringRes( | ||||
|                     items = seasonList | ||||
|                         .map { Pair(it ?: -2, fromIndexToSeasonText(it)) }, | ||||
|                 ) { | ||||
|                     val id = this.itemId | ||||
| 
 | ||||
|                     viewModel.changeSeason(if (id == -2) null else id) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.selectedRange) { range -> | ||||
|             result_episode_select?.text = range | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.rangeOptions) { range -> | ||||
|             episodeRanges = range | ||||
|             result_episode_select?.visibility = if (range.size <= 1) GONE else VISIBLE.also { | ||||
| 
 | ||||
|                 // If Season button is invisible then the bookmark button next focus is episode select | ||||
|                 if (result_season_button?.isVisible != true) { | ||||
|                     if (result_series_parent?.isVisible == true) | ||||
|                         setFocusUpAndDown(result_resume_series_button, result_episode_select) | ||||
|                     else | ||||
|                         setFocusUpAndDown(result_bookmark_button, result_episode_select) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.episodes) { episodeList -> | ||||
|             lateFixDownloadButton(episodeList.size <= 1) // movies can have multible parts but still be *movies* this will fix this | ||||
|             var isSeriesVisible = false | ||||
|  | @ -1118,6 +1177,17 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|             } | ||||
| 
 | ||||
|             result_series_parent?.isVisible = isSeriesVisible | ||||
|             if (isSeriesVisible) { | ||||
|                 val down = when { | ||||
|                     result_season_button?.isVisible == true -> result_season_button | ||||
|                     result_episode_select?.isVisible == true -> result_episode_select | ||||
|                     result_dub_select?.isVisible == true -> result_dub_select | ||||
|                     else -> null | ||||
|                 } | ||||
|                 setFocusUpAndDown(result_resume_series_button, down) | ||||
|                 setFocusUpAndDown(result_bookmark_button, result_resume_series_button) | ||||
|             } | ||||
| 
 | ||||
|             result_resume_progress_holder?.isVisible = isProgressVisible | ||||
|             context?.getString(if (isProgressVisible) R.string.resume else R.string.play_movie_button) | ||||
|                 ?.let { | ||||
|  | @ -1150,28 +1220,7 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|             startValue = null | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.selectedSeason) | ||||
|         { season -> | ||||
|             result_season_button?.text = fromIndexToSeasonText(season) | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.seasonSelections) | ||||
|         { seasonList -> | ||||
|             result_season_button?.visibility = if (seasonList.size <= 1) GONE else VISIBLE | ||||
|             result_season_button?.setOnClickListener { | ||||
|                 result_season_button?.popupMenuNoIconsAndNoStringRes( | ||||
|                     items = seasonList | ||||
|                         .map { Pair(it ?: -2, fromIndexToSeasonText(it)) }, | ||||
|                 ) { | ||||
|                     val id = this.itemId | ||||
| 
 | ||||
|                     viewModel.changeSeason(if (id == -2) null else id) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.publicEpisodes) | ||||
|         { episodes -> | ||||
|         observe(viewModel.publicEpisodes) { episodes -> | ||||
|             when (episodes) { | ||||
|                 is Resource.Failure -> { | ||||
|                     result_episode_loading?.isVisible = false | ||||
|  | @ -1193,21 +1242,39 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.dubStatus) | ||||
|         { status -> | ||||
|         observe(viewModel.dubStatus) { status -> | ||||
|             result_dub_select?.text = status.toString() | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.dubSubSelections) | ||||
|         { range -> | ||||
|         val preferDub = context?.getApiDubstatusSettings()?.all { it == DubStatus.Dubbed } == true | ||||
| 
 | ||||
|         observe(viewModel.dubSubSelections) { range -> | ||||
|             dubRange = range | ||||
| 
 | ||||
|             if (preferDub && dubRange?.contains(DubStatus.Dubbed) == true){ | ||||
|                 viewModel.changeDubStatus(DubStatus.Dubbed) | ||||
|             } | ||||
| 
 | ||||
|             result_dub_select?.visibility = if (range.size <= 1) GONE else VISIBLE | ||||
| 
 | ||||
|             if (result_season_button?.isVisible != true && result_episode_select?.isVisible != true) { | ||||
|                 if (result_series_parent?.isVisible == true) | ||||
|                     setFocusUpAndDown(result_resume_series_button, result_dub_select) | ||||
|                 else | ||||
|                     setFocusUpAndDown(result_bookmark_button, result_dub_select) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         result_cast_items?.setOnFocusChangeListener { v, hasFocus -> | ||||
|             // Always escape focus | ||||
|             if (hasFocus) result_bookmark_button?.requestFocus() | ||||
|         } | ||||
| 
 | ||||
|         result_dub_select.setOnClickListener { | ||||
|             val ranges = dubRange | ||||
|             if (ranges != null) { | ||||
|                 it.popupMenuNoIconsAndNoStringRes(ranges.map { status -> | ||||
|                 it.popupMenuNoIconsAndNoStringRes(ranges | ||||
|                     .map { status -> | ||||
|                         Pair( | ||||
|                             status.ordinal, | ||||
|                             status.toString() | ||||
|  | @ -1219,16 +1286,6 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.selectedRange) | ||||
|         { range -> | ||||
|             result_episode_select?.text = range | ||||
|         } | ||||
| 
 | ||||
|         observe(viewModel.rangeOptions) { range -> | ||||
|             episodeRanges = range | ||||
|             result_episode_select?.visibility = if (range.size <= 1) GONE else VISIBLE | ||||
|         } | ||||
| 
 | ||||
|         result_episode_select.setOnClickListener { | ||||
|             val ranges = episodeRanges | ||||
|             if (ranges != null) { | ||||
|  |  | |||
|  | @ -44,7 +44,6 @@ class ResultViewModel : ViewModel() { | |||
|     private var repo: APIRepository? = null | ||||
|     private var generator: IGenerator? = null | ||||
| 
 | ||||
| 
 | ||||
|     private val _resultResponse: MutableLiveData<Resource<Any?>> = MutableLiveData() | ||||
|     private val _episodes: MutableLiveData<List<ResultEpisode>> = MutableLiveData() | ||||
|     private val episodeById: MutableLiveData<HashMap<Int, Int>> = | ||||
|  | @ -220,7 +219,10 @@ class ResultViewModel : ViewModel() { | |||
|                 currentSubs.add(sub) | ||||
|             }) | ||||
| 
 | ||||
|             return@safeApiCall Pair(currentLinks.toSet(), currentSubs.toSet()) as Pair<Set<ExtractorLink>, Set<SubtitleData>> | ||||
|             return@safeApiCall Pair( | ||||
|                 currentLinks.toSet(), | ||||
|                 currentSubs.toSet() | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -247,13 +249,15 @@ class ResultViewModel : ViewModel() { | |||
|         generator = RepoLinkGenerator(list) | ||||
| 
 | ||||
|         val set = HashMap<Int, Int>() | ||||
|         val range = selectedRangeInt.value | ||||
| 
 | ||||
|         list.withIndex().forEach { set[it.value.id] = it.index } | ||||
|         episodeById.postValue(set) | ||||
| 
 | ||||
|         filterEpisodes( | ||||
|             list, | ||||
|             if (selection == -1) getResultSeason(localId ?: id.value ?: return) else selection, null | ||||
|             if (selection == -1) getResultSeason(localId ?: id.value ?: return) else selection, | ||||
|             range | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|  | @ -330,9 +334,7 @@ class ResultViewModel : ViewModel() { | |||
|                         val status = getDub(mainId) | ||||
|                         val statuses = d.episodes.map { it.key } | ||||
|                         val dubStatus = if (statuses.contains(status)) status else statuses.first() | ||||
|                         _dubStatus.postValue(dubStatus) | ||||
| 
 | ||||
|                         _dubSubSelections.postValue(d.episodes.keys) | ||||
|                         val fillerEpisodes = | ||||
|                             if (showFillers) safeApiCall { getFillerEpisodes(d.name) } else null | ||||
| 
 | ||||
|  | @ -366,10 +368,14 @@ class ResultViewModel : ViewModel() { | |||
| 
 | ||||
|                             Pair(ep.key, episodes) | ||||
|                         }.toMap() | ||||
| 
 | ||||
|                         // These posts needs to be in this order as to make the preferDub in ResultFragment work | ||||
|                         _dubSubEpisodes.postValue(res) | ||||
|                         res[dubStatus]?.let { episodes -> | ||||
|                             updateEpisodes(mainId, episodes, -1) | ||||
|                         } | ||||
|                         _dubStatus.postValue(dubStatus) | ||||
|                         _dubSubSelections.postValue(d.episodes.keys) | ||||
|                     } | ||||
| 
 | ||||
|                     is TvSeriesLoadResponse -> { | ||||
|  |  | |||
							
								
								
									
										6
									
								
								app/src/main/res/color/tag_stroke_color.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/src/main/res/color/tag_stroke_color.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <selector xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|   <item android:color="?attr/colorPrimary" android:state_checked="true"/> | ||||
|   <item android:color="?attr/colorPrimary" android:state_focused="true"/> | ||||
|   <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_checked="false"/> | ||||
| </selector> | ||||
|  | @ -2,45 +2,45 @@ | |||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|         android:layout_width="match_parent" | ||||
|     android:id="@+id/result_root" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:background="?attr/primaryBlackBackground" | ||||
|     android:clickable="true" | ||||
|     android:focusable="true"> | ||||
| 
 | ||||
|     <com.facebook.shimmer.ShimmerFrameLayout | ||||
|             tools:visibility="gone" | ||||
|             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_loading" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_gravity="center" | ||||
|             android:orientation="vertical"> | ||||
|         android:orientation="vertical" | ||||
|         app:shimmer_auto_start="true" | ||||
|         app:shimmer_base_alpha="0.2" | ||||
|         app:shimmer_duration="@integer/loading_time" | ||||
|         app:shimmer_highlight_alpha="0.3" | ||||
|         tools:visibility="gone"> | ||||
| 
 | ||||
|         <LinearLayout | ||||
|                 android:layout_margin="@dimen/result_padding" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_margin="@dimen/result_padding" | ||||
|             android:orientation="vertical"> | ||||
| 
 | ||||
|             <LinearLayout | ||||
|                     android:layout_marginBottom="@dimen/loading_margin" | ||||
|                     android:orientation="horizontal" | ||||
|                 android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent"> | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:layout_marginBottom="@dimen/loading_margin" | ||||
|                 android:orientation="horizontal"> | ||||
| 
 | ||||
|                 <include layout="@layout/loading_poster" /> | ||||
| 
 | ||||
|                 <LinearLayout | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:layout_marginStart="@dimen/loading_margin" | ||||
|                     android:layout_marginEnd="@dimen/loading_margin" | ||||
|                         android:orientation="vertical" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="match_parent"> | ||||
|                     android:orientation="vertical"> | ||||
| 
 | ||||
|                     <include layout="@layout/loading_line" /> | ||||
| 
 | ||||
|  | @ -76,92 +76,92 @@ | |||
|     <LinearLayout | ||||
|         android:id="@+id/result_loading_error" | ||||
| 
 | ||||
|             android:visibility="gone" | ||||
|             tools:visibility="gone" | ||||
|             android:orientation="vertical" | ||||
|             android:layout_gravity="center" | ||||
|         android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content"> | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="center" | ||||
|         android:orientation="vertical" | ||||
|         android:visibility="gone" | ||||
|         tools:visibility="gone"> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|                 android:layout_gravity="center" | ||||
|             android:id="@+id/result_reload_connectionerror" | ||||
|             style="@style/WhiteButton" | ||||
| 
 | ||||
|                 android:layout_margin="5dp" | ||||
| 
 | ||||
|                 app:icon="@drawable/ic_baseline_autorenew_24" | ||||
|                 android:text="@string/reload_error" | ||||
|                 android:id="@+id/result_reload_connectionerror" | ||||
|             android:layout_width="wrap_content" | ||||
|                 android:minWidth="200dp" /> | ||||
| 
 | ||||
|             android:layout_gravity="center" | ||||
|             android:layout_margin="5dp" | ||||
|             android:minWidth="200dp" | ||||
|             android:text="@string/reload_error" | ||||
|             app:icon="@drawable/ic_baseline_autorenew_24" /> | ||||
| 
 | ||||
|         <com.google.android.material.button.MaterialButton | ||||
|                 android:layout_gravity="center" | ||||
|             android:id="@+id/result_reload_connection_open_in_browser" | ||||
|             style="@style/BlackButton" | ||||
| 
 | ||||
|                 android:layout_margin="5dp" | ||||
| 
 | ||||
|                 app:icon="@drawable/ic_baseline_public_24" | ||||
|                 android:text="@string/result_open_in_browser" | ||||
|                 android:id="@+id/result_reload_connection_open_in_browser" | ||||
|             android:layout_width="wrap_content" | ||||
|                 android:minWidth="200dp" /> | ||||
| 
 | ||||
|             android:layout_gravity="center" | ||||
|             android:layout_margin="5dp" | ||||
|             android:minWidth="200dp" | ||||
|             android:text="@string/result_open_in_browser" | ||||
|             app:icon="@drawable/ic_baseline_public_24" /> | ||||
| 
 | ||||
|         <TextView | ||||
|             android:id="@+id/result_error_text" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_gravity="center" | ||||
|             android:layout_margin="5dp" | ||||
|             android:gravity="center" | ||||
|                 android:layout_gravity="center" | ||||
|                 android:id="@+id/result_error_text" | ||||
|                 android:textColor="?attr/textColor" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content" /> | ||||
|             android:textColor="?attr/textColor" /> | ||||
|     </LinearLayout> | ||||
| 
 | ||||
|     <FrameLayout | ||||
|             android:visibility="gone" | ||||
|             tools:visibility="visible" | ||||
|         android:id="@+id/result_finish_loading" | ||||
|         android:layout_width="match_parent" | ||||
|             android:layout_height="match_parent"> | ||||
|         android:layout_height="match_parent" | ||||
|         android:visibility="gone" | ||||
|         tools:visibility="visible"> | ||||
| 
 | ||||
|         <FrameLayout | ||||
|             android:id="@+id/result_poster_blur_holder" | ||||
| 
 | ||||
|                 android:visibility="visible" | ||||
|             android:layout_width="match_parent" | ||||
|                 android:layout_height="230dp"> | ||||
|             android:layout_height="230dp" | ||||
|             android:visibility="visible"> | ||||
| 
 | ||||
|             <ImageView | ||||
|                 android:id="@+id/result_poster_blur" | ||||
| 
 | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="match_parent" | ||||
|                     android:scaleType="centerCrop" | ||||
|                 android:alpha="0" | ||||
|                     tools:src="@drawable/example_poster" | ||||
|                 android:background="?attr/primaryGrayBackground" | ||||
|                     tools:ignore="ContentDescription" /> | ||||
|                 android:scaleType="centerCrop" | ||||
|                 tools:ignore="ContentDescription" | ||||
|                 tools:src="@drawable/example_poster" /> | ||||
| 
 | ||||
|             <ImageView | ||||
|                     android:src="@drawable/background_shadow" | ||||
|                     android:layout_gravity="bottom" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="30dp" | ||||
|                 android:layout_gravity="bottom" | ||||
|                 android:src="@drawable/background_shadow" | ||||
|                 tools:ignore="ContentDescription" /> | ||||
|         </FrameLayout> | ||||
| 
 | ||||
|         <androidx.core.widget.NestedScrollView | ||||
|             android:id="@+id/result_scroll" | ||||
|                 android:background="?attr/primaryGrayBackground" | ||||
| 
 | ||||
|             android:layout_width="match_parent" | ||||
|                 android:layout_height="wrap_content"> | ||||
| 
 | ||||
|             android:layout_height="wrap_content" | ||||
|             android:background="?attr/primaryGrayBackground"> | ||||
| 
 | ||||
|             <LinearLayout | ||||
|                     android:background="?attr/primaryBlackBackground" | ||||
|                     android:orientation="vertical" | ||||
|                 android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent"> | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:background="?attr/primaryBlackBackground" | ||||
|                 android:orientation="vertical"> | ||||
| 
 | ||||
|                 <!-- | ||||
|                 <FrameLayout | ||||
|  | @ -261,59 +261,59 @@ | |||
|                 </FrameLayout>--> | ||||
| 
 | ||||
|                 <LinearLayout | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:clipToPadding="false" | ||||
|                     android:orientation="vertical" | ||||
|                     android:paddingStart="@dimen/result_padding" | ||||
|                         android:paddingEnd="@dimen/result_padding" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="match_parent"> | ||||
|                     android:paddingEnd="@dimen/result_padding"> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                             android:visibility="visible" | ||||
|                             android:layout_marginBottom="15dp" | ||||
|                             android:layout_marginTop="10dp" | ||||
|                             android:orientation="horizontal" | ||||
|                         android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content"> | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginTop="10dp" | ||||
|                         android:layout_marginBottom="15dp" | ||||
|                         android:orientation="horizontal" | ||||
|                         android:visibility="visible"> | ||||
| 
 | ||||
|                         <androidx.cardview.widget.CardView | ||||
|                             android:id="@+id/result_poster_holder" | ||||
|                                 app:cardCornerRadius="@dimen/rounded_image_radius" | ||||
|                             android:layout_width="100dp" | ||||
|                                 android:layout_height="140dp"> | ||||
|                             android:layout_height="140dp" | ||||
|                             app:cardCornerRadius="@dimen/rounded_image_radius"> | ||||
| 
 | ||||
|                             <ImageView | ||||
|                                     android:foreground="@drawable/outline_drawable" | ||||
| 
 | ||||
|                                 android:id="@+id/result_poster" | ||||
|                                     android:scaleType="centerCrop" | ||||
| 
 | ||||
|                                 android:layout_width="match_parent" | ||||
|                                 android:layout_height="match_parent" | ||||
|                                     tools:src="@drawable/example_poster" | ||||
|                                     android:contentDescription="@string/result_poster_img_des" /> | ||||
|                                 android:contentDescription="@string/result_poster_img_des" | ||||
|                                 android:foreground="@drawable/outline_drawable" | ||||
|                                 android:scaleType="centerCrop" | ||||
|                                 tools:src="@drawable/example_poster" /> | ||||
|                         </androidx.cardview.widget.CardView> | ||||
| 
 | ||||
|                         <LinearLayout | ||||
|                                 android:layout_marginStart="10dp" | ||||
|                                 android:orientation="vertical" | ||||
|                             android:layout_width="match_parent" | ||||
|                                 android:layout_height="match_parent"> | ||||
|                             android:layout_height="match_parent" | ||||
|                             android:layout_marginStart="10dp" | ||||
|                             android:orientation="vertical"> | ||||
| 
 | ||||
|                             <TextView | ||||
|                                     android:maxLines="2" | ||||
|                                     android:layout_marginBottom="5dp" | ||||
|                                 android:id="@+id/result_title" | ||||
|                                     tools:text="The Perfect Run The Perfect Run" | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:layout_marginBottom="5dp" | ||||
|                                 android:maxLines="2" | ||||
|                                 android:textColor="?attr/textColor" | ||||
|                                 android:textSize="20sp" | ||||
|                                 android:textStyle="bold" | ||||
|                                     android:textColor="?attr/textColor" | ||||
|                                     android:layout_width="wrap_content" | ||||
|                                     android:layout_height="wrap_content" /> | ||||
|                                 tools:text="The Perfect Run The Perfect Run" /> | ||||
| 
 | ||||
|                             <com.lagradost.cloudstream3.widget.FlowLayout | ||||
|                                     app:itemSpacing="10dp" | ||||
|                                 android:layout_width="match_parent" | ||||
|                                     android:layout_height="wrap_content"> | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 app:itemSpacing="10dp"> | ||||
| 
 | ||||
|                                 <com.google.android.material.button.MaterialButton | ||||
|                                     android:id="@+id/result_meta_site" | ||||
|  | @ -327,9 +327,9 @@ | |||
|                                     tools:text="Movie" /> | ||||
| 
 | ||||
|                                 <TextView | ||||
|                                         tools:text="2022" | ||||
|                                     android:id="@+id/result_meta_year" | ||||
|                                         style="@style/ResultInfoText" /> | ||||
|                                     style="@style/ResultInfoText" | ||||
|                                     tools:text="2022" /> | ||||
| 
 | ||||
|                                 <TextView | ||||
|                                     android:id="@+id/result_meta_rating" | ||||
|  | @ -342,8 +342,8 @@ | |||
|                                     tools:text="Ongoing" /> | ||||
| 
 | ||||
|                                 <TextView | ||||
|                                         style="@style/ResultInfoText" | ||||
|                                     android:id="@+id/result_meta_duration" | ||||
|                                     style="@style/ResultInfoText" | ||||
|                                     tools:text="121min" /> | ||||
|                             </com.lagradost.cloudstream3.widget.FlowLayout> | ||||
| 
 | ||||
|  | @ -352,106 +352,109 @@ | |||
|                                 android:layout_height="match_parent"> | ||||
| 
 | ||||
|                                 <TextView | ||||
|                                         android:textColor="?attr/textColor" | ||||
|                                     android:id="@+id/result_descript" | ||||
|                                     android:layout_width="match_parent" | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:foreground="@drawable/outline_drawable" | ||||
|                                         android:paddingTop="5dp" | ||||
|                                         android:paddingBottom="0dp" | ||||
|                                     android:nextFocusUp="@id/result_back" | ||||
|                                     android:nextFocusDown="@id/result_bookmark_button" | ||||
| 
 | ||||
|                                         android:id="@+id/result_descript" | ||||
|                                     android:paddingTop="5dp" | ||||
|                                     android:paddingBottom="0dp" | ||||
|                                     android:textColor="?attr/textColor" | ||||
|                                     android:textSize="15sp" | ||||
|                                         tools:text="Ryan Quicksave Romano is an eccentric adventurer with a strange power: he can create a save-point in time and redo his life whenever he dies. Arriving in New Rome, the glitzy capital of sin of a rebuilding Europe, he finds the city torn between mega-corporations, sponsored heroes, superpowered criminals, and true monsters. It's a time of chaos, where potions can grant the power to rule the world and dangers lurk everywhere. " | ||||
|                                         android:layout_width="match_parent" | ||||
|                                         android:layout_height="wrap_content" /> | ||||
|                                     tools:text="Ryan Quicksave Romano is an eccentric adventurer with a strange power: he can create a save-point in time and redo his life whenever he dies. Arriving in New Rome, the glitzy capital of sin of a rebuilding Europe, he finds the city torn between mega-corporations, sponsored heroes, superpowered criminals, and true monsters. It's a time of chaos, where potions can grant the power to rule the world and dangers lurk everywhere. " /> | ||||
| 
 | ||||
|                                 <ImageView | ||||
|                                         android:src="@drawable/background_shadow" | ||||
|                                         android:layout_gravity="bottom" | ||||
|                                     android:layout_width="match_parent" | ||||
|                                     android:layout_height="30dp" | ||||
|                                     android:layout_gravity="bottom" | ||||
|                                     android:src="@drawable/background_shadow" | ||||
|                                     tools:ignore="ContentDescription" /> | ||||
|                             </FrameLayout> | ||||
|                         </LinearLayout> | ||||
|                     </LinearLayout> | ||||
| 
 | ||||
|                     <com.google.android.material.button.MaterialButton | ||||
|                             tools:visibility="gone" | ||||
|                             android:layout_marginTop="0dp" | ||||
|                             android:paddingTop="0dp" | ||||
|                         android:id="@+id/result_bookmark_button" | ||||
|                         style="@style/BlackButton" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_gravity="center_vertical" | ||||
|                         android:layout_marginStart="0dp" | ||||
|                             android:layout_marginBottom="10dp" | ||||
|                             android:minWidth="100dp" | ||||
|                         android:layout_marginTop="0dp" | ||||
| 
 | ||||
|                             app:icon="@drawable/ic_baseline_bookmark_24" | ||||
|                         android:layout_marginBottom="10dp" | ||||
|                         android:backgroundTint="?attr/primaryBlackBackground" | ||||
| 
 | ||||
|                         android:minWidth="100dp" | ||||
|                         android:nextFocusLeft="@id/result_back" | ||||
|                             android:nextFocusDown="@id/result_play_movie" | ||||
|                             android:nextFocusUp="@id/result_descript" | ||||
|                         android:nextFocusRight="@id/result_search" | ||||
|                         android:nextFocusUp="@id/result_descript" | ||||
| 
 | ||||
|                             android:layout_gravity="center_vertical" | ||||
|                         android:nextFocusDown="@id/result_play_movie" | ||||
|                         android:paddingTop="0dp" | ||||
|                         app:cornerRadius="4dp" | ||||
|                             android:id="@+id/result_bookmark_button" | ||||
|                         app:icon="@drawable/ic_baseline_bookmark_24" | ||||
|                         tools:text="Bookmark" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             style="@style/BlackButton"> | ||||
|                         tools:visibility="gone"> | ||||
| 
 | ||||
|                         <requestFocus /> | ||||
|                     </com.google.android.material.button.MaterialButton> | ||||
| 
 | ||||
|                     <TextView | ||||
|                             android:maxLines="2" | ||||
|                             android:ellipsize="end" | ||||
|                             android:layout_marginBottom="5dp" | ||||
|                             android:textColor="?attr/grayTextColor" | ||||
|                         android:id="@+id/result_cast_text" | ||||
|                             android:textSize="15sp" | ||||
|                             tools:text="Cast: Joe Ligma" | ||||
|                         android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" /> | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginBottom="5dp" | ||||
|                         android:ellipsize="end" | ||||
|                         android:maxLines="2" | ||||
|                         android:textColor="?attr/grayTextColor" | ||||
|                         android:textSize="15sp" | ||||
|                         tools:text="Cast: Joe Ligma" /> | ||||
| 
 | ||||
|                     <androidx.recyclerview.widget.RecyclerView | ||||
|                             android:paddingTop="5dp" | ||||
|                             tools:itemCount="2" | ||||
|                             android:fadingEdge="horizontal" | ||||
|                             android:requiresFadingEdge="horizontal" | ||||
|                             android:orientation="horizontal" | ||||
|                             app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" | ||||
|                         android:id="@+id/result_cast_items" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:descendantFocusability="afterDescendants" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:fadingEdge="horizontal" | ||||
|                         android:focusableInTouchMode="false" | ||||
|                         android:focusable="false" | ||||
|                         android:orientation="horizontal" | ||||
|                         android:paddingTop="5dp" | ||||
|                         android:requiresFadingEdge="horizontal" | ||||
|                         app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" | ||||
|                         tools:itemCount="2" | ||||
|                         tools:listitem="@layout/cast_item" /> | ||||
| 
 | ||||
|                     <TextView | ||||
|                             android:textColor="?attr/grayTextColor" | ||||
|                         android:id="@+id/result_vpn" | ||||
|                             android:textSize="15sp" | ||||
|                             tools:text="@string/vpn_torrent" | ||||
|                         android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content" /> | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:textColor="?attr/grayTextColor" | ||||
|                         android:textSize="15sp" | ||||
|                         tools:text="@string/vpn_torrent" /> | ||||
| 
 | ||||
|                     <TextView | ||||
|                         android:id="@+id/result_info" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_marginBottom="5dp" | ||||
|                         android:textColor="?attr/grayTextColor" | ||||
|                             android:id="@+id/result_info" | ||||
|                         android:textSize="15sp" | ||||
|                             tools:text="@string/provider_info_meta" | ||||
|                             android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content" /> | ||||
|                         tools:text="@string/provider_info_meta" /> | ||||
| 
 | ||||
|                     <TextView | ||||
|                             android:visibility="gone" | ||||
|                         android:id="@+id/result_tag_holder" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                             android:text="@string/result_tags" | ||||
|                             android:textSize="17sp" | ||||
|                         android:layout_marginTop="10dp" | ||||
|                         android:layout_marginBottom="10dp" | ||||
|                         android:text="@string/result_tags" | ||||
|                         android:textColor="?attr/textColor" | ||||
|                         android:textSize="17sp" | ||||
|                         android:textStyle="normal" | ||||
|                             android:textColor="?attr/textColor" /> | ||||
|                         android:visibility="gone" /> | ||||
| 
 | ||||
| 
 | ||||
|                     <com.lagradost.cloudstream3.widget.FlowLayout | ||||
|  | @ -460,57 +463,58 @@ | |||
|                         android:layout_height="wrap_content" /> | ||||
| 
 | ||||
|                     <TextView | ||||
|                             android:paddingTop="50dp" | ||||
|                             android:visibility="gone" | ||||
|                             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_height="wrap_content" /> | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_gravity="center" | ||||
|                         android:gravity="center" | ||||
|                         android:paddingTop="50dp" | ||||
|                         android:text="@string/coming_soon" | ||||
|                         android:textColor="?attr/textColor" | ||||
|                         android:textSize="20sp" | ||||
|                         android:textStyle="bold" | ||||
|                         android:visibility="gone" /> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                             android:orientation="vertical" | ||||
|                         android:id="@+id/result_data_holder" | ||||
|                         android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content"> | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:orientation="vertical"> | ||||
| 
 | ||||
|                         <com.google.android.material.button.MaterialButton | ||||
|                                 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" | ||||
|                             style="@style/WhiteButton" | ||||
|                             android:layout_width="match_parent" | ||||
|                             android:layout_gravity="center_vertical" | ||||
|                             android:layout_marginStart="0dp" | ||||
| 
 | ||||
|                             android:layout_marginBottom="10dp" | ||||
|                             android:text="@string/add_sync" | ||||
|                             android:visibility="gone" | ||||
|                             app:icon="@drawable/ic_baseline_add_24" /> | ||||
| 
 | ||||
|                         <LinearLayout | ||||
|                             android:id="@+id/result_movie_parent" | ||||
|                             android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_marginTop="5dp" | ||||
|                             android:orientation="vertical" | ||||
|                             tools:visibility="visible"> | ||||
| 
 | ||||
|                             <com.google.android.material.button.MaterialButton | ||||
|                                 android:id="@+id/result_play_movie" | ||||
|                                 style="@style/WhiteButton" | ||||
|                                 android:layout_width="match_parent" | ||||
| 
 | ||||
|                                 android:layout_gravity="center_vertical" | ||||
|                                 android:layout_marginStart="0dp" | ||||
|                                 android:layout_marginBottom="10dp" | ||||
|                                 style="@style/WhiteButton" /> | ||||
| 
 | ||||
|                         <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_marginEnd="0dp" | ||||
|                                 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" /> | ||||
|                                 android:visibility="visible" | ||||
|                                 app:icon="@drawable/ic_baseline_play_arrow_24" /> | ||||
| 
 | ||||
| 
 | ||||
|                             <!--<com.google.android.material.button.MaterialButton | ||||
|  | @ -536,80 +540,80 @@ | |||
|                                 android:layout_height="wrap_content"> | ||||
| 
 | ||||
|                                 <com.google.android.material.button.MaterialButton | ||||
|                                         android:nextFocusUp="@id/result_play_movie" | ||||
|                                         android:nextFocusDown="@id/result_season_button" | ||||
| 
 | ||||
|                                     android:id="@+id/result_download_movie" | ||||
|                                     style="@style/BlackButton" | ||||
| 
 | ||||
|                                     android:layout_width="match_parent" | ||||
|                                     android:layout_gravity="center_vertical" | ||||
|                                     android:layout_marginStart="0dp" | ||||
|                                     android:layout_marginEnd="0dp" | ||||
|                                         android:visibility="visible" | ||||
|                                         android:layout_gravity="center_vertical" | ||||
| 
 | ||||
|                                     android:clickable="true" | ||||
|                                     android:focusable="true" | ||||
|                                         android:layout_width="match_parent" /> | ||||
| 
 | ||||
|                                     android:nextFocusUp="@id/result_play_movie" | ||||
|                                     android:nextFocusDown="@id/result_season_button" | ||||
|                                     android:visibility="visible" /> | ||||
| 
 | ||||
|                                 <LinearLayout | ||||
|                                         android:gravity="center" | ||||
|                                         android:orientation="horizontal" | ||||
|                                         android:layout_gravity="center" | ||||
|                                     android:layout_width="match_parent" | ||||
|                                         android:layout_height="wrap_content"> | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:layout_gravity="center" | ||||
|                                     android:gravity="center" | ||||
|                                     android:orientation="horizontal"> | ||||
| 
 | ||||
|                                     <androidx.core.widget.ContentLoadingProgressBar | ||||
|                                         android:id="@+id/result_movie_progress_downloaded" | ||||
|                                         style="?android:attr/progressBarStyleHorizontal" | ||||
|                                         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:layout_margin="5dp" | ||||
|                                         android:background="@drawable/circle_shape" | ||||
|                                         android:indeterminate="false" | ||||
|                                         android:max="100" | ||||
|                                         android:paddingStart="5dp" | ||||
|                                         android:paddingEnd="5dp" | ||||
|                                         android:progress="30" | ||||
|                                         android:progressDrawable="@drawable/circular_progress_bar_filled" | ||||
|                                         android:visibility="visible" /> | ||||
| 
 | ||||
|                                     <ImageView | ||||
|                                         android:id="@+id/result_movie_download_icon" | ||||
|                                             app:tint="?attr/white" | ||||
|                                             android:visibility="visible" | ||||
|                                         android:layout_width="30dp" | ||||
|                                         android:layout_height="wrap_content" | ||||
|                                         android:layout_gravity="center" | ||||
|                                             android:layout_width="30dp" | ||||
|                                         android:background="?selectableItemBackgroundBorderless" | ||||
|                                         android:contentDescription="@string/download" | ||||
|                                         android:src="@drawable/ic_baseline_play_arrow_24" | ||||
|                                             android:contentDescription="@string/download" /> | ||||
|                                         android:visibility="visible" | ||||
|                                         app:tint="?attr/white" /> | ||||
| 
 | ||||
|                                     <TextView | ||||
|                                         android:id="@+id/result_movie_download_text" | ||||
|                                         android:layout_width="wrap_content" | ||||
|                                         android:layout_height="match_parent" | ||||
|                                         android:gravity="center" | ||||
|                                         android:letterSpacing="0.09" | ||||
|                                         android:textAllCaps="false" | ||||
|                                         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" /> | ||||
|                                         tools:text="Downloading" /> | ||||
| 
 | ||||
|                                     <TextView | ||||
|                                             android:visibility="gone" | ||||
|                                         android:id="@+id/result_movie_download_text_precentage" | ||||
|                                         android:layout_width="wrap_content" | ||||
|                                         android:layout_height="match_parent" | ||||
|                                         android:gravity="center" | ||||
|                                         android:letterSpacing="0.09" | ||||
|                                         android:paddingStart="5dp" | ||||
|                                         android:paddingEnd="5dp" | ||||
|                                         android:textAllCaps="false" | ||||
|                                         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" /> | ||||
|                                         android:visibility="gone" | ||||
|                                         tools:text="68%" /> | ||||
|                                 </LinearLayout> | ||||
|                             </FrameLayout> | ||||
| 
 | ||||
|  | @ -639,90 +643,90 @@ | |||
|                         </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"> | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:layout_marginTop="5dp" | ||||
|                             android:orientation="vertical" | ||||
|                             android:visibility="gone" | ||||
|                             tools:visibility="visible"> | ||||
| 
 | ||||
|                             <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_width="match_parent" | ||||
| 
 | ||||
|                                 android:layout_gravity="center_vertical" | ||||
|                                 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:text="@string/resume" | ||||
|                                 android:visibility="visible" | ||||
|                                 app:icon="@drawable/ic_baseline_play_arrow_24" | ||||
|                                 tools:visibility="visible" /> | ||||
| 
 | ||||
|                             <com.google.android.material.button.MaterialButton | ||||
|                                 android:id="@+id/result_next_series_button" | ||||
|                                 style="@style/WhiteButton" | ||||
|                                 android:layout_width="match_parent" | ||||
| 
 | ||||
|                                 android:layout_gravity="center_vertical" | ||||
|                                 android:layout_marginStart="0dp" | ||||
|                                 android:layout_marginEnd="0dp" | ||||
|                                     android:visibility="gone" | ||||
|                                     android:layout_gravity="center_vertical" | ||||
|                                 android:layout_marginBottom="10dp" | ||||
|                                 android:nextFocusUp="@id/result_bookmark_button" | ||||
|                                 android:nextFocusDown="@id/result_download_movie" | ||||
|                                 android:text="@string/next_episode" | ||||
|                                     app:icon="@drawable/cast_ic_mini_controller_skip_next" | ||||
|                                     android:layout_width="match_parent" /> | ||||
|                                 android:visibility="gone" | ||||
|                                 app:icon="@drawable/cast_ic_mini_controller_skip_next" /> | ||||
| 
 | ||||
|                             <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" /> | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:textColor="?attr/textColor" | ||||
|                                 android:textSize="17sp" | ||||
|                                 android:textStyle="bold" | ||||
|                                 tools:text="S1E1 Episode 1" /> | ||||
|                         </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"> | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:orientation="horizontal" | ||||
|                             android:paddingTop="10dp" | ||||
|                             android:visibility="gone" | ||||
|                             tools:visibility="visible"> | ||||
| 
 | ||||
|                             <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_height="20dp" | ||||
|                                 android:layout_gravity="end|center_vertical" | ||||
|                                 android:layout_weight="1" | ||||
|                                 android:indeterminate="false" | ||||
|                                 android:max="100" | ||||
|                                 android:progress="0" | ||||
|                                 android:progressBackgroundTint="?attr/colorPrimary" | ||||
|                                 android:visibility="visible" | ||||
|                                 tools:progress="50" | ||||
|                                 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" /> | ||||
|                                 android:layout_gravity="center" | ||||
|                                 android:layout_weight="0" | ||||
|                                 android:gravity="center" | ||||
|                                 android:paddingStart="10dp" | ||||
|                                 android:textColor="?attr/grayTextColor" | ||||
|                                 tools:ignore="RtlSymmetry" | ||||
|                                 tools:text="69m\nremaining" /> | ||||
|                         </LinearLayout> | ||||
| 
 | ||||
|                         <LinearLayout | ||||
|  | @ -732,86 +736,85 @@ | |||
|                             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"> | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:layout_marginBottom="10dp" | ||||
|                                 android:gravity="center_vertical" | ||||
|                                 android:orientation="horizontal"> | ||||
| 
 | ||||
|                                 <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" | ||||
|                                     style="@style/MultiSelectButton" | ||||
|                                     android:layout_gravity="center_vertical" | ||||
|                                     android:layout_marginStart="0dp" | ||||
|                                         style="@style/MultiSelectButton" /> | ||||
|                                     android:nextFocusLeft="@id/result_episode_select" | ||||
|                                     android:nextFocusRight="@id/result_episode_select" | ||||
|                                     android:nextFocusUp="@id/result_descript" | ||||
|                                     android:nextFocusDown="@id/result_episodes" | ||||
|                                     android:visibility="gone" | ||||
|                                     tools:text="Season 1" | ||||
|                                     tools:visibility="visible" /> | ||||
| 
 | ||||
|                                 <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" | ||||
|                                     style="@style/MultiSelectButton" | ||||
| 
 | ||||
|                                     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:nextFocusLeft="@id/result_season_button" | ||||
|                                     android:nextFocusRight="@id/result_season_button" | ||||
| 
 | ||||
|                                     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" | ||||
|                                     tools:text="50-100" | ||||
|                                     tools:visibility="visible" /> | ||||
| 
 | ||||
|                                 <com.google.android.material.button.MaterialButton | ||||
|                                     android:id="@+id/result_dub_select" | ||||
|                                     style="@style/MultiSelectButton" | ||||
| 
 | ||||
|                                     android:layout_gravity="center_vertical" | ||||
|                                     android:layout_marginStart="0dp" | ||||
|                                         style="@style/MultiSelectButton" /> | ||||
|                                     android:nextFocusLeft="@id/result_season_button" | ||||
|                                     android:nextFocusRight="@id/result_season_button" | ||||
| 
 | ||||
|                                     android:nextFocusUp="@id/result_descript" | ||||
|                                     android:nextFocusDown="@id/result_episodes" | ||||
|                                     android:visibility="gone" | ||||
|                                     tools:text="Dubbed" | ||||
|                                     tools:visibility="visible" /> | ||||
| 
 | ||||
|                                 <TextView | ||||
|                                     android:id="@+id/result_episodes_text" | ||||
|                                     android:layout_width="wrap_content" | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                         android:id="@+id/result_episodes_text" | ||||
|                                         tools:text="8 Episodes" | ||||
|                                         android:textSize="17sp" | ||||
|                                     android:layout_gravity="center_vertical" | ||||
|                                     android:paddingTop="10dp" | ||||
|                                     android:paddingBottom="10dp" | ||||
|                                         android:layout_gravity="center_vertical" | ||||
|                                     android:textColor="?attr/textColor" | ||||
|                                     android:textSize="17sp" | ||||
|                                     android:textStyle="normal" | ||||
|                                         android:textColor="?attr/textColor" /> | ||||
|                                     tools:text="8 Episodes" /> | ||||
|                             </LinearLayout> | ||||
| 
 | ||||
|                             <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"> | ||||
|                                 android:orientation="vertical" | ||||
|                                 app:shimmer_auto_start="true" | ||||
|                                 app:shimmer_base_alpha="0.2" | ||||
|                                 app:shimmer_duration="@integer/loading_time" | ||||
|                                 app:shimmer_highlight_alpha="0.3" | ||||
|                                 tools:visibility="visible"> | ||||
| 
 | ||||
|                                 <LinearLayout | ||||
|                                         android:orientation="vertical" | ||||
|                                     android:layout_width="match_parent" | ||||
|                                         android:layout_height="wrap_content"> | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:orientation="vertical"> | ||||
| 
 | ||||
|                                     <include layout="@layout/loading_episode" /> | ||||
| 
 | ||||
|  | @ -831,14 +834,14 @@ | |||
|                                     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" /> | ||||
|                                 android:layout_height="wrap_content" | ||||
|                                 android:layout_marginTop="0dp" | ||||
|                                 android:clipToPadding="false" | ||||
|                                 android:descendantFocusability="afterDescendants" | ||||
|                                 android:paddingBottom="100dp" | ||||
|                                 tools:listitem="@layout/result_episode" /> | ||||
|                         </LinearLayout> | ||||
|                     </LinearLayout> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,28 +1,28 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|         xmlns:tools="http://schemas.android.com/tools" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="wrap_content" | ||||
|     android:layout_height="wrap_content" | ||||
|         android:paddingLeft="2dp" | ||||
|         android:paddingRight="2dp" | ||||
|         android:paddingTop="-10dp" | ||||
|     android:layout_marginTop="-4dp" | ||||
|         android:layout_marginBottom="-4dp"> | ||||
|     android:layout_marginBottom="-4dp" | ||||
|     android:paddingLeft="2dp" | ||||
|     android:paddingTop="-10dp" | ||||
|     android:paddingRight="2dp"> | ||||
|     <!--app:strokeColor="@color/colorAccent"--> | ||||
| 
 | ||||
|     <com.google.android.material.button.MaterialButton | ||||
|             android:minHeight="0dp" | ||||
|             android:minWidth="0dp" | ||||
|             android:layout_height="37dp" | ||||
|             android:textAllCaps="false" | ||||
|             android:textSize="12sp" | ||||
|         android:id="@+id/result_tag_card" | ||||
|         style="@style/Tag" | ||||
|         android:layout_width="wrap_content" | ||||
|             app:cornerRadius="100dp" | ||||
|             tools:text="Test" | ||||
|         android:layout_height="37dp" | ||||
|         android:minWidth="0dp" | ||||
|         android:minHeight="0dp" | ||||
|         android:textAllCaps="false" | ||||
|         android:textColor="?attr/textColor" | ||||
|             style="@style/Widget.MaterialComponents.Button.OutlinedButton" | ||||
|             android:id="@+id/result_tag_card"> | ||||
|         android:textSize="12sp" | ||||
|         app:cornerRadius="100dp" | ||||
|         tools:text="Test"> | ||||
| 
 | ||||
|     </com.google.android.material.button.MaterialButton> | ||||
| </FrameLayout> | ||||
|  | @ -186,8 +186,7 @@ | |||
|         <item name="android:windowBackground">?attr/primaryBlackBackground</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="AppSearchViewStyle" | ||||
|            parent="Theme.MaterialComponents.NoActionBar"> | ||||
|     <style name="AppSearchViewStyle" parent="Theme.MaterialComponents.NoActionBar"> | ||||
|         <item name="android:searchIcon">@drawable/search_icon</item> | ||||
|         <item name="android:queryHint">@string/search_hint</item> | ||||
|         <item name="android:background">@color/transparent</item> | ||||
|  | @ -212,8 +211,7 @@ | |||
|         <item name="behavior_peekHeight">512dp</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="PreferenceTheme" parent="@style/AppTheme"> | ||||
|     </style> | ||||
|     <style name="PreferenceTheme" parent="@style/AppTheme"></style> | ||||
| 
 | ||||
|     <style name="Theme.AlertDialog" parent="ThemeOverlay.MaterialComponents.Dialog.Alert"> | ||||
|         <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> | ||||
|  | @ -229,6 +227,7 @@ | |||
|     <style name="AppButtonStyle" parent="android:Widget.Holo.Button"> | ||||
|         <item name="android:fontFamily">@font/google_sans</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="AppEditStyle" parent="android:Widget.EditText"> | ||||
|         <item name="android:fontFamily">@font/google_sans</item> | ||||
|     </style> | ||||
|  | @ -262,6 +261,7 @@ | |||
|         <item name="tabMinWidth">75dp</item> | ||||
|         <item name="tabMode">scrollable</item>--> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="AlertDialogCustom" parent="Theme.AppCompat.Dialog.Alert"> | ||||
|         <item name="android:windowFullscreen">true</item> | ||||
|         <item name="android:textColor">?attr/textColor</item> | ||||
|  | @ -278,9 +278,11 @@ | |||
|         <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> | ||||
|         <item name="android:windowBackground">@drawable/dialog__window_background</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="AlertDialogCustomTransparent" parent="Theme.AppCompat.Dialog.Alert"> | ||||
|         <item name="android:windowBackground">@color/transparent</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="AlertDialogCustomBlack" parent="Theme.AppCompat.Dialog.Alert"> | ||||
|         <item name="android:windowBackground">?attr/primaryBlackBackground</item> | ||||
|         <item name="android:layout_width">fill_parent</item> | ||||
|  | @ -451,6 +453,10 @@ | |||
|         <item name="strokeColor">@color/toggle_button_outline</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="Tag" parent="Widget.MaterialComponents.Button.OutlinedButton"> | ||||
|         <item name="strokeColor">@color/tag_stroke_color</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="VideoButtonTV"> | ||||
|         <item name="android:stateListAnimator">@null</item> | ||||
|         <item name="strokeColor">@color/transparent</item> | ||||
|  | @ -495,26 +501,34 @@ | |||
|         <item name="castPlayButtonDrawable">@drawable/ic_baseline_play_arrow_24</item> | ||||
|         <item name="castPauseButtonDrawable">@drawable/netflix_pause</item> | ||||
|         <item name="castStopButtonDrawable">@drawable/cast_ic_expanded_controller_stop</item> | ||||
|         <item name="castSkipPreviousButtonDrawable">@drawable/cast_ic_expanded_controller_skip_previous</item> | ||||
|         <item name="castSkipNextButtonDrawable">@drawable/cast_ic_expanded_controller_skip_next</item> | ||||
|         <item name="castSkipPreviousButtonDrawable"> | ||||
|             @drawable/cast_ic_expanded_controller_skip_previous | ||||
|         </item> | ||||
|         <item name="castSkipNextButtonDrawable">@drawable/cast_ic_expanded_controller_skip_next | ||||
|         </item> | ||||
|         <item name="castRewind30ButtonDrawable">@drawable/go_back_30</item> | ||||
|         <item name="castForward30ButtonDrawable">@drawable/go_forward_30</item> | ||||
|     </style> | ||||
| 
 | ||||
|     <style name="CustomCastMiniController" parent="CastMiniController"> | ||||
|         <item name="castMiniControllerLoadingIndicatorColor">?attr/colorPrimary</item> | ||||
|         <item name="castShowImageThumbnail">true</item> | ||||
| 
 | ||||
|         <item name="castTitleTextAppearance">@style/TextAppearance.AppCompat.Subhead</item> | ||||
|         <item name="castSubtitleTextAppearance">@style/TextAppearance.AppCompat.Caption</item> | ||||
|         <item name="castBackground">@color/transparent</item> <!--CHECK bitDarkerGrayBackground darkBackground--> | ||||
|         <item name="castBackground">@color/transparent | ||||
|         </item> <!--CHECK bitDarkerGrayBackground darkBackground--> | ||||
|         <item name="castProgressBarColor">?attr/colorPrimary</item> | ||||
|         <item name="castStopButtonDrawable">@drawable/cast_ic_mini_controller_stop</item>' | ||||
|         <item name="castLargeStopButtonDrawable">@drawable/cast_ic_mini_controller_stop_large</item> | ||||
|         <item name="castSkipPreviousButtonDrawable">@drawable/cast_ic_mini_controller_skip_prev</item> | ||||
|         <item name="castSkipPreviousButtonDrawable">@drawable/cast_ic_mini_controller_skip_prev | ||||
|         </item> | ||||
|         <item name="castSkipNextButtonDrawable">@drawable/cast_ic_mini_controller_skip_next</item> | ||||
|         <item name="castRewind30ButtonDrawable">@drawable/go_back_30</item> | ||||
|         <item name="castForward30ButtonDrawable">@drawable/go_forward_30</item> | ||||
|         <item name="castMuteToggleButtonDrawable">@drawable/cast_ic_mini_controller_mute</item> | ||||
|         <item name="castClosedCaptionsButtonDrawable">@drawable/cast_ic_mini_controller_closed_caption</item> | ||||
|         <item name="castClosedCaptionsButtonDrawable"> | ||||
|             @drawable/cast_ic_mini_controller_closed_caption | ||||
|         </item> | ||||
|     </style> | ||||
| </resources> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue