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 ac4721bf..39b2c9c7 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 @@ -14,6 +14,7 @@ import android.widget.TextView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.preference.PreferenceManager import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearSnapHelper @@ -166,11 +167,24 @@ class HomeFragment : Fragment() { } private val apiChangeClickListener = View.OnClickListener { view -> - val validAPIs = apis.filter { api -> api.hasMainPage }.toMutableList() + val allApis = apis.filter { api -> api.hasMainPage }.toMutableList() + var validAPIs = allApis + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + val currentPrefMedia = settingsManager.getInt(getString(R.string.preferred_media_settings), 0) + + // Filter API depending on preferred media type + if (currentPrefMedia > 0) { + val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA) + val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon) + val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime + + validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList() + } + validAPIs.add(0, randomApi) validAPIs.add(0, noneApi) view.popupMenuNoIconsAndNoStringRes(validAPIs.mapIndexed { index, api -> Pair(index, api.name) }) { - homeViewModel.loadAndCancel(validAPIs[itemId].name) + homeViewModel.loadAndCancel(validAPIs[itemId].name, currentPrefMedia) } } @@ -411,7 +425,7 @@ class HomeFragment : Fragment() { val apiName = context?.getKey(HOMEPAGE_API) if (homeViewModel.apiName.value != apiName || apiName == null) { //println("Caught home: " + homeViewModel.apiName.value + " at " + apiName) - homeViewModel.loadAndCancel(apiName) + homeViewModel.loadAndCancel(apiName, 0) } } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index a446b1ca..5d573c41 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -10,6 +10,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.HomePageResponse import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi @@ -148,12 +149,21 @@ class HomeViewModel : ViewModel() { } } - fun loadAndCancel(preferredApiName: String?) = viewModelScope.launch { + fun loadAndCancel(preferredApiName: String?, currentPrefMedia: Int) = viewModelScope.launch { val api = getApiFromNameNull(preferredApiName) if (preferredApiName == noneApi.name) loadAndCancel(noneApi) else if(preferredApiName == randomApi.name || api == null) { - loadAndCancel(apis.filter { it.hasMainPage }.random()) + val allApis = apis.filter { api -> api.hasMainPage }.toMutableList() + var validAPIs = allApis + if (currentPrefMedia > 0) { + val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA) + val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon) + val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime + + validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList() + } + loadAndCancel(validAPIs.random()) } else { loadAndCancel(api) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 318960f3..d3f92837 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -82,6 +82,7 @@ class SettingsFragment : PreferenceFragmentCompat() { val providerLangPreference = findPreference(getString(R.string.provider_lang_key))!! val allLayoutPreference = findPreference(getString(R.string.app_layout_key))!! val colorPrimaryPreference = findPreference(getString(R.string.primary_color_key))!! + val preferedMediaTypePreference = findPreference(getString(R.string.prefer_media_type_key))!! val appThemePreference = findPreference(getString(R.string.app_theme_key))!! legalPreference.setOnPreferenceClickListener { @@ -163,6 +164,30 @@ class SettingsFragment : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } + if (preferedMediaTypePreference != null) { + preferedMediaTypePreference.setOnPreferenceClickListener { + val prefNames = resources.getStringArray(R.array.media_type_pref) + val prefValues = resources.getIntArray(R.array.media_type_pref_values) + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + + val currentPrefMedia = + settingsManager.getInt(getString(R.string.preferred_media_settings), 0) + + context?.showBottomDialog( + prefNames.toList(), + prefValues.indexOf(currentPrefMedia), + getString(R.string.preferred_media_settings), + true, + {}) { + settingsManager.edit() + .putInt(getString(R.string.preferred_media_settings), prefValues[it]) + .apply() + context?.initRequestClient() + } + return@setOnPreferenceClickListener true + } + } + allLayoutPreference.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.app_layout) val prefValues = resources.getIntArray(R.array.app_layout_values) diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 7b205b3d..bff99d48 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -46,6 +46,17 @@ 4 + + All + Movies and TV + Anime + + + 0 + 1 + 2 + + @string/episode_action_chomecast_episode @string/episode_action_chomecast_mirror diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1d1efadf..fad20de2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,6 +26,7 @@ dns_key app_layout_key primary_color_key + prefer_media_type_key app_theme_key @@ -297,6 +298,7 @@ General Provider Languages App Layout + Preferred Media Auto Tv Layout diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 7ac952f4..acfcb644 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -83,6 +83,11 @@ android:title="@string/app_language" android:icon="@drawable/ic_baseline_language_24"> + +