Rewrite PreferencesHelper. Allow to customize navigation with volume keys and tapping. Closes #251 and closes #129.

This commit is contained in:
len
2016-04-18 17:29:46 +02:00
parent 6d0254c5e5
commit a7840bc247
21 changed files with 258 additions and 199 deletions
@@ -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()
}
}