diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt
index 57419e43..464161f8 100644
--- a/app/src/main/java/ani/dantotsu/Functions.kt
+++ b/app/src/main/java/ani/dantotsu/Functions.kt
@@ -96,6 +96,7 @@ import ani.dantotsu.connections.crashlytics.CrashlyticsInterface
import ani.dantotsu.databinding.ItemCountDownBinding
import ani.dantotsu.media.Media
import ani.dantotsu.notifications.IncognitoNotificationClickReceiver
+import ani.dantotsu.others.LanguageMapper
import ani.dantotsu.others.SpoilerPlugin
import ani.dantotsu.parsers.ShowResponse
import ani.dantotsu.settings.saving.PrefManager
@@ -149,6 +150,7 @@ import java.io.FileOutputStream
import java.io.OutputStream
import java.lang.reflect.Field
import java.util.Calendar
+import java.util.Locale
import java.util.TimeZone
import java.util.Timer
import java.util.TimerTask
@@ -1467,3 +1469,26 @@ fun buildMarkwon(
.build()
return markwon
}
+
+fun getLanguageCode(language: String): CharSequence {
+ val locales = Locale.getAvailableLocales()
+ for (locale in locales) {
+ if (locale.displayLanguage.equals(language, ignoreCase = true)) {
+ val lang: CharSequence = locale.language
+ return lang
+
+ }
+ }
+ val out: CharSequence = "null"
+ return out
+}
+
+fun getLanguageName(language: String): String? {
+ val locales = Locale.getAvailableLocales()
+ for (locale in locales) {
+ if (locale.language.equals(language, ignoreCase = true)) {
+ return locale.displayLanguage
+ }
+ }
+ return null
+}
diff --git a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt
index 7f3aba21..1e72354d 100644
--- a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt
+++ b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt
@@ -116,6 +116,7 @@ import ani.dantotsu.download.DownloadsManager.Companion.getSubDirectory
import ani.dantotsu.download.video.Helper
import ani.dantotsu.dp
import ani.dantotsu.getCurrentBrightnessValue
+import ani.dantotsu.getLanguageCode
import ani.dantotsu.hideSystemBars
import ani.dantotsu.hideSystemBarsExtendView
import ani.dantotsu.isOnline
@@ -1382,13 +1383,57 @@ class ExoplayerView : AppCompatActivity(), Player.Listener, SessionAvailabilityL
val ext = episode.extractors?.find { it.server.name == episode.selectedExtractor } ?: return
extractor = ext
video = ext.videos.getOrNull(episode.selectedVideo) ?: return
+ val subLanguages = arrayOf(
+ "Albanian",
+ "Arabic",
+ "Bosnian",
+ "Bulgarian",
+ "Chinese",
+ "Croatian",
+ "Czech",
+ "Danish",
+ "Dutch",
+ "English",
+ "Estonian",
+ "Finnish",
+ "French",
+ "Georgian",
+ "German",
+ "Greek",
+ "Hebrew",
+ "Hindi",
+ "Indonesian",
+ "Irish",
+ "Italian",
+ "Japanese",
+ "Korean",
+ "Lithuanian",
+ "Luxembourgish",
+ "Macedonian",
+ "Mongolian",
+ "Norwegian",
+ "Polish",
+ "Portuguese",
+ "Punjabi",
+ "Romanian",
+ "Russian",
+ "Serbian",
+ "Slovak",
+ "Slovenian",
+ "Spanish",
+ "Turkish",
+ "Ukrainian",
+ "Urdu",
+ "Vietnamese",
+ )
+ val lang = subLanguages[PrefManager.getVal(PrefName.SubLanguage)]
subtitle = intent.getSerialized("subtitle")
?: when (val subLang: String? =
PrefManager.getNullableCustomVal("subLang_${media.id}", null, String::class.java)) {
null -> {
when (episode.selectedSubtitle) {
null -> null
- -1 -> ext.subtitles.find { it.language.trim() == "English" || it.language == "en-US" }
+ -1 -> ext.subtitles.find { it.language.contains( lang, ignoreCase = true ) || it.language.contains( getLanguageCode(lang), ignoreCase = true ) }
else -> ext.subtitles.getOrNull(episode.selectedSubtitle!!)
}
}
diff --git a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt
index 9006228a..075b0899 100644
--- a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt
+++ b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt
@@ -1,6 +1,7 @@
package ani.dantotsu.settings
import android.app.AlertDialog
+import android.app.Dialog
import android.content.res.Resources
import android.graphics.Color
import android.os.Build
@@ -31,7 +32,6 @@ import ani.dantotsu.toast
import com.google.android.material.slider.Slider.OnChangeListener
import kotlin.math.roundToInt
-
class PlayerSettingsActivity : AppCompatActivity() {
lateinit var binding: ActivityPlayerSettingsBinding
private val player = "player_settings"
@@ -318,6 +318,61 @@ class PlayerSettingsActivity : AppCompatActivity() {
toggleSubOptions(isChecked)
}
toggleSubOptions(binding.subSwitch.isChecked)
+ val subLanguages = arrayOf(
+ "Albanian",
+ "Arabic",
+ "Bosnian",
+ "Bulgarian",
+ "Chinese",
+ "Croatian",
+ "Czech",
+ "Danish",
+ "Dutch",
+ "English",
+ "Estonian",
+ "Finnish",
+ "French",
+ "Georgian",
+ "German",
+ "Greek",
+ "Hebrew",
+ "Hindi",
+ "Indonesian",
+ "Irish",
+ "Italian",
+ "Japanese",
+ "Korean",
+ "Lithuanian",
+ "Luxembourgish",
+ "Macedonian",
+ "Mongolian",
+ "Norwegian",
+ "Polish",
+ "Portuguese",
+ "Punjabi",
+ "Romanian",
+ "Russian",
+ "Serbian",
+ "Slovak",
+ "Slovenian",
+ "Spanish",
+ "Turkish",
+ "Ukrainian",
+ "Urdu",
+ "Vietnamese",
+ )
+ val subLanguageDialog = AlertDialog.Builder(this, R.style.MyPopup)
+ .setTitle(getString(R.string.subtitle_langauge))
+ binding.videoSubLanguage.setOnClickListener {
+ val dialog = subLanguageDialog.setSingleChoiceItems(
+ subLanguages,
+ PrefManager.getVal(PrefName.SubLanguage)
+ ) { dialog, count ->
+ PrefManager.setVal(PrefName.SubLanguage, count)
+ dialog.dismiss()
+ }.show()
+ dialog.window?.setDimAmount(0.8f)
+ }
val colorsPrimary =
arrayOf(
"Black",
diff --git a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
index 0e275cf7..c8c626b3 100644
--- a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
+++ b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
@@ -88,6 +88,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files
CursedSpeeds(Pref(Location.Player, Boolean::class, false)),
Resize(Pref(Location.Player, Int::class, 0)),
Subtitles(Pref(Location.Player, Boolean::class, true)),
+ SubLanguage(Pref(Location.Player, Int::class, 9)),
PrimaryColor(Pref(Location.Player, Int::class, 4)),
SecondaryColor(Pref(Location.Player, Int::class, 0)),
Outline(Pref(Location.Player, Int::class, 0)),
diff --git a/app/src/main/res/layout/activity_player_settings.xml b/app/src/main/res/layout/activity_player_settings.xml
index 15efde78..f7d4e707 100644
--- a/app/src/main/res/layout/activity_player_settings.xml
+++ b/app/src/main/res/layout/activity_player_settings.xml
@@ -225,6 +225,25 @@
app:showText="false"
app:thumbTint="@color/button_switch_track" />
+
+