diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index efeac1a1..a8daf15f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -227,26 +227,19 @@ object APIHolder { } fun Context.filterProviderByPreferredMedia(hasHomePageIsRequired: Boolean = true): List { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val currentPrefMedia = - settingsManager.getInt(this.getString(R.string.prefer_media_type_key), 0) + val default = enumValues().sorted().filter { it != TvType.NSFW }.map { it.ordinal } + val defaultSet = default.map { it.toString() }.toSet() + val currentPrefMedia = PreferenceManager.getDefaultSharedPreferences(this) + .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) + ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null }?: default val langs = this.getApiProviderLangSettings() val allApis = apis.filter { langs.contains(it.lang) } .filter { api -> api.hasMainPage || !hasHomePageIsRequired } - return if (currentPrefMedia < 1) { + return if (currentPrefMedia.isEmpty()) { allApis } else { // Filter API depending on preferred media type - val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.OVA) - val listEnumMovieTv = - listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon, TvType.AsianDrama) - val listEnumDoc = listOf(TvType.Documentary) - val mediaTypeList = when (currentPrefMedia) { - 2 -> listEnumAnime - 3 -> listEnumDoc - else -> listEnumMovieTv - } - allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } } + allApis.filter { api -> api.supportedTypes.any { currentPrefMedia.contains(it.ordinal) } } } } @@ -586,19 +579,19 @@ enum class DubStatus(val id: Int) { Subbed(0), } -enum class TvType { - Movie, - AnimeMovie, - TvSeries, - Cartoon, - Anime, - OVA, - Torrent, - Documentary, - AsianDrama, - Live, - NSFW, - Others +enum class TvType(value: Int?) { + Movie(1), + AnimeMovie(2), + TvSeries(3), + Cartoon(4), + Anime(5), + OVA(6), + Torrent(7), + Documentary(8), + AsianDrama(9), + Live(10), + NSFW(11), + Others(12) } // IN CASE OF FUTURE ANIME MOVIE OR SMTH diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt index f011bd40..ccfd55b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt @@ -5,19 +5,15 @@ import android.os.Bundle import android.view.View import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager -import com.lagradost.cloudstream3.APIHolder +import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey -import com.lagradost.cloudstream3.CommonActivity -import com.lagradost.cloudstream3.DubStatus -import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API -import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper @@ -100,25 +96,26 @@ class SettingsLang : PreferenceFragmentCompat() { } getPref(R.string.prefer_media_type_key)?.setOnPreferenceClickListener { - val prefNames = resources.getStringArray(R.array.media_type_pref) - val prefValues = resources.getIntArray(R.array.media_type_pref_values) + val names = enumValues().sorted().map { it.name } + val default = enumValues().sorted().filter { it != TvType.NSFW }.map { it.ordinal } + val defaultSet = default.map { it.toString() }.toSet() + val currentList = settingsManager.getStringSet(getString(R.string.prefer_media_type_key), defaultSet)?.map { + it.toInt() + } ?: default - val currentPrefMedia = - settingsManager.getInt(getString(R.string.prefer_media_type_key), 0) - - activity?.showBottomDialog( - prefNames.toList(), - prefValues.indexOf(currentPrefMedia), + activity?.showMultiDialog( + names, + currentList, getString(R.string.preferred_media_settings), - true, - {}) { - settingsManager.edit() - .putInt(getString(R.string.prefer_media_type_key), prefValues[it]) - .apply() - + {}) { selectedList -> + settingsManager.edit().putStringSet( + this.getString(R.string.prefer_media_type_key), + selectedList.map { it.toString() }.toMutableSet() + ).apply() removeKey(USER_SELECTED_HOMEPAGE_API) -// (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } + //(context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } + return@setOnPreferenceClickListener true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt index 8d152886..257ce5c1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt @@ -6,10 +6,12 @@ import android.view.View import android.view.ViewGroup import android.widget.AbsListView import android.widget.ArrayAdapter +import androidx.core.util.forEach import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.utils.DataStore.removeKey import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar @@ -35,24 +37,34 @@ class SetupFragmentMedia : Fragment() { val arrayAdapter = ArrayAdapter(this, R.layout.sort_bottom_single_choice) - val currentPrefMedia = - settingsManager.getInt(getString(R.string.prefer_media_type_key), 0) + val names = enumValues().sorted().map { it.name } + val selected = mutableListOf() - val prefNames = resources.getStringArray(R.array.media_type_pref) - val prefValues = resources.getIntArray(R.array.media_type_pref_values) + arrayAdapter.addAll(names) + listview1?.let { + it.adapter = arrayAdapter + it.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE - arrayAdapter.addAll(prefNames.toList()) - listview1?.adapter = arrayAdapter - listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE - listview1?.setItemChecked(currentPrefMedia, true) + it.setOnItemClickListener { _, _, _, _ -> + it.checkedItemPositions?.forEach { key, value -> + if (value) { + selected.add(key) + } else { + selected.remove(key) + } + } + val prefValues = selected.mapNotNull { pos -> + val item = it.getItemAtPosition(pos)?.toString() ?: return@mapNotNull null + val itemVal = TvType.valueOf(item) + itemVal.ordinal.toString() + }.toSet() + settingsManager.edit() + .putStringSet(getString(R.string.prefer_media_type_key), prefValues) + .apply() - listview1?.setOnItemClickListener { _, _, position, _ -> - settingsManager.edit() - .putInt(getString(R.string.prefer_media_type_key), prefValues[position]) - .apply() - - // Regenerate set homepage - removeKey(USER_SELECTED_HOMEPAGE_API) + // Regenerate set homepage + removeKey(USER_SELECTED_HOMEPAGE_API) + } } next_btt?.setOnClickListener { diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 2347f792..8203f4b4 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -29,19 +29,6 @@ 4 - - All - Movies and TV - Anime - Documentary - - - 0 - 1 - 2 - 3 - - @string/resolution_and_title @string/title