diff --git a/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderActivity.kt b/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderActivity.kt index 069fef28..1ea357fa 100644 --- a/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderActivity.kt @@ -36,7 +36,7 @@ import ani.dantotsu.saveData import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.settings.CurrentNovelReaderSettings import ani.dantotsu.settings.CurrentReaderSettings -import ani.dantotsu.settings.NovelReaderSettings +import ani.dantotsu.settings.ReaderSettings import ani.dantotsu.settings.UserInterfaceSettings import ani.dantotsu.snackString import ani.dantotsu.themes.ThemeManager @@ -62,7 +62,7 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { private lateinit var binding: ActivityNovelReaderBinding private val scope = lifecycleScope - lateinit var settings: NovelReaderSettings + lateinit var settings: ReaderSettings private lateinit var uiSettings: UserInterfaceSettings private var notchHeight: Int? = null @@ -159,9 +159,8 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { ThemeManager(this).applyTheme() binding = ActivityNovelReaderBinding.inflate(layoutInflater) setContentView(binding.root) - - settings = loadData("novel_reader_settings", this) - ?: NovelReaderSettings().apply { saveData("novel_reader_settings", this) } + settings = loadData("reader_settings", this) + ?: ReaderSettings().apply { saveData("reader_settings", this) } uiSettings = loadData("ui_settings", this) ?: UserInterfaceSettings().also { saveData("ui_settings", it) } @@ -271,7 +270,7 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { binding.bookReader.getAppearance { currentTheme = it themes.add(0, it) - settings.default = loadData("${sanitizedBookId}_current_settings") ?: settings.default + settings.defaultLN = loadData("${sanitizedBookId}_current_settings") ?: settings.defaultLN applySettings() } @@ -323,7 +322,7 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { return when (event.keyCode) { KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_PAGE_UP -> { if (event.keyCode == KeyEvent.KEYCODE_VOLUME_UP) - if (!settings.default.volumeButtons) + if (!settings.defaultLN.volumeButtons) return false if (event.action == KeyEvent.ACTION_DOWN) { onVolumeUp?.invoke() @@ -333,7 +332,7 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_PAGE_DOWN -> { if (event.keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) - if (!settings.default.volumeButtons) + if (!settings.defaultLN.volumeButtons) return false if (event.action == KeyEvent.ACTION_DOWN) { onVolumeDown?.invoke() @@ -349,13 +348,13 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { fun applySettings() { - saveData("${sanitizedBookId}_current_settings", settings.default) + saveData("${sanitizedBookId}_current_settings", settings.defaultLN) hideBars() currentTheme = - themes.first { it.name.equals(settings.default.currentThemeName, ignoreCase = true) } + themes.first { it.name.equals(settings.defaultLN.currentThemeName, ignoreCase = true) } - when (settings.default.layout) { + when (settings.defaultLN.layout) { CurrentNovelReaderSettings.Layouts.PAGED -> { currentTheme?.flow = ReaderFlow.PAGINATED } @@ -366,22 +365,22 @@ class NovelReaderActivity : AppCompatActivity(), EbookReaderEventListener { } requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER - when (settings.default.dualPageMode) { + when (settings.defaultLN.dualPageMode) { CurrentReaderSettings.DualPageModes.No -> currentTheme?.maxColumnCount = 1 CurrentReaderSettings.DualPageModes.Automatic -> currentTheme?.maxColumnCount = 2 CurrentReaderSettings.DualPageModes.Force -> requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE } - currentTheme?.lineHeight = settings.default.lineHeight - currentTheme?.gap = settings.default.margin - currentTheme?.maxInlineSize = settings.default.maxInlineSize - currentTheme?.maxBlockSize = settings.default.maxBlockSize - currentTheme?.useDark = settings.default.useDarkTheme + currentTheme?.lineHeight = settings.defaultLN.lineHeight + currentTheme?.gap = settings.defaultLN.margin + currentTheme?.maxInlineSize = settings.defaultLN.maxInlineSize + currentTheme?.maxBlockSize = settings.defaultLN.maxBlockSize + currentTheme?.useDark = settings.defaultLN.useDarkTheme currentTheme?.let { binding.bookReader.setAppearance(it) } - if (settings.default.keepScreenOn) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + if (settings.defaultLN.keepScreenOn) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } diff --git a/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderSettingsDialogFragment.kt b/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderSettingsDialogFragment.kt index 27a9caaa..e9b12c74 100644 --- a/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderSettingsDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/novel/novelreader/NovelReaderSettingsDialogFragment.kt @@ -30,7 +30,7 @@ class NovelReaderSettingsDialogFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val activity = requireActivity() as NovelReaderActivity - val settings = activity.settings.default + val settings = activity.settings.defaultLN val themeLabels = activity.themes.map { it.name } binding.themeSelect.adapter = @@ -173,6 +173,20 @@ class NovelReaderSettingsDialogFragment : BottomSheetDialogFragment() { binding.maxBlockSize.setText(value.toString()) activity.applySettings() } + + } + binding.incrementMaxBlockSize.setOnClickListener { + val value = binding.maxBlockSize.text.toString().toIntOrNull() ?: 720 + settings.maxBlockSize = value + 10 + binding.maxBlockSize.setText(settings.maxBlockSize.toString()) + activity.applySettings() + } + + binding.decrementMaxBlockSize.setOnClickListener { + val value = binding.maxBlockSize.text.toString().toIntOrNull() ?: 720 + settings.maxBlockSize = value - 10 + binding.maxBlockSize.setText(settings.maxBlockSize.toString()) + activity.applySettings() } binding.useDarkTheme.isChecked = settings.useDarkTheme diff --git a/app/src/main/java/ani/dantotsu/settings/NovelReaderSettings.kt b/app/src/main/java/ani/dantotsu/settings/NovelReaderSettings.kt deleted file mode 100644 index 7c72c7e9..00000000 --- a/app/src/main/java/ani/dantotsu/settings/NovelReaderSettings.kt +++ /dev/null @@ -1,10 +0,0 @@ -package ani.dantotsu.settings - -import java.io.Serializable - -data class NovelReaderSettings( - var showSource: Boolean = true, - var showSystemBars: Boolean = false, - var default: CurrentNovelReaderSettings = CurrentNovelReaderSettings(), - var askIndividual: Boolean = true, -) : Serializable \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/settings/ReaderSettings.kt b/app/src/main/java/ani/dantotsu/settings/ReaderSettings.kt index 8a249dd7..e0a91af8 100644 --- a/app/src/main/java/ani/dantotsu/settings/ReaderSettings.kt +++ b/app/src/main/java/ani/dantotsu/settings/ReaderSettings.kt @@ -8,6 +8,7 @@ data class ReaderSettings( var autoDetectWebtoon: Boolean = true, var default: CurrentReaderSettings = CurrentReaderSettings(), + var defaultLN: CurrentNovelReaderSettings = CurrentNovelReaderSettings(), var askIndividual: Boolean = true, var updateForH: Boolean = false diff --git a/app/src/main/java/ani/dantotsu/settings/ReaderSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/ReaderSettingsActivity.kt index 61c87afe..999b35a5 100644 --- a/app/src/main/java/ani/dantotsu/settings/ReaderSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/ReaderSettingsActivity.kt @@ -1,13 +1,17 @@ package ani.dantotsu.settings import android.os.Bundle +import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import androidx.appcompat.app.AppCompatActivity import androidx.core.view.updateLayoutParams +import ani.dantotsu.NoPaddingArrayAdapter import ani.dantotsu.R import ani.dantotsu.databinding.ActivityReaderSettingsBinding import ani.dantotsu.initActivity import ani.dantotsu.loadData +import ani.dantotsu.media.novel.novelreader.NovelReaderActivity import ani.dantotsu.navBarHeight import ani.dantotsu.others.LangSet import ani.dantotsu.saveData @@ -42,7 +46,7 @@ class ReaderSettingsActivity : AppCompatActivity() { onBackPressedDispatcher.onBackPressed() } - //General + //Manga Settings binding.readerSettingsSourceName.isChecked = settings.showSource binding.readerSettingsSourceName.setOnCheckedChangeListener { _, isChecked -> settings.showSource = isChecked @@ -54,14 +58,14 @@ class ReaderSettingsActivity : AppCompatActivity() { settings.showSystemBars = isChecked saveData(reader, settings) } - + //Default Manga binding.readerSettingsAutoWebToon.isChecked = settings.autoDetectWebtoon binding.readerSettingsAutoWebToon.setOnCheckedChangeListener { _, isChecked -> settings.autoDetectWebtoon = isChecked saveData(reader, settings) } - //Default + val layoutList = listOf( binding.readerSettingsPaged, binding.readerSettingsContinuousPaged, @@ -185,6 +189,163 @@ class ReaderSettingsActivity : AppCompatActivity() { saveData(reader, settings) } + //LN settings + val layoutListLN = listOf( + binding.LNpaged, + binding.LNcontinuous + ) + + binding.LNlayoutText.text = settings.defaultLN.layout.string + var selectedLN = layoutListLN[settings.defaultLN.layout.ordinal] + selectedLN.alpha = 1f + + layoutListLN.forEachIndexed { index, imageButton -> + imageButton.setOnClickListener { + selectedLN.alpha = 0.33f + selectedLN = imageButton + selectedLN.alpha = 1f + settings.defaultLN.layout = CurrentNovelReaderSettings.Layouts[index] + ?: CurrentNovelReaderSettings.Layouts.PAGED + binding.LNlayoutText.text = settings.defaultLN.layout.string + saveData(reader, settings) + } + } + + val dualListLN = listOf( + binding.LNdualNo, + binding.LNdualAuto, + binding.LNdualForce + ) + + binding.LNdualPageText.text = settings.defaultLN.dualPageMode.toString() + var selectedDualLN = dualListLN[settings.defaultLN.dualPageMode.ordinal] + selectedDualLN.alpha = 1f + + dualListLN.forEachIndexed { index, imageButton -> + imageButton.setOnClickListener { + selectedDualLN.alpha = 0.33f + selectedDualLN = imageButton + selectedDualLN.alpha = 1f + settings.defaultLN.dualPageMode = CurrentReaderSettings.DualPageModes[index] + ?: CurrentReaderSettings.DualPageModes.Automatic + binding.LNdualPageText.text = settings.defaultLN.dualPageMode.toString() + saveData(reader, settings) + } + } + + binding.LNlineHeight.setText(settings.defaultLN.lineHeight.toString()) + binding.LNlineHeight.setOnFocusChangeListener { _, hasFocus -> + if (!hasFocus) { + val value = binding.LNlineHeight.text.toString().toFloatOrNull() ?: 1.4f + settings.defaultLN.lineHeight = value + binding.LNlineHeight.setText(value.toString()) + saveData(reader, settings) + } + } + + binding.LNincrementLineHeight.setOnClickListener { + val value = binding.LNlineHeight.text.toString().toFloatOrNull() ?: 1.4f + settings.defaultLN.lineHeight = value + 0.1f + binding.LNlineHeight.setText(settings.defaultLN.lineHeight.toString()) + saveData(reader, settings) + } + + binding.LNdecrementLineHeight.setOnClickListener { + val value = binding.LNlineHeight.text.toString().toFloatOrNull() ?: 1.4f + settings.defaultLN.lineHeight = value - 0.1f + binding.LNlineHeight.setText(settings.defaultLN.lineHeight.toString()) + saveData(reader, settings) + } + + binding.LNmargin.setText(settings.defaultLN.margin.toString()) + binding.LNmargin.setOnFocusChangeListener { _, hasFocus -> + if (!hasFocus) { + val value = binding.LNmargin.text.toString().toFloatOrNull() ?: 0.06f + settings.defaultLN.margin = value + binding.LNmargin.setText(value.toString()) + saveData(reader, settings) + } + } + + binding.LNincrementMargin.setOnClickListener { + val value = binding.LNmargin.text.toString().toFloatOrNull() ?: 0.06f + settings.defaultLN.margin = value + 0.01f + binding.LNmargin.setText(settings.defaultLN.margin.toString()) + saveData(reader, settings) + } + + binding.LNdecrementMargin.setOnClickListener { + val value = binding.LNmargin.text.toString().toFloatOrNull() ?: 0.06f + settings.defaultLN.margin = value - 0.01f + binding.LNmargin.setText(settings.defaultLN.margin.toString()) + saveData(reader, settings) + } + + binding.LNmaxInlineSize.setText(settings.defaultLN.maxInlineSize.toString()) + binding.LNmaxInlineSize.setOnFocusChangeListener { _, hasFocus -> + if (!hasFocus) { + val value = binding.LNmaxInlineSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxInlineSize = value + binding.LNmaxInlineSize.setText(value.toString()) + saveData(reader, settings) + } + } + + binding.LNincrementMaxInlineSize.setOnClickListener { + val value = binding.LNmaxInlineSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxInlineSize = value + 10 + binding.LNmaxInlineSize.setText(settings.defaultLN.maxInlineSize.toString()) + saveData(reader, settings) + } + + binding.LNdecrementMaxInlineSize.setOnClickListener { + val value = binding.LNmaxInlineSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxInlineSize = value - 10 + binding.LNmaxInlineSize.setText(settings.defaultLN.maxInlineSize.toString()) + saveData(reader, settings) + } + + binding.LNmaxBlockSize.setText(settings.defaultLN.maxBlockSize.toString()) + binding.LNmaxBlockSize.setOnFocusChangeListener { _, hasFocus -> + if (!hasFocus) { + val value = binding.LNmaxBlockSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxBlockSize = value + binding.LNmaxBlockSize.setText(value.toString()) + saveData(reader, settings) + } + } + binding.LNincrementMaxBlockSize.setOnClickListener { + val value = binding.LNmaxBlockSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxInlineSize = value + 10 + binding.LNmaxBlockSize.setText(settings.defaultLN.maxInlineSize.toString()) + saveData(reader, settings) + } + + binding.LNdecrementMaxBlockSize.setOnClickListener { + val value = binding.LNmaxBlockSize.text.toString().toIntOrNull() ?: 720 + settings.defaultLN.maxBlockSize = value - 10 + binding.LNmaxBlockSize.setText(settings.defaultLN.maxBlockSize.toString()) + saveData(reader, settings) + } + + binding.LNuseDarkTheme.isChecked = settings.defaultLN.useDarkTheme + binding.LNuseDarkTheme.setOnCheckedChangeListener { _, isChecked -> + settings.defaultLN.useDarkTheme = isChecked + saveData(reader, settings) + } + + binding.LNkeepScreenOn.isChecked = settings.defaultLN.keepScreenOn + binding.LNkeepScreenOn.setOnCheckedChangeListener { _, isChecked -> + settings.defaultLN.keepScreenOn = isChecked + saveData(reader, settings) + } + + binding.LNvolumeButton.isChecked = settings.defaultLN.volumeButtons + binding.LNvolumeButton.setOnCheckedChangeListener { _, isChecked -> + settings.defaultLN.volumeButtons = isChecked + saveData(reader, settings) + } + //Update Progress binding.readerSettingsAskUpdateProgress.isChecked = settings.askIndividual binding.readerSettingsAskUpdateProgress.setOnCheckedChangeListener { _, isChecked -> diff --git a/app/src/main/res/layout/activity_reader_settings.xml b/app/src/main/res/layout/activity_reader_settings.xml index 0600341a..49e999f9 100644 --- a/app/src/main/res/layout/activity_reader_settings.xml +++ b/app/src/main/res/layout/activity_reader_settings.xml @@ -73,6 +73,1098 @@ android:clipToPadding="false" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -