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 804343f6..1ce5e6ad 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,14 @@ object Anilist { "SCORE" ) + val status = listOf( + "FINISHED", + "RELEASING", + "NOT_YET_RELEASED", + "HIATUS", + "CANCELLED" + ) + val seasons = listOf( "WINTER", "SPRING", "SUMMER", "FALL" ) 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 6b1bc6d7..bff26e97 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -881,6 +881,7 @@ class AnilistQueries { sort: String? = null, genres: MutableList? = null, tags: MutableList? = null, + status: String? = null, format: String? = null, isAdult: Boolean = false, onList: Boolean? = null, @@ -944,6 +945,7 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult: ${if (season != null) ""","season":"$season"""" else ""} ${if (search != null) ""","search":"$search"""" else ""} ${if (sort != null) ""","sort":"$sort"""" else ""} + ${if (status != null) ""","status":"$status"""" else ""} ${if (format != null) ""","format":"${format.replace(" ", "_")}"""" else ""} ${if (genres?.isNotEmpty() == true) ""","genres":[${genres.joinToString { "\"$it\"" }}]""" else ""} ${ @@ -1008,6 +1010,7 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult: excludedGenres = excludedGenres, tags = tags, excludedTags = excludedTags, + status = status, format = format, seasonYear = seasonYear, season = season, 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 5eb28a79..9e6e97a2 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt @@ -185,6 +185,7 @@ class AnilistAnimeViewModel : ViewModel() { r.sort, r.genres, r.tags, + r.status, r.format, r.isAdult, r.onList @@ -257,6 +258,7 @@ class AnilistMangaViewModel : ViewModel() { r.sort, r.genres, r.tags, + r.status, r.format, r.isAdult, r.onList, @@ -286,6 +288,7 @@ class AnilistSearch : ViewModel() { r.sort, r.genres, r.tags, + r.status, r.format, r.isAdult, r.onList, @@ -305,6 +308,7 @@ class AnilistSearch : ViewModel() { r.sort, r.genres, r.tags, + r.status, r.format, r.isAdult, r.onList, 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 32bc1757..f65ea639 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/SearchResults.kt @@ -16,6 +16,7 @@ data class SearchResults( var excludedGenres: MutableList? = null, var tags: MutableList? = null, var excludedTags: MutableList? = null, + var status: String? = null, var format: String? = null, var seasonYear: Int? = null, var season: String? = null, @@ -37,6 +38,9 @@ data class SearchResults( ) ) } + status?.let { + list.add(SearchChip("STATUS", currContext()!!.getString(R.string.filter_status, it))) + } format?.let { list.add(SearchChip("FORMAT", currContext()!!.getString(R.string.filter_format, it))) } @@ -74,6 +78,7 @@ data class SearchResults( fun removeChip(chip: SearchChip) { when (chip.type) { "SORT" -> sort = null + "STATUS" -> status = null "FORMAT" -> format = null "SEASON" -> season = null "SEASON_YEAR" -> seasonYear = null diff --git a/app/src/main/java/ani/dantotsu/media/SearchActivity.kt b/app/src/main/java/ani/dantotsu/media/SearchActivity.kt index 33403915..164df7ea 100644 --- a/app/src/main/java/ani/dantotsu/media/SearchActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/SearchActivity.kt @@ -67,6 +67,7 @@ class SearchActivity : AppCompatActivity() { genres = intent.getStringExtra("genre")?.let { mutableListOf(it) }, tags = intent.getStringExtra("tag")?.let { mutableListOf(it) }, sort = intent.getStringExtra("sortBy"), + status = intent.getStringExtra("status"), season = intent.getStringExtra("season"), seasonYear = intent.getStringExtra("seasonYear")?.toIntOrNull(), results = mutableListOf(), @@ -128,6 +129,7 @@ class SearchActivity : AppCompatActivity() { tags = it.tags season = it.season seasonYear = it.seasonYear + status = it.status format = it.format page = it.page hasNextPage = it.hasNextPage @@ -182,7 +184,7 @@ class SearchActivity : AppCompatActivity() { override fun run() { scope.launch(Dispatchers.IO) { loading = true - model.loadSearch(result) + model.loadSearch(result.copy(status = result.status)) loading = false } } diff --git a/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt b/app/src/main/java/ani/dantotsu/media/SearchFilterBottomDialog.kt index a6b8a739..0d58e1c3 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().ifBlank { null } format = binding.searchFormat.text.toString().ifBlank { null } season = binding.searchSeason.text.toString().ifBlank { null } seasonYear = binding.searchYear.text.toString().toIntOrNull() @@ -220,6 +221,7 @@ class SearchFilterBottomDialog : BottomSheetDialogFragment() { binding.searchFilterApply.setOnClickListener { activity.result.apply { + status = binding.searchStatus.text.toString().ifBlank { null } format = binding.searchFormat.text.toString().ifBlank { null } season = binding.searchSeason.text.toString().ifBlank { null } seasonYear = binding.searchYear.text.toString().toIntOrNull() @@ -237,6 +239,15 @@ class SearchFilterBottomDialog : BottomSheetDialogFragment() { dismiss() } + binding.searchStatus.setText(activity.result.status) + binding.searchStatus.setAdapter( + ArrayAdapter( + binding.root.context, + R.layout.item_dropdown, + Anilist.status.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 92d524df..00d60db1 100644 --- a/app/src/main/res/layout/bottom_sheet_search_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_search_filter.xml @@ -79,7 +79,7 @@ android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:layout_weight="1" - android:hint="Status" + android:hint="@string/status_title" app:boxCornerRadiusBottomEnd="16dp" app:boxCornerRadiusBottomStart="16dp" app:boxCornerRadiusTopEnd="16dp" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5fe8d03..ebec19da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -613,6 +613,7 @@ Chapter Chapters + "Status : %1$s" "Format : %1$s" "Sort : %1$s" "Not %1$s"