From 2222a1b07b45bef01f95f4b347b7320f615e667a Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sat, 3 Dec 2022 22:55:53 +0100 Subject: [PATCH] fixed rolling cache + update UI text color --- .../cloudstream3/ui/APIRepository.kt | 36 +++- .../cloudstream3/ui/home/HomeFragment.kt | 2 + .../cloudstream3/ui/home/HomeScrollAdapter.kt | 7 +- .../ui/settings/SettingsProviders.kt | 2 - app/src/main/res/layout/fragment_home.xml | 5 +- .../main/res/layout/home_result_big_grid.xml | 5 +- app/src/main/res/layout/home_result_grid.xml | 156 ++++++++--------- .../res/layout/home_result_grid_expanded.xml | 158 +++++++++--------- .../main/res/layout/search_result_grid.xml | 149 ++++++++--------- .../layout/search_result_grid_expanded.xml | 137 +++++++-------- app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/dimens.xml | 1 - app/src/main/res/values/styles.xml | 26 ++- 13 files changed, 349 insertions(+), 341 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index ef50019c..2c50a6c6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError @@ -31,26 +32,47 @@ class APIRepository(val api: MainAPI) { return data.isEmpty() || data == "[]" || data == "about:blank" } - private val cacheHash: HashMap, LoadResponse> = hashMapOf() + data class SavedLoadResponse( + val unixTime: Long, + val response: LoadResponse, + val hash: Pair + ) + + + private val cache: ArrayList = arrayListOf() + private var cacheIndex: Int = 0 + const val cacheSize = 20 } val hasMainPage = api.hasMainPage + val providerType = api.providerType val name = api.name val mainUrl = api.mainUrl val mainPage = api.mainPage val hasQuickSearch = api.hasQuickSearch val vpnStatus = api.vpnStatus - val providerType = api.providerType suspend fun load(url: String): Resource { return safeApiCall { if (isInvalidData(url)) throw ErrorLoadingException() val fixedUrl = api.fixUrl(url) - val key = Pair(api.name, url) - cacheHash[key] ?: api.load(fixedUrl)?.also { - // we cache 20 responses because ppl often go back to the same shit + 20 because I dont want to cause too much memory leak - if (cacheHash.size > 20) cacheHash.remove(cacheHash.keys.random()) - cacheHash[key] = it + val lookingForHash = Pair(api.name, fixedUrl) + + for (item in cache) { + // 10 min save + if (item.hash == lookingForHash && (unixTime - item.unixTime) < 60 * 10) { + return@safeApiCall item.response + } + } + + api.load(fixedUrl)?.also { response -> + val add = SavedLoadResponse(unixTime, response, lookingForHash) + if (cache.size > cacheSize) { + cache[cacheIndex] = add // rolling cache + cacheIndex = (cacheIndex + 1) % cacheSize + } else { + cache.add(add) + } } ?: throw ErrorLoadingException() } } 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 ac6daa53..00b53fa7 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 @@ -443,6 +443,7 @@ class HomeFragment : Fragment() { home_main_poster_recyclerview?.isVisible = visible } + @SuppressLint("NotifyDataSetChanged") // we need to notify to change poster private fun fixGrid() { activity?.getSpanCount()?.let { currentSpan = it @@ -465,6 +466,7 @@ class HomeFragment : Fragment() { override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) + (home_preview_viewpager?.adapter as? HomeScrollAdapter)?.notifyDataSetChanged() fixGrid() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt index a3eaf7c7..7ed074dc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.home +import android.content.res.Configuration import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -16,7 +17,7 @@ class HomeScrollAdapter : RecyclerView.Adapter() { private var items: MutableList = mutableListOf() var hasMoreItems: Boolean = false - fun getItem(position: Int) : LoadResponse? { + fun getItem(position: Int): LoadResponse? { return items.getOrNull(position) } @@ -59,6 +60,10 @@ class HomeScrollAdapter : RecyclerView.Adapter() { fun bind(card: LoadResponse) { card.apply { + val isHorizontal = + itemView.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + val posterUrl = if (isHorizontal) backgroundPosterUrl ?: posterUrl else posterUrl + ?: backgroundPosterUrl itemView.home_scroll_preview_tags?.text = tags?.joinToString(" β€’ ") ?: "" itemView.home_scroll_preview_tags?.isGone = tags.isNullOrEmpty() itemView.home_scroll_preview?.setImage(posterUrl, posterHeaders) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index 4371fc39..3b01508d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -16,8 +16,6 @@ import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -import kotlin.reflect.jvm.internal.impl.descriptors.deserialization.PlatformDependentDeclarationFilter.All - class SettingsProviders : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index e6270a77..7f8e2c01 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -323,6 +323,7 @@ app:iconifiedByDefault="true" app:queryBackground="@color/transparent" app:queryHint="@string/search" + app:closeIcon="@drawable/ic_baseline_close_24" app:searchIcon="@drawable/search_icon" tools:ignore="RtlSymmetry" /> @@ -405,11 +406,11 @@ + - + android:layout_height="0dp"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/background_card" + android:layout_width="114dp" + android:layout_height="180dp" + android:layout_margin="2dp" + android:layout_marginBottom="2dp" + android:elevation="10dp" + android:foreground="@drawable/outline_drawable" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:id="@+id/imageView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> + android:id="@+id/title_shadow" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_gravity="bottom" + android:clickable="false" + android:focusable="false" + android:src="@drawable/title_shadow" + tools:ignore="ContentDescription" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="@color/textColor" + android:textStyle="bold" + tools:text="The Perfect Run" /> + android:id="@+id/search_item_download_play" + android:layout_width="60dp" + android:layout_height="60dp" + android:layout_gravity="center" + android:src="@drawable/play_button" /> + android:id="@+id/watchProgress" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="5dp" + android:layout_gravity="bottom" + android:layout_marginBottom="-1.5dp" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" + tools:progress="50" /> - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="end" + android:orientation="vertical"> + android:id="@+id/text_is_dub" + style="@style/DubButton" + android:layout_gravity="end" /> + android:id="@+id/text_is_sub" + style="@style/SubButton" + android:layout_gravity="end" /> + android:id="@+id/text_flag" + style="@style/SearchBox" + android:layout_gravity="end" + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="πŸ‡ΈπŸ‡ͺ" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/home_result_grid_expanded.xml b/app/src/main/res/layout/home_result_grid_expanded.xml index 3cf4e7f9..b697c1de 100644 --- a/app/src/main/res/layout/home_result_grid_expanded.xml +++ b/app/src/main/res/layout/home_result_grid_expanded.xml @@ -5,58 +5,58 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/background_card" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="2dp" + android:backgroundTint="@color/transparent" + android:foreground="@drawable/outline_drawable" + app:cardCornerRadius="@dimen/rounded_image_radius" + app:cardElevation="0dp"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:id="@+id/image_holder" + android:layout_width="114dp" + android:layout_height="180dp" + android:elevation="10dp" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:id="@+id/imageView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> + android:id="@+id/search_item_download_play" + android:layout_width="60dp" + android:layout_height="60dp" + android:layout_gravity="center" + android:src="@drawable/play_button" /> + android:id="@+id/watchProgress" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="5dp" + android:layout_gravity="bottom" + android:layout_marginBottom="-1.5dp" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" + tools:progress="50" /> - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="end" + android:orientation="vertical"> + android:id="@+id/text_is_dub" + style="@style/DubButton" + android:layout_gravity="end" /> + android:id="@+id/text_is_sub" + style="@style/SubButton" + android:layout_gravity="end" /> + android:id="@+id/text_flag" + style="@style/SearchBox" + android:layout_gravity="end" + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="πŸ‡ΈπŸ‡ͺ" + tools:visibility="visible" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:minLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="?attr/textColor" + android:textSize="13sp" + tools:text="The Perfect Run\nThe Perfect Run\nhello" /> diff --git a/app/src/main/res/layout/search_result_grid.xml b/app/src/main/res/layout/search_result_grid.xml index 98fe5812..f3c35ca4 100644 --- a/app/src/main/res/layout/search_result_grid.xml +++ b/app/src/main/res/layout/search_result_grid.xml @@ -1,98 +1,89 @@ + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/outline_drawable" + android:orientation="vertical"> + + + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" /> - - + android:id="@+id/title_shadow" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_gravity="bottom" + android:clickable="false" + android:focusable="false" + android:src="@drawable/title_shadow" + tools:ignore="ContentDescription" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="@color/textColor" + android:textStyle="bold" /> - + + + + + + + - - - - - - + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="πŸ‡ΈπŸ‡ͺ" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/search_result_grid_expanded.xml b/app/src/main/res/layout/search_result_grid_expanded.xml index 710c6cf8..eb859af5 100644 --- a/app/src/main/res/layout/search_result_grid_expanded.xml +++ b/app/src/main/res/layout/search_result_grid_expanded.xml @@ -1,90 +1,81 @@ + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/outline_drawable" + android:orientation="vertical"> + android:id="@+id/background_card" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="2dp" + android:layout_marginBottom="2dp" + android:elevation="10dp" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> - + + + + + + + - - - - - - + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="πŸ‡ΈπŸ‡ͺ" + tools:visibility="visible" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:minLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="?attr/textColor" + android:textSize="13sp" + tools:text="The Perfect Run\nThe Perfect Run" /> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c3e51ab5..7c2e798b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -25,13 +25,13 @@ #FFF #000 - #3d50fa + #121950 #121213 #3B65F5 - #F54A3B + #571711 #F53B66 - #3BF585 + #BEC8FF ?attr/colorPrimaryDark #FF6F63 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e748868b..dac8b9cd 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -16,5 +16,4 @@ 2000 3dp - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9c2f62fc..4fde7ae8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -97,6 +97,24 @@ @color/white @color/whiteText + + + + + +