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…
	
	Add table
		Add a link
		
	
		Reference in a new issue