Rewrite preferences with a modified support library v7

This commit is contained in:
len 2016-06-16 20:52:51 +02:00
parent cd92569355
commit 9beeca652f
28 changed files with 493 additions and 506 deletions

View File

@ -94,8 +94,6 @@ dependencies {
compile "com.android.support:design:$support_library_version" compile "com.android.support:design:$support_library_version"
compile "com.android.support:recyclerview-v7:$support_library_version" compile "com.android.support:recyclerview-v7:$support_library_version"
compile "com.android.support:support-annotations:$support_library_version" compile "com.android.support:support-annotations:$support_library_version"
compile "com.android.support:preference-v7:$support_library_version"
compile "com.android.support:preference-v14:$support_library_version"
compile "com.android.support:customtabs:$support_library_version" compile "com.android.support:customtabs:$support_library_version"
// ReactiveX // ReactiveX
@ -162,6 +160,7 @@ dependencies {
compile 'com.nononsenseapps:filepicker:2.5.2' compile 'com.nononsenseapps:filepicker:2.5.2'
compile 'com.github.amulyakhare:TextDrawable:558677e' compile 'com.github.amulyakhare:TextDrawable:558677e'
compile 'com.afollestad.material-dialogs:core:0.8.5.9' compile 'com.afollestad.material-dialogs:core:0.8.5.9'
compile 'net.xpece.android:support-preference:0.8.1'
// Tests // Tests
testCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'

View File

@ -61,7 +61,7 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
return inflater.inflate(R.layout.fragment_manga_chapters, container, false) return inflater.inflate(R.layout.fragment_manga_chapters, container, false)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
// Init RecyclerView and adapter // Init RecyclerView and adapter
adapter = ChaptersAdapter(this) adapter = ChaptersAdapter(this)

View File

@ -64,9 +64,9 @@ class RecentChaptersFragment
/** /**
* Called when view is created * Called when view is created
* @param view created view * @param view created view
* @param savedInstanceState status of saved sate * @param savedState status of saved sate
*/ */
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
// Init RecyclerView and adapter // Init RecyclerView and adapter
recycler.layoutManager = NpaLinearLayoutManager(activity) recycler.layoutManager = NpaLinearLayoutManager(activity)
recycler.addItemDecoration(DividerItemDecoration(context.theme.getResourceDrawable(R.attr.divider_drawable))) recycler.addItemDecoration(DividerItemDecoration(context.theme.getResourceDrawable(R.attr.divider_drawable)))

View File

@ -54,9 +54,9 @@ class RecentlyReadFragment : BaseRxFragment<RecentlyReadPresenter>() {
* Called when view is created * Called when view is created
* *
* @param view created view * @param view created view
* @param savedInstanceState status of saved sate * @param savedState status of saved sate
*/ */
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { override fun onViewCreated(view: View?, savedState: Bundle?) {
// Initialize adapter // Initialize adapter
recycler.layoutManager = NpaLinearLayoutManager(activity) recycler.layoutManager = NpaLinearLayoutManager(activity)
adapter = RecentlyReadAdapter(this) adapter = RecentlyReadAdapter(this)

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.setting
import android.os.Bundle import android.os.Bundle
import android.support.v7.preference.SwitchPreferenceCompat import android.support.v7.preference.SwitchPreferenceCompat
import android.support.v7.preference.XpPreferenceFragment
import android.view.View import android.view.View
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.BuildConfig
@ -17,7 +18,7 @@ import java.text.ParseException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
class SettingsAboutFragment : SettingsNestedFragment() { class SettingsAboutFragment : SettingsFragment() {
/** /**
* Checks for new releases * Checks for new releases
*/ */
@ -33,15 +34,16 @@ class SettingsAboutFragment : SettingsNestedFragment() {
} }
companion object { companion object {
fun newInstance(rootKey: String): SettingsAboutFragment {
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment { val args = Bundle()
val fragment = SettingsAboutFragment() args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
fragment.setArgs(resourcePreference, resourceTitle) return SettingsAboutFragment().apply { arguments = args }
return fragment
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
val version = findPreference(getString(R.string.pref_version)) val version = findPreference(getString(R.string.pref_version))
val buildTime = findPreference(getString(R.string.pref_build_time)) val buildTime = findPreference(getString(R.string.pref_build_time))

View File

@ -1,97 +1,63 @@
package eu.kanade.tachiyomi.ui.setting package eu.kanade.tachiyomi.ui.setting
import android.os.Bundle import android.os.Bundle
import android.support.v14.preference.PreferenceFragment import android.support.v7.preference.PreferenceFragmentCompat
import android.support.v7.preference.PreferenceScreen
import android.view.MenuItem
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.mangasync.MangaSyncManager
import eu.kanade.tachiyomi.data.network.NetworkHelper
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.source.SourceManager
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
import kotlinx.android.synthetic.main.toolbar.* import kotlinx.android.synthetic.main.toolbar.*
import uy.kohesive.injekt.injectLazy import net.xpece.android.support.preference.PreferenceScreenNavigationStrategy
import net.xpece.android.support.preference.PreferenceScreenNavigationStrategy.ReplaceFragment
class SettingsActivity : BaseActivity() { class SettingsActivity : BaseActivity(),
PreferenceFragmentCompat.OnPreferenceStartScreenCallback,
PreferenceScreenNavigationStrategy.ReplaceFragment.Callbacks {
val preferences: PreferencesHelper by injectLazy() private lateinit var replaceFragmentStrategy: ReplaceFragment
val chapterCache: ChapterCache by injectLazy()
val db: DatabaseHelper by injectLazy()
val sourceManager: SourceManager by injectLazy()
val syncManager: MangaSyncManager by injectLazy()
val networkHelper: NetworkHelper by injectLazy()
override fun onCreate(savedState: Bundle?) { override fun onCreate(savedState: Bundle?) {
setAppTheme() setAppTheme()
super.onCreate(savedState) super.onCreate(savedState)
setContentView(R.layout.activity_preferences) setContentView(R.layout.activity_preferences)
setupToolbar(toolbar) replaceFragmentStrategy = ReplaceFragment(this,
R.anim.abc_fade_in, R.anim.abc_fade_out,
R.anim.abc_fade_in, R.anim.abc_fade_out)
if (savedState == null) { if (savedState == null) {
fragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.replace(R.id.settings_content, SettingsMainFragment()) .add(R.id.settings_content, SettingsFragment.newInstance(null), "Settings")
.commit() .commit()
}
setupToolbar(toolbar, backNavigation = false)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onBackPressed()
else -> return super.onOptionsItemSelected(item)
}
return true
}
override fun onBuildPreferenceFragment(key: String?): PreferenceFragmentCompat {
return when (key) {
"general_screen" -> SettingsGeneralFragment.newInstance(key)
"downloads_screen" -> SettingsDownloadsFragment.newInstance(key)
"sources_screen" -> SettingsSourcesFragment.newInstance(key)
"sync_screen" -> SettingsSyncFragment.newInstance(key)
"advanced_screen" -> SettingsAdvancedFragment.newInstance(key)
"about_screen" -> SettingsAboutFragment.newInstance(key)
else -> SettingsFragment.newInstance(key)
} }
} }
override fun onBackPressed() { override fun onPreferenceStartScreen(p0: PreferenceFragmentCompat, p1: PreferenceScreen): Boolean {
if (!fragmentManager.popBackStackImmediate()) { replaceFragmentStrategy.onPreferenceStartScreen(supportFragmentManager, p0, p1)
super.onBackPressed() return true
}
}
class SettingsMainFragment : PreferenceFragment() {
override fun onCreatePreferences(savedState: Bundle?, s: String?) {
addPreferencesFromResource(R.xml.pref_main)
registerSubpreference(R.string.pref_category_general_key) {
SettingsGeneralFragment.newInstance(R.xml.pref_general, R.string.pref_category_general)
}
registerSubpreference(R.string.pref_category_reader_key) {
SettingsNestedFragment.newInstance(R.xml.pref_reader, R.string.pref_category_reader)
}
registerSubpreference(R.string.pref_category_downloads_key) {
SettingsDownloadsFragment.newInstance(R.xml.pref_downloads, R.string.pref_category_downloads)
}
registerSubpreference(R.string.pref_category_sources_key) {
SettingsSourcesFragment.newInstance(R.xml.pref_sources, R.string.pref_category_sources)
}
registerSubpreference(R.string.pref_category_sync_key) {
SettingsSyncFragment.newInstance(R.xml.pref_sync, R.string.pref_category_sync)
}
registerSubpreference(R.string.pref_category_advanced_key) {
SettingsAdvancedFragment.newInstance(R.xml.pref_advanced, R.string.pref_category_advanced)
}
registerSubpreference(R.string.pref_category_about_key) {
SettingsAboutFragment.newInstance(R.xml.pref_about, R.string.pref_category_about)
}
}
override fun onResume() {
super.onResume()
(activity as BaseActivity).setToolbarTitle(getString(R.string.label_settings))
}
private fun registerSubpreference(preferenceResource: Int, func: () -> PreferenceFragment) {
findPreference(getString(preferenceResource)).setOnPreferenceClickListener {
val fragment = func()
fragmentManager.beginTransaction()
.replace(R.id.settings_content, fragment)
.addToBackStack(fragment.javaClass.simpleName)
.commit()
true
}
}
} }
} }

View File

@ -1,38 +1,46 @@
package eu.kanade.tachiyomi.ui.setting package eu.kanade.tachiyomi.ui.setting
import android.os.Bundle import android.os.Bundle
import android.support.v7.preference.XpPreferenceFragment
import android.view.View import android.view.View
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.network.NetworkHelper
import eu.kanade.tachiyomi.util.plusAssign
import eu.kanade.tachiyomi.util.toast import eu.kanade.tachiyomi.util.toast
import rx.Observable import rx.Observable
import rx.Subscription
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers import rx.schedulers.Schedulers
import uy.kohesive.injekt.injectLazy
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
class SettingsAdvancedFragment : SettingsNestedFragment() { class SettingsAdvancedFragment : SettingsFragment() {
companion object { companion object {
fun newInstance(rootKey: String): SettingsAdvancedFragment {
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment { val args = Bundle()
val fragment = SettingsAdvancedFragment() args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
fragment.setArgs(resourcePreference, resourceTitle) return SettingsAdvancedFragment().apply { arguments = args }
return fragment
} }
} }
private val network: NetworkHelper by injectLazy()
private val chapterCache: ChapterCache by injectLazy()
private val db: DatabaseHelper by injectLazy()
private val clearCache by lazy { findPreference(getString(R.string.pref_clear_chapter_cache_key)) } private val clearCache by lazy { findPreference(getString(R.string.pref_clear_chapter_cache_key)) }
private val clearDatabase by lazy { findPreference(getString(R.string.pref_clear_database_key)) } private val clearDatabase by lazy { findPreference(getString(R.string.pref_clear_database_key)) }
private val clearCookies by lazy { findPreference(getString(R.string.pref_clear_cookies_key)) } private val clearCookies by lazy { findPreference(getString(R.string.pref_clear_cookies_key)) }
private var clearCacheSubscription: Subscription? = null override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
clearCache.setOnPreferenceClickListener { clearCache.setOnPreferenceClickListener {
clearChapterCache() clearChapterCache()
true true
@ -40,7 +48,7 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
clearCache.summary = getString(R.string.used_cache, chapterCache.readableSize) clearCache.summary = getString(R.string.used_cache, chapterCache.readableSize)
clearCookies.setOnPreferenceClickListener { clearCookies.setOnPreferenceClickListener {
settingsActivity.networkHelper.cookies.removeAll() network.cookies.removeAll()
activity.toast(R.string.cookies_cleared) activity.toast(R.string.cookies_cleared)
true true
} }
@ -51,11 +59,6 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
} }
} }
override fun onDestroyView() {
clearCacheSubscription?.unsubscribe()
super.onDestroyView()
}
private fun clearChapterCache() { private fun clearChapterCache() {
val deletedFiles = AtomicInteger() val deletedFiles = AtomicInteger()
@ -67,9 +70,7 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
.cancelable(false) .cancelable(false)
.show() .show()
clearCacheSubscription?.unsubscribe() subscriptions += Observable.defer { Observable.from(files) }
clearCacheSubscription = Observable.defer { Observable.from(files) }
.concatMap { file -> .concatMap { file ->
if (chapterCache.removeFileFromCache(file.name)) { if (chapterCache.removeFileFromCache(file.name)) {
deletedFiles.incrementAndGet() deletedFiles.incrementAndGet()
@ -102,10 +103,4 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
.show() .show()
} }
private val chapterCache: ChapterCache
get() = settingsActivity.chapterCache
private val db: DatabaseHelper
get() = settingsActivity.db
} }

View File

@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v7.preference.XpPreferenceFragment
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -14,29 +15,32 @@ import com.nononsenseapps.filepicker.FilePickerActivity
import com.nononsenseapps.filepicker.FilePickerFragment import com.nononsenseapps.filepicker.FilePickerFragment
import com.nononsenseapps.filepicker.LogicHandler import com.nononsenseapps.filepicker.LogicHandler
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.util.inflate import eu.kanade.tachiyomi.util.inflate
import rx.Subscription import eu.kanade.tachiyomi.util.plusAssign
import uy.kohesive.injekt.injectLazy
import java.io.File import java.io.File
class SettingsDownloadsFragment : SettingsNestedFragment() { class SettingsDownloadsFragment : SettingsFragment() {
companion object { companion object {
val DOWNLOAD_DIR_CODE = 103 val DOWNLOAD_DIR_CODE = 103
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment { fun newInstance(rootKey: String): SettingsDownloadsFragment {
val fragment = SettingsDownloadsFragment() val args = Bundle()
fragment.setArgs(resourcePreference, resourceTitle) args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return fragment return SettingsDownloadsFragment().apply { arguments = args }
} }
} }
private val preferences: PreferencesHelper by injectLazy()
val downloadDirPref by lazy { findPreference(getString(R.string.pref_download_directory_key)) } val downloadDirPref by lazy { findPreference(getString(R.string.pref_download_directory_key)) }
var downloadDirSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
downloadDirPref.setOnPreferenceClickListener { downloadDirPref.setOnPreferenceClickListener {
val currentDir = preferences.downloadsDirectory().getOrDefault() val currentDir = preferences.downloadsDirectory().getOrDefault()
@ -66,15 +70,10 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
true true
} }
downloadDirSubscription = preferences.downloadsDirectory().asObservable() subscriptions += preferences.downloadsDirectory().asObservable()
.subscribe { downloadDirPref.summary = it } .subscribe { downloadDirPref.summary = it }
} }
override fun onDestroyView() {
downloadDirSubscription?.unsubscribe()
super.onDestroyView()
}
fun getExternalFilesDirs(): List<File> { fun getExternalFilesDirs(): List<File> {
val defaultDir = Environment.getExternalStorageDirectory().absolutePath + val defaultDir = Environment.getExternalStorageDirectory().absolutePath +
File.separator + getString(R.string.app_name) + File.separator + getString(R.string.app_name) +

View File

@ -0,0 +1,55 @@
package eu.kanade.tachiyomi.ui.setting
import android.os.Bundle
import android.support.annotation.CallSuper
import android.support.v7.preference.XpPreferenceFragment
import android.view.View
import eu.kanade.tachiyomi.R
import net.xpece.android.support.preference.PreferenceScreenNavigationStrategy
import rx.subscriptions.CompositeSubscription
open class SettingsFragment : XpPreferenceFragment() {
companion object {
fun newInstance(rootKey: String?): SettingsFragment {
val args = Bundle()
args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return SettingsFragment().apply { arguments = args }
}
}
lateinit var subscriptions: CompositeSubscription
override final fun onCreatePreferences2(savedState: Bundle?, rootKey: String?) {
subscriptions = CompositeSubscription()
addPreferencesFromResource(R.xml.pref_general)
addPreferencesFromResource(R.xml.pref_reader)
addPreferencesFromResource(R.xml.pref_downloads)
addPreferencesFromResource(R.xml.pref_sources)
addPreferencesFromResource(R.xml.pref_sync)
addPreferencesFromResource(R.xml.pref_advanced)
addPreferencesFromResource(R.xml.pref_about)
// Setup root preference title.
preferenceScreen.title = activity.title
PreferenceScreenNavigationStrategy.ReplaceFragment.onCreatePreferences(this, rootKey)
}
@CallSuper
override fun onViewCreated(view: View, savedState: Bundle?) {
listView.isFocusable = false
}
override fun onStart() {
super.onStart()
activity.title = preferenceScreen.title
}
override fun onDestroyView() {
subscriptions.unsubscribe()
super.onDestroyView()
}
}

View File

@ -2,29 +2,37 @@ package eu.kanade.tachiyomi.ui.setting
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v14.preference.MultiSelectListPreference
import android.support.v4.app.TaskStackBuilder import android.support.v4.app.TaskStackBuilder
import android.support.v7.preference.Preference import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceFragmentCompat
import android.support.v7.preference.XpPreferenceFragment
import android.view.View import android.view.View
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.library.LibraryUpdateAlarm import eu.kanade.tachiyomi.data.library.LibraryUpdateAlarm
import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.util.plusAssign
import eu.kanade.tachiyomi.widget.preference.IntListPreference import eu.kanade.tachiyomi.widget.preference.IntListPreference
import eu.kanade.tachiyomi.widget.preference.LibraryColumnsDialog import eu.kanade.tachiyomi.widget.preference.LibraryColumnsDialog
import eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference import eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference
import net.xpece.android.support.preference.MultiSelectListPreference
import rx.Observable import rx.Observable
import rx.Subscription import uy.kohesive.injekt.injectLazy
class SettingsGeneralFragment : SettingsFragment(),
PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
class SettingsGeneralFragment : SettingsNestedFragment() {
companion object { companion object {
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsGeneralFragment { fun newInstance(rootKey: String): SettingsGeneralFragment {
val fragment = SettingsGeneralFragment(); val args = Bundle()
fragment.setArgs(resourcePreference, resourceTitle); args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return fragment; return SettingsGeneralFragment().apply { arguments = args }
} }
} }
private val preferences: PreferencesHelper by injectLazy()
val columnsPreference by lazy { val columnsPreference by lazy {
findPreference(getString(R.string.pref_library_columns_dialog_key)) as SimpleDialogPreference findPreference(getString(R.string.pref_library_columns_dialog_key)) as SimpleDialogPreference
} }
@ -41,15 +49,13 @@ class SettingsGeneralFragment : SettingsNestedFragment() {
findPreference(getString(R.string.pref_theme_key)) as IntListPreference findPreference(getString(R.string.pref_theme_key)) as IntListPreference
} }
var updateIntervalSubscription: Subscription? = null override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
var columnsSubscription: Subscription? = null subscriptions += preferences.libraryUpdateInterval().asObservable()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
updateIntervalSubscription = preferences.libraryUpdateInterval().asObservable()
.subscribe { updateRestriction.isVisible = it > 0 } .subscribe { updateRestriction.isVisible = it > 0 }
columnsSubscription = Observable.combineLatest( subscriptions += Observable.combineLatest(
preferences.portraitColumns().asObservable(), preferences.portraitColumns().asObservable(),
preferences.landscapeColumns().asObservable()) preferences.landscapeColumns().asObservable())
{ portraitColumns, landscapeColumns -> Pair(portraitColumns, landscapeColumns) } { portraitColumns, landscapeColumns -> Pair(portraitColumns, landscapeColumns) }
@ -62,29 +68,21 @@ class SettingsGeneralFragment : SettingsNestedFragment() {
themePreference.setOnPreferenceChangeListener { preference, newValue -> themePreference.setOnPreferenceChangeListener { preference, newValue ->
// Rebuild activity's to apply themes. // Rebuild activity's to apply themes.
TaskStackBuilder.create(activity) TaskStackBuilder.create(context)
.addNextIntent(Intent(activity, MainActivity::class.java)) .addNextIntentWithParentStack(Intent(activity.intent))
.addNextIntent(activity.intent)
.startActivities() .startActivities()
true true
} }
} }
override fun onDestroyView() { override fun onPreferenceDisplayDialog(p0: PreferenceFragmentCompat?, p: Preference): Boolean {
updateIntervalSubscription?.unsubscribe() if (p.key == getString(R.string.pref_library_columns_dialog_key)) {
columnsSubscription?.unsubscribe() val fragment = LibraryColumnsDialog.newInstance(p)
super.onDestroyView()
}
override fun onDisplayPreferenceDialog(preference: Preference) {
if (preference === columnsPreference) {
val fragment = LibraryColumnsDialog.newInstance(preference)
fragment.setTargetFragment(this, 0) fragment.setTargetFragment(this, 0)
fragment.show(fragmentManagerCompat, null) fragment.show(childFragmentManager, null)
} else { return true
super.onDisplayPreferenceDialog(preference)
} }
return false
} }
private fun updateColumnsSummary(portraitColumns: Int, landscapeColumns: Int) { private fun updateColumnsSummary(portraitColumns: Int, landscapeColumns: Int) {

View File

@ -1,48 +0,0 @@
package eu.kanade.tachiyomi.ui.setting
import android.app.FragmentManager
import android.os.Build
import android.os.Bundle
import android.support.v14.preference.PreferenceFragment
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
open class SettingsNestedFragment : PreferenceFragment() {
companion object {
private val RESOURCE_FILE = "resource_file"
private val TOOLBAR_TITLE = "toolbar_title"
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment {
val fragment = SettingsNestedFragment()
fragment.setArgs(resourcePreference, resourceTitle)
return fragment
}
}
override fun onCreatePreferences(savedState: Bundle?, s: String?) {
addPreferencesFromResource(arguments.getInt(RESOURCE_FILE))
}
override fun onResume() {
super.onResume()
settingsActivity.setToolbarTitle(getString(arguments.getInt(TOOLBAR_TITLE)))
}
fun setArgs(resourcePreference: Int, resourceTitle: Int) {
val args = Bundle()
args.putInt(RESOURCE_FILE, resourcePreference)
args.putInt(TOOLBAR_TITLE, resourceTitle)
arguments = args
}
val settingsActivity: SettingsActivity
get() = activity as SettingsActivity
val preferences: PreferencesHelper
get() = settingsActivity.preferences
val fragmentManagerCompat: FragmentManager
get() = if (Build.VERSION.SDK_INT >= 17) childFragmentManager else fragmentManager
}

View File

@ -2,36 +2,45 @@ package eu.kanade.tachiyomi.ui.setting
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v14.preference.MultiSelectListPreference
import android.support.v7.preference.Preference import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceGroup import android.support.v7.preference.PreferenceGroup
import android.support.v7.preference.XpPreferenceFragment
import android.view.View import android.view.View
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.source.Source import eu.kanade.tachiyomi.data.source.Source
import eu.kanade.tachiyomi.data.source.SourceManager
import eu.kanade.tachiyomi.data.source.getLanguages import eu.kanade.tachiyomi.data.source.getLanguages
import eu.kanade.tachiyomi.data.source.online.LoginSource import eu.kanade.tachiyomi.data.source.online.LoginSource
import eu.kanade.tachiyomi.util.plusAssign
import eu.kanade.tachiyomi.widget.preference.LoginPreference import eu.kanade.tachiyomi.widget.preference.LoginPreference
import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog
import rx.Subscription import net.xpece.android.support.preference.MultiSelectListPreference
import uy.kohesive.injekt.injectLazy
class SettingsSourcesFragment : SettingsNestedFragment() { class SettingsSourcesFragment : SettingsFragment() {
companion object { companion object {
const val SOURCE_CHANGE_REQUEST = 120 const val SOURCE_CHANGE_REQUEST = 120
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment { fun newInstance(rootKey: String?): SettingsSourcesFragment {
val fragment = SettingsSourcesFragment() val args = Bundle()
fragment.setArgs(resourcePreference, resourceTitle) args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return fragment return SettingsSourcesFragment().apply { arguments = args }
} }
} }
private val preferences: PreferencesHelper by injectLazy()
private val sourceManager: SourceManager by injectLazy()
val languagesPref by lazy { findPreference("pref_source_languages") as MultiSelectListPreference } val languagesPref by lazy { findPreference("pref_source_languages") as MultiSelectListPreference }
val sourcesPref by lazy { findPreference("pref_sources") as PreferenceGroup } val sourcesPref by lazy { findPreference("pref_sources") as PreferenceGroup }
var languagesSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
val langs = getLanguages() val langs = getLanguages()
val entryKeys = langs.map { it.code } val entryKeys = langs.map { it.code }
@ -39,11 +48,11 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
languagesPref.entryValues = entryKeys.toTypedArray() languagesPref.entryValues = entryKeys.toTypedArray()
languagesPref.values = preferences.enabledLanguages().getOrDefault() languagesPref.values = preferences.enabledLanguages().getOrDefault()
languagesSubscription = preferences.enabledLanguages().asObservable() subscriptions += preferences.enabledLanguages().asObservable()
.subscribe { languages -> .subscribe { languages ->
sourcesPref.removeAll() sourcesPref.removeAll()
val enabledSources = settingsActivity.sourceManager.getOnlineSources() val enabledSources = sourceManager.getOnlineSources()
.filter { it.lang.code in languages } .filter { it.lang.code in languages }
for (source in enabledSources.filterIsInstance(LoginSource::class.java)) { for (source in enabledSources.filterIsInstance(LoginSource::class.java)) {
@ -56,11 +65,6 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
} }
} }
override fun onDestroyView() {
languagesSubscription?.unsubscribe()
super.onDestroyView()
}
fun createLoginSourceEntry(source: Source): Preference { fun createLoginSourceEntry(source: Source): Preference {
return LoginPreference(preferenceManager.context).apply { return LoginPreference(preferenceManager.context).apply {
key = preferences.keys.sourceUsername(source.id) key = preferences.keys.sourceUsername(source.id)
@ -69,7 +73,7 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
setOnPreferenceClickListener { setOnPreferenceClickListener {
val fragment = SourceLoginDialog.newInstance(source) val fragment = SourceLoginDialog.newInstance(source)
fragment.setTargetFragment(this@SettingsSourcesFragment, SOURCE_CHANGE_REQUEST) fragment.setTargetFragment(this@SettingsSourcesFragment, SOURCE_CHANGE_REQUEST)
fragment.show(fragmentManagerCompat, null) fragment.show(childFragmentManager, null)
true true
} }

View File

@ -3,28 +3,38 @@ package eu.kanade.tachiyomi.ui.setting
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v7.preference.PreferenceCategory import android.support.v7.preference.PreferenceCategory
import android.support.v7.preference.XpPreferenceFragment
import android.view.View import android.view.View
import eu.kanade.tachiyomi.data.mangasync.MangaSyncManager
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.widget.preference.LoginPreference import eu.kanade.tachiyomi.widget.preference.LoginPreference
import eu.kanade.tachiyomi.widget.preference.MangaSyncLoginDialog import eu.kanade.tachiyomi.widget.preference.MangaSyncLoginDialog
import uy.kohesive.injekt.injectLazy
class SettingsSyncFragment : SettingsNestedFragment() { class SettingsSyncFragment : SettingsFragment() {
companion object { companion object {
const val SYNC_CHANGE_REQUEST = 121 const val SYNC_CHANGE_REQUEST = 121
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment { fun newInstance(rootKey: String): SettingsSyncFragment {
val fragment = SettingsSyncFragment() val args = Bundle()
fragment.setArgs(resourcePreference, resourceTitle) args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return fragment return SettingsSyncFragment().apply { arguments = args }
} }
} }
private val syncManager: MangaSyncManager by injectLazy()
private val preferences: PreferencesHelper by injectLazy()
val syncCategory by lazy { findPreference("pref_category_manga_sync_accounts") as PreferenceCategory } val syncCategory by lazy { findPreference("pref_category_manga_sync_accounts") as PreferenceCategory }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
val themedContext = preferenceManager.context val themedContext = preferenceManager.context
for (sync in settingsActivity.syncManager.services) { for (sync in syncManager.services) {
val pref = LoginPreference(themedContext).apply { val pref = LoginPreference(themedContext).apply {
key = preferences.keys.syncUsername(sync.id) key = preferences.keys.syncUsername(sync.id)
title = sync.name title = sync.name
@ -32,7 +42,7 @@ class SettingsSyncFragment : SettingsNestedFragment() {
setOnPreferenceClickListener { setOnPreferenceClickListener {
val fragment = MangaSyncLoginDialog.newInstance(sync) val fragment = MangaSyncLoginDialog.newInstance(sync)
fragment.setTargetFragment(this@SettingsSyncFragment, SYNC_CHANGE_REQUEST) fragment.setTargetFragment(this@SettingsSyncFragment, SYNC_CHANGE_REQUEST)
fragment.show(fragmentManagerCompat, null) fragment.show(childFragmentManager, null)
true true
} }
} }

View File

@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.util;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@ -16,7 +15,7 @@ public final class DiskUtils {
String cacheKey; String cacheKey;
try { try {
final MessageDigest mDigest = MessageDigest.getInstance("MD5"); final MessageDigest mDigest = MessageDigest.getInstance("MD5");
mDigest.update(key.getBytes(StandardCharsets.UTF_8)); mDigest.update(key.getBytes());
cacheKey = bytesToHexString(mDigest.digest()); cacheKey = bytesToHexString(mDigest.digest());
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
cacheKey = String.valueOf(key.hashCode()); cacheKey = String.valueOf(key.hashCode());

View File

@ -1,15 +1,15 @@
package eu.kanade.tachiyomi.widget.preference package eu.kanade.tachiyomi.widget.preference
import android.os.Bundle import android.os.Bundle
import android.support.v14.preference.PreferenceDialogFragment
import android.support.v7.preference.Preference import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceDialogFragmentCompat
import android.view.View import android.view.View
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.ui.setting.SettingsActivity
import kotlinx.android.synthetic.main.pref_library_columns.view.* import kotlinx.android.synthetic.main.pref_library_columns.view.*
import uy.kohesive.injekt.injectLazy
class LibraryColumnsDialog : PreferenceDialogFragment() { class LibraryColumnsDialog : PreferenceDialogFragmentCompat() {
companion object { companion object {
@ -25,8 +25,7 @@ class LibraryColumnsDialog : PreferenceDialogFragment() {
var portrait: Int = 0 var portrait: Int = 0
var landscape: Int = 0 var landscape: Int = 0
val preferences: PreferencesHelper val preferences: PreferencesHelper by injectLazy()
get() = (activity as SettingsActivity).preferences
override fun onBindDialogView(view: View) { override fun onBindDialogView(view: View) {
super.onBindDialogView(view) super.onBindDialogView(view)

View File

@ -1,28 +1,27 @@
package eu.kanade.tachiyomi.widget.preference package eu.kanade.tachiyomi.widget.preference
import android.app.Dialog import android.app.Dialog
import android.app.DialogFragment
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.text.method.PasswordTransformationMethod import android.text.method.PasswordTransformationMethod
import android.view.View import android.view.View
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.dd.processbutton.iml.ActionProcessButton import com.dd.processbutton.iml.ActionProcessButton
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.setting.SettingsActivity
import eu.kanade.tachiyomi.widget.SimpleTextWatcher import eu.kanade.tachiyomi.widget.SimpleTextWatcher
import kotlinx.android.synthetic.main.pref_account_login.view.* import kotlinx.android.synthetic.main.pref_account_login.view.*
import rx.Subscription import rx.Subscription
import uy.kohesive.injekt.injectLazy
abstract class LoginDialogPreference : DialogFragment() { abstract class LoginDialogPreference : DialogFragment() {
var v: View? = null var v: View? = null
private set private set
val preferences: PreferencesHelper val preferences: PreferencesHelper by injectLazy()
get() = (activity as SettingsActivity).preferences
var requestSubscription: Subscription? = null var requestSubscription: Subscription? = null

View File

@ -3,12 +3,13 @@ package eu.kanade.tachiyomi.widget.preference
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.mangasync.MangaSyncManager
import eu.kanade.tachiyomi.data.mangasync.MangaSyncService import eu.kanade.tachiyomi.data.mangasync.MangaSyncService
import eu.kanade.tachiyomi.ui.setting.SettingsActivity
import eu.kanade.tachiyomi.util.toast import eu.kanade.tachiyomi.util.toast
import kotlinx.android.synthetic.main.pref_account_login.view.* import kotlinx.android.synthetic.main.pref_account_login.view.*
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers import rx.schedulers.Schedulers
import uy.kohesive.injekt.injectLazy
class MangaSyncLoginDialog : LoginDialogPreference() { class MangaSyncLoginDialog : LoginDialogPreference() {
@ -23,13 +24,15 @@ class MangaSyncLoginDialog : LoginDialogPreference() {
} }
} }
val syncManager: MangaSyncManager by injectLazy()
lateinit var sync: MangaSyncService lateinit var sync: MangaSyncService
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val syncId = arguments.getInt("key") val syncId = arguments.getInt("key")
sync = (activity as SettingsActivity).syncManager.getService(syncId)!! sync = syncManager.getService(syncId)!!
} }
override fun setCredentialsOnView(view: View) = with(view) { override fun setCredentialsOnView(view: View) = with(view) {

View File

@ -4,12 +4,13 @@ import android.os.Bundle
import android.view.View import android.view.View
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.source.Source import eu.kanade.tachiyomi.data.source.Source
import eu.kanade.tachiyomi.data.source.SourceManager
import eu.kanade.tachiyomi.data.source.online.LoginSource import eu.kanade.tachiyomi.data.source.online.LoginSource
import eu.kanade.tachiyomi.ui.setting.SettingsActivity
import eu.kanade.tachiyomi.util.toast import eu.kanade.tachiyomi.util.toast
import kotlinx.android.synthetic.main.pref_account_login.view.* import kotlinx.android.synthetic.main.pref_account_login.view.*
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers import rx.schedulers.Schedulers
import uy.kohesive.injekt.injectLazy
class SourceLoginDialog : LoginDialogPreference() { class SourceLoginDialog : LoginDialogPreference() {
@ -24,13 +25,15 @@ class SourceLoginDialog : LoginDialogPreference() {
} }
} }
val sourceManager: SourceManager by injectLazy()
lateinit var source: LoginSource lateinit var source: LoginSource
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val sourceId = arguments.getInt("key") val sourceId = arguments.getInt("key")
source = (activity as SettingsActivity).sourceManager.get(sourceId) as LoginSource source = sourceManager.get(sourceId) as LoginSource
} }
override fun setCredentialsOnView(view: View) = with(view) { override fun setCredentialsOnView(view: View) = with(view) {

View File

@ -8,7 +8,6 @@
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@color/colorPrimaryDark</item> <item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<item name="android:alertDialogTheme">@style/Theme.AlertDialog.Light</item>
</style> </style>
<!--============--> <!--============-->
@ -19,6 +18,5 @@
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@color/colorPrimaryDark</item> <item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<item name="android:alertDialogTheme">@style/Theme.AlertDialog.Dark</item>
</style> </style>
</resources> </resources>

View File

@ -26,7 +26,9 @@
<!-- Themes --> <!-- Themes -->
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="actionBarTheme">@style/Theme.ActionBar.Light</item> <item name="actionBarTheme">@style/Theme.ActionBar.Light</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item> <item name="preferenceTheme">@style/PreferenceThemeOverlay.Material</item>
<item name="alertDialogTheme">@style/Theme.AlertDialog.Light</item>
<!-- Custom Attributes--> <!-- Custom Attributes-->
<item name="selectable_list_drawable">@drawable/list_item_selector_light</item> <item name="selectable_list_drawable">@drawable/list_item_selector_light</item>
@ -61,7 +63,9 @@
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item> <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item> <item name="preferenceTheme">@style/PreferenceThemeOverlay.Material</item>
<item name="alertDialogTheme">@style/Theme.AlertDialog.Dark</item>
<!-- Custom Attributes--> <!-- Custom Attributes-->
<item name="navigation_view_theme">@style/Theme.Widget.NavigationView.Dark</item> <item name="navigation_view_theme">@style/Theme.Widget.NavigationView.Dark</item>

View File

@ -1,28 +1,34 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreferenceCompat <PreferenceScreen
android:defaultValue="true" android:key="about_screen"
android:key="acra.enable" android:title="@string/pref_category_about"
android:summary="@string/pref_acra_summary" android:persistent="false">
android:title="@string/pref_enable_acra"/>
<!--<SwitchPreferenceCompat--> <SwitchPreference
<!--android:defaultValue="false"--> android:defaultValue="true"
<!--android:enabled="false"--> android:key="acra.enable"
<!--android:key="@string/pref_enable_automatic_updates_key"--> android:summary="@string/pref_acra_summary"
<!--android:summary="@string/pref_enable_automatic_updates_summary"--> android:title="@string/pref_enable_acra"/>
<!--android:title="@string/pref_enable_automatic_updates"/>-->
<Preference <!--<SwitchPreferenceCompat-->
android:key="@string/pref_version" <!--android:defaultValue="false"-->
android:persistent="false" <!--android:enabled="false"-->
android:title="@string/version"/> <!--android:key="@string/pref_enable_automatic_updates_key"-->
<!--android:summary="@string/pref_enable_automatic_updates_summary"-->
<!--android:title="@string/pref_enable_automatic_updates"/>-->
<Preference <Preference
android:key="@string/pref_build_time" android:key="@string/pref_version"
android:persistent="false" android:persistent="false"
android:title="@string/build_time"/> android:title="@string/version"/>
</android.support.v7.preference.PreferenceScreen> <Preference
android:key="@string/pref_build_time"
android:persistent="false"
android:title="@string/build_time"/>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,24 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<Preference <PreferenceScreen
android:key="@string/pref_clear_chapter_cache_key" android:key="advanced_screen"
android:title="@string/pref_clear_chapter_cache"/> android:persistent="false"
android:title="@string/pref_category_advanced">
<Preference <Preference
android:key="@string/pref_clear_cookies_key" android:key="@string/pref_clear_chapter_cache_key"
android:title="@string/pref_clear_cookies"/> android:title="@string/pref_clear_chapter_cache"/>
<Preference <Preference
android:key="@string/pref_clear_database_key" android:key="@string/pref_clear_cookies_key"
android:summary="@string/pref_clear_database_summary" android:title="@string/pref_clear_cookies"/>
android:title="@string/pref_clear_database"/>
<SwitchPreferenceCompat <Preference
android:defaultValue="false" android:key="@string/pref_clear_database_key"
android:key="@string/pref_reencode_key" android:summary="@string/pref_clear_database_summary"
android:summary="@string/pref_reencode_summary" android:title="@string/pref_clear_database"/>
android:title="@string/pref_reencode"/>
</android.support.v7.preference.PreferenceScreen> <SwitchPreference
android:defaultValue="false"
android:key="@string/pref_reencode_key"
android:summary="@string/pref_reencode_summary"
android:title="@string/pref_reencode"/>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,43 +1,50 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference <PreferenceScreen
android:key="@string/pref_download_directory_key" android:key="downloads_screen"
android:title="@string/pref_download_directory"/>
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="@string/pref_download_only_over_wifi_key"
android:title="@string/pref_download_only_over_wifi"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="1"
android:entries="@array/download_slots"
android:entryValues="@array/download_slots"
android:key="@string/pref_download_slots_key"
android:summary="%s"
android:title="@string/pref_download_slots"/>
<PreferenceCategory
android:persistent="false" android:persistent="false"
android:title="@string/cat_remove_after_read"/> android:title="@string/pref_category_downloads">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/pref_remove_after_marked_as_read_key"
android:title="@string/pref_remove_after_marked_as_read"/>
<SwitchPreferenceCompat <Preference
android:defaultValue="false" android:key="@string/pref_download_directory_key"
android:key="@string/pref_remove_after_read_key" android:title="@string/pref_download_directory"/>
android:summary="@string/current_chapter"
android:title="@string/pref_remove_after_read"/>
<SwitchPreferenceCompat <SwitchPreference
android:defaultValue="false" android:defaultValue="true"
android:dependency="@string/pref_remove_after_read_key" android:key="@string/pref_download_only_over_wifi_key"
android:key="@string/pref_remove_after_read_previous_key" android:title="@string/pref_download_only_over_wifi"/>
android:summary="@string/previous_chapter"
android:title="@string/pref_remove_after_read"/>
</android.support.v7.preference.PreferenceScreen> <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="1"
android:entries="@array/download_slots"
android:entryValues="@array/download_slots"
android:key="@string/pref_download_slots_key"
android:summary="%s"
android:title="@string/pref_download_slots"/>
<PreferenceCategory
android:persistent="false"
android:title="@string/cat_remove_after_read"/>
<SwitchPreference
android:defaultValue="false"
android:key="@string/pref_remove_after_marked_as_read_key"
android:title="@string/pref_remove_after_marked_as_read"/>
<SwitchPreference
android:defaultValue="false"
android:key="@string/pref_remove_after_read_key"
android:summary="@string/current_chapter"
android:title="@string/pref_remove_after_read"/>
<SwitchPreference
android:defaultValue="false"
android:dependency="@string/pref_remove_after_read_key"
android:key="@string/pref_remove_after_read_previous_key"
android:summary="@string/previous_chapter"
android:title="@string/pref_remove_after_read"/>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,39 +1,45 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android">
<eu.kanade.tachiyomi.widget.preference.IntListPreference <PreferenceScreen
android:defaultValue="1" android:key="general_screen"
android:entries="@array/themes"
android:entryValues="@array/themes_values"
android:key="@string/pref_theme_key"
android:summary="%s"
android:title="@string/pref_theme"/>
<eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference
android:dialogLayout="@layout/pref_library_columns"
android:key="@string/pref_library_columns_dialog_key"
android:persistent="false" android:persistent="false"
android:title="@string/pref_library_columns"/> android:title="@string/pref_category_general">
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="0" android:defaultValue="1"
android:entries="@array/library_update_interval" android:entries="@array/themes"
android:entryValues="@array/library_update_interval_values" android:entryValues="@array/themes_values"
android:key="@string/pref_library_update_interval_key" android:key="@string/pref_theme_key"
android:summary="%s" android:summary="%s"
android:title="@string/pref_library_update_interval"/> android:title="@string/pref_theme"/>
<MultiSelectListPreference <eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference
android:entries="@array/library_update_restrictions" android:dialogLayout="@layout/pref_library_columns"
android:entryValues="@array/library_update_restrictions_values" android:key="@string/pref_library_columns_dialog_key"
android:key="@string/pref_library_update_restriction_key" android:persistent="false"
android:summary="@string/pref_library_update_restriction_summary" android:title="@string/pref_library_columns"/>
android:title="@string/pref_library_update_restriction" />
<SwitchPreferenceCompat <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="false" android:defaultValue="0"
android:key="@string/pref_update_only_non_completed_key" android:entries="@array/library_update_interval"
android:title="@string/pref_update_only_non_completed"/> android:entryValues="@array/library_update_interval_values"
android:key="@string/pref_library_update_interval_key"
android:summary="%s"
android:title="@string/pref_library_update_interval"/>
</android.support.v7.preference.PreferenceScreen> <MultiSelectListPreference
android:entries="@array/library_update_restrictions"
android:entryValues="@array/library_update_restrictions_values"
android:key="@string/pref_library_update_restriction_key"
android:summary="@string/pref_library_update_restriction_summary"
android:title="@string/pref_library_update_restriction" />
<SwitchPreference
android:defaultValue="false"
android:key="@string/pref_update_only_non_completed_key"
android:title="@string/pref_update_only_non_completed"/>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:key="@string/pref_category_general_key"
android:persistent="false"
android:title="@string/pref_category_general" />
<Preference
android:key="@string/pref_category_reader_key"
android:persistent="false"
android:title="@string/pref_category_reader" />
<Preference
android:key="@string/pref_category_downloads_key"
android:persistent="false"
android:title="@string/pref_category_downloads" />
<Preference
android:key="@string/pref_category_sources_key"
android:persistent="false"
android:title="@string/pref_category_sources" />
<Preference
android:key="@string/pref_category_sync_key"
android:persistent="false"
android:title="@string/pref_category_sync" />
<Preference
android:key="@string/pref_category_advanced_key"
android:persistent="false"
android:title="@string/pref_category_advanced" />
<Preference
android:key="@string/pref_category_about_key"
android:persistent="false"
android:title="@string/pref_category_about" />
</android.support.v7.preference.PreferenceScreen>

View File

@ -1,93 +1,99 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android">
<eu.kanade.tachiyomi.widget.preference.IntListPreference <PreferenceScreen
android:title="@string/pref_viewer_type" android:key="reader_screen"
android:key="@string/pref_default_viewer_key" android:persistent="false"
android:entries="@array/viewers" android:title="@string/pref_category_reader">
android:entryValues="@array/viewers_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_scale_type" android:title="@string/pref_viewer_type"
android:key="@string/pref_image_scale_type_key" android:key="@string/pref_default_viewer_key"
android:entries="@array/image_scale_type" android:entries="@array/viewers"
android:entryValues="@array/image_scale_type_values" android:entryValues="@array/viewers_values"
android:defaultValue="1" android:defaultValue="1"
android:summary="%s"/> android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_zoom_start" android:title="@string/pref_image_scale_type"
android:key="@string/pref_zoom_start_key" android:key="@string/pref_image_scale_type_key"
android:entries="@array/zoom_start" android:entries="@array/image_scale_type"
android:entryValues="@array/zoom_start_values" android:entryValues="@array/image_scale_type_values"
android:defaultValue="1" android:defaultValue="1"
android:summary="%s"/> android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_rotation_type" android:title="@string/pref_zoom_start"
android:key="@string/pref_rotation_type_key" android:key="@string/pref_zoom_start_key"
android:entries="@array/rotation_type" android:entries="@array/zoom_start"
android:entryValues="@array/rotation_type_values" android:entryValues="@array/zoom_start_values"
android:defaultValue="1" android:defaultValue="1"
android:summary="%s"/> android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_reader_theme" android:title="@string/pref_rotation_type"
android:key="@string/pref_reader_theme_key" android:key="@string/pref_rotation_type_key"
android:entries="@array/reader_themes" android:entries="@array/rotation_type"
android:entryValues="@array/reader_themes_values" android:entryValues="@array/rotation_type_values"
android:defaultValue="0" android:defaultValue="1"
android:summary="%s"/> android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_decoder" android:title="@string/pref_reader_theme"
android:key="@string/pref_image_decoder_key" android:key="@string/pref_reader_theme_key"
android:entries="@array/image_decoders" android:entries="@array/reader_themes"
android:entryValues="@array/image_decoders_values" android:entryValues="@array/reader_themes_values"
android:defaultValue="0" android:defaultValue="0"
android:summary="%s" /> android:summary="%s"/>
<SwitchPreferenceCompat <eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_hide_status_bar" android:title="@string/pref_image_decoder"
android:key="@string/pref_hide_status_bar_key" android:key="@string/pref_image_decoder_key"
android:defaultValue="true" /> android:entries="@array/image_decoders"
android:entryValues="@array/image_decoders_values"
android:defaultValue="0"
android:summary="%s" />
<SwitchPreferenceCompat <SwitchPreference
android:title="@string/pref_enable_transitions" android:title="@string/pref_hide_status_bar"
android:key="@string/pref_enable_transitions_key" android:key="@string/pref_hide_status_bar_key"
android:defaultValue="true" />
<SwitchPreferenceCompat
android:title="@string/pref_show_page_number"
android:key="@string/pref_show_page_number_key"
android:defaultValue="true" />
<SwitchPreferenceCompat
android:title="@string/pref_custom_brightness"
android:key="@string/pref_custom_brightness_key"
android:defaultValue="false" />
<SwitchPreferenceCompat
android:title="@string/pref_keep_screen_on"
android:key="@string/pref_keep_screen_on_key"
android:defaultValue="true" />
<PreferenceCategory
android:title="@string/pref_reader_navigation">
<SwitchPreferenceCompat
android:title="@string/pref_read_with_tapping"
android:key="@string/pref_read_with_tapping_key"
android:defaultValue="true" /> android:defaultValue="true" />
<SwitchPreferenceCompat <SwitchPreference
android:title="@string/pref_read_with_volume_keys" android:title="@string/pref_enable_transitions"
android:key="@string/pref_read_with_volume_keys_key" android:key="@string/pref_enable_transitions_key"
android:defaultValue="true" />
<SwitchPreference
android:title="@string/pref_show_page_number"
android:key="@string/pref_show_page_number_key"
android:defaultValue="true" />
<SwitchPreference
android:title="@string/pref_custom_brightness"
android:key="@string/pref_custom_brightness_key"
android:defaultValue="false" /> android:defaultValue="false" />
</PreferenceCategory> <SwitchPreference
android:title="@string/pref_keep_screen_on"
android:key="@string/pref_keep_screen_on_key"
android:defaultValue="true" />
</android.support.v7.preference.PreferenceScreen> <PreferenceCategory
android:title="@string/pref_reader_navigation">
<SwitchPreference
android:title="@string/pref_read_with_tapping"
android:key="@string/pref_read_with_tapping_key"
android:defaultValue="true" />
<SwitchPreference
android:title="@string/pref_read_with_volume_keys"
android:key="@string/pref_read_with_volume_keys_key"
android:defaultValue="false" />
</PreferenceCategory>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,16 +1,21 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android"
android:orderingFromXml="true">
<MultiSelectListPreference <PreferenceScreen
android:key="@string/pref_source_languages" android:key="sources_screen"
android:title="@string/languages"
android:summary="@string/languages_summary"/>
<PreferenceCategory
android:key="pref_sources"
android:persistent="false" android:persistent="false"
android:title="@string/accounts"/> android:title="@string/pref_category_sources">
</android.support.v7.preference.PreferenceScreen> <MultiSelectListPreference
android:key="@string/pref_source_languages"
android:title="@string/languages"
android:summary="@string/languages_summary"/>
<PreferenceCategory
android:key="pref_sources"
android:persistent="false"
android:title="@string/accounts"/>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -1,22 +1,27 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android"
android:orderingFromXml="true">
<SwitchPreferenceCompat <PreferenceScreen
android:key="@string/pref_auto_update_manga_sync_key" android:key="sync_screen"
android:title="@string/pref_auto_update_manga_sync" android:persistent="false"
android:defaultValue="true"/> android:title="@string/pref_category_sync">
<SwitchPreferenceCompat <SwitchPreference
android:key="@string/pref_ask_update_manga_sync_key" android:key="@string/pref_auto_update_manga_sync_key"
android:title="@string/pref_ask_update_manga_sync" android:title="@string/pref_auto_update_manga_sync"
android:defaultValue="false" android:defaultValue="true"/>
android:dependency="@string/pref_auto_update_manga_sync_key"/>
<PreferenceCategory <SwitchPreference
android:key="pref_category_manga_sync_accounts" android:key="@string/pref_ask_update_manga_sync_key"
android:title="@string/services" android:title="@string/pref_ask_update_manga_sync"
android:persistent="false"/> android:defaultValue="false"
android:dependency="@string/pref_auto_update_manga_sync_key"/>
</android.support.v7.preference.PreferenceScreen> <PreferenceCategory
android:key="pref_category_manga_sync_accounts"
android:title="@string/services"
android:persistent="false"/>
</PreferenceScreen>
</PreferenceScreen>