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:recyclerview-v7:$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"
// ReactiveX
@ -162,6 +160,7 @@ dependencies {
compile 'com.nononsenseapps:filepicker:2.5.2'
compile 'com.github.amulyakhare:TextDrawable:558677e'
compile 'com.afollestad.material-dialogs:core:0.8.5.9'
compile 'net.xpece.android:support-preference:0.8.1'
// Tests
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)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
override fun onViewCreated(view: View, savedState: Bundle?) {
// Init RecyclerView and adapter
adapter = ChaptersAdapter(this)

View File

@ -64,9 +64,9 @@ class RecentChaptersFragment
/**
* Called when view is created
* @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
recycler.layoutManager = NpaLinearLayoutManager(activity)
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
*
* @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
recycler.layoutManager = NpaLinearLayoutManager(activity)
adapter = RecentlyReadAdapter(this)

View File

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

View File

@ -1,97 +1,63 @@
package eu.kanade.tachiyomi.ui.setting
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.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 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()
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()
private lateinit var replaceFragmentStrategy: ReplaceFragment
override fun onCreate(savedState: Bundle?) {
setAppTheme()
super.onCreate(savedState)
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) {
fragmentManager.beginTransaction()
.replace(R.id.settings_content, SettingsMainFragment())
.commit()
supportFragmentManager.beginTransaction()
.add(R.id.settings_content, SettingsFragment.newInstance(null), "Settings")
.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() {
if (!fragmentManager.popBackStackImmediate()) {
super.onBackPressed()
}
}
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
}
}
override fun onPreferenceStartScreen(p0: PreferenceFragmentCompat, p1: PreferenceScreen): Boolean {
replaceFragmentStrategy.onPreferenceStartScreen(supportFragmentManager, p0, p1)
return true
}
}

View File

@ -1,38 +1,46 @@
package eu.kanade.tachiyomi.ui.setting
import android.os.Bundle
import android.support.v7.preference.XpPreferenceFragment
import android.view.View
import com.afollestad.materialdialogs.MaterialDialog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache
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 rx.Observable
import rx.Subscription
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import uy.kohesive.injekt.injectLazy
import java.util.concurrent.atomic.AtomicInteger
class SettingsAdvancedFragment : SettingsNestedFragment() {
class SettingsAdvancedFragment : SettingsFragment() {
companion object {
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment {
val fragment = SettingsAdvancedFragment()
fragment.setArgs(resourcePreference, resourceTitle)
return fragment
fun newInstance(rootKey: String): SettingsAdvancedFragment {
val args = Bundle()
args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return SettingsAdvancedFragment().apply { arguments = args }
}
}
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 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 var clearCacheSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
clearCache.setOnPreferenceClickListener {
clearChapterCache()
true
@ -40,7 +48,7 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
clearCache.summary = getString(R.string.used_cache, chapterCache.readableSize)
clearCookies.setOnPreferenceClickListener {
settingsActivity.networkHelper.cookies.removeAll()
network.cookies.removeAll()
activity.toast(R.string.cookies_cleared)
true
}
@ -51,11 +59,6 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
}
}
override fun onDestroyView() {
clearCacheSubscription?.unsubscribe()
super.onDestroyView()
}
private fun clearChapterCache() {
val deletedFiles = AtomicInteger()
@ -67,9 +70,7 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
.cancelable(false)
.show()
clearCacheSubscription?.unsubscribe()
clearCacheSubscription = Observable.defer { Observable.from(files) }
subscriptions += Observable.defer { Observable.from(files) }
.concatMap { file ->
if (chapterCache.removeFileFromCache(file.name)) {
deletedFiles.incrementAndGet()
@ -102,10 +103,4 @@ class SettingsAdvancedFragment : SettingsNestedFragment() {
.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.Environment
import android.support.v4.content.ContextCompat
import android.support.v7.preference.XpPreferenceFragment
import android.support.v7.widget.RecyclerView
import android.view.View
import android.view.ViewGroup
@ -14,29 +15,32 @@ 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.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.util.inflate
import rx.Subscription
import eu.kanade.tachiyomi.util.plusAssign
import uy.kohesive.injekt.injectLazy
import java.io.File
class SettingsDownloadsFragment : SettingsNestedFragment() {
class SettingsDownloadsFragment : SettingsFragment() {
companion object {
val DOWNLOAD_DIR_CODE = 103
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment {
val fragment = SettingsDownloadsFragment()
fragment.setArgs(resourcePreference, resourceTitle)
return fragment
fun newInstance(rootKey: String): SettingsDownloadsFragment {
val args = Bundle()
args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return SettingsDownloadsFragment().apply { arguments = args }
}
}
private val preferences: PreferencesHelper by injectLazy()
val downloadDirPref by lazy { findPreference(getString(R.string.pref_download_directory_key)) }
var downloadDirSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
downloadDirPref.setOnPreferenceClickListener {
val currentDir = preferences.downloadsDirectory().getOrDefault()
@ -66,15 +70,10 @@ class SettingsDownloadsFragment : SettingsNestedFragment() {
true
}
downloadDirSubscription = preferences.downloadsDirectory().asObservable()
subscriptions += preferences.downloadsDirectory().asObservable()
.subscribe { downloadDirPref.summary = it }
}
override fun onDestroyView() {
downloadDirSubscription?.unsubscribe()
super.onDestroyView()
}
fun getExternalFilesDirs(): List<File> {
val defaultDir = Environment.getExternalStorageDirectory().absolutePath +
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.os.Bundle
import android.support.v14.preference.MultiSelectListPreference
import android.support.v4.app.TaskStackBuilder
import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceFragmentCompat
import android.support.v7.preference.XpPreferenceFragment
import android.view.View
import eu.kanade.tachiyomi.R
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.LibraryColumnsDialog
import eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference
import net.xpece.android.support.preference.MultiSelectListPreference
import rx.Observable
import rx.Subscription
import uy.kohesive.injekt.injectLazy
class SettingsGeneralFragment : SettingsFragment(),
PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
class SettingsGeneralFragment : SettingsNestedFragment() {
companion object {
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsGeneralFragment {
val fragment = SettingsGeneralFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
fun newInstance(rootKey: String): SettingsGeneralFragment {
val args = Bundle()
args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
return SettingsGeneralFragment().apply { arguments = args }
}
}
private val preferences: PreferencesHelper by injectLazy()
val columnsPreference by lazy {
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
}
var updateIntervalSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
var columnsSubscription: Subscription? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
updateIntervalSubscription = preferences.libraryUpdateInterval().asObservable()
subscriptions += preferences.libraryUpdateInterval().asObservable()
.subscribe { updateRestriction.isVisible = it > 0 }
columnsSubscription = Observable.combineLatest(
subscriptions += Observable.combineLatest(
preferences.portraitColumns().asObservable(),
preferences.landscapeColumns().asObservable())
{ portraitColumns, landscapeColumns -> Pair(portraitColumns, landscapeColumns) }
@ -62,29 +68,21 @@ class SettingsGeneralFragment : SettingsNestedFragment() {
themePreference.setOnPreferenceChangeListener { preference, newValue ->
// Rebuild activity's to apply themes.
TaskStackBuilder.create(activity)
.addNextIntent(Intent(activity, MainActivity::class.java))
.addNextIntent(activity.intent)
TaskStackBuilder.create(context)
.addNextIntentWithParentStack(Intent(activity.intent))
.startActivities()
true
}
}
override fun onDestroyView() {
updateIntervalSubscription?.unsubscribe()
columnsSubscription?.unsubscribe()
super.onDestroyView()
}
override fun onDisplayPreferenceDialog(preference: Preference) {
if (preference === columnsPreference) {
val fragment = LibraryColumnsDialog.newInstance(preference)
override fun onPreferenceDisplayDialog(p0: PreferenceFragmentCompat?, p: Preference): Boolean {
if (p.key == getString(R.string.pref_library_columns_dialog_key)) {
val fragment = LibraryColumnsDialog.newInstance(p)
fragment.setTargetFragment(this, 0)
fragment.show(fragmentManagerCompat, null)
} else {
super.onDisplayPreferenceDialog(preference)
fragment.show(childFragmentManager, null)
return true
}
return false
}
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.os.Bundle
import android.support.v14.preference.MultiSelectListPreference
import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceGroup
import android.support.v7.preference.XpPreferenceFragment
import android.view.View
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
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.online.LoginSource
import eu.kanade.tachiyomi.util.plusAssign
import eu.kanade.tachiyomi.widget.preference.LoginPreference
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 {
const val SOURCE_CHANGE_REQUEST = 120
fun newInstance(resourcePreference: Int, resourceTitle: Int): SettingsNestedFragment {
val fragment = SettingsSourcesFragment()
fragment.setArgs(resourcePreference, resourceTitle)
return fragment
fun newInstance(rootKey: String?): SettingsSourcesFragment {
val args = Bundle()
args.putString(XpPreferenceFragment.ARG_PREFERENCE_ROOT, rootKey)
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 sourcesPref by lazy { findPreference("pref_sources") as PreferenceGroup }
var languagesSubscription: Subscription? = null
override fun onViewCreated(view: View, savedState: Bundle?) {
super.onViewCreated(view, savedState)
val langs = getLanguages()
val entryKeys = langs.map { it.code }
@ -39,11 +48,11 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
languagesPref.entryValues = entryKeys.toTypedArray()
languagesPref.values = preferences.enabledLanguages().getOrDefault()
languagesSubscription = preferences.enabledLanguages().asObservable()
subscriptions += preferences.enabledLanguages().asObservable()
.subscribe { languages ->
sourcesPref.removeAll()
val enabledSources = settingsActivity.sourceManager.getOnlineSources()
val enabledSources = sourceManager.getOnlineSources()
.filter { it.lang.code in languages }
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 {
return LoginPreference(preferenceManager.context).apply {
key = preferences.keys.sourceUsername(source.id)
@ -69,7 +73,7 @@ class SettingsSourcesFragment : SettingsNestedFragment() {
setOnPreferenceClickListener {
val fragment = SourceLoginDialog.newInstance(source)
fragment.setTargetFragment(this@SettingsSourcesFragment, SOURCE_CHANGE_REQUEST)
fragment.show(fragmentManagerCompat, null)
fragment.show(childFragmentManager, null)
true
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,12 +4,13 @@ import android.os.Bundle
import android.view.View
import eu.kanade.tachiyomi.R
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.ui.setting.SettingsActivity
import eu.kanade.tachiyomi.util.toast
import kotlinx.android.synthetic.main.pref_account_login.view.*
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import uy.kohesive.injekt.injectLazy
class SourceLoginDialog : LoginDialogPreference() {
@ -24,13 +25,15 @@ class SourceLoginDialog : LoginDialogPreference() {
}
}
val sourceManager: SourceManager by injectLazy()
lateinit var source: LoginSource
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
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) {

View File

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

View File

@ -26,7 +26,9 @@
<!-- Themes -->
<item name="windowActionModeOverlay">true</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-->
<item name="selectable_list_drawable">@drawable/list_item_selector_light</item>
@ -61,7 +63,9 @@
<item name="windowActionModeOverlay">true</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</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-->
<item name="navigation_view_theme">@style/Theme.Widget.NavigationView.Dark</item>

View File

@ -1,28 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="acra.enable"
android:summary="@string/pref_acra_summary"
android:title="@string/pref_enable_acra"/>
<PreferenceScreen
android:key="about_screen"
android:title="@string/pref_category_about"
android:persistent="false">
<!--<SwitchPreferenceCompat-->
<!--android:defaultValue="false"-->
<!--android:enabled="false"-->
<!--android:key="@string/pref_enable_automatic_updates_key"-->
<!--android:summary="@string/pref_enable_automatic_updates_summary"-->
<!--android:title="@string/pref_enable_automatic_updates"/>-->
<SwitchPreference
android:defaultValue="true"
android:key="acra.enable"
android:summary="@string/pref_acra_summary"
android:title="@string/pref_enable_acra"/>
<Preference
android:key="@string/pref_version"
android:persistent="false"
android:title="@string/version"/>
<!--<SwitchPreferenceCompat-->
<!--android:defaultValue="false"-->
<!--android:enabled="false"-->
<!--android:key="@string/pref_enable_automatic_updates_key"-->
<!--android:summary="@string/pref_enable_automatic_updates_summary"-->
<!--android:title="@string/pref_enable_automatic_updates"/>-->
<Preference
android:key="@string/pref_build_time"
android:persistent="false"
android:title="@string/build_time"/>
<Preference
android:key="@string/pref_version"
android:persistent="false"
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"?>
<android.support.v7.preference.PreferenceScreen
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="@string/pref_clear_chapter_cache_key"
android:title="@string/pref_clear_chapter_cache"/>
<PreferenceScreen
android:key="advanced_screen"
android:persistent="false"
android:title="@string/pref_category_advanced">
<Preference
android:key="@string/pref_clear_cookies_key"
android:title="@string/pref_clear_cookies"/>
<Preference
android:key="@string/pref_clear_chapter_cache_key"
android:title="@string/pref_clear_chapter_cache"/>
<Preference
android:key="@string/pref_clear_database_key"
android:summary="@string/pref_clear_database_summary"
android:title="@string/pref_clear_database"/>
<Preference
android:key="@string/pref_clear_cookies_key"
android:title="@string/pref_clear_cookies"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/pref_reencode_key"
android:summary="@string/pref_reencode_summary"
android:title="@string/pref_reencode"/>
<Preference
android:key="@string/pref_clear_database_key"
android:summary="@string/pref_clear_database_summary"
android:title="@string/pref_clear_database"/>
</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"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="@string/pref_download_directory_key"
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
<PreferenceScreen
android:key="downloads_screen"
android:persistent="false"
android:title="@string/cat_remove_after_read"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/pref_remove_after_marked_as_read_key"
android:title="@string/pref_remove_after_marked_as_read"/>
android:title="@string/pref_category_downloads">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/pref_remove_after_read_key"
android:summary="@string/current_chapter"
android:title="@string/pref_remove_after_read"/>
<Preference
android:key="@string/pref_download_directory_key"
android:title="@string/pref_download_directory"/>
<SwitchPreferenceCompat
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"/>
<SwitchPreference
android:defaultValue="true"
android:key="@string/pref_download_only_over_wifi_key"
android:title="@string/pref_download_only_over_wifi"/>
</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"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="1"
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"
<PreferenceScreen
android:key="general_screen"
android:persistent="false"
android:title="@string/pref_library_columns"/>
android:title="@string/pref_category_general">
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="0"
android:entries="@array/library_update_interval"
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"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="1"
android:entries="@array/themes"
android:entryValues="@array/themes_values"
android:key="@string/pref_theme_key"
android:summary="%s"
android:title="@string/pref_theme"/>
<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" />
<eu.kanade.tachiyomi.widget.preference.SimpleDialogPreference
android:dialogLayout="@layout/pref_library_columns"
android:key="@string/pref_library_columns_dialog_key"
android:persistent="false"
android:title="@string/pref_library_columns"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/pref_update_only_non_completed_key"
android:title="@string/pref_update_only_non_completed"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:defaultValue="0"
android:entries="@array/library_update_interval"
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"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_viewer_type"
android:key="@string/pref_default_viewer_key"
android:entries="@array/viewers"
android:entryValues="@array/viewers_values"
android:defaultValue="1"
android:summary="%s"/>
<PreferenceScreen
android:key="reader_screen"
android:persistent="false"
android:title="@string/pref_category_reader">
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_scale_type"
android:key="@string/pref_image_scale_type_key"
android:entries="@array/image_scale_type"
android:entryValues="@array/image_scale_type_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_viewer_type"
android:key="@string/pref_default_viewer_key"
android:entries="@array/viewers"
android:entryValues="@array/viewers_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_zoom_start"
android:key="@string/pref_zoom_start_key"
android:entries="@array/zoom_start"
android:entryValues="@array/zoom_start_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_scale_type"
android:key="@string/pref_image_scale_type_key"
android:entries="@array/image_scale_type"
android:entryValues="@array/image_scale_type_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_rotation_type"
android:key="@string/pref_rotation_type_key"
android:entries="@array/rotation_type"
android:entryValues="@array/rotation_type_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_zoom_start"
android:key="@string/pref_zoom_start_key"
android:entries="@array/zoom_start"
android:entryValues="@array/zoom_start_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_reader_theme"
android:key="@string/pref_reader_theme_key"
android:entries="@array/reader_themes"
android:entryValues="@array/reader_themes_values"
android:defaultValue="0"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_rotation_type"
android:key="@string/pref_rotation_type_key"
android:entries="@array/rotation_type"
android:entryValues="@array/rotation_type_values"
android:defaultValue="1"
android:summary="%s"/>
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_decoder"
android:key="@string/pref_image_decoder_key"
android:entries="@array/image_decoders"
android:entryValues="@array/image_decoders_values"
android:defaultValue="0"
android:summary="%s" />
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_reader_theme"
android:key="@string/pref_reader_theme_key"
android:entries="@array/reader_themes"
android:entryValues="@array/reader_themes_values"
android:defaultValue="0"
android:summary="%s"/>
<SwitchPreferenceCompat
android:title="@string/pref_hide_status_bar"
android:key="@string/pref_hide_status_bar_key"
android:defaultValue="true" />
<eu.kanade.tachiyomi.widget.preference.IntListPreference
android:title="@string/pref_image_decoder"
android:key="@string/pref_image_decoder_key"
android:entries="@array/image_decoders"
android:entryValues="@array/image_decoders_values"
android:defaultValue="0"
android:summary="%s" />
<SwitchPreferenceCompat
android:title="@string/pref_enable_transitions"
android:key="@string/pref_enable_transitions_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"
<SwitchPreference
android:title="@string/pref_hide_status_bar"
android:key="@string/pref_hide_status_bar_key"
android:defaultValue="true" />
<SwitchPreferenceCompat
android:title="@string/pref_read_with_volume_keys"
android:key="@string/pref_read_with_volume_keys_key"
<SwitchPreference
android:title="@string/pref_enable_transitions"
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" />
</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"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:orderingFromXml="true">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<MultiSelectListPreference
android:key="@string/pref_source_languages"
android:title="@string/languages"
android:summary="@string/languages_summary"/>
<PreferenceCategory
android:key="pref_sources"
<PreferenceScreen
android:key="sources_screen"
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"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:orderingFromXml="true">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreferenceCompat
android:key="@string/pref_auto_update_manga_sync_key"
android:title="@string/pref_auto_update_manga_sync"
android:defaultValue="true"/>
<PreferenceScreen
android:key="sync_screen"
android:persistent="false"
android:title="@string/pref_category_sync">
<SwitchPreferenceCompat
android:key="@string/pref_ask_update_manga_sync_key"
android:title="@string/pref_ask_update_manga_sync"
android:defaultValue="false"
android:dependency="@string/pref_auto_update_manga_sync_key"/>
<SwitchPreference
android:key="@string/pref_auto_update_manga_sync_key"
android:title="@string/pref_auto_update_manga_sync"
android:defaultValue="true"/>
<PreferenceCategory
android:key="pref_category_manga_sync_accounts"
android:title="@string/services"
android:persistent="false"/>
<SwitchPreference
android:key="@string/pref_ask_update_manga_sync_key"
android:title="@string/pref_ask_update_manga_sync"
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>