mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-15 13:37:29 +01:00
Rewrite PreferencesHelper. Allow to customize navigation with volume keys and tapping. Closes #251 and closes #129.
This commit is contained in:
@@ -288,7 +288,7 @@ class CataloguePresenter : BasePresenter<CatalogueFragment>() {
|
||||
if (!isLoginRequired || isLogged)
|
||||
return true
|
||||
|
||||
prefs.getSourceUsername(this) != "" && prefs.getSourcePassword(this) != ""
|
||||
prefs.sourceUsername(this) != "" && prefs.sourcePassword(this) != ""
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -81,6 +81,8 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
|
||||
private var prevChapterBtn: MenuItem? = null
|
||||
|
||||
private val volumeKeysEnabled by lazy { preferences.readWithVolumeKeys().getOrDefault() }
|
||||
|
||||
val preferences: PreferencesHelper
|
||||
get() = presenter.prefs
|
||||
|
||||
@@ -174,18 +176,32 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
|
||||
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
||||
if (!isFinishing) {
|
||||
val action = event.action
|
||||
val keyCode = event.keyCode
|
||||
when (keyCode) {
|
||||
KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT -> {
|
||||
if (action == KeyEvent.ACTION_UP)
|
||||
viewer?.moveToNext()
|
||||
return true
|
||||
when (event.keyCode) {
|
||||
KeyEvent.KEYCODE_VOLUME_DOWN -> {
|
||||
if (volumeKeysEnabled) {
|
||||
if (event.action == KeyEvent.ACTION_UP) {
|
||||
viewer?.moveToNext()
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_DPAD_LEFT -> {
|
||||
if (action == KeyEvent.ACTION_UP)
|
||||
KeyEvent.KEYCODE_VOLUME_UP -> {
|
||||
if (volumeKeysEnabled) {
|
||||
if (event.action == KeyEvent.ACTION_UP) {
|
||||
viewer?.moveToPrevious()
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
KeyEvent.KEYCODE_DPAD_RIGHT -> {
|
||||
if (event.action == KeyEvent.ACTION_UP) {
|
||||
viewer?.moveToNext()
|
||||
}
|
||||
}
|
||||
KeyEvent.KEYCODE_DPAD_LEFT -> {
|
||||
if (event.action == KeyEvent.ACTION_UP) {
|
||||
viewer?.moveToPrevious()
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -258,7 +274,7 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
|
||||
|
||||
private fun getOrCreateViewer(manga: Manga): BaseReader {
|
||||
val mangaViewer = if (manga.viewer == 0) preferences.defaultViewer else manga.viewer
|
||||
val mangaViewer = if (manga.viewer == 0) preferences.defaultViewer() else manga.viewer
|
||||
|
||||
// Try to reuse the viewer using its tag
|
||||
var fragment: BaseReader? = supportFragmentManager.findFragmentByTag(manga.viewer.toString()) as? BaseReader
|
||||
|
||||
@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer.base
|
||||
|
||||
import com.davemorrissey.labs.subscaleview.decoder.*
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.data.source.model.Page
|
||||
import eu.kanade.tachiyomi.ui.base.fragment.BaseFragment
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
@@ -54,6 +55,11 @@ abstract class BaseReader : BaseFragment() {
|
||||
lateinit var bitmapDecoderClass: Class<out ImageDecoder>
|
||||
private set
|
||||
|
||||
/**
|
||||
* Whether tap navigation is enabled or not.
|
||||
*/
|
||||
val tappingEnabled by lazy { readerActivity.preferences.readWithTapping().getOrDefault() }
|
||||
|
||||
/**
|
||||
* Whether the reader has requested to append a chapter. Used with seamless mode to avoid
|
||||
* restarting requests when changing pages.
|
||||
|
||||
@@ -164,9 +164,9 @@ abstract class PagerReader : BaseReader() {
|
||||
val positionX = e.x
|
||||
|
||||
if (positionX < pager.width * LEFT_REGION) {
|
||||
onLeftSideTap()
|
||||
if (tappingEnabled) onLeftSideTap()
|
||||
} else if (positionX > pager.width * RIGHT_REGION) {
|
||||
onRightSideTap()
|
||||
if (tappingEnabled) onRightSideTap()
|
||||
} else {
|
||||
readerActivity.onCenterSingleTap()
|
||||
}
|
||||
|
||||
@@ -126,9 +126,9 @@ class WebtoonReader : BaseReader() {
|
||||
val positionX = e.x
|
||||
|
||||
if (positionX < recycler.width * LEFT_REGION) {
|
||||
moveToPrevious()
|
||||
if (tappingEnabled) moveToPrevious()
|
||||
} else if (positionX > recycler.width * RIGHT_REGION) {
|
||||
moveToNext()
|
||||
if (tappingEnabled) moveToNext()
|
||||
} else {
|
||||
readerActivity.onCenterSingleTap()
|
||||
}
|
||||
|
||||
@@ -14,12 +14,13 @@ import com.nononsenseapps.filepicker.FilePickerActivity
|
||||
import com.nononsenseapps.filepicker.FilePickerFragment
|
||||
import com.nononsenseapps.filepicker.LogicHandler
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.util.inflate
|
||||
import rx.Subscription
|
||||
import java.io.File
|
||||
|
||||
class SettingsDownloadsFragment : SettingsNestedFragment() {
|
||||
|
||||
val downloadDirPref by lazy { findPreference(getString(R.string.pref_download_directory_key)) }
|
||||
companion object {
|
||||
|
||||
val DOWNLOAD_DIR_CODE = 103
|
||||
@@ -31,11 +32,16 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
|
||||
}
|
||||
}
|
||||
|
||||
val downloadDirPref by lazy { findPreference(getString(R.string.pref_download_directory_key)) }
|
||||
|
||||
var downloadDirSubscription: Subscription? = null
|
||||
|
||||
override fun onViewCreated(view: View, savedState: Bundle?) {
|
||||
downloadDirPref.setOnPreferenceClickListener {
|
||||
|
||||
val currentDir = preferences.downloadsDirectory().getOrDefault()
|
||||
val externalDirs = getExternalFilesDirs()
|
||||
val selectedIndex = externalDirs.indexOf(File(preferences.downloadsDirectory))
|
||||
val selectedIndex = externalDirs.indexOf(File(currentDir))
|
||||
|
||||
MaterialDialog.Builder(activity)
|
||||
.items(externalDirs + getString(R.string.custom_dir))
|
||||
@@ -46,13 +52,12 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
|
||||
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false)
|
||||
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true)
|
||||
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR)
|
||||
i.putExtra(FilePickerActivity.EXTRA_START_PATH, preferences.downloadsDirectory)
|
||||
i.putExtra(FilePickerActivity.EXTRA_START_PATH, currentDir)
|
||||
|
||||
startActivityForResult(i, DOWNLOAD_DIR_CODE)
|
||||
} else {
|
||||
// One of the predefined folders was selected
|
||||
preferences.downloadsDirectory = text.toString()
|
||||
updateDownloadsDir()
|
||||
preferences.downloadsDirectory().set(text.toString())
|
||||
}
|
||||
true
|
||||
})
|
||||
@@ -60,15 +65,14 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
downloadDirSubscription = preferences.downloadsDirectory().asObservable()
|
||||
.subscribe { downloadDirPref.summary = it }
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
updateDownloadsDir()
|
||||
}
|
||||
|
||||
fun updateDownloadsDir() {
|
||||
downloadDirPref.summary = preferences.downloadsDirectory
|
||||
override fun onDestroyView() {
|
||||
downloadDirSubscription?.unsubscribe()
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
fun getExternalFilesDirs(): List<File> {
|
||||
@@ -81,7 +85,7 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (data != null && requestCode == DOWNLOAD_DIR_CODE && resultCode == Activity.RESULT_OK) {
|
||||
preferences.downloadsDirectory = data.data.path
|
||||
preferences.downloadsDirectory().set(data.data.path)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,9 +44,5 @@ open class SettingsNestedFragment : PreferenceFragment() {
|
||||
get() = settingsActivity.preferences
|
||||
|
||||
val fragmentManagerCompat: FragmentManager
|
||||
get() = if (Build.VERSION.SDK_INT >= 17) {
|
||||
childFragmentManager
|
||||
} else {
|
||||
fragmentManager
|
||||
}
|
||||
get() = if (Build.VERSION.SDK_INT >= 17) childFragmentManager else fragmentManager
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import android.support.v14.preference.MultiSelectListPreference
|
||||
import android.support.v7.preference.Preference
|
||||
import android.support.v7.preference.PreferenceGroup
|
||||
import android.view.View
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.data.source.base.Source
|
||||
import eu.kanade.tachiyomi.data.source.getLanguages
|
||||
@@ -65,7 +64,7 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
|
||||
|
||||
fun createSource(source: Source): Preference {
|
||||
return LoginPreference(preferenceManager.context).apply {
|
||||
key = PreferencesHelper.SOURCE_ACCOUNT_USERNAME + source.id
|
||||
key = preferences.keys.sourceUsername(source.id)
|
||||
title = source.visibleName
|
||||
|
||||
setOnPreferenceClickListener {
|
||||
@@ -80,7 +79,7 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (requestCode == SOURCE_CHANGE_REQUEST) {
|
||||
val pref = findPreference(PreferencesHelper.SOURCE_ACCOUNT_USERNAME + resultCode) as? LoginPreference
|
||||
val pref = findPreference(preferences.keys.sourceUsername(resultCode)) as? LoginPreference
|
||||
pref?.notifyChanged()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v7.preference.PreferenceCategory
|
||||
import android.view.View
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.widget.preference.LoginPreference
|
||||
import eu.kanade.tachiyomi.widget.preference.MangaSyncLoginDialog
|
||||
|
||||
@@ -27,7 +26,7 @@ class SettingsSyncFragment : SettingsNestedFragment() {
|
||||
|
||||
for (sync in settingsActivity.syncManager.services) {
|
||||
val pref = LoginPreference(themedContext).apply {
|
||||
key = PreferencesHelper.MANGASYNC_ACCOUNT_USERNAME + sync.id
|
||||
key = preferences.keys.syncUsername(sync.id)
|
||||
title = sync.name
|
||||
|
||||
setOnPreferenceClickListener {
|
||||
@@ -44,7 +43,7 @@ class SettingsSyncFragment : SettingsNestedFragment() {
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (requestCode == SYNC_CHANGE_REQUEST) {
|
||||
val pref = findPreference(PreferencesHelper.MANGASYNC_ACCOUNT_USERNAME + resultCode) as? LoginPreference
|
||||
val pref = findPreference(preferences.keys.syncUsername(resultCode)) as? LoginPreference
|
||||
pref?.notifyChanged()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user