mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
android TV homepage redesign
This commit is contained in:
parent
6677d6aaee
commit
e2405f2526
4 changed files with 705 additions and 118 deletions
|
@ -55,8 +55,38 @@ import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
|
|||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.setImage
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.setImageBlur
|
||||
import com.lagradost.cloudstream3.widget.CenterZoomLayoutManager
|
||||
import kotlinx.android.synthetic.main.fragment_home.*
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_api_fab
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_bookmarked_child_more_info
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_bookmarked_child_recyclerview
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_bookmarked_holder
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_change_api
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_change_api_loading
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_loaded
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_loading
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_loading_error
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_loading_shimmer
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_loading_statusbar
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_main_poster_recyclerview
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_master_recycler
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_plan_to_watch_btt
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_provider_meta_info
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_provider_name
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_reload_connection_open_in_browser
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_reload_connectionerror
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_statusbar
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_type_completed_btt
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_type_dropped_btt
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_type_on_hold_btt
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_type_watching_btt
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_watch_child_more_info
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_watch_child_recyclerview
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_watch_holder
|
||||
import kotlinx.android.synthetic.main.fragment_home.home_watch_parent_item_title
|
||||
import kotlinx.android.synthetic.main.fragment_home.result_error_text
|
||||
import kotlinx.android.synthetic.main.fragment_home_tv.*
|
||||
import java.util.*
|
||||
|
||||
const val HOME_BOOKMARK_VALUE_LIST = "home_bookmarked_last_list"
|
||||
|
@ -73,8 +103,10 @@ class HomeFragment : Fragment() {
|
|||
bottomSheetDialogBuilder.setContentView(R.layout.home_episodes_expanded)
|
||||
val title = bottomSheetDialogBuilder.findViewById<TextView>(R.id.home_expanded_text)!!
|
||||
title.text = item.name
|
||||
val recycle = bottomSheetDialogBuilder.findViewById<AutofitRecyclerView>(R.id.home_expanded_recycler)!!
|
||||
val titleHolder = bottomSheetDialogBuilder.findViewById<FrameLayout>(R.id.home_expanded_drag_down)!!
|
||||
val recycle =
|
||||
bottomSheetDialogBuilder.findViewById<AutofitRecyclerView>(R.id.home_expanded_recycler)!!
|
||||
val titleHolder =
|
||||
bottomSheetDialogBuilder.findViewById<FrameLayout>(R.id.home_expanded_drag_down)!!
|
||||
|
||||
titleHolder.setOnClickListener {
|
||||
bottomSheetDialogBuilder.dismissSafe(this)
|
||||
|
@ -125,7 +157,8 @@ class HomeFragment : Fragment() {
|
|||
|
||||
var currentValidApis: MutableList<MainAPI> = mutableListOf()
|
||||
val preSelectedTypes = this.getKey<List<String>>(HOME_PREF_HOMEPAGE)
|
||||
?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } }?.toMutableList()
|
||||
?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } }
|
||||
?.toMutableList()
|
||||
?: mutableListOf(TvType.Movie, TvType.TvSeries)
|
||||
|
||||
val anime = dialog.findViewById<MaterialButton>(R.id.home_select_anime)
|
||||
|
@ -190,7 +223,8 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
|
||||
for ((button, validTypes) in pairList) {
|
||||
val isValid = validAPIs.any { api -> validTypes.any { api.supportedTypes.contains(it) } }
|
||||
val isValid =
|
||||
validAPIs.any { api -> validTypes.any { api.supportedTypes.contains(it) } }
|
||||
button?.isVisible = isValid
|
||||
if (isValid) {
|
||||
fun buttonContains(): Boolean {
|
||||
|
@ -235,14 +269,16 @@ class HomeFragment : Fragment() {
|
|||
): View? {
|
||||
//homeViewModel =
|
||||
// ViewModelProvider(this).get(HomeViewModel::class.java)
|
||||
|
||||
return inflater.inflate(R.layout.fragment_home, container, false)
|
||||
val layout =
|
||||
if (context?.isTvSettings() == true) R.layout.fragment_home_tv else R.layout.fragment_home
|
||||
return inflater.inflate(layout, container, false)
|
||||
}
|
||||
|
||||
private var currentHomePage: HomePageResponse? = null
|
||||
|
||||
private fun toggleMainVisibility(visible: Boolean) {
|
||||
home_main_holder.isVisible = visible
|
||||
home_main_holder?.isVisible = visible
|
||||
home_main_poster_recyclerview?.isVisible = visible
|
||||
}
|
||||
|
||||
private fun fixGrid() {
|
||||
|
@ -295,7 +331,20 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}*/
|
||||
|
||||
var currentApiName: String? = null
|
||||
private fun focusCallback(card : SearchResponse) {
|
||||
home_focus_text?.text = card.name
|
||||
home_blur_poster?.setImageBlur(card.posterUrl,50)
|
||||
}
|
||||
|
||||
private fun homeHandleSearch(callback : SearchClickCallback) {
|
||||
if(callback.action == SEARCH_ACTION_FOCUSED) {
|
||||
focusCallback(callback.card)
|
||||
} else {
|
||||
handleSearchClickCallback(activity, callback)
|
||||
}
|
||||
}
|
||||
|
||||
private var currentApiName: String? = null
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
@ -321,7 +370,8 @@ class HomeFragment : Fragment() {
|
|||
Pair(R.string.anime, listOf(TvType.Anime, TvType.ONA, TvType.AnimeMovie)),
|
||||
Pair(R.string.torrent, listOf(TvType.Torrent)),
|
||||
).filter { item -> currentApi.supportedTypes.any { type -> item.second.contains(type) } }
|
||||
home_provider_meta_info?.text = typeChoices.joinToString(separator = ", ") { getString(it.first) }
|
||||
home_provider_meta_info?.text =
|
||||
typeChoices.joinToString(separator = ", ") { getString(it.first) }
|
||||
home_provider_meta_info?.isVisible = true
|
||||
}
|
||||
}
|
||||
|
@ -338,28 +388,34 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
|
||||
val randomSize = items.size
|
||||
home_main_poster_recyclerview.adapter =
|
||||
home_main_poster_recyclerview?.adapter =
|
||||
HomeChildItemAdapter(
|
||||
items,
|
||||
R.layout.home_result_big_grid,
|
||||
nextFocusUp = home_main_poster_recyclerview.nextFocusUpId,
|
||||
nextFocusDown = home_main_poster_recyclerview.nextFocusDownId
|
||||
) { callback ->
|
||||
handleSearchClickCallback(activity, callback)
|
||||
homeHandleSearch(callback)
|
||||
}
|
||||
home_main_poster_recyclerview?.post {
|
||||
(home_main_poster_recyclerview?.layoutManager as CenterZoomLayoutManager?)?.let { manager ->
|
||||
manager.updateSize(forceUpdate = true)
|
||||
if (randomSize > 2) {
|
||||
manager.scrollToPosition(randomSize / 2)
|
||||
manager.snap { dx ->
|
||||
home_main_poster_recyclerview?.post {
|
||||
// this is the best I can do, fuck android for not including instant scroll
|
||||
home_main_poster_recyclerview?.smoothScrollBy(dx, 0)
|
||||
if (context?.isTvSettings() == false) {
|
||||
home_main_poster_recyclerview?.post {
|
||||
(home_main_poster_recyclerview?.layoutManager as CenterZoomLayoutManager?)?.let { manager ->
|
||||
manager.updateSize(forceUpdate = true)
|
||||
if (randomSize > 2) {
|
||||
manager.scrollToPosition(randomSize / 2)
|
||||
manager.snap { dx ->
|
||||
home_main_poster_recyclerview?.post {
|
||||
// this is the best I can do, fuck android for not including instant scroll
|
||||
home_main_poster_recyclerview?.smoothScrollBy(dx, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
items.firstOrNull()?.let {
|
||||
focusCallback(it)
|
||||
}
|
||||
}
|
||||
toggleMainVisibility(true)
|
||||
}
|
||||
|
@ -425,11 +481,12 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
|
||||
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder> = ParentItemAdapter(listOf(), { callback ->
|
||||
handleSearchClickCallback(activity, callback)
|
||||
}, { item ->
|
||||
activity?.loadHomepageList(item)
|
||||
})
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder> =
|
||||
ParentItemAdapter(listOf(), { callback ->
|
||||
homeHandleSearch(callback)
|
||||
}, { item ->
|
||||
activity?.loadHomepageList(item)
|
||||
})
|
||||
|
||||
val toggleList = listOf(
|
||||
Pair(home_type_watching_btt, WatchType.WATCHING),
|
||||
|
@ -447,9 +504,10 @@ class HomeFragment : Fragment() {
|
|||
|
||||
item.first?.setOnLongClickListener { itemView ->
|
||||
val list = EnumSet.noneOf(WatchType::class.java)
|
||||
itemView.context.getKey<IntArray>(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let {
|
||||
list.addAll(it)
|
||||
}
|
||||
itemView.context.getKey<IntArray>(HOME_BOOKMARK_VALUE_LIST)
|
||||
?.map { WatchType.fromInternalId(it) }?.let {
|
||||
list.addAll(it)
|
||||
}
|
||||
|
||||
if (list.contains(watch)) {
|
||||
list.remove(watch)
|
||||
|
@ -492,7 +550,8 @@ class HomeFragment : Fragment() {
|
|||
home_bookmarked_holder.isVisible = pair.first
|
||||
|
||||
val bookmarks = pair.second
|
||||
(home_bookmarked_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = bookmarks
|
||||
(home_bookmarked_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList =
|
||||
bookmarks
|
||||
home_bookmarked_child_recyclerview?.adapter?.notifyDataSetChanged()
|
||||
|
||||
home_bookmarked_child_more_info?.setOnClickListener {
|
||||
|
@ -507,13 +566,15 @@ class HomeFragment : Fragment() {
|
|||
|
||||
observe(homeViewModel.resumeWatching) { resumeWatching ->
|
||||
home_watch_holder?.isVisible = resumeWatching.isNotEmpty()
|
||||
(home_watch_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = resumeWatching
|
||||
(home_watch_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList =
|
||||
resumeWatching
|
||||
home_watch_child_recyclerview?.adapter?.notifyDataSetChanged()
|
||||
|
||||
home_watch_child_more_info?.setOnClickListener {
|
||||
activity?.loadHomepageList(
|
||||
HomePageList(
|
||||
home_watch_parent_item_title?.text?.toString() ?: getString(R.string.continue_watching),
|
||||
home_watch_parent_item_title?.text?.toString()
|
||||
?: getString(R.string.continue_watching),
|
||||
resumeWatching
|
||||
)
|
||||
)
|
||||
|
@ -528,7 +589,14 @@ class HomeFragment : Fragment() {
|
|||
if (callback.action == SEARCH_ACTION_SHOW_METADATA) {
|
||||
val id = callback.card.id
|
||||
if (id != null) {
|
||||
callback.view.popupMenuNoIcons(listOf(Pair(0, R.string.action_remove_from_bookmarks))) {
|
||||
callback.view.popupMenuNoIcons(
|
||||
listOf(
|
||||
Pair(
|
||||
0,
|
||||
R.string.action_remove_from_bookmarks
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (itemId == 0) {
|
||||
setResultWatchState(id, WatchType.NONE.internalId)
|
||||
reloadStored()
|
||||
|
@ -536,11 +604,11 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
handleSearchClickCallback(activity, callback)
|
||||
homeHandleSearch(callback)
|
||||
}
|
||||
}
|
||||
|
||||
home_watch_child_recyclerview.adapter = HomeChildItemAdapter(
|
||||
home_watch_child_recyclerview?.adapter = HomeChildItemAdapter(
|
||||
ArrayList(),
|
||||
nextFocusUp = home_watch_child_recyclerview?.nextFocusUpId,
|
||||
nextFocusDown = home_watch_child_recyclerview?.nextFocusDownId
|
||||
|
@ -557,7 +625,12 @@ class HomeFragment : Fragment() {
|
|||
if (itemId == 1) {
|
||||
handleSearchClickCallback(
|
||||
activity,
|
||||
SearchClickCallback(SEARCH_ACTION_LOAD, callback.view, -1, callback.card)
|
||||
SearchClickCallback(
|
||||
SEARCH_ACTION_LOAD,
|
||||
callback.view,
|
||||
-1,
|
||||
callback.card
|
||||
)
|
||||
)
|
||||
reloadStored()
|
||||
}
|
||||
|
@ -571,34 +644,43 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
handleSearchClickCallback(activity, callback)
|
||||
homeHandleSearch(callback)
|
||||
}
|
||||
}
|
||||
|
||||
context?.fixPaddingStatusbarView(home_statusbar)
|
||||
context?.fixPaddingStatusbar(home_loading_statusbar)
|
||||
|
||||
|
||||
home_master_recycler.adapter = adapter
|
||||
home_master_recycler.layoutManager = GridLayoutManager(context, 1)
|
||||
|
||||
LinearSnapHelper().attachToRecyclerView(home_main_poster_recyclerview) // snap
|
||||
val centerLayoutManager = CenterZoomLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
||||
centerLayoutManager.setOnSizeListener { index ->
|
||||
(home_main_poster_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList?.get(index)?.let { random ->
|
||||
home_main_play.setOnClickListener {
|
||||
activity.loadSearchResult(random, START_ACTION_RESUME_LATEST)
|
||||
}
|
||||
home_main_info.setOnClickListener {
|
||||
activity.loadSearchResult(random)
|
||||
}
|
||||
if (context?.isTvSettings() == false) {
|
||||
LinearSnapHelper().attachToRecyclerView(home_main_poster_recyclerview) // snap
|
||||
val centerLayoutManager =
|
||||
CenterZoomLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
||||
centerLayoutManager.setOnSizeListener { index ->
|
||||
(home_main_poster_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList?.get(
|
||||
index
|
||||
)?.let { random ->
|
||||
home_main_play?.setOnClickListener {
|
||||
activity.loadSearchResult(random, START_ACTION_RESUME_LATEST)
|
||||
}
|
||||
home_main_info?.setOnClickListener {
|
||||
activity.loadSearchResult(random)
|
||||
}
|
||||
|
||||
home_main_text.text =
|
||||
random.name + if (random is AnimeSearchResponse && !random.dubStatus.isNullOrEmpty()) {
|
||||
random.dubStatus.joinToString(prefix = " • ", separator = " | ") { it.name }
|
||||
} else ""
|
||||
home_main_text?.text =
|
||||
random.name + if (random is AnimeSearchResponse && !random.dubStatus.isNullOrEmpty()) {
|
||||
random.dubStatus.joinToString(
|
||||
prefix = " • ",
|
||||
separator = " | "
|
||||
) { it.name }
|
||||
} else ""
|
||||
}
|
||||
}
|
||||
home_main_poster_recyclerview?.layoutManager = centerLayoutManager // scale
|
||||
}
|
||||
home_main_poster_recyclerview?.layoutManager = centerLayoutManager // scale
|
||||
|
||||
reloadStored()
|
||||
val apiName = context?.getKey<String>(HOMEPAGE_API)
|
||||
|
|
|
@ -36,6 +36,7 @@ import androidx.fragment.app.FragmentActivity
|
|||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||
|
@ -69,7 +70,7 @@ object UIHelper {
|
|||
)
|
||||
}
|
||||
|
||||
fun Activity?.getSpanCount() : Int? {
|
||||
fun Activity?.getSpanCount(): Int? {
|
||||
val compactView = this?.getGridIsCompact() ?: return null
|
||||
val spanCountLandscape = if (compactView) 2 else 6
|
||||
val spanCountPortrait = if (compactView) 1 else 3
|
||||
|
@ -122,18 +123,23 @@ object UIHelper {
|
|||
if (this == null || url.isNullOrBlank()) return
|
||||
try {
|
||||
GlideApp.with(this.context)
|
||||
.load(GlideUrl(url))
|
||||
.load(GlideUrl(url)).transition(
|
||||
DrawableTransitionOptions.withCrossFade()
|
||||
)
|
||||
.into(this)
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun ImageView?.setImageBlur(url: String?, radius : Int, sample : Int = 3) {
|
||||
fun ImageView?.setImageBlur(url: String?, radius: Int, sample: Int = 3) {
|
||||
if (this == null || url.isNullOrBlank()) return
|
||||
try {
|
||||
GlideApp.with(this.context)
|
||||
.load(GlideUrl(url)).apply(bitmapTransform(BlurTransformation(radius, sample)))
|
||||
.transition(
|
||||
DrawableTransitionOptions.withCrossFade()
|
||||
)
|
||||
.into(this)
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
|
@ -236,7 +242,7 @@ object UIHelper {
|
|||
}*/
|
||||
|
||||
fun Context.getStatusBarHeight(): Int {
|
||||
if(isTvSettings()) {
|
||||
if (isTvSettings()) {
|
||||
return 0
|
||||
}
|
||||
|
||||
|
@ -249,7 +255,12 @@ object UIHelper {
|
|||
}
|
||||
|
||||
fun Context.fixPaddingStatusbar(v: View) {
|
||||
v.setPadding(v.paddingLeft, v.paddingTop + getStatusBarHeight(), v.paddingRight, v.paddingBottom)
|
||||
v.setPadding(
|
||||
v.paddingLeft,
|
||||
v.paddingTop + getStatusBarHeight(),
|
||||
v.paddingRight,
|
||||
v.paddingBottom
|
||||
)
|
||||
}
|
||||
|
||||
fun Context.fixPaddingStatusbarView(v: View) {
|
||||
|
@ -310,8 +321,11 @@ object UIHelper {
|
|||
fun Context.shouldShowPIPMode(isInPlayer: Boolean): Boolean {
|
||||
return try {
|
||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
settingsManager?.getBoolean(getString(R.string.pip_enabled_key), true) ?: true && isInPlayer
|
||||
} catch (e : Exception) {
|
||||
settingsManager?.getBoolean(
|
||||
getString(R.string.pip_enabled_key),
|
||||
true
|
||||
) ?: true && isInPlayer
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
false
|
||||
}
|
||||
|
@ -329,13 +343,15 @@ object UIHelper {
|
|||
}
|
||||
|
||||
fun hideKeyboard(view: View) {
|
||||
val inputMethodManager = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||
val inputMethodManager =
|
||||
view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||
inputMethodManager?.hideSoftInputFromWindow(view.windowToken, 0)
|
||||
}
|
||||
|
||||
fun showInputMethod(view: View?) {
|
||||
if(view == null) return
|
||||
val inputMethodManager = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||
if (view == null) return
|
||||
val inputMethodManager =
|
||||
view.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||
inputMethodManager?.showSoftInput(view, 0)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<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"
|
||||
|
@ -15,13 +14,14 @@
|
|||
android:id="@+id/home_loading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ProgressBar
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp">
|
||||
</ProgressBar>
|
||||
android:layout_height="50dp" />
|
||||
|
||||
<com.facebook.shimmer.ShimmerFrameLayout
|
||||
android:id="@+id/home_loading_shimmer"
|
||||
app:shimmer_base_alpha="0.2"
|
||||
|
@ -34,14 +34,17 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_marginTop="15dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
|
@ -49,16 +52,16 @@
|
|||
android:background="@color/grayShimmer"
|
||||
android:translationX="-164dp"
|
||||
android:layout_width="125dp"
|
||||
android:layout_height="200dp">
|
||||
</androidx.cardview.widget.CardView>
|
||||
android:layout_height="200dp" />
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
app:cardCornerRadius="@dimen/loading_radius"
|
||||
android:background="@color/grayShimmer"
|
||||
android:layout_width="148dp"
|
||||
android:layout_height="234dp">
|
||||
</androidx.cardview.widget.CardView>
|
||||
android:layout_height="234dp" />
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
|
@ -66,10 +69,10 @@
|
|||
android:background="@color/grayShimmer"
|
||||
android:translationX="164dp"
|
||||
android:layout_width="125dp"
|
||||
android:layout_height="200dp">
|
||||
</androidx.cardview.widget.CardView>
|
||||
android:layout_height="200dp" />
|
||||
</FrameLayout>
|
||||
<include layout="@layout/loading_line_short_center"/>
|
||||
|
||||
<include layout="@layout/loading_line_short_center" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
|
@ -77,11 +80,14 @@
|
|||
android:layout_marginStart="@dimen/result_padding"
|
||||
android:layout_marginEnd="@dimen/result_padding"
|
||||
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<include layout="@layout/loading_list"/>
|
||||
<include layout="@layout/loading_list"/>
|
||||
<include layout="@layout/loading_list"/>
|
||||
<include layout="@layout/loading_list" />
|
||||
|
||||
<include layout="@layout/loading_list" />
|
||||
|
||||
<include layout="@layout/loading_list" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</com.facebook.shimmer.ShimmerFrameLayout>
|
||||
|
@ -90,6 +96,7 @@
|
|||
android:id="@+id/home_loading_statusbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/home_change_api_loading"
|
||||
android:layout_margin="10dp"
|
||||
|
@ -99,8 +106,7 @@
|
|||
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:contentDescription="@string/home_change_provider_img_des">
|
||||
</ImageView>
|
||||
android:contentDescription="@string/home_change_provider_img_des" />
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -112,6 +118,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:layout_gravity="center"
|
||||
style="@style/WhiteButton"
|
||||
|
@ -122,8 +129,8 @@
|
|||
android:text="@string/reload_error"
|
||||
android:id="@+id/home_reload_connectionerror"
|
||||
android:layout_width="wrap_content"
|
||||
android:minWidth="200dp"
|
||||
/>
|
||||
android:minWidth="200dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:layout_gravity="center"
|
||||
style="@style/BlackButton"
|
||||
|
@ -134,8 +141,8 @@
|
|||
android:text="@string/result_open_in_browser"
|
||||
android:id="@+id/home_reload_connection_open_in_browser"
|
||||
android:layout_width="wrap_content"
|
||||
android:minWidth="200dp"
|
||||
/>
|
||||
android:minWidth="200dp" />
|
||||
|
||||
<TextView
|
||||
android:layout_margin="5dp"
|
||||
android:gravity="center"
|
||||
|
@ -143,9 +150,9 @@
|
|||
android:id="@+id/result_error_text"
|
||||
android:textColor="?attr/textColor"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
/>
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:background="?attr/primaryBlackBackground"
|
||||
tools:visibility="visible"
|
||||
|
@ -158,16 +165,19 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:background="?attr/primaryGrayBackground"
|
||||
android:id="@+id/home_statusbar"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"/>
|
||||
android:layout_width="match_parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/home_settings_bar"
|
||||
android:background="?attr/primaryGrayBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginEnd="50dp"
|
||||
android:paddingTop="10dp"
|
||||
|
@ -179,6 +189,7 @@
|
|||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/home_profile_picture_holder"
|
||||
android:layout_marginEnd="20dp"
|
||||
|
@ -186,19 +197,21 @@
|
|||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/home_profile_picture"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:ignore="ContentDescription">
|
||||
</ImageView>
|
||||
tools:ignore="ContentDescription" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
android:gravity="center"
|
||||
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center"
|
||||
|
@ -208,8 +221,8 @@
|
|||
tools:text="Hello World"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
android:layout_height="wrap_content">
|
||||
</TextView>
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center"
|
||||
|
@ -218,8 +231,7 @@
|
|||
android:textSize="14sp"
|
||||
tools:text="Hello World"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
</TextView>
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -238,7 +250,8 @@
|
|||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:contentDescription="@string/home_change_provider_img_des">
|
||||
<requestFocus/>
|
||||
|
||||
<requestFocus />
|
||||
</ImageView>
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -248,6 +261,7 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:descendantFocusability="afterDescendants"
|
||||
android:nextFocusUp="@id/home_change_api"
|
||||
|
@ -262,8 +276,7 @@
|
|||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid"
|
||||
/>
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
<!--<ImageView
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:id="@+id/home_main_poster"
|
||||
|
@ -286,7 +299,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:layout_height="40sp"/>
|
||||
android:layout_height="40sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:padding="5dp"
|
||||
android:layout_gravity="center"
|
||||
|
@ -309,8 +323,8 @@
|
|||
|
||||
app:icon="@drawable/ic_baseline_play_arrow_24"
|
||||
android:minWidth="120dp"
|
||||
android:layout_width="wrap_content">
|
||||
</com.google.android.material.button.MaterialButton>
|
||||
android:layout_width="wrap_content" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_main_play"
|
||||
android:nextFocusUp="@id/home_main_poster_recyclerview"
|
||||
|
@ -328,8 +342,7 @@
|
|||
android:focusable="true"
|
||||
|
||||
android:minWidth="120dp"
|
||||
android:layout_width="wrap_content">
|
||||
</com.google.android.material.button.MaterialButton>
|
||||
android:layout_width="wrap_content" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -351,12 +364,13 @@
|
|||
android:padding="12dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_gravity="center_vertical"
|
||||
android:id="@+id/home_watch_parent_item_title"
|
||||
style="@style/WatchHeaderText"
|
||||
android:text="@string/continue_watching"
|
||||
/>
|
||||
android:text="@string/continue_watching" />
|
||||
|
||||
<ImageView
|
||||
app:tint="?attr/textColor"
|
||||
android:layout_marginEnd="5dp"
|
||||
|
@ -364,8 +378,7 @@
|
|||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/home_more_info">
|
||||
</ImageView>
|
||||
android:contentDescription="@string/home_more_info" />
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
|
@ -378,8 +391,7 @@
|
|||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid"
|
||||
/>
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -404,52 +416,60 @@
|
|||
android:paddingEnd="12dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<HorizontalScrollView
|
||||
android:fadingEdge="horizontal"
|
||||
android:requiresFadingEdge="horizontal"
|
||||
android:layout_marginEnd="50dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:nextFocusRight="@id/home_plan_to_watch_btt"
|
||||
|
||||
android:id="@+id/home_type_watching_btt"
|
||||
android:text="@string/type_watching"
|
||||
style="@style/RoundedSelectableButton"/>
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_watching_btt"
|
||||
android:nextFocusRight="@id/home_type_on_hold_btt"
|
||||
|
||||
android:id="@+id/home_plan_to_watch_btt"
|
||||
android:text="@string/type_plan_to_watch"
|
||||
style="@style/RoundedSelectableButton"/>
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_plan_to_watch_btt"
|
||||
android:nextFocusRight="@id/home_type_dropped_btt"
|
||||
|
||||
android:id="@+id/home_type_on_hold_btt"
|
||||
android:text="@string/type_on_hold"
|
||||
style="@style/RoundedSelectableButton"/>
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_on_hold_btt"
|
||||
android:nextFocusRight="@id/home_type_completed_btt"
|
||||
|
||||
android:id="@+id/home_type_dropped_btt"
|
||||
android:text="@string/type_dropped"
|
||||
style="@style/RoundedSelectableButton"/>
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_dropped_btt"
|
||||
|
||||
android:id="@+id/home_type_completed_btt"
|
||||
android:text="@string/type_completed"
|
||||
style="@style/RoundedSelectableButton"/>
|
||||
style="@style/RoundedSelectableButton" />
|
||||
</LinearLayout>
|
||||
</HorizontalScrollView>
|
||||
|
||||
<ImageView
|
||||
app:tint="?attr/textColor"
|
||||
android:layout_marginEnd="5dp"
|
||||
|
@ -457,9 +477,9 @@
|
|||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/home_more_info">
|
||||
</ImageView>
|
||||
android:contentDescription="@string/home_more_info" />
|
||||
</FrameLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:paddingHorizontal="5dp"
|
||||
android:clipToPadding="false"
|
||||
|
@ -470,8 +490,7 @@
|
|||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid"
|
||||
/>
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -480,16 +499,15 @@
|
|||
android:id="@+id/home_master_recycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:listitem="@layout/homepage_parent"
|
||||
/>
|
||||
tools:listitem="@layout/homepage_parent" />
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:id="@+id/home_api_fab"
|
||||
app:icon="@drawable/ic_baseline_filter_list_24"
|
||||
style="@style/ExtendedFloatingActionButton"
|
||||
tools:ignore="ContentDescription">
|
||||
</com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton>
|
||||
tools:ignore="ContentDescription" />
|
||||
</FrameLayout>
|
471
app/src/main/res/layout/fragment_home_tv.xml
Normal file
471
app/src/main/res/layout/fragment_home_tv.xml
Normal file
|
@ -0,0 +1,471 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:layout_height="match_parent"
|
||||
|
||||
android:id="@+id/home_root"
|
||||
tools:context=".ui.home.HomeFragment">
|
||||
|
||||
<FrameLayout
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone"
|
||||
android:id="@+id/home_loading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ProgressBar
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp" />
|
||||
|
||||
<com.facebook.shimmer.ShimmerFrameLayout
|
||||
android:id="@+id/home_loading_shimmer"
|
||||
app:shimmer_base_alpha="0.2"
|
||||
app:shimmer_highlight_alpha="0.3"
|
||||
app:shimmer_duration="@integer/loading_time"
|
||||
app:shimmer_auto_start="true"
|
||||
android:paddingTop="40dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="15dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
app:cardCornerRadius="@dimen/loading_radius"
|
||||
android:background="@color/grayShimmer"
|
||||
android:translationX="-164dp"
|
||||
android:layout_width="125dp"
|
||||
android:layout_height="200dp" />
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
app:cardCornerRadius="@dimen/loading_radius"
|
||||
android:background="@color/grayShimmer"
|
||||
android:layout_width="148dp"
|
||||
android:layout_height="234dp" />
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="@dimen/loading_margin"
|
||||
android:layout_gravity="center"
|
||||
app:cardCornerRadius="@dimen/loading_radius"
|
||||
android:background="@color/grayShimmer"
|
||||
android:translationX="164dp"
|
||||
android:layout_width="125dp"
|
||||
android:layout_height="200dp" />
|
||||
</FrameLayout>
|
||||
|
||||
<include layout="@layout/loading_line_short_center" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="@dimen/result_padding"
|
||||
android:layout_marginStart="@dimen/result_padding"
|
||||
android:layout_marginEnd="@dimen/result_padding"
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<include layout="@layout/loading_list" />
|
||||
|
||||
<include layout="@layout/loading_list" />
|
||||
|
||||
<include layout="@layout/loading_list" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</com.facebook.shimmer.ShimmerFrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/home_loading_statusbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/home_change_api_loading"
|
||||
android:layout_margin="10dp"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
|
||||
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:contentDescription="@string/home_change_provider_img_des" />
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone"
|
||||
android:id="@+id/home_loading_error"
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:layout_gravity="center"
|
||||
style="@style/WhiteButton"
|
||||
|
||||
android:layout_margin="5dp"
|
||||
|
||||
app:icon="@drawable/ic_baseline_autorenew_24"
|
||||
android:text="@string/reload_error"
|
||||
android:id="@+id/home_reload_connectionerror"
|
||||
android:layout_width="wrap_content"
|
||||
android:minWidth="200dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:layout_gravity="center"
|
||||
style="@style/BlackButton"
|
||||
|
||||
android:layout_margin="5dp"
|
||||
|
||||
app:icon="@drawable/ic_baseline_public_24"
|
||||
android:text="@string/result_open_in_browser"
|
||||
android:id="@+id/home_reload_connection_open_in_browser"
|
||||
android:layout_width="wrap_content"
|
||||
android:minWidth="200dp" />
|
||||
|
||||
<TextView
|
||||
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" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:background="?attr/primaryBlackBackground"
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
android:id="@+id/home_loaded"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:background="?attr/primaryGrayBackground"
|
||||
android:id="@+id/home_statusbar"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/example_poster"
|
||||
android:id="@+id/home_blur_poster"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/shadow_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:background="@drawable/background_shadow" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="100dp"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="100dp">
|
||||
|
||||
|
||||
<!--
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/home_profile_picture_holder"
|
||||
android:layout_marginEnd="20dp"
|
||||
app:cardCornerRadius="100dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/home_profile_picture"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:ignore="ContentDescription" />
|
||||
</androidx.cardview.widget.CardView>-->
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:nextFocusDown="@id/home_main_poster_recyclerview"
|
||||
android:nextFocusUp="@id/nav_rail_view"
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:layout_gravity="center_vertical"
|
||||
|
||||
android:id="@+id/home_change_api"
|
||||
android:layout_margin="10dp"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:src="@drawable/ic_baseline_filter_list_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:contentDescription="@string/home_change_provider_img_des">
|
||||
|
||||
<requestFocus />
|
||||
</ImageView>
|
||||
|
||||
<TextView
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textStyle="bold"
|
||||
android:textSize="25sp"
|
||||
tools:text="The Perfect Run"
|
||||
android:id="@+id/home_focus_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginStart="12dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:gravity="center_vertical"
|
||||
android:id="@+id/home_provider_name"
|
||||
android:textColor="?attr/grayTextColor"
|
||||
android:textSize="20sp"
|
||||
android:paddingEnd="10dp"
|
||||
tools:text="Hello World"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:gravity="center_vertical"
|
||||
android:id="@+id/home_provider_meta_info"
|
||||
android:textColor="?attr/grayTextColor"
|
||||
android:textSize="20sp"
|
||||
tools:text="Hello World"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:paddingHorizontal="5dp"
|
||||
android:clipToPadding="false"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:id="@+id/home_main_poster_recyclerview"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/home_watch_holder"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<FrameLayout
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:nextFocusUp="@id/home_main_info"
|
||||
android:nextFocusDown="@id/home_watch_child_recyclerview"
|
||||
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:id="@+id/home_watch_child_more_info"
|
||||
android:padding="12dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_gravity="center_vertical"
|
||||
android:id="@+id/home_watch_parent_item_title"
|
||||
style="@style/WatchHeaderText"
|
||||
android:text="@string/continue_watching" />
|
||||
|
||||
<ImageView
|
||||
app:tint="?attr/textColor"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/home_more_info" />
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:paddingHorizontal="5dp"
|
||||
android:clipToPadding="false"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:id="@+id/home_watch_child_recyclerview"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/home_bookmarked_holder"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<FrameLayout
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:nextFocusUp="@id/home_watch_child_recyclerview"
|
||||
android:nextFocusForward="@id/home_bookmarked_child_recyclerview"
|
||||
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:id="@+id/home_bookmarked_child_more_info"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<HorizontalScrollView
|
||||
android:fadingEdge="horizontal"
|
||||
android:requiresFadingEdge="horizontal"
|
||||
android:layout_marginEnd="50dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:nextFocusRight="@id/home_plan_to_watch_btt"
|
||||
|
||||
android:id="@+id/home_type_watching_btt"
|
||||
android:text="@string/type_watching"
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_watching_btt"
|
||||
android:nextFocusRight="@id/home_type_on_hold_btt"
|
||||
|
||||
android:id="@+id/home_plan_to_watch_btt"
|
||||
android:text="@string/type_plan_to_watch"
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_plan_to_watch_btt"
|
||||
android:nextFocusRight="@id/home_type_dropped_btt"
|
||||
|
||||
android:id="@+id/home_type_on_hold_btt"
|
||||
android:text="@string/type_on_hold"
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_on_hold_btt"
|
||||
android:nextFocusRight="@id/home_type_completed_btt"
|
||||
|
||||
android:id="@+id/home_type_dropped_btt"
|
||||
android:text="@string/type_dropped"
|
||||
style="@style/RoundedSelectableButton" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:nextFocusLeft="@id/home_type_dropped_btt"
|
||||
|
||||
android:id="@+id/home_type_completed_btt"
|
||||
android:text="@string/type_completed"
|
||||
style="@style/RoundedSelectableButton" />
|
||||
</LinearLayout>
|
||||
</HorizontalScrollView>
|
||||
|
||||
<ImageView
|
||||
app:tint="?attr/textColor"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:src="@drawable/ic_baseline_arrow_forward_24"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/home_more_info" />
|
||||
</FrameLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:paddingHorizontal="5dp"
|
||||
android:clipToPadding="false"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:id="@+id/home_bookmarked_child_recyclerview"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
android:id="@+id/home_master_recycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:listitem="@layout/homepage_parent" />
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:id="@+id/home_api_fab"
|
||||
app:icon="@drawable/ic_baseline_filter_list_24"
|
||||
style="@style/ExtendedFloatingActionButton"
|
||||
tools:ignore="ContentDescription" />
|
||||
</FrameLayout>
|
Loading…
Reference in a new issue