diff --git a/app/src/main/java/com/lagradost/cloudstream3/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/UIHelper.kt index 38dd69a8..33be1561 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/UIHelper.kt @@ -101,6 +101,10 @@ object UIHelper { } } + fun Activity?.loadSearchResult(card : SearchResponse) { + (this as AppCompatActivity?)?.loadResult(card.url, card.slug, card.apiName) + } + fun Context.getStatusBarHeight(): Int { var result = 0 val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 5e812a7f..18dfd39b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -1,21 +1,27 @@ package com.lagradost.cloudstream3.ui.home +import android.annotation.SuppressLint import android.content.res.Configuration import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.FrameLayout import android.widget.TextView -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.bumptech.glide.Glide +import com.bumptech.glide.load.model.GlideUrl import com.google.android.material.bottomsheet.BottomSheetDialog +import com.lagradost.cloudstream3.AnimeSearchResponse +import com.lagradost.cloudstream3.HomePageResponse import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.UIHelper.getGridIsCompact -import com.lagradost.cloudstream3.UIHelper.loadResult +import com.lagradost.cloudstream3.UIHelper.loadSearchResult import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.AutofitRecyclerView @@ -42,6 +48,67 @@ class HomeFragment : Fragment() { private val configEvent = Event() private var currentSpan = 1 + private var currentHomePage: HomePageResponse? = null + var currentMainIndex = 0 + var currentMainList: ArrayList = ArrayList() + + private fun toggleMainVisibility(visible: Boolean) { + home_main_holder.visibility = if (visible) View.VISIBLE else View.GONE + } + + @SuppressLint("SetTextI18n") + private fun chooseRandomMainPage(item: SearchResponse? = null): SearchResponse? { + val home = currentHomePage + if (home != null && home.items.isNotEmpty()) { + var random: SearchResponse? = item + + var breakCount = 0 + val MAX_BREAK_COUNT = 10 + + while (random?.posterUrl == null) { + random = home.items.random().list.random() + breakCount++ + if (breakCount > MAX_BREAK_COUNT) { + break + } + } + + if (random?.posterUrl != null) { + home_main_poster.setOnClickListener { + activity.loadSearchResult(random) + } + home_main_play.setOnClickListener { + activity.loadSearchResult(random) + } + home_main_info.setOnClickListener { + activity.loadSearchResult(random) + } + + home_main_text.text = random.name + if (random is AnimeSearchResponse) { + random.dubStatus?.joinToString(prefix = " • ", separator = " | ") { it.name } + } else "" + val glideUrl = + GlideUrl(random.posterUrl) + requireContext().let { + Glide.with(it) + .load(glideUrl) + .into(home_main_poster) +/* + Glide.with(it) + .load(glideUrl) + .apply(RequestOptions.bitmapTransform(BlurTransformation(80, 3))) + .into(result_poster_blur)*/ + } + + toggleMainVisibility(true) + return random + } else { + toggleMainVisibility(false) + return null + } + } + return null + } private fun fixGrid() { val compactView = activity?.getGridIsCompact() ?: false @@ -66,6 +133,30 @@ class HomeFragment : Fragment() { super.onViewCreated(view, savedInstanceState) fixGrid() + home_reroll_next.setOnClickListener { + currentMainIndex++ + if (currentMainIndex >= currentMainList.size) { + val newItem = chooseRandomMainPage() + if (newItem != null) { + currentMainList.add(newItem) + } + currentMainIndex = currentMainList.size - 1 + } + chooseRandomMainPage(currentMainList[currentMainIndex]) + } + + home_reroll_prev.setOnClickListener { + currentMainIndex-- + if (currentMainIndex < 0) { + val newItem = chooseRandomMainPage() + if (newItem != null) { + currentMainList.add(0, newItem) + } + currentMainIndex = 0 + } + chooseRandomMainPage(currentMainList[currentMainIndex]) + } + observe(homeViewModel.apiName) { context?.setKey(HOMEPAGE_API, it) } @@ -74,8 +165,14 @@ class HomeFragment : Fragment() { when (it) { is Resource.Success -> { val d = it.value + currentHomePage = d (home_master_recycler?.adapter as ParentItemAdapter?)?.items = d.items home_master_recycler?.adapter?.notifyDataSetChanged() + currentMainList.clear() + chooseRandomMainPage()?.let { response -> + currentMainList.add(response) + } + currentMainIndex = 0 } is Resource.Failure -> { @@ -87,20 +184,25 @@ class HomeFragment : Fragment() { } val adapter: RecyclerView.Adapter = ParentItemAdapter(listOf(), { card -> - (activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName) + activity.loadSearchResult(card) }, { item -> val bottomSheetDialogBuilder = BottomSheetDialog(view.context) bottomSheetDialogBuilder.setContentView(R.layout.home_episodes_expanded) val title = bottomSheetDialogBuilder.findViewById(R.id.home_expanded_text)!! title.text = item.name val recycle = bottomSheetDialogBuilder.findViewById(R.id.home_expanded_recycler)!! + val titleHolder = bottomSheetDialogBuilder.findViewById(R.id.home_expanded_drag_down)!! + + titleHolder.setOnClickListener { + bottomSheetDialogBuilder.dismiss() + } // Span settings recycle.spanCount = currentSpan recycle.adapter = SearchAdapter(item.list, recycle) { card -> bottomSheetDialogBuilder.dismiss() - (activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName) + activity.loadSearchResult(card) } val spanListener = { span: Int -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 85d5df4d..61504faa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -24,6 +24,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.UIHelper.getGridIsCompact import com.lagradost.cloudstream3.UIHelper.loadResult +import com.lagradost.cloudstream3.UIHelper.loadSearchResult import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe import kotlinx.android.synthetic.main.fragment_search.* @@ -74,7 +75,7 @@ class SearchFragment : Fragment() { ArrayList(), cardSpace, ) { card -> - (activity as AppCompatActivity).loadResult(card.url, card.slug, card.apiName) + activity.loadSearchResult(card) } } diff --git a/app/src/main/res/drawable/ic_outline_info_24.xml b/app/src/main/res/drawable/ic_outline_info_24.xml new file mode 100644 index 00000000..24bd8405 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_info_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c69a39fe..f4fa96f9 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,5 +1,5 @@ - - - - \ No newline at end of file + android:layout_height="match_parent"> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/home_episodes_expanded.xml b/app/src/main/res/layout/home_episodes_expanded.xml index 99486b5a..3587528f 100644 --- a/app/src/main/res/layout/home_episodes_expanded.xml +++ b/app/src/main/res/layout/home_episodes_expanded.xml @@ -8,6 +8,8 @@ android:layout_height="wrap_content"> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b1fd17fa..792e7ebd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -56,4 +56,8 @@ Disable automatic bug reporting More info Hide + Main Poster + Play + Info + Next Random \ No newline at end of file