Initial commit
This commit is contained in:
commit
21bfbfb139
520 changed files with 47819 additions and 0 deletions
|
@ -0,0 +1,398 @@
|
|||
package ani.dantotsu.settings
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import androidx.activity.addCallback
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import ani.dantotsu.*
|
||||
import ani.dantotsu.databinding.ActivityPlayerSettingsBinding
|
||||
import ani.dantotsu.media.Media
|
||||
import ani.dantotsu.others.getSerialized
|
||||
import ani.dantotsu.parsers.Subtitle
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
|
||||
class PlayerSettingsActivity : AppCompatActivity() {
|
||||
lateinit var binding: ActivityPlayerSettingsBinding
|
||||
private val player = "player_settings"
|
||||
|
||||
var media:Media?=null
|
||||
var subtitle:Subtitle?=null
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivityPlayerSettingsBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
initActivity(this)
|
||||
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
finish()
|
||||
}
|
||||
|
||||
try {
|
||||
media = intent.getSerialized("media")
|
||||
subtitle = intent.getSerialized("subtitle")
|
||||
} catch (e: Exception) {
|
||||
toast(e.toString())
|
||||
}
|
||||
|
||||
binding.playerSettingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
topMargin = statusBarHeight
|
||||
bottomMargin = navBarHeight
|
||||
}
|
||||
|
||||
val settings = loadData<PlayerSettings>(player, toast = false) ?: PlayerSettings().apply { saveData(player, this) }
|
||||
|
||||
binding.playerSettingsBack.setOnClickListener {
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
|
||||
//Video
|
||||
binding.playerSettingsVideoInfo.isChecked = settings.videoInfo
|
||||
binding.playerSettingsVideoInfo.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.videoInfo = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsQualityHeight.setText((loadData<Int>("maxHeight", toast = false) ?: 480).toString())
|
||||
binding.playerSettingsQualityHeight.addTextChangedListener {
|
||||
val height = binding.playerSettingsQualityHeight.text.toString().toIntOrNull()
|
||||
saveData("maxHeight", height)
|
||||
}
|
||||
binding.playerSettingsQualityWidth.setText((loadData<Int>("maxWidth", toast = false) ?: 720).toString())
|
||||
binding.playerSettingsQualityWidth.addTextChangedListener {
|
||||
val height = binding.playerSettingsQualityWidth.text.toString().toIntOrNull()
|
||||
saveData("maxWidth", height)
|
||||
}
|
||||
|
||||
|
||||
val speeds = arrayOf(0.25f, 0.33f, 0.5f, 0.66f, 0.75f, 1f, 1.25f, 1.33f, 1.5f, 1.66f, 1.75f, 2f)
|
||||
val cursedSpeeds = arrayOf(1f, 1.25f, 1.5f, 1.75f, 2f, 2.5f, 3f, 4f, 5f, 10f, 25f, 50f)
|
||||
var curSpeedArr = if (settings.cursedSpeeds) cursedSpeeds else speeds
|
||||
var speedsName = curSpeedArr.map { "${it}x" }.toTypedArray()
|
||||
binding.playerSettingsSpeed.text = getString(R.string.default_playback_speed, speedsName[settings.defaultSpeed])
|
||||
val speedDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.default_speed))
|
||||
binding.playerSettingsSpeed.setOnClickListener {
|
||||
speedDialog.setSingleChoiceItems(speedsName, settings.defaultSpeed) { dialog, i ->
|
||||
settings.defaultSpeed = i
|
||||
binding.playerSettingsSpeed.text = getString(R.string.default_playback_speed, speedsName[i])
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
|
||||
binding.playerSettingsCursedSpeeds.isChecked = settings.cursedSpeeds
|
||||
binding.playerSettingsCursedSpeeds.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.cursedSpeeds = isChecked
|
||||
curSpeedArr = if (settings.cursedSpeeds) cursedSpeeds else speeds
|
||||
settings.defaultSpeed = if (settings.cursedSpeeds) 0 else 5
|
||||
speedsName = curSpeedArr.map { "${it}x" }.toTypedArray()
|
||||
binding.playerSettingsSpeed.text = getString(R.string.default_playback_speed, speedsName[settings.defaultSpeed])
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
//Time Stamp
|
||||
binding.playerSettingsTimeStamps.isChecked = settings.timeStampsEnabled
|
||||
binding.playerSettingsTimeStamps.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.timeStampsEnabled = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsTimeStampsProxy.isChecked = settings.useProxyForTimeStamps
|
||||
binding.playerSettingsTimeStampsProxy.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.useProxyForTimeStamps = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsShowTimeStamp.isChecked = settings.showTimeStampButton
|
||||
binding.playerSettingsShowTimeStamp.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.showTimeStampButton = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
|
||||
//Auto
|
||||
binding.playerSettingsAutoSkipOpEd.isChecked = settings.autoSkipOPED
|
||||
binding.playerSettingsAutoSkipOpEd.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.autoSkipOPED = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsAutoPlay.isChecked = settings.autoPlay
|
||||
binding.playerSettingsAutoPlay.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.autoPlay = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
binding.playerSettingsAutoSkip.isChecked = settings.autoSkipFiller
|
||||
binding.playerSettingsAutoSkip.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.autoSkipFiller = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
//Update Progress
|
||||
binding.playerSettingsAskUpdateProgress.isChecked = settings.askIndividual
|
||||
binding.playerSettingsAskUpdateProgress.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.askIndividual = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
binding.playerSettingsAskUpdateHentai.isChecked = settings.updateForH
|
||||
binding.playerSettingsAskUpdateHentai.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.updateForH = isChecked
|
||||
if (isChecked) snackString(getString(R.string.very_bold))
|
||||
saveData(player, settings)
|
||||
}
|
||||
binding.playerSettingsCompletePercentage.value = (settings.watchPercentage * 100).roundToInt().toFloat()
|
||||
binding.playerSettingsCompletePercentage.addOnChangeListener { _, value, _ ->
|
||||
settings.watchPercentage = value / 100
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
//Behaviour
|
||||
binding.playerSettingsAlwaysContinue.isChecked = settings.alwaysContinue
|
||||
binding.playerSettingsAlwaysContinue.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.alwaysContinue = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsPauseVideo.isChecked = settings.focusPause
|
||||
binding.playerSettingsPauseVideo.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.focusPause = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsVerticalGestures.isChecked = settings.gestures
|
||||
binding.playerSettingsVerticalGestures.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.gestures = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsDoubleTap.isChecked = settings.doubleTap
|
||||
binding.playerSettingsDoubleTap.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.doubleTap = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.playerSettingsSeekTime.value = settings.seekTime.toFloat()
|
||||
binding.playerSettingsSeekTime.addOnChangeListener { _, value, _ ->
|
||||
settings.seekTime = value.toInt()
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
binding.exoSkipTime.setText(settings.skipTime.toString())
|
||||
binding.exoSkipTime.setOnEditorActionListener { _, actionId, _ ->
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
binding.exoSkipTime.clearFocus()
|
||||
}
|
||||
false
|
||||
}
|
||||
binding.exoSkipTime.addTextChangedListener {
|
||||
val time = binding.exoSkipTime.text.toString().toIntOrNull()
|
||||
if (time != null) {
|
||||
settings.skipTime = time
|
||||
saveData(player, settings)
|
||||
}
|
||||
}
|
||||
|
||||
//Other
|
||||
binding.playerSettingsPiP.apply {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
visibility = View.VISIBLE
|
||||
isChecked = settings.pip
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.pip = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
} else visibility = View.GONE
|
||||
}
|
||||
|
||||
binding.playerSettingsCast.isChecked = settings.cast
|
||||
binding.playerSettingsCast.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.cast = isChecked
|
||||
saveData(player, settings)
|
||||
}
|
||||
|
||||
val resizeModes = arrayOf("Original", "Zoom", "Stretch")
|
||||
val resizeDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.default_resize_mode))
|
||||
binding.playerResizeMode.setOnClickListener {
|
||||
resizeDialog.setSingleChoiceItems(resizeModes, settings.resize) { dialog, count ->
|
||||
settings.resize = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
fun restartApp() {
|
||||
Snackbar.make(
|
||||
binding.root,
|
||||
R.string.restart_app, Snackbar.LENGTH_SHORT
|
||||
).apply {
|
||||
val mainIntent =
|
||||
Intent.makeRestartActivityTask(context.packageManager.getLaunchIntentForPackage(context.packageName)!!.component)
|
||||
setAction("Do it!") {
|
||||
context.startActivity(mainIntent)
|
||||
Runtime.getRuntime().exit(0)
|
||||
}
|
||||
show()
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleButton(button: android.widget.Button, toggle: Boolean) {
|
||||
button.isClickable = toggle
|
||||
button.alpha = when (toggle) {
|
||||
true -> 1f
|
||||
false -> 0.5f
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleSubOptions(isChecked: Boolean) {
|
||||
toggleButton(binding.videoSubColorPrimary, isChecked)
|
||||
toggleButton(binding.videoSubColorSecondary, isChecked)
|
||||
toggleButton(binding.videoSubOutline, isChecked)
|
||||
toggleButton(binding.videoSubFont, isChecked)
|
||||
binding.subtitleFontSizeCard.isEnabled = isChecked
|
||||
binding.subtitleFontSizeCard.isClickable = isChecked
|
||||
binding.subtitleFontSizeCard.alpha = when (isChecked) {
|
||||
true -> 1f
|
||||
false -> 0.5f
|
||||
}
|
||||
binding.subtitleFontSize.isEnabled = isChecked
|
||||
binding.subtitleFontSize.isClickable = isChecked
|
||||
binding.subtitleFontSize.alpha = when (isChecked) {
|
||||
true -> 1f
|
||||
false -> 0.5f
|
||||
}
|
||||
ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.isEnabled = isChecked
|
||||
ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.isClickable = isChecked
|
||||
ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.alpha = when (isChecked) {
|
||||
true -> 1f
|
||||
false -> 0.5f
|
||||
}
|
||||
}
|
||||
binding.subSwitch.isChecked = settings.subtitles
|
||||
binding.subSwitch.setOnCheckedChangeListener { _, isChecked ->
|
||||
settings.subtitles = isChecked
|
||||
saveData(player, settings)
|
||||
toggleSubOptions(isChecked)
|
||||
restartApp()
|
||||
}
|
||||
val colorsPrimary =
|
||||
arrayOf("Black", "Dark Gray", "Gray", "Light Gray", "White", "Red", "Yellow", "Green", "Cyan", "Blue", "Magenta")
|
||||
val primaryColorDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.primary_sub_color))
|
||||
binding.videoSubColorPrimary.setOnClickListener {
|
||||
primaryColorDialog.setSingleChoiceItems(colorsPrimary, settings.primaryColor) { dialog, count ->
|
||||
settings.primaryColor = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
val colorsSecondary = arrayOf(
|
||||
"Black",
|
||||
"Dark Gray",
|
||||
"Gray",
|
||||
"Light Gray",
|
||||
"White",
|
||||
"Red",
|
||||
"Yellow",
|
||||
"Green",
|
||||
"Cyan",
|
||||
"Blue",
|
||||
"Magenta",
|
||||
"Transparent"
|
||||
)
|
||||
val secondaryColorDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.outline_sub_color))
|
||||
binding.videoSubColorSecondary.setOnClickListener {
|
||||
secondaryColorDialog.setSingleChoiceItems(colorsSecondary, settings.secondaryColor) { dialog, count ->
|
||||
settings.secondaryColor = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
val typesOutline = arrayOf("Outline", "Shine", "Drop Shadow", "None")
|
||||
val outlineDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.outline_type))
|
||||
binding.videoSubOutline.setOnClickListener {
|
||||
outlineDialog.setSingleChoiceItems(typesOutline, settings.outline) { dialog, count ->
|
||||
settings.outline = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
val colorsSubBackground = arrayOf(
|
||||
"Transparent",
|
||||
"Black",
|
||||
"Dark Gray",
|
||||
"Gray",
|
||||
"Light Gray",
|
||||
"White",
|
||||
"Red",
|
||||
"Yellow",
|
||||
"Green",
|
||||
"Cyan",
|
||||
"Blue",
|
||||
"Magenta"
|
||||
)
|
||||
val subBackgroundDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.outline_sub_color))
|
||||
binding.videoSubColorBackground.setOnClickListener {
|
||||
subBackgroundDialog.setSingleChoiceItems(colorsSubBackground, settings.subBackground) { dialog, count ->
|
||||
settings.subBackground = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
|
||||
val colorsSubWindow = arrayOf(
|
||||
"Transparent",
|
||||
"Black",
|
||||
"Dark Gray",
|
||||
"Gray",
|
||||
"Light Gray",
|
||||
"White",
|
||||
"Red",
|
||||
"Yellow",
|
||||
"Green",
|
||||
"Cyan",
|
||||
"Blue",
|
||||
"Magenta"
|
||||
)
|
||||
val subWindowDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.outline_sub_color))
|
||||
binding.videoSubColorWindow.setOnClickListener {
|
||||
subWindowDialog.setSingleChoiceItems(colorsSubWindow, settings.subWindow) { dialog, count ->
|
||||
settings.subWindow = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
val fonts = arrayOf("Poppins Semi Bold", "Poppins Bold", "Poppins", "Poppins Thin")
|
||||
val fontDialog = AlertDialog.Builder(this, R.style.DialogTheme).setTitle(getString(R.string.subtitle_font))
|
||||
binding.videoSubFont.setOnClickListener {
|
||||
fontDialog.setSingleChoiceItems(fonts, settings.font) { dialog, count ->
|
||||
settings.font = count
|
||||
saveData(player, settings)
|
||||
dialog.dismiss()
|
||||
}.show()
|
||||
}
|
||||
binding.subtitleFontSize.setText(settings.fontSize.toString())
|
||||
binding.subtitleFontSize.setOnEditorActionListener { _, actionId, _ ->
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
binding.subtitleFontSize.clearFocus()
|
||||
}
|
||||
false
|
||||
}
|
||||
binding.subtitleFontSize.addTextChangedListener {
|
||||
val size = binding.subtitleFontSize.text.toString().toIntOrNull()
|
||||
if (size != null) {
|
||||
settings.fontSize = size
|
||||
saveData(player, settings)
|
||||
}
|
||||
}
|
||||
toggleSubOptions(settings.subtitles)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue