From 12bbc7449d37c0972befd2b9f59e73d949e1e072 Mon Sep 17 00:00:00 2001 From: sneazy-ibo <41344259+sneazy-ibo@users.noreply.github.com> Date: Sun, 24 Mar 2024 04:23:00 +0100 Subject: [PATCH] feat: source filter fully functional --- .../dantotsu/connections/anilist/Anilist.kt | 18 +++++++++++ .../connections/anilist/AnilistQueries.kt | 3 ++ .../connections/anilist/AnilistViewModel.kt | 4 +++ .../connections/anilist/SearchResults.kt | 5 +++ .../java/ani/dantotsu/media/SearchActivity.kt | 2 ++ .../media/SearchFilterBottomDialog.kt | 11 +++++++ .../res/layout/bottom_sheet_search_filter.xml | 32 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 76 insertions(+) diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt b/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt index afd5e9cb..22ffc337 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt @@ -45,6 +45,24 @@ object Anilist { "SCORE" ) + val source = listOf( + "ORIGINAL", + "MANGA", + "LIGHT_NOVEL", + "VISUAL_NOVEL", + "VIDEO_GAME", + "OTHER", + "NOVEL", + "DOUJINSHI", + "ANIME", + "WEB_NOVEL", + "LIVE_ACTION", + "GAME", + "COMIC", + "MULTIMEDIA_PROJECT", + "PICTURE_BOOK" + ) + val animeStatus = listOf( "FINISHED", "RELEASING", diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt index 2fd1d0bf..19c4bf4d 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -882,6 +882,7 @@ class AnilistQueries { genres: MutableList? = null, tags: MutableList? = null, status: String? = null, + source: String? = null, format: String? = null, countryOfOrigin: String? = null, isAdult: Boolean = false, @@ -945,6 +946,7 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult: ${if (seasonYear != null) ""","seasonYear":"$seasonYear"""" else ""} ${if (season != null) ""","season":"$season"""" else ""} ${if (search != null) ""","search":"$search"""" else ""} + ${if (source != null) ""","source":"$source"""" else ""} ${if (sort != null) ""","sort":"$sort"""" else ""} ${if (status != null) ""","status":"$status"""" else ""} ${if (format != null) ""","format":"${format.replace(" ", "_")}"""" else ""} @@ -1013,6 +1015,7 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult: tags = tags, excludedTags = excludedTags, status = status, + source = source, format = format, countryOfOrigin = countryOfOrigin, seasonYear = seasonYear, diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt index bed8f00c..ccf8849e 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt @@ -186,6 +186,7 @@ class AnilistAnimeViewModel : ViewModel() { r.genres, r.tags, r.status, + r.source, r.format, r.countryOfOrigin, r.isAdult, @@ -260,6 +261,7 @@ class AnilistMangaViewModel : ViewModel() { r.genres, r.tags, r.status, + r.source, r.format, r.countryOfOrigin, r.isAdult, @@ -291,6 +293,7 @@ class AnilistSearch : ViewModel() { r.genres, r.tags, r.status, + r.source, r.format, r.countryOfOrigin, r.isAdult, @@ -312,6 +315,7 @@ class AnilistSearch : ViewModel() { r.genres, r.tags, r.status, + r.source, r.format, r.countryOfOrigin, r.isAdult, diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt b/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt index 44cbb6e2..2306c0ac 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt @@ -18,6 +18,7 @@ data class SearchResults( var tags: MutableList? = null, var excludedTags: MutableList? = null, var status: String? = null, + var source: String? = null, var format: String? = null, var seasonYear: Int? = null, var season: String? = null, @@ -42,6 +43,9 @@ data class SearchResults( status?.let { list.add(SearchChip("STATUS", currContext()!!.getString(R.string.filter_status, it))) } + source?.let { + list.add(SearchChip("SOURCE", currContext()!!.getString(R.string.filter_source, it))) + } format?.let { list.add(SearchChip("FORMAT", currContext()!!.getString(R.string.filter_format, it))) } @@ -83,6 +87,7 @@ data class SearchResults( when (chip.type) { "SORT" -> sort = null "STATUS" -> status = null + "SOURCE" -> source = null "FORMAT" -> format = null "COUNTRY" -> countryOfOrigin = null "SEASON" -> season = null diff --git a/app/src/main/java/ani/dantotsu/media/SearchActivity.kt b/app/src/main/java/ani/dantotsu/media/SearchActivity.kt index 5a5ef506..11122481 100644 --- a/app/src/main/java/ani/dantotsu/media/SearchActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/SearchActivity.kt @@ -68,6 +68,7 @@ class SearchActivity : AppCompatActivity() { tags = intent.getStringExtra("tag")?.let { mutableListOf(it) }, sort = intent.getStringExtra("sortBy"), status = intent.getStringExtra("status"), + source = intent.getStringExtra("source"), countryOfOrigin = intent.getStringExtra("country"), season = intent.getStringExtra("season"), seasonYear = intent.getStringExtra("seasonYear")?.toIntOrNull(), @@ -131,6 +132,7 @@ class SearchActivity : AppCompatActivity() { season = it.season seasonYear = it.seasonYear status = it.status + source = it.source format = it.format countryOfOrigin = it.countryOfOrigin page = it.page diff --git a/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt b/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt index a613fdef..019d9deb 100644 --- a/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt +++ b/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt @@ -124,6 +124,7 @@ class SearchFilterBottomDialog : BottomSheetDialogFragment() { CoroutineScope(Dispatchers.Main).launch { activity.result.apply { status = binding.searchStatus.text.toString().replace(" ", "_").ifBlank { null } + source = binding.searchSource.text.toString().replace(" ", "_").ifBlank { null } format = binding.searchFormat.text.toString().ifBlank { null } season = binding.searchSeason.text.toString().ifBlank { null } seasonYear = binding.searchYear.text.toString().toIntOrNull() @@ -221,6 +222,7 @@ class SearchFilterBottomDialog : BottomSheetDialogFragment() { binding.searchFilterApply.setOnClickListener { activity.result.apply { status = binding.searchStatus.text.toString().replace(" ", "_").ifBlank { null } + source = binding.searchSource.text.toString().replace(" ", "_").ifBlank { null } format = binding.searchFormat.text.toString().ifBlank { null } season = binding.searchSeason.text.toString().ifBlank { null } seasonYear = binding.searchYear.text.toString().toIntOrNull() @@ -248,6 +250,15 @@ class SearchFilterBottomDialog : BottomSheetDialogFragment() { ) ) + binding.searchSource.setText(activity.result.source) + binding.searchSource.setAdapter( + ArrayAdapter( + binding.root.context, + R.layout.item_dropdown, + Anilist.source.toTypedArray() + ) + ) + binding.searchFormat.setText(activity.result.format) binding.searchFormat.setAdapter( ArrayAdapter( diff --git a/app/src/main/res/layout/bottom_sheet_search_filter.xml b/app/src/main/res/layout/bottom_sheet_search_filter.xml index 00d60db1..1a24c5fe 100644 --- a/app/src/main/res/layout/bottom_sheet_search_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_search_filter.xml @@ -143,6 +143,38 @@ android:baselineAligned="false" android:orientation="horizontal"> + + + + + + Chapters "Status : %1$s" + "Source : %1$s" "Format : %1$s" "Country : %1$s" "Sort : %1$s"