mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
homepage improvements
This commit is contained in:
parent
61323b5c56
commit
684f2ed119
9 changed files with 88 additions and 51 deletions
|
@ -125,6 +125,6 @@ class DownloadFragment : Fragment() {
|
|||
download_list.layoutManager = GridLayoutManager(context, 1)
|
||||
downloadsViewModel.updateList(requireContext())
|
||||
|
||||
activity?.fixPaddingStatusbar(download_root)
|
||||
context?.fixPaddingStatusbar(download_root)
|
||||
}
|
||||
}
|
|
@ -4,11 +4,14 @@ import android.os.Bundle
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.UIHelper.loadResult
|
||||
import com.lagradost.cloudstream3.mvvm.Resource
|
||||
import com.lagradost.cloudstream3.mvvm.observe
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||
|
@ -54,9 +57,13 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder> = ParentItemAdapter(listOf()) {
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder> = ParentItemAdapter(listOf(), { card ->
|
||||
(activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName)
|
||||
}, {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
context?.fixPaddingStatusbar(home_root)
|
||||
|
||||
home_master_recycler.adapter = adapter
|
||||
home_master_recycler.layoutManager = GridLayoutManager(context, 1)
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.home
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -14,12 +15,13 @@ import kotlinx.android.synthetic.main.homepage_parent.view.*
|
|||
|
||||
class ParentItemAdapter(
|
||||
var itemList: List<HomePageList>,
|
||||
private val clickCallback: (SearchResponse) -> Unit
|
||||
private val clickCallback: (SearchResponse) -> Unit,
|
||||
private val moreInfoClickCallback: (List<SearchResponse>) -> Unit,
|
||||
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, i: Int): ParentViewHolder {
|
||||
val layout = R.layout.homepage_parent
|
||||
return ParentViewHolder(
|
||||
LayoutInflater.from(parent.context).inflate(layout, parent, false), clickCallback
|
||||
LayoutInflater.from(parent.context).inflate(layout, parent, false), clickCallback, moreInfoClickCallback
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -36,16 +38,23 @@ class ParentItemAdapter(
|
|||
}
|
||||
|
||||
class ParentViewHolder
|
||||
constructor(itemView: View, private val clickCallback: (SearchResponse) -> Unit) :
|
||||
constructor(
|
||||
itemView: View,
|
||||
private val clickCallback: (SearchResponse) -> Unit,
|
||||
private val moreInfoClickCallback: (List<SearchResponse>) -> Unit
|
||||
) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
val title: TextView = itemView.home_parent_item_title
|
||||
val recyclerView: RecyclerView = itemView.home_child_recyclerview
|
||||
private val moreInfo: FrameLayout = itemView.home_child_more_info
|
||||
fun bind(info: HomePageList) {
|
||||
title.text = info.name
|
||||
recyclerView.adapter = HomeChildItemAdapter(info.list, clickCallback)
|
||||
recyclerView.layoutManager = GridLayoutManager(itemView.context, 1)
|
||||
(recyclerView.adapter as HomeChildItemAdapter).notifyDataSetChanged()
|
||||
|
||||
moreInfo.setOnClickListener {
|
||||
moreInfoClickCallback.invoke(info.list)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,21 +1,21 @@
|
|||
package com.lagradost.cloudstream3.ui.search
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.cardview.widget.CardView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.AnimeSearchResponse
|
||||
import com.lagradost.cloudstream3.DubStatus
|
||||
import com.lagradost.cloudstream3.SearchResponse
|
||||
import com.lagradost.cloudstream3.TvType
|
||||
import com.lagradost.cloudstream3.UIHelper.getGridFormatId
|
||||
import com.lagradost.cloudstream3.UIHelper.getGridIsCompact
|
||||
import com.lagradost.cloudstream3.UIHelper.loadResult
|
||||
import com.lagradost.cloudstream3.UIHelper.toPx
|
||||
import com.lagradost.cloudstream3.ui.AutofitRecyclerView
|
||||
import kotlinx.android.synthetic.main.search_result_compact.view.backgroundCard
|
||||
|
@ -25,17 +25,17 @@ import kotlinx.android.synthetic.main.search_result_grid.view.*
|
|||
import kotlin.math.roundToInt
|
||||
|
||||
class SearchAdapter(
|
||||
private var activity: Activity,
|
||||
var cardList: ArrayList<Any>,
|
||||
private val resView: AutofitRecyclerView,
|
||||
) :
|
||||
private val clickCallback: (SearchResponse) -> Unit,
|
||||
) :
|
||||
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
val layout = parent.context.getGridFormatId()
|
||||
return CardViewHolder(
|
||||
LayoutInflater.from(parent.context).inflate(layout, parent, false),
|
||||
activity,
|
||||
clickCallback,
|
||||
resView
|
||||
)
|
||||
}
|
||||
|
@ -54,8 +54,8 @@ class SearchAdapter(
|
|||
}
|
||||
|
||||
class CardViewHolder
|
||||
constructor(itemView: View, _activity: Activity, resView: AutofitRecyclerView) : RecyclerView.ViewHolder(itemView) {
|
||||
val activity = _activity
|
||||
constructor(itemView: View, private val clickCallback: (SearchResponse) -> Unit, resView: AutofitRecyclerView) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
val cardView: ImageView = itemView.imageView
|
||||
private val cardText: TextView = itemView.imageText
|
||||
private val textType: TextView? = itemView.text_type
|
||||
|
@ -100,14 +100,13 @@ class SearchAdapter(
|
|||
val glideUrl =
|
||||
GlideUrl(card.posterUrl)
|
||||
|
||||
Glide.with(cardView.context)
|
||||
.load(glideUrl)
|
||||
.into(cardView)
|
||||
|
||||
Glide.with(cardView.context)
|
||||
.load(glideUrl)
|
||||
.into(cardView)
|
||||
}
|
||||
|
||||
bg.setOnClickListener {
|
||||
(activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName)
|
||||
clickCallback.invoke(card)
|
||||
}
|
||||
|
||||
when (card) {
|
||||
|
|
|
@ -66,15 +66,16 @@ class SearchFragment : Fragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
activity?.fixPaddingStatusbar(searchRoot)
|
||||
context?.fixPaddingStatusbar(searchRoot)
|
||||
fixGrid()
|
||||
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>? = activity?.let {
|
||||
SearchAdapter(
|
||||
it,
|
||||
ArrayList(),
|
||||
cardSpace,
|
||||
)
|
||||
) { card ->
|
||||
(activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName)
|
||||
}
|
||||
}
|
||||
|
||||
cardSpace.adapter = adapter
|
||||
|
@ -90,7 +91,8 @@ class SearchFragment : Fragment() {
|
|||
val apiNames = apis.map { it.name }
|
||||
val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext())
|
||||
|
||||
builder.setMultiChoiceItems(apiNames.toTypedArray(),
|
||||
builder.setMultiChoiceItems(
|
||||
apiNames.toTypedArray(),
|
||||
apiNames.map { a -> apiNamesSetting.contains(a) }.toBooleanArray()
|
||||
) { _, position: Int, checked: Boolean ->
|
||||
val apiNamesSettingLocal = activity?.getApiSettings()
|
||||
|
@ -104,7 +106,8 @@ class SearchFragment : Fragment() {
|
|||
|
||||
val edit = settingsManagerLocal.edit()
|
||||
edit.putStringSet(getString(R.string.search_providers_list_key),
|
||||
apiNames.filter { a -> apiNamesSettingLocal.contains(a) }.toSet())
|
||||
apiNames.filter { a -> apiNamesSettingLocal.contains(a) }.toSet()
|
||||
)
|
||||
edit.apply()
|
||||
allApi.providersActive = apiNamesSettingLocal
|
||||
}
|
||||
|
@ -131,8 +134,8 @@ class SearchFragment : Fragment() {
|
|||
when (it) {
|
||||
is Resource.Success -> {
|
||||
it.value.let { data ->
|
||||
if(data != null) {
|
||||
(cardSpace?.adapter as SearchAdapter?)?.cardList = ArrayList( data.filterNotNull())
|
||||
if (data != null) {
|
||||
(cardSpace?.adapter as SearchAdapter?)?.cardList = ArrayList(data.filterNotNull())
|
||||
cardSpace?.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:tint="#FFFFFF" android:viewportHeight="24"
|
||||
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"/>
|
||||
</vector>
|
|
@ -1,10 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
<LinearLayout
|
||||
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"
|
||||
android:orientation="vertical"
|
||||
tools:context=".ui.home.HomeFragment">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -13,4 +16,4 @@
|
|||
android:layout_height="match_parent"
|
||||
tools:listitem="@layout/homepage_parent"
|
||||
/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
|
@ -4,30 +4,40 @@
|
|||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/colorPrimary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/home_parent_item_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="12sp"
|
||||
android:textSize="18sp"
|
||||
tools:text="Trending"
|
||||
/>
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="230dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:id="@+id/home_child_recyclerview"
|
||||
android:orientation="horizontal"
|
||||
<FrameLayout
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:id="@+id/home_child_more_info"
|
||||
android:padding="12dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:id="@+id/home_parent_item_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid"
|
||||
android:textColor="?attr/textColor"
|
||||
android:gravity="center_vertical"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="Trending"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
<ImageView
|
||||
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">
|
||||
</ImageView>
|
||||
</FrameLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:id="@+id/home_child_recyclerview"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:listitem="@layout/home_result_grid"
|
||||
/>
|
||||
</LinearLayout>
|
|
@ -54,4 +54,5 @@
|
|||
|
||||
<string name="acra_report_toast">Sorry, the application crashed. An anonymous bug report will be sent to the developers</string>
|
||||
<string name="pref_disable_acra">Disable automatic bug reporting</string>
|
||||
<string name="home_more_info">More info</string>
|
||||
</resources>
|
Loading…
Reference in a new issue