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 38f45eb6..d2610aae 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt @@ -41,6 +41,10 @@ object Anilist { var staffNameLanguage: String? = null var airingNotifications: Boolean = false var restrictMessagesToFollowing: Boolean = false + var scoreFormat: String? = null + var rowOrder: String? = null + var activityMergeTime: Int? = null + var timezone: String? = null val sortBy = listOf( "SCORE_DESC", @@ -101,6 +105,47 @@ object Anilist { "Original Creator", "Story & Art", "Story" ) + val timeZone = listOf( + "(GMT-06:00) Central Time", + "(GMT-05:00) Eastern Time", + "(GMT-04:00) Atlantic Time", + "(GMT-01:00) Central Time", + "(GMT+00:00) London", + "(GMT+01:00) Berlin", + "(GMT+04:00) Dubai", + "(GMT+05:30) India Standard Time", + "(GMT+06:00) Dhaka", + "(GMT+07:00) Bangkok", + "(GMT+09:00) Tokyo", + ) + + val titleLang = listOf( + "English (Attack on Titan)", + "Romaji (Shingeki no Kyojin)", + "Native (進撃の巨人)" + ) + + val staffNameLang = listOf( + "Romaji, Western Order (Killua Zoldyck)", + "Romaji (Zoldyck Killua)", + "Native (キルア=ゾルディック)" + ) + + val ScoreFormat = listOf( + "100 Point (55/100)", + "10 Point Decimal (5.5/10)", + "10 Point (5/10)", + "5 Star (3/5)", + "3 Point Smiley :)", + ) + + val RowOrder = listOf( + "Score", + "Title", + "Last Updated", + "Last Added", + ) + private val cal: Calendar = Calendar.getInstance() private val currentYear = cal.get(Calendar.YEAR) private val currentSeason: Int = when (cal.get(Calendar.MONTH)) { diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt index 6d3256de..407f6a49 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt @@ -17,7 +17,9 @@ class AnilistMutations { activityMergeTime: Int? = null, airingNotifications: Boolean? = null, displayAdultContent: Boolean? = null, - restrictMessagesToFollowing: Boolean? = null + restrictMessagesToFollowing: Boolean? = null, + scoreFormat: String? = null, + rowOrder: String? = null, ) { val query = """ mutation ( @@ -26,8 +28,10 @@ class AnilistMutations { ${"$"}staffNameLanguage: UserStaffNameLanguage, ${"$"}activityMergeTime: Int, ${"$"}airingNotifications: Boolean, - ${"$"}displayAdultContent: Boolean - ${"$"}restrictMessagesToFollowing: Boolean + ${"$"}displayAdultContent: Boolean, + ${"$"}restrictMessagesToFollowing: Boolean, + ${"$"}scoreFormat: ScoreFormat, + ${"$"}rowOrder: String ) { UpdateUser( timezone: ${"$"}timezone, @@ -36,7 +40,9 @@ class AnilistMutations { activityMergeTime: ${"$"}activityMergeTime, airingNotifications: ${"$"}airingNotifications, displayAdultContent: ${"$"}displayAdultContent - restrictMessagesToFollowing: ${"$"}restrictMessagesToFollowing + restrictMessagesToFollowing: ${"$"}restrictMessagesToFollowing. + scoreFormat: ${"$"}scoreFormat, + rowOrder: ${"$"}rowOrder, ) { id options { @@ -48,6 +54,10 @@ class AnilistMutations { displayAdultContent restrictMessagesToFollowing } + mediaListOptions { + scoreFormat + rowOrder + } } } """.trimIndent() @@ -61,6 +71,8 @@ class AnilistMutations { ${airingNotifications?.let { """"airingNotifications":$it""" } ?: ""} ${displayAdultContent?.let { """"displayAdultContent":$it""" } ?: ""} ${restrictMessagesToFollowing?.let { """"restrictMessagesToFollowing":$it""" } ?: ""} + ${scoreFormat?.let { """"scoreFormat":$it""" } ?: ""} + ${rowOrder?.let { """"rowOrder":$it""" } ?: ""} } """.trimIndent().replace("\n", "").replace(""" """, "").replace(",}", "}") 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 762b932a..8bef6b42 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -58,6 +58,7 @@ class AnilistQueries { bannerImage id mediaListOptions { + scoreFormat rowOrder animeList { sectionOrder customLists } mangaList { sectionOrder customLists } @@ -92,6 +93,12 @@ class AnilistQueries { Anilist.staffNameLanguage = it.staffNameLanguage.toString() Anilist.airingNotifications = it.airingNotifications ?: false Anilist.restrictMessagesToFollowing = it.restrictMessagesToFollowing ?: false + Anilist.timezone = it.timezone + Anilist.activityMergeTime = it.activityMergeTime + } + user.mediaListOptions?.let { + Anilist.scoreFormat = it.scoreFormat.toString() + Anilist.rowOrder = it.rowOrder } return true } diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/api/User.kt b/app/src/main/java/ani/dantotsu/connections/anilist/api/User.kt index 35b5b54a..2917a0b8 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/api/User.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/api/User.kt @@ -88,11 +88,11 @@ data class UserOptions( // // Notification options // // @SerialName("notificationOptions") var notificationOptions: List?, // - // // The user's timezone offset (Auth user only) - // @SerialName("timezone") var timezone: String?, + // The user's timezone offset (Auth user only) + @SerialName("timezone") var timezone: String?, // - // // Minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is Always. - // @SerialName("activityMergeTime") var activityMergeTime: Int?, + // Minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is Always. + @SerialName("activityMergeTime") var activityMergeTime: Int?, // // The language the user wants to see staff and character names in @SerialName("staffNameLanguage") var staffNameLanguage: UserStaffNameLanguage?, @@ -123,10 +123,8 @@ data class UserStatisticTypes( enum class UserTitleLanguage { @SerialName("ENGLISH") ENGLISH, - @SerialName("ROMAJI") ROMAJI, - @SerialName("NATIVE") NATIVE } @@ -197,6 +195,15 @@ data class MediaListOptions( // The user's manga list options @SerialName("mangaList") var mangaList: MediaListTypeOptions?, ) +@Serializable +enum class ScoreFormat { + @SerialName("ENGLISH") + ENGLISH, + @SerialName("ROMAJI") + ROMAJI, + @SerialName("NATIVE") + NATIVE +} @Serializable data class MediaListTypeOptions( diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsAccountActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsAccountActivity.kt index 7bebb68f..1b4cd9b2 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsAccountActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsAccountActivity.kt @@ -1,14 +1,18 @@ package ani.dantotsu.settings +import android.content.Intent import android.os.Bundle import android.view.HapticFeedbackConstants import android.view.View +import android.widget.ArrayAdapter import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.TextView import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import androidx.core.view.updateLayoutParams +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.discord.Discord @@ -19,6 +23,7 @@ import ani.dantotsu.loadImage import ani.dantotsu.navBarHeight import ani.dantotsu.openLinkInBrowser import ani.dantotsu.others.CustomBottomDialog +import ani.dantotsu.restartApp import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.startMainActivity @@ -26,6 +31,7 @@ import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import io.noties.markwon.Markwon import io.noties.markwon.SoftBreakAddsNewLinePlugin +import kotlinx.coroutines.launch class SettingsAccountActivity : AppCompatActivity() { private lateinit var binding: ActivitySettingsAccountsBinding @@ -202,6 +208,25 @@ class SettingsAccountActivity : AppCompatActivity() { } reload() } - } + binding.settingsRecyclerView.adapter = SettingsAdapter( + arrayListOf( + Settings( + type = 1, + name = getString(R.string.anilist_settings), + desc = getString(R.string.alsettings_desc), + icon = R.drawable.ic_anilist, + onClick = { + lifecycleScope.launch { + Anilist.query.getUserData() + startActivity(Intent(context, SettingsAnilistActivity::class.java)) + } + }, + isActivity = true + ), + ) + ) + binding.settingsRecyclerView.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + } } diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt index e432f5e3..2022fac1 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt @@ -18,7 +18,6 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.BuildConfig import ani.dantotsu.R -import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.copyToClipboard import ani.dantotsu.databinding.ActivitySettingsBinding import ani.dantotsu.initActivity @@ -154,19 +153,6 @@ class SettingsActivity : AppCompatActivity() { }, isActivity = true ), - Settings( - type = 1, - name = getString(R.string.anilist_settings), - desc = getString(R.string.alsettings_desc), - icon = R.drawable.ic_anilist, - onClick = { - lifecycleScope.launch { - Anilist.query.getUserData() - startActivity(Intent(context, SettingsAnilistActivity::class.java)) - } - }, - isActivity = true - ), Settings( type = 1, name = getString(R.string.notifications), diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsAnilistActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsAnilistActivity.kt index 318f3eae..3b435935 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsAnilistActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsAnilistActivity.kt @@ -9,15 +9,15 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist +import ani.dantotsu.connections.anilist.Anilist.staffNameLang +import ani.dantotsu.connections.anilist.Anilist.titleLang +import ani.dantotsu.connections.anilist.AnilistMutations import ani.dantotsu.databinding.ActivitySettingsAnilistBinding import ani.dantotsu.initActivity import ani.dantotsu.navBarHeight +import ani.dantotsu.restartApp import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager -import ani.dantotsu.connections.anilist.AnilistMutations -import ani.dantotsu.restartApp -import ani.dantotsu.settings.saving.PrefManager -import ani.dantotsu.settings.saving.PrefName import kotlinx.coroutines.launch class SettingsAnilistActivity : AppCompatActivity() { @@ -49,26 +49,6 @@ class SettingsAnilistActivity : AppCompatActivity() { onBackPressedDispatcher.onBackPressed() } - val timeZone = listOf( - "(GMT-06:00) Central Time", - "(GMT-05:00) Eastern Time", - "(GMT-04:00) Atlantic Time", - "(GMT-01:00) Central Time", - "(GMT+00:00) London", - "(GMT+01:00) Berlin", - "(GMT+04:00) Dubai", - "(GMT+05:30) India Standard Time", - "(GMT+06:00) Dhaka", - "(GMT+07:00) Bangkok", - "(GMT+09:00) Tokyo", - ) - - val titleLang = listOf( - "English (Attack on Titan)", - "Romaji (Shingeki no Kyojin)", - "Native (進撃の巨人)" - ) - val currentTitleLang = Anilist.titleLanguage val titleFormat = Format.entries.firstOrNull { it.name == currentTitleLang } ?: Format.ENGLISH @@ -91,13 +71,6 @@ class SettingsAnilistActivity : AppCompatActivity() { settingsAnilistTitleLanguage.clearFocus() } - - val staffNameLang = listOf( - "Romaji, Western Order (Killua Zoldyck)", - "Romaji (Zoldyck Killua)", - "Native (キルア=ゾルディック)" - ) - val currentStaffNameLang = Anilist.staffNameLanguage val staffNameFormat = Format.entries.firstOrNull { it.name == currentStaffNameLang } ?: Format.ENGLISH @@ -120,11 +93,11 @@ class SettingsAnilistActivity : AppCompatActivity() { settingsAnilistStaffLanguage.clearFocus() } + val currentScoreFormat = Anilist.scoreFormat val displayAdultContent = Anilist.adult val airingNotifications = Anilist.airingNotifications - val restrictMessagesToFollowing = Anilist.restrictMessagesToFollowing - binding.settingsRecyclerView.adapter = SettingsAdapter( + binding.settingsRecyclerView1.adapter = SettingsAdapter( arrayListOf( Settings( type = 2, @@ -154,25 +127,33 @@ class SettingsAnilistActivity : AppCompatActivity() { } } ), - Settings( - type = 2, - name = getString(R.string.restrict_messages), - desc = getString(R.string.restrict_messages_desc), - icon = R.drawable.ic_round_lock_open_24, - isChecked = restrictMessagesToFollowing, - switch = { isChecked, _ -> - lifecycleScope.launch { - anilistMutations.updateSettings(restrictMessagesToFollowing = isChecked) - Anilist.restrictMessagesToFollowing = isChecked - restartApp() - } - } - ), ) ) - binding.settingsRecyclerView.layoutManager = + binding.settingsRecyclerView1.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) } + + binding.settingsRecyclerView2.adapter = SettingsAdapter( + arrayListOf( + Settings( + type = 2, + name = getString(R.string.restrict_messages), + desc = getString(R.string.restrict_messages_desc), + icon = R.drawable.ic_round_lock_open_24, + isChecked = Anilist.restrictMessagesToFollowing, + switch = { isChecked, _ -> + lifecycleScope.launch { + anilistMutations.updateSettings(restrictMessagesToFollowing = isChecked) + Anilist.restrictMessagesToFollowing = isChecked + restartApp() + } + } + ), + ) + ) + binding.settingsRecyclerView2.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings_accounts.xml b/app/src/main/res/layout/activity_settings_accounts.xml index 94650ed8..512687e3 100644 --- a/app/src/main/res/layout/activity_settings_accounts.xml +++ b/app/src/main/res/layout/activity_settings_accounts.xml @@ -186,6 +186,15 @@ + + @@ -281,27 +291,13 @@ - - - + android:layout_height="match_parent" + android:nestedScrollingEnabled="false" + android:requiresFadingEdge="vertical" + tools:itemCount="1" + tools:listitem="@layout/item_settings" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings_anilist.xml b/app/src/main/res/layout/activity_settings_anilist.xml index a59ac9d0..78255c1a 100644 --- a/app/src/main/res/layout/activity_settings_anilist.xml +++ b/app/src/main/res/layout/activity_settings_anilist.xml @@ -69,16 +69,20 @@ + android:gravity="center_vertical" + android:paddingHorizontal="32dp" + android:text="@string/anime_manga" + android:textColor="?attr/colorSecondary" + app:drawableEndCompat="@drawable/ic_round_arrow_drop_down_24" + tools:ignore="TextContrastCheck" /> @@ -87,7 +91,7 @@ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="16dp" + android:layout_marginHorizontal="32dp" android:layout_marginBottom="8dp" app:boxCornerRadiusBottomEnd="8dp" app:boxCornerRadiusBottomStart="8dp" @@ -115,7 +119,7 @@ @@ -124,7 +128,7 @@ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="16dp" + android:layout_marginHorizontal="32dp" android:layout_marginBottom="8dp" app:boxCornerRadiusBottomEnd="8dp" app:boxCornerRadiusBottomStart="8dp" @@ -148,17 +152,205 @@ android:textSize="14sp" tools:ignore="LabelFor,TextContrastCheck,DuplicateSpeakableTextCheck" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e498b7c0..431bc64a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -328,9 +328,15 @@ Prefer Dubbed Anime None Selected DNS + Anime and Manga + List Settings Change if your ISP blocks any source Selected Title Language Selected Staff Language + Activity Merge Time + Scoring System + Timezone + Default List Order Keep Screen On Layout Spaced Pages