Linting fixes
This commit is contained in:
@@ -117,39 +117,39 @@ class SettingsAdvancedController : SettingsController() {
|
||||
var deletedFiles = 0
|
||||
|
||||
Observable.defer { Observable.from(files) }
|
||||
.doOnNext { file ->
|
||||
if (chapterCache.removeFileFromCache(file.name)) {
|
||||
deletedFiles++
|
||||
}
|
||||
.doOnNext { file ->
|
||||
if (chapterCache.removeFileFromCache(file.name)) {
|
||||
deletedFiles++
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnError {
|
||||
activity?.toast(R.string.cache_delete_error)
|
||||
}
|
||||
.doOnCompleted {
|
||||
activity?.toast(resources?.getString(R.string.cache_deleted, deletedFiles))
|
||||
findPreference(CLEAR_CACHE_KEY)?.summary =
|
||||
resources?.getString(R.string.used_cache, chapterCache.readableSize)
|
||||
}
|
||||
.subscribe()
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnError {
|
||||
activity?.toast(R.string.cache_delete_error)
|
||||
}
|
||||
.doOnCompleted {
|
||||
activity?.toast(resources?.getString(R.string.cache_deleted, deletedFiles))
|
||||
findPreference(CLEAR_CACHE_KEY)?.summary =
|
||||
resources?.getString(R.string.used_cache, chapterCache.readableSize)
|
||||
}
|
||||
.subscribe()
|
||||
}
|
||||
|
||||
class ClearDatabaseDialogController : DialogController() {
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.message(R.string.clear_database_confirmation)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
(targetController as? SettingsAdvancedController)?.clearDatabase()
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.message(R.string.clear_database_confirmation)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
(targetController as? SettingsAdvancedController)?.clearDatabase()
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearDatabase() {
|
||||
// Avoid weird behavior by going back to the library.
|
||||
val newBackstack = listOf(RouterTransaction.with(LibraryController())) +
|
||||
router.backstack.drop(1)
|
||||
router.backstack.drop(1)
|
||||
|
||||
router.setBackstack(newBackstack, FadeChangeHandler())
|
||||
|
||||
|
||||
@@ -106,9 +106,11 @@ class SettingsBackupController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.backupInterval
|
||||
titleRes = R.string.pref_backup_interval
|
||||
entriesRes = arrayOf(R.string.update_never, R.string.update_6hour,
|
||||
R.string.update_12hour, R.string.update_24hour,
|
||||
R.string.update_48hour, R.string.update_weekly)
|
||||
entriesRes = arrayOf(
|
||||
R.string.update_never, R.string.update_6hour,
|
||||
R.string.update_12hour, R.string.update_24hour,
|
||||
R.string.update_48hour, R.string.update_weekly
|
||||
)
|
||||
entryValues = arrayOf("0", "6", "12", "24", "48", "168")
|
||||
defaultValue = "0"
|
||||
summary = "%s"
|
||||
@@ -168,7 +170,7 @@ class SettingsBackupController : SettingsController() {
|
||||
|
||||
// Get UriPermission so it's possible to write files
|
||||
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
|
||||
if (uri != null) {
|
||||
activity.contentResolver.takePersistableUriPermission(uri, flags)
|
||||
@@ -182,7 +184,7 @@ class SettingsBackupController : SettingsController() {
|
||||
|
||||
val uri = data.data
|
||||
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
|
||||
if (uri != null) {
|
||||
activity.contentResolver.takePersistableUriPermission(uri, flags)
|
||||
@@ -215,9 +217,9 @@ class SettingsBackupController : SettingsController() {
|
||||
try {
|
||||
// Use Android's built-in file creator
|
||||
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/*")
|
||||
.putExtra(Intent.EXTRA_TITLE, Backup.getDefaultFilename())
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/*")
|
||||
.putExtra(Intent.EXTRA_TITLE, Backup.getDefaultFilename())
|
||||
|
||||
startActivityForResult(intent, CODE_BACKUP_CREATE)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
@@ -229,51 +231,55 @@ class SettingsBackupController : SettingsController() {
|
||||
class CreateBackupDialog : DialogController() {
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
val activity = activity!!
|
||||
val options = arrayOf(R.string.manga, R.string.categories, R.string.chapters,
|
||||
R.string.track, R.string.history)
|
||||
.map { activity.getString(it) }
|
||||
val options = arrayOf(
|
||||
R.string.manga, R.string.categories, R.string.chapters,
|
||||
R.string.track, R.string.history
|
||||
)
|
||||
.map { activity.getString(it) }
|
||||
|
||||
return MaterialDialog(activity)
|
||||
.title(R.string.pref_create_backup)
|
||||
.message(R.string.backup_choice)
|
||||
.listItemsMultiChoice(
|
||||
items = options,
|
||||
disabledIndices = intArrayOf(0),
|
||||
initialSelection = intArrayOf(0, 1, 2, 3, 4)
|
||||
) { _, positions, _ ->
|
||||
var flags = 0
|
||||
for (i in 1 until positions.size) {
|
||||
when (positions[i]) {
|
||||
1 -> flags = flags or BackupCreateService.BACKUP_CATEGORY
|
||||
2 -> flags = flags or BackupCreateService.BACKUP_CHAPTER
|
||||
3 -> flags = flags or BackupCreateService.BACKUP_TRACK
|
||||
4 -> flags = flags or BackupCreateService.BACKUP_HISTORY
|
||||
}
|
||||
.title(R.string.pref_create_backup)
|
||||
.message(R.string.backup_choice)
|
||||
.listItemsMultiChoice(
|
||||
items = options,
|
||||
disabledIndices = intArrayOf(0),
|
||||
initialSelection = intArrayOf(0, 1, 2, 3, 4)
|
||||
) { _, positions, _ ->
|
||||
var flags = 0
|
||||
for (i in 1 until positions.size) {
|
||||
when (positions[i]) {
|
||||
1 -> flags = flags or BackupCreateService.BACKUP_CATEGORY
|
||||
2 -> flags = flags or BackupCreateService.BACKUP_CHAPTER
|
||||
3 -> flags = flags or BackupCreateService.BACKUP_TRACK
|
||||
4 -> flags = flags or BackupCreateService.BACKUP_HISTORY
|
||||
}
|
||||
|
||||
(targetController as? SettingsBackupController)?.createBackup(flags)
|
||||
}
|
||||
.positiveButton(R.string.action_create)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
|
||||
(targetController as? SettingsBackupController)?.createBackup(flags)
|
||||
}
|
||||
.positiveButton(R.string.action_create)
|
||||
.negativeButton(android.R.string.cancel)
|
||||
}
|
||||
}
|
||||
|
||||
class RestoreBackupDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
constructor(uri: Uri) : this(Bundle().apply {
|
||||
putParcelable(KEY_URI, uri)
|
||||
})
|
||||
constructor(uri: Uri) : this(
|
||||
Bundle().apply {
|
||||
putParcelable(KEY_URI, uri)
|
||||
}
|
||||
)
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(R.string.pref_restore_backup)
|
||||
.message(R.string.backup_restore_content)
|
||||
.positiveButton(R.string.action_restore) {
|
||||
val context = applicationContext
|
||||
if (context != null) {
|
||||
BackupRestoreService.start(context, args.getParcelable(KEY_URI)!!)
|
||||
isRestoreStarted = true
|
||||
}
|
||||
.title(R.string.pref_restore_backup)
|
||||
.message(R.string.backup_restore_content)
|
||||
.positiveButton(R.string.action_restore) {
|
||||
val context = applicationContext
|
||||
if (context != null) {
|
||||
BackupRestoreService.start(context, args.getParcelable(KEY_URI)!!)
|
||||
isRestoreStarted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
@@ -74,9 +74,11 @@ class SettingsDownloadController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.removeAfterReadSlots
|
||||
titleRes = R.string.pref_remove_after_read
|
||||
entriesRes = arrayOf(R.string.disabled, R.string.last_read_chapter,
|
||||
R.string.second_to_last, R.string.third_to_last, R.string.fourth_to_last,
|
||||
R.string.fifth_to_last)
|
||||
entriesRes = arrayOf(
|
||||
R.string.disabled, R.string.last_read_chapter,
|
||||
R.string.second_to_last, R.string.third_to_last, R.string.fourth_to_last,
|
||||
R.string.fifth_to_last
|
||||
)
|
||||
entryValues = arrayOf("-1", "0", "1", "2", "3", "4")
|
||||
defaultValue = "-1"
|
||||
summary = "%s"
|
||||
@@ -107,13 +109,14 @@ class SettingsDownloadController : SettingsController() {
|
||||
preferences.downloadNewCategories().asFlow()
|
||||
.onEach { mutableSet ->
|
||||
val selectedCategories = mutableSet
|
||||
.mapNotNull { id -> categories.find { it.id == id.toInt() } }
|
||||
.sortedBy { it.order }
|
||||
.mapNotNull { id -> categories.find { it.id == id.toInt() } }
|
||||
.sortedBy { it.order }
|
||||
|
||||
summary = if (selectedCategories.isEmpty())
|
||||
summary = if (selectedCategories.isEmpty()) {
|
||||
resources?.getString(R.string.all)
|
||||
else
|
||||
} else {
|
||||
selectedCategories.joinToString { it.name }
|
||||
}
|
||||
}
|
||||
.launchIn(scope)
|
||||
}
|
||||
@@ -126,7 +129,7 @@ class SettingsDownloadController : SettingsController() {
|
||||
val context = applicationContext ?: return
|
||||
val uri = data.data
|
||||
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
|
||||
if (uri != null) {
|
||||
@Suppress("NewApi")
|
||||
@@ -164,26 +167,26 @@ class SettingsDownloadController : SettingsController() {
|
||||
val selectedIndex = externalDirs.indexOfFirst { it in currentDir }
|
||||
|
||||
return MaterialDialog(activity)
|
||||
.listItemsSingleChoice(
|
||||
items = externalDirs,
|
||||
initialSelection = selectedIndex
|
||||
) { _, position, text ->
|
||||
val target = targetController as? SettingsDownloadController
|
||||
if (position == externalDirs.lastIndex) {
|
||||
target?.customDirectorySelected(currentDir)
|
||||
} else {
|
||||
target?.predefinedDirectorySelected(text.toString())
|
||||
}
|
||||
.listItemsSingleChoice(
|
||||
items = externalDirs,
|
||||
initialSelection = selectedIndex
|
||||
) { _, position, text ->
|
||||
val target = targetController as? SettingsDownloadController
|
||||
if (position == externalDirs.lastIndex) {
|
||||
target?.customDirectorySelected(currentDir)
|
||||
} else {
|
||||
target?.predefinedDirectorySelected(text.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getExternalDirs(): List<File> {
|
||||
val defaultDir = Environment.getExternalStorageDirectory().absolutePath +
|
||||
File.separator + resources?.getString(R.string.app_name) +
|
||||
File.separator + "downloads"
|
||||
File.separator + resources?.getString(R.string.app_name) +
|
||||
File.separator + "downloads"
|
||||
|
||||
return mutableListOf(File(defaultDir)) +
|
||||
ContextCompat.getExternalFilesDirs(activity!!, "").filterNotNull()
|
||||
ContextCompat.getExternalFilesDirs(activity!!, "").filterNotNull()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,9 +30,10 @@ class SettingsGeneralController : SettingsController() {
|
||||
key = Keys.startScreen
|
||||
titleRes = R.string.pref_start_screen
|
||||
entriesRes = arrayOf(
|
||||
R.string.label_library,
|
||||
R.string.label_recent_updates,
|
||||
R.string.label_recent_manga)
|
||||
R.string.label_library,
|
||||
R.string.label_recent_updates,
|
||||
R.string.label_recent_manga
|
||||
)
|
||||
entryValues = arrayOf("1", "3", "2")
|
||||
defaultValue = "1"
|
||||
summary = "%s"
|
||||
@@ -107,21 +108,25 @@ class SettingsGeneralController : SettingsController() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
entriesRes = arrayOf(
|
||||
R.string.theme_system,
|
||||
R.string.theme_light,
|
||||
R.string.theme_dark)
|
||||
R.string.theme_system,
|
||||
R.string.theme_light,
|
||||
R.string.theme_dark
|
||||
)
|
||||
entryValues = arrayOf(
|
||||
Values.THEME_MODE_SYSTEM,
|
||||
Values.THEME_MODE_LIGHT,
|
||||
Values.THEME_MODE_DARK)
|
||||
Values.THEME_MODE_SYSTEM,
|
||||
Values.THEME_MODE_LIGHT,
|
||||
Values.THEME_MODE_DARK
|
||||
)
|
||||
defaultValue = Values.THEME_MODE_SYSTEM
|
||||
} else {
|
||||
entriesRes = arrayOf(
|
||||
R.string.theme_light,
|
||||
R.string.theme_dark)
|
||||
R.string.theme_light,
|
||||
R.string.theme_dark
|
||||
)
|
||||
entryValues = arrayOf(
|
||||
Values.THEME_MODE_LIGHT,
|
||||
Values.THEME_MODE_DARK)
|
||||
Values.THEME_MODE_LIGHT,
|
||||
Values.THEME_MODE_DARK
|
||||
)
|
||||
defaultValue = Values.THEME_MODE_LIGHT
|
||||
}
|
||||
|
||||
@@ -136,11 +141,13 @@ class SettingsGeneralController : SettingsController() {
|
||||
key = Keys.themeLight
|
||||
titleRes = R.string.pref_theme_light
|
||||
entriesRes = arrayOf(
|
||||
R.string.theme_light_default,
|
||||
R.string.theme_light_blue)
|
||||
R.string.theme_light_default,
|
||||
R.string.theme_light_blue
|
||||
)
|
||||
entryValues = arrayOf(
|
||||
Values.THEME_LIGHT_DEFAULT,
|
||||
Values.THEME_LIGHT_BLUE)
|
||||
Values.THEME_LIGHT_DEFAULT,
|
||||
Values.THEME_LIGHT_BLUE
|
||||
)
|
||||
defaultValue = Values.THEME_LIGHT_DEFAULT
|
||||
summary = "%s"
|
||||
|
||||
@@ -160,13 +167,15 @@ class SettingsGeneralController : SettingsController() {
|
||||
key = Keys.themeDark
|
||||
titleRes = R.string.pref_theme_dark
|
||||
entriesRes = arrayOf(
|
||||
R.string.theme_dark_default,
|
||||
R.string.theme_dark_blue,
|
||||
R.string.theme_dark_amoled)
|
||||
R.string.theme_dark_default,
|
||||
R.string.theme_dark_blue,
|
||||
R.string.theme_dark_amoled
|
||||
)
|
||||
entryValues = arrayOf(
|
||||
Values.THEME_DARK_DEFAULT,
|
||||
Values.THEME_DARK_BLUE,
|
||||
Values.THEME_DARK_AMOLED)
|
||||
Values.THEME_DARK_DEFAULT,
|
||||
Values.THEME_DARK_BLUE,
|
||||
Values.THEME_DARK_AMOLED
|
||||
)
|
||||
defaultValue = Values.THEME_DARK_DEFAULT
|
||||
summary = "%s"
|
||||
|
||||
|
||||
@@ -53,22 +53,23 @@ class SettingsLibraryController : SettingsController() {
|
||||
}
|
||||
|
||||
fun getColumnValue(value: Int): String {
|
||||
return if (value == 0)
|
||||
return if (value == 0) {
|
||||
context.getString(R.string.default_columns)
|
||||
else
|
||||
} else {
|
||||
value.toString()
|
||||
}
|
||||
}
|
||||
|
||||
Observable.combineLatest(
|
||||
preferences.portraitColumns().asObservable(),
|
||||
preferences.landscapeColumns().asObservable()
|
||||
preferences.portraitColumns().asObservable(),
|
||||
preferences.landscapeColumns().asObservable()
|
||||
) { portraitCols, landscapeCols -> Pair(portraitCols, landscapeCols) }
|
||||
.subscribeUntilDestroy { (portraitCols, landscapeCols) ->
|
||||
val portrait = getColumnValue(portraitCols)
|
||||
val landscape = getColumnValue(landscapeCols)
|
||||
summary = "${context.getString(R.string.portrait)}: $portrait, " +
|
||||
"${context.getString(R.string.landscape)}: $landscape"
|
||||
}
|
||||
.subscribeUntilDestroy { (portraitCols, landscapeCols) ->
|
||||
val portrait = getColumnValue(portraitCols)
|
||||
val landscape = getColumnValue(landscapeCols)
|
||||
summary = "${context.getString(R.string.portrait)}: $portrait, " +
|
||||
"${context.getString(R.string.landscape)}: $landscape"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,9 +82,11 @@ class SettingsLibraryController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.libraryUpdateInterval
|
||||
titleRes = R.string.pref_library_update_interval
|
||||
entriesRes = arrayOf(R.string.update_never, R.string.update_1hour,
|
||||
R.string.update_2hour, R.string.update_3hour, R.string.update_6hour,
|
||||
R.string.update_12hour, R.string.update_24hour, R.string.update_48hour)
|
||||
entriesRes = arrayOf(
|
||||
R.string.update_never, R.string.update_1hour,
|
||||
R.string.update_2hour, R.string.update_3hour, R.string.update_6hour,
|
||||
R.string.update_12hour, R.string.update_24hour, R.string.update_48hour
|
||||
)
|
||||
entryValues = arrayOf("0", "1", "2", "3", "6", "12", "24", "48")
|
||||
defaultValue = "0"
|
||||
summary = "%s"
|
||||
@@ -124,13 +127,14 @@ class SettingsLibraryController : SettingsController() {
|
||||
preferences.libraryUpdateCategories().asFlow()
|
||||
.onEach { mutableSet ->
|
||||
val selectedCategories = mutableSet
|
||||
.mapNotNull { id -> categories.find { it.id == id.toInt() } }
|
||||
.sortedBy { it.order }
|
||||
.mapNotNull { id -> categories.find { it.id == id.toInt() } }
|
||||
.sortedBy { it.order }
|
||||
|
||||
summary = if (selectedCategories.isEmpty())
|
||||
summary = if (selectedCategories.isEmpty()) {
|
||||
context.getString(R.string.all)
|
||||
else
|
||||
} else {
|
||||
selectedCategories.joinToString { it.name }
|
||||
}
|
||||
}
|
||||
.launchIn(scope)
|
||||
}
|
||||
@@ -141,8 +145,8 @@ class SettingsLibraryController : SettingsController() {
|
||||
// The following array lines up with the list rankingScheme in:
|
||||
// ../../data/library/LibraryUpdateRanker.kt
|
||||
val priorities = arrayOf(
|
||||
Pair("0", R.string.action_sort_alpha),
|
||||
Pair("1", R.string.action_sort_last_checked)
|
||||
Pair("0", R.string.action_sort_alpha),
|
||||
Pair("1", R.string.action_sort_last_checked)
|
||||
)
|
||||
val defaultPriority = priorities[0]
|
||||
|
||||
@@ -176,13 +180,13 @@ class SettingsLibraryController : SettingsController() {
|
||||
titleRes = R.string.default_category
|
||||
|
||||
entries = arrayOf(context.getString(R.string.default_category_summary)) +
|
||||
categories.map { it.name }.toTypedArray()
|
||||
categories.map { it.name }.toTypedArray()
|
||||
entryValues = arrayOf("-1") + categories.map { it.id.toString() }.toTypedArray()
|
||||
defaultValue = "-1"
|
||||
|
||||
val selectedCategory = categories.find { it.id == preferences.defaultCategory() }
|
||||
summary = selectedCategory?.name
|
||||
?: context.getString(R.string.default_category_summary)
|
||||
?: context.getString(R.string.default_category_summary)
|
||||
onChange { newValue ->
|
||||
summary = categories.find {
|
||||
it.id == (newValue as String).toInt()
|
||||
@@ -202,13 +206,13 @@ class SettingsLibraryController : SettingsController() {
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
val dialog = MaterialDialog(activity!!)
|
||||
.title(R.string.pref_library_columns)
|
||||
.customView(R.layout.pref_library_columns)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
preferences.portraitColumns().set(portrait)
|
||||
preferences.landscapeColumns().set(landscape)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.title(R.string.pref_library_columns)
|
||||
.customView(R.layout.pref_library_columns)
|
||||
.positiveButton(android.R.string.ok) {
|
||||
preferences.portraitColumns().set(portrait)
|
||||
preferences.landscapeColumns().set(landscape)
|
||||
}
|
||||
.negativeButton(android.R.string.cancel)
|
||||
|
||||
onViewCreated(dialog.view)
|
||||
return dialog
|
||||
@@ -217,7 +221,7 @@ class SettingsLibraryController : SettingsController() {
|
||||
fun onViewCreated(view: View) {
|
||||
with(view.portrait_columns) {
|
||||
displayedValues = arrayOf(context.getString(R.string.default_columns)) +
|
||||
IntRange(1, 10).map(Int::toString)
|
||||
IntRange(1, 10).map(Int::toString)
|
||||
value = portrait
|
||||
|
||||
setOnValueChangedListener { _, _, newValue ->
|
||||
@@ -226,7 +230,7 @@ class SettingsLibraryController : SettingsController() {
|
||||
}
|
||||
with(view.landscape_columns) {
|
||||
displayedValues = arrayOf(context.getString(R.string.default_columns)) +
|
||||
IntRange(1, 10).map(Int::toString)
|
||||
IntRange(1, 10).map(Int::toString)
|
||||
value = landscape
|
||||
|
||||
setOnValueChangedListener { _, _, newValue ->
|
||||
|
||||
@@ -22,8 +22,10 @@ class SettingsReaderController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.defaultViewer
|
||||
titleRes = R.string.pref_viewer_type
|
||||
entriesRes = arrayOf(R.string.left_to_right_viewer, R.string.right_to_left_viewer,
|
||||
R.string.vertical_viewer, R.string.webtoon_viewer, R.string.vertical_plus_viewer)
|
||||
entriesRes = arrayOf(
|
||||
R.string.left_to_right_viewer, R.string.right_to_left_viewer,
|
||||
R.string.vertical_viewer, R.string.webtoon_viewer, R.string.vertical_plus_viewer
|
||||
)
|
||||
entryValues = arrayOf("1", "2", "3", "4", "5")
|
||||
defaultValue = "1"
|
||||
summary = "%s"
|
||||
@@ -31,9 +33,11 @@ class SettingsReaderController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.imageScaleType
|
||||
titleRes = R.string.pref_image_scale_type
|
||||
entriesRes = arrayOf(R.string.scale_type_fit_screen, R.string.scale_type_stretch,
|
||||
R.string.scale_type_fit_width, R.string.scale_type_fit_height,
|
||||
R.string.scale_type_original_size, R.string.scale_type_smart_fit)
|
||||
entriesRes = arrayOf(
|
||||
R.string.scale_type_fit_screen, R.string.scale_type_stretch,
|
||||
R.string.scale_type_fit_width, R.string.scale_type_fit_height,
|
||||
R.string.scale_type_original_size, R.string.scale_type_smart_fit
|
||||
)
|
||||
entryValues = arrayOf("1", "2", "3", "4", "5", "6")
|
||||
defaultValue = "1"
|
||||
summary = "%s"
|
||||
@@ -41,8 +45,10 @@ class SettingsReaderController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.zoomStart
|
||||
titleRes = R.string.pref_zoom_start
|
||||
entriesRes = arrayOf(R.string.zoom_start_automatic, R.string.zoom_start_left,
|
||||
R.string.zoom_start_right, R.string.zoom_start_center)
|
||||
entriesRes = arrayOf(
|
||||
R.string.zoom_start_automatic, R.string.zoom_start_left,
|
||||
R.string.zoom_start_right, R.string.zoom_start_center
|
||||
)
|
||||
entryValues = arrayOf("1", "2", "3", "4")
|
||||
defaultValue = "1"
|
||||
summary = "%s"
|
||||
@@ -50,8 +56,10 @@ class SettingsReaderController : SettingsController() {
|
||||
intListPreference {
|
||||
key = Keys.rotation
|
||||
titleRes = R.string.pref_rotation_type
|
||||
entriesRes = arrayOf(R.string.rotation_free, R.string.rotation_lock,
|
||||
R.string.rotation_force_portrait, R.string.rotation_force_landscape)
|
||||
entriesRes = arrayOf(
|
||||
R.string.rotation_free, R.string.rotation_lock,
|
||||
R.string.rotation_force_portrait, R.string.rotation_force_landscape
|
||||
)
|
||||
entryValues = arrayOf("1", "2", "3", "4")
|
||||
defaultValue = "1"
|
||||
summary = "%s"
|
||||
@@ -159,7 +167,8 @@ class SettingsReaderController : SettingsController() {
|
||||
R.string.webtoon_side_padding_10,
|
||||
R.string.webtoon_side_padding_15,
|
||||
R.string.webtoon_side_padding_20,
|
||||
R.string.webtoon_side_padding_25)
|
||||
R.string.webtoon_side_padding_25
|
||||
)
|
||||
entryValues = arrayOf("0", "10", "15", "20", "25")
|
||||
defaultValue = "0"
|
||||
summary = "%s"
|
||||
|
||||
@@ -31,7 +31,7 @@ class SettingsSourcesController : SettingsController() {
|
||||
|
||||
// Order first by active languages, then inactive ones
|
||||
val orderedLangs = sourcesByLang.keys.filter { it in activeLangsCodes } +
|
||||
sourcesByLang.keys.filterNot { it in activeLangsCodes }
|
||||
sourcesByLang.keys.filterNot { it in activeLangsCodes }
|
||||
|
||||
orderedLangs.forEach { lang ->
|
||||
val sources = sourcesByLang[lang].orEmpty().sortedBy { it.name }
|
||||
@@ -91,10 +91,13 @@ class SettingsSourcesController : SettingsController() {
|
||||
val checked = newValue as Boolean
|
||||
val current = preferences.hiddenCatalogues().get()
|
||||
|
||||
preferences.hiddenCatalogues().set(if (checked)
|
||||
current - id
|
||||
else
|
||||
current + id)
|
||||
preferences.hiddenCatalogues().set(
|
||||
if (checked) {
|
||||
current - id
|
||||
} else {
|
||||
current + id
|
||||
}
|
||||
)
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
@@ -23,9 +23,10 @@ import eu.kanade.tachiyomi.widget.preference.TrackLoginDialog
|
||||
import eu.kanade.tachiyomi.widget.preference.TrackLogoutDialog
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class SettingsTrackingController : SettingsController(),
|
||||
TrackLoginDialog.Listener,
|
||||
TrackLogoutDialog.Listener {
|
||||
class SettingsTrackingController :
|
||||
SettingsController(),
|
||||
TrackLoginDialog.Listener,
|
||||
TrackLogoutDialog.Listener {
|
||||
|
||||
private val trackManager: TrackManager by injectLazy()
|
||||
|
||||
@@ -47,8 +48,8 @@ class SettingsTrackingController : SettingsController(),
|
||||
}
|
||||
trackPreference(trackManager.aniList) {
|
||||
val tabsIntent = CustomTabsIntent.Builder()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
|
||||
tabsIntent.launchUrl(activity!!, AnilistApi.authUrl())
|
||||
}
|
||||
@@ -59,15 +60,15 @@ class SettingsTrackingController : SettingsController(),
|
||||
}
|
||||
trackPreference(trackManager.shikimori) {
|
||||
val tabsIntent = CustomTabsIntent.Builder()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
|
||||
tabsIntent.launchUrl(activity!!, ShikimoriApi.authUrl())
|
||||
}
|
||||
trackPreference(trackManager.bangumi) {
|
||||
val tabsIntent = CustomTabsIntent.Builder()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
.setToolbarColor(context.getResourceColor(R.attr.colorPrimary))
|
||||
.build()
|
||||
tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
|
||||
tabsIntent.launchUrl(activity!!, BangumiApi.authUrl())
|
||||
}
|
||||
@@ -78,20 +79,23 @@ class SettingsTrackingController : SettingsController(),
|
||||
service: TrackService,
|
||||
crossinline login: () -> Unit
|
||||
): LoginPreference {
|
||||
return initThenAdd(LoginPreference(context).apply {
|
||||
key = Keys.trackUsername(service.id)
|
||||
title = service.name
|
||||
}, {
|
||||
onClick {
|
||||
if (service.isLogged) {
|
||||
val dialog = TrackLogoutDialog(service)
|
||||
dialog.targetController = this@SettingsTrackingController
|
||||
dialog.showDialog(router)
|
||||
} else {
|
||||
login()
|
||||
return initThenAdd(
|
||||
LoginPreference(context).apply {
|
||||
key = Keys.trackUsername(service.id)
|
||||
title = service.name
|
||||
},
|
||||
{
|
||||
onClick {
|
||||
if (service.isLogged) {
|
||||
val dialog = TrackLogoutDialog(service)
|
||||
dialog.targetController = this@SettingsTrackingController
|
||||
dialog.showDialog(router)
|
||||
} else {
|
||||
login()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
override fun onActivityResumed(activity: Activity) {
|
||||
|
||||
@@ -64,9 +64,11 @@ internal class BackupNotifier(private val context: Context) {
|
||||
mActions.clear()
|
||||
}
|
||||
|
||||
addAction(R.drawable.ic_share_24dp,
|
||||
addAction(
|
||||
R.drawable.ic_share_24dp,
|
||||
context.getString(R.string.action_share),
|
||||
NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, Notifications.ID_BACKUP))
|
||||
NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, Notifications.ID_BACKUP)
|
||||
)
|
||||
}
|
||||
|
||||
notificationBuilder.show(Notifications.ID_BACKUP)
|
||||
@@ -84,9 +86,11 @@ internal class BackupNotifier(private val context: Context) {
|
||||
mActions.clear()
|
||||
}
|
||||
|
||||
addAction(R.drawable.ic_close_24dp,
|
||||
addAction(
|
||||
R.drawable.ic_close_24dp,
|
||||
context.getString(R.string.action_stop),
|
||||
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE))
|
||||
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE)
|
||||
)
|
||||
}
|
||||
|
||||
builder.show(Notifications.ID_RESTORE)
|
||||
@@ -107,10 +111,12 @@ internal class BackupNotifier(private val context: Context) {
|
||||
}
|
||||
|
||||
fun showRestoreComplete(time: Long, errorCount: Int, path: String?, file: String?) {
|
||||
val timeString = String.format("%02d min, %02d sec",
|
||||
val timeString = String.format(
|
||||
"%02d min, %02d sec",
|
||||
TimeUnit.MILLISECONDS.toMinutes(time),
|
||||
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(
|
||||
TimeUnit.MILLISECONDS.toMinutes(time))
|
||||
TimeUnit.MILLISECONDS.toMinutes(time)
|
||||
)
|
||||
)
|
||||
|
||||
with(notificationBuilder) {
|
||||
@@ -132,9 +138,11 @@ internal class BackupNotifier(private val context: Context) {
|
||||
val destFile = File(path, file)
|
||||
val uri = destFile.getUriCompat(context)
|
||||
|
||||
addAction(R.drawable.nnf_ic_file_folder,
|
||||
addAction(
|
||||
R.drawable.nnf_ic_file_folder,
|
||||
context.getString(R.string.action_open_log),
|
||||
NotificationReceiver.openErrorLogPendingActivity(context, uri))
|
||||
NotificationReceiver.openErrorLogPendingActivity(context, uri)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,13 +27,16 @@ class AnilistLoginActivity : AppCompatActivity() {
|
||||
val matchResult = regex.find(intent.data?.fragment.toString())
|
||||
if (matchResult?.groups?.get(1) != null) {
|
||||
trackManager.aniList.login(matchResult.groups[1]!!.value)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
returnToSettings()
|
||||
}, {
|
||||
},
|
||||
{
|
||||
returnToSettings()
|
||||
})
|
||||
}
|
||||
)
|
||||
} else {
|
||||
trackManager.aniList.logout()
|
||||
returnToSettings()
|
||||
|
||||
@@ -26,13 +26,16 @@ class BangumiLoginActivity : AppCompatActivity() {
|
||||
val code = intent.data?.getQueryParameter("code")
|
||||
if (code != null) {
|
||||
trackManager.bangumi.login(code)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
returnToSettings()
|
||||
}, {
|
||||
},
|
||||
{
|
||||
returnToSettings()
|
||||
})
|
||||
}
|
||||
)
|
||||
} else {
|
||||
trackManager.bangumi.logout()
|
||||
returnToSettings()
|
||||
|
||||
@@ -26,13 +26,16 @@ class ShikimoriLoginActivity : AppCompatActivity() {
|
||||
val code = intent.data?.getQueryParameter("code")
|
||||
if (code != null) {
|
||||
trackManager.shikimori.login(code)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
returnToSettings()
|
||||
}, {
|
||||
},
|
||||
{
|
||||
returnToSettings()
|
||||
})
|
||||
}
|
||||
)
|
||||
} else {
|
||||
trackManager.shikimori.logout()
|
||||
returnToSettings()
|
||||
|
||||
Reference in New Issue
Block a user