commit
05bcdadbd5
4
.github/workflows/issue_closer.yml
vendored
4
.github/workflows/issue_closer.yml
vendored
@ -1,5 +1,7 @@
|
|||||||
name: Issue closer
|
name: Issue closer
|
||||||
on: [issues]
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened, edited, reopened]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
autoclose:
|
autoclose:
|
||||||
|
@ -141,7 +141,7 @@ dependencies {
|
|||||||
// AndroidX libraries
|
// AndroidX libraries
|
||||||
implementation 'androidx.annotation:annotation:1.1.0'
|
implementation 'androidx.annotation:annotation:1.1.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
|
implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
|
||||||
implementation 'androidx.biometric:biometric:1.1.0-alpha02'
|
implementation 'androidx.biometric:biometric:1.1.0-beta01'
|
||||||
implementation 'androidx.browser:browser:1.2.0'
|
implementation 'androidx.browser:browser:1.2.0'
|
||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
|
||||||
@ -149,10 +149,10 @@ dependencies {
|
|||||||
implementation 'androidx.core:core-ktx:1.4.0-alpha01'
|
implementation 'androidx.core:core-ktx:1.4.0-alpha01'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'androidx.preference:preference:1.1.1'
|
implementation 'androidx.preference:preference:1.1.1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'
|
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha06'
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
|
||||||
|
|
||||||
final lifecycle_version = '2.3.0-alpha07'
|
final lifecycle_version = '2.3.0-beta01'
|
||||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||||
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
|
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
|
||||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
||||||
@ -233,7 +233,7 @@ dependencies {
|
|||||||
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
|
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
|
||||||
kapt "com.github.bumptech.glide:compiler:$glide_version"
|
kapt "com.github.bumptech.glide:compiler:$glide_version"
|
||||||
|
|
||||||
implementation 'com.github.tachiyomiorg:subsampling-scale-image-view:bff2806'
|
implementation 'com.github.tachiyomiorg:subsampling-scale-image-view:6caf219'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||||
|
@ -173,6 +173,17 @@ class DownloadManager(/* SY private */ val context: Context) {
|
|||||||
return cache.isChapterDownloaded(chapter, manga, skipCache)
|
return cache.isChapterDownloaded(chapter, manga, skipCache)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the download from queue if the chapter is queued for download
|
||||||
|
* else it will return null which means that the chapter is not queued for download
|
||||||
|
*
|
||||||
|
* @param chapter the chapter to check.
|
||||||
|
*/
|
||||||
|
fun getChapterDownloadOrNull(chapter: Chapter): Download? {
|
||||||
|
return downloader.queue
|
||||||
|
.firstOrNull { it.chapter.id == chapter.id && it.chapter.manga_id == chapter.manga_id }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the amount of downloaded chapters for a manga.
|
* Returns the amount of downloaded chapters for a manga.
|
||||||
*
|
*
|
||||||
|
@ -187,6 +187,8 @@ object PreferenceKeys {
|
|||||||
|
|
||||||
const val defaultChapterDisplayByNameOrNumber = "default_chapter_display_by_name_or_number"
|
const val defaultChapterDisplayByNameOrNumber = "default_chapter_display_by_name_or_number"
|
||||||
|
|
||||||
|
const val incognitoMode = "incognito_mode"
|
||||||
|
|
||||||
fun trackUsername(syncId: Int) = "pref_mangasync_username_$syncId"
|
fun trackUsername(syncId: Int) = "pref_mangasync_username_$syncId"
|
||||||
|
|
||||||
fun trackPassword(syncId: Int) = "pref_mangasync_password_$syncId"
|
fun trackPassword(syncId: Int) = "pref_mangasync_password_$syncId"
|
||||||
|
@ -275,6 +275,8 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, Manga.SORT_DESC)
|
fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, Manga.SORT_DESC)
|
||||||
|
|
||||||
|
fun incognitoMode() = flowPrefs.getBoolean(Keys.incognitoMode, false)
|
||||||
|
|
||||||
fun setChapterSettingsDefault(manga: Manga) {
|
fun setChapterSettingsDefault(manga: Manga) {
|
||||||
prefs.edit {
|
prefs.edit {
|
||||||
putInt(Keys.defaultChapterFilterByRead, manga.readFilter)
|
putInt(Keys.defaultChapterFilterByRead, manga.readFilter)
|
||||||
|
@ -226,10 +226,6 @@ class LibraryController(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preferences.downloadedOnly().get()) {
|
|
||||||
binding.downloadedOnly.isVisible = true
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.btnGlobalSearch.clicks()
|
binding.btnGlobalSearch.clicks()
|
||||||
.onEach {
|
.onEach {
|
||||||
router.pushController(
|
router.pushController(
|
||||||
|
@ -230,6 +230,14 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
|||||||
preferences.extensionUpdatesCount()
|
preferences.extensionUpdatesCount()
|
||||||
.asImmediateFlow { setExtensionsBadge() }
|
.asImmediateFlow { setExtensionsBadge() }
|
||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
|
|
||||||
|
preferences.downloadedOnly()
|
||||||
|
.asImmediateFlow { binding.downloadedOnly.isVisible = it }
|
||||||
|
.launchIn(scope)
|
||||||
|
|
||||||
|
preferences.incognitoMode()
|
||||||
|
.asImmediateFlow { binding.incognitoMode.isVisible = it }
|
||||||
|
.launchIn(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNewIntent(intent: Intent) {
|
override fun onNewIntent(intent: Intent) {
|
||||||
|
@ -61,6 +61,7 @@ import eu.kanade.tachiyomi.ui.browse.source.SourceController
|
|||||||
import eu.kanade.tachiyomi.ui.browse.source.SourceController.Companion.SMART_SEARCH_SOURCE_TAG
|
import eu.kanade.tachiyomi.ui.browse.source.SourceController.Companion.SMART_SEARCH_SOURCE_TAG
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
||||||
|
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
||||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
|
||||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCoverDialog
|
import eu.kanade.tachiyomi.ui.library.ChangeMangaCoverDialog
|
||||||
import eu.kanade.tachiyomi.ui.library.LibraryController
|
import eu.kanade.tachiyomi.ui.library.LibraryController
|
||||||
@ -879,6 +880,10 @@ class MangaController :
|
|||||||
val controller = router.getControllerWithTag(R.id.nav_library.toString()) as LibraryController
|
val controller = router.getControllerWithTag(R.id.nav_library.toString()) as LibraryController
|
||||||
controller.search(query)
|
controller.search(query)
|
||||||
}
|
}
|
||||||
|
is LatestUpdatesController -> {
|
||||||
|
// Search doesn't currently work in source Latest view
|
||||||
|
return
|
||||||
|
}
|
||||||
is BrowseSourceController -> {
|
is BrowseSourceController -> {
|
||||||
router.handleBack()
|
router.handleBack()
|
||||||
previousController.searchWithQuery(query)
|
previousController.searchWithQuery(query)
|
||||||
|
@ -87,12 +87,12 @@ class ChaptersSettingsSheet(
|
|||||||
|
|
||||||
inner class FilterGroup : Group {
|
inner class FilterGroup : Group {
|
||||||
|
|
||||||
private val unread = Item.TriStateGroup(R.string.action_filter_unread, this)
|
|
||||||
private val downloaded = Item.TriStateGroup(R.string.action_filter_downloaded, this)
|
private val downloaded = Item.TriStateGroup(R.string.action_filter_downloaded, this)
|
||||||
|
private val unread = Item.TriStateGroup(R.string.action_filter_unread, this)
|
||||||
private val bookmarked = Item.TriStateGroup(R.string.action_filter_bookmarked, this)
|
private val bookmarked = Item.TriStateGroup(R.string.action_filter_bookmarked, this)
|
||||||
|
|
||||||
override val header = null
|
override val header = null
|
||||||
override val items = listOf(unread, downloaded, bookmarked)
|
override val items = listOf(downloaded, unread, bookmarked)
|
||||||
override val footer = null
|
override val footer = null
|
||||||
|
|
||||||
override fun initModels() {
|
override fun initModels() {
|
||||||
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.manga.info
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
@ -22,7 +21,6 @@ import eu.kanade.tachiyomi.source.online.HttpSource
|
|||||||
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
import eu.kanade.tachiyomi.util.view.setTooltip
|
|
||||||
import exh.MERGED_SOURCE_ID
|
import exh.MERGED_SOURCE_ID
|
||||||
import exh.source.EnhancedHttpSource.Companion.getMainSource
|
import exh.source.EnhancedHttpSource.Companion.getMainSource
|
||||||
import exh.util.SourceTagsUtil
|
import exh.util.SourceTagsUtil
|
||||||
@ -115,27 +113,17 @@ class MangaInfoHeaderAdapter(
|
|||||||
isVisible = true
|
isVisible = true
|
||||||
|
|
||||||
if (trackCount > 0) {
|
if (trackCount > 0) {
|
||||||
setCompoundDrawablesWithIntrinsicBounds(
|
setIconResource(R.drawable.ic_done_24dp)
|
||||||
null,
|
|
||||||
ContextCompat.getDrawable(context, R.drawable.ic_done_24dp),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
text = view.context.resources.getQuantityString(
|
text = view.context.resources.getQuantityString(
|
||||||
R.plurals.num_trackers,
|
R.plurals.num_trackers,
|
||||||
trackCount,
|
trackCount,
|
||||||
trackCount
|
trackCount
|
||||||
)
|
)
|
||||||
isSelected = true
|
isActivated = true
|
||||||
} else {
|
} else {
|
||||||
setCompoundDrawablesWithIntrinsicBounds(
|
setIconResource(R.drawable.ic_sync_24dp)
|
||||||
null,
|
|
||||||
ContextCompat.getDrawable(context, R.drawable.ic_sync_24dp),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
text = view.context.getString(R.string.manga_tracking_tab)
|
text = view.context.getString(R.string.manga_tracking_tab)
|
||||||
isSelected = false
|
isActivated = false
|
||||||
}
|
}
|
||||||
|
|
||||||
clicks()
|
clicks()
|
||||||
@ -151,7 +139,6 @@ class MangaInfoHeaderAdapter(
|
|||||||
binding.btnWebview.clicks()
|
binding.btnWebview.clicks()
|
||||||
.onEach { controller.openMangaInWebView() }
|
.onEach { controller.openMangaInWebView() }
|
||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
binding.btnWebview.setTooltip(R.string.action_open_in_web_view)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -320,18 +307,10 @@ class MangaInfoHeaderAdapter(
|
|||||||
// Set the Favorite drawable to the correct one.
|
// Set the Favorite drawable to the correct one.
|
||||||
// Border drawable if false, filled drawable if true.
|
// Border drawable if false, filled drawable if true.
|
||||||
binding.btnFavorite.apply {
|
binding.btnFavorite.apply {
|
||||||
setCompoundDrawablesWithIntrinsicBounds(
|
setIconResource(if (isFavorite) R.drawable.ic_favorite_24dp else R.drawable.ic_favorite_border_24dp)
|
||||||
null,
|
|
||||||
ContextCompat.getDrawable(
|
|
||||||
context,
|
|
||||||
if (isFavorite) R.drawable.ic_favorite_24dp else R.drawable.ic_favorite_border_24dp
|
|
||||||
),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
text =
|
text =
|
||||||
context.getString(if (isFavorite) R.string.in_library else R.string.add_to_library)
|
context.getString(if (isFavorite) R.string.in_library else R.string.add_to_library)
|
||||||
isSelected = isFavorite
|
isActivated = isFavorite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.ui.download.DownloadController
|
|||||||
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
||||||
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
|
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
|
||||||
import eu.kanade.tachiyomi.util.preference.add
|
import eu.kanade.tachiyomi.util.preference.add
|
||||||
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
import eu.kanade.tachiyomi.util.preference.iconRes
|
import eu.kanade.tachiyomi.util.preference.iconRes
|
||||||
import eu.kanade.tachiyomi.util.preference.iconTint
|
import eu.kanade.tachiyomi.util.preference.iconTint
|
||||||
import eu.kanade.tachiyomi.util.preference.onClick
|
import eu.kanade.tachiyomi.util.preference.onClick
|
||||||
@ -54,6 +55,15 @@ class MoreController :
|
|||||||
iconTint = tintColor
|
iconTint = tintColor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switchPreference {
|
||||||
|
key = Keys.incognitoMode
|
||||||
|
summaryRes = R.string.pref_incognito_mode_summary
|
||||||
|
titleRes = R.string.pref_incognito_mode
|
||||||
|
iconRes = R.drawable.ic_glasses_black_24dp
|
||||||
|
iconTint = tintColor
|
||||||
|
defaultValue = false
|
||||||
|
}
|
||||||
|
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
preference {
|
preference {
|
||||||
titleRes = R.string.label_download_queue
|
titleRes = R.string.label_download_queue
|
||||||
|
@ -417,6 +417,7 @@ class ReaderPresenter(
|
|||||||
// SY <--
|
// SY <--
|
||||||
updateTrackChapterRead(selectedChapter)
|
updateTrackChapterRead(selectedChapter)
|
||||||
deleteChapterIfNeeded(selectedChapter)
|
deleteChapterIfNeeded(selectedChapter)
|
||||||
|
deleteChapterFromDownloadQueue(currentChapters.currChapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedChapter != currentChapters.currChapter) {
|
if (selectedChapter != currentChapters.currChapter) {
|
||||||
@ -431,6 +432,16 @@ class ReaderPresenter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes [currentChapter] from download queue
|
||||||
|
* if setting is enabled and [currentChapter] is queued for download
|
||||||
|
*/
|
||||||
|
private fun deleteChapterFromDownloadQueue(currentChapter: ReaderChapter) {
|
||||||
|
downloadManager.getChapterDownloadOrNull(currentChapter.chapter)?.let { download ->
|
||||||
|
downloadManager.deletePendingDownload(download)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if deleting option is enabled and nth to last chapter actually exists.
|
* Determines if deleting option is enabled and nth to last chapter actually exists.
|
||||||
* If both conditions are satisfied enqueues chapter for delete
|
* If both conditions are satisfied enqueues chapter for delete
|
||||||
@ -470,12 +481,14 @@ class ReaderPresenter(
|
|||||||
* Saves this [chapter] last read history.
|
* Saves this [chapter] last read history.
|
||||||
*/
|
*/
|
||||||
private fun saveChapterHistory(chapter: ReaderChapter) {
|
private fun saveChapterHistory(chapter: ReaderChapter) {
|
||||||
|
if (!preferences.incognitoMode().get()) {
|
||||||
val history = History.create(chapter.chapter).apply { last_read = Date().time }
|
val history = History.create(chapter.chapter).apply { last_read = Date().time }
|
||||||
db.updateHistoryLastRead(history).asRxCompletable()
|
db.updateHistoryLastRead(history).asRxCompletable()
|
||||||
.onErrorComplete()
|
.onErrorComplete()
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.subscribe()
|
.subscribe()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called from the activity to preload the given [chapter].
|
* Called from the activity to preload the given [chapter].
|
||||||
|
@ -114,6 +114,16 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
ctrl.showDialog(router)
|
ctrl.showDialog(router)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
preference {
|
||||||
|
titleRes = R.string.pref_clear_history
|
||||||
|
summaryRes = R.string.pref_clear_history_summary
|
||||||
|
|
||||||
|
onClick {
|
||||||
|
val ctrl = ClearHistoryDialogController()
|
||||||
|
ctrl.targetController = this@SettingsAdvancedController
|
||||||
|
ctrl.showDialog(router)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
preferenceCategory {
|
preferenceCategory {
|
||||||
@ -402,6 +412,22 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ClearHistoryDialogController : DialogController() {
|
||||||
|
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||||
|
return MaterialDialog(activity!!)
|
||||||
|
.message(R.string.clear_history_confirmation)
|
||||||
|
.positiveButton(android.R.string.ok) {
|
||||||
|
(targetController as? SettingsAdvancedController)?.clearHistory()
|
||||||
|
}
|
||||||
|
.negativeButton(android.R.string.cancel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun clearHistory() {
|
||||||
|
db.deleteHistory().executeAsBlocking()
|
||||||
|
activity?.toast(R.string.clear_history_completed)
|
||||||
|
}
|
||||||
|
|
||||||
private fun clearDatabase() {
|
private fun clearDatabase() {
|
||||||
db.deleteMangasNotInLibrary().executeAsBlocking()
|
db.deleteMangasNotInLibrary().executeAsBlocking()
|
||||||
db.deleteHistoryNoLastRead().executeAsBlocking()
|
db.deleteHistoryNoLastRead().executeAsBlocking()
|
||||||
|
@ -160,9 +160,8 @@ fun syncChaptersWithSource(
|
|||||||
// Fix order in source.
|
// Fix order in source.
|
||||||
db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking()
|
db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking()
|
||||||
|
|
||||||
// Set manga's last update time to latest chapter's fetch time if possible
|
// Set this manga as updated since chapters were changed
|
||||||
val newestChapter = db.getChapters(manga).executeAsBlocking().maxBy { it.date_fetch }
|
manga.last_update = Date().time
|
||||||
manga.last_update = newestChapter?.date_fetch ?: Date().time
|
|
||||||
db.updateLastUpdated(manga).executeAsBlocking()
|
db.updateLastUpdated(manga).executeAsBlocking()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
app/src/main/res/color/button_action_selector.xml
Normal file
5
app/src/main/res/color/button_action_selector.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?attr/colorAccent" android:state_activated="true" />
|
||||||
|
<item android:color="?attr/colorOnBackground" android:state_activated="false" />
|
||||||
|
</selector>
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:alpha="0.25" android:color="?attr/colorAccent" android:state_checked="true" />
|
|
||||||
<item android:color="@android:color/transparent" android:state_checked="false" />
|
|
||||||
</selector>
|
|
@ -10,24 +10,6 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/downloaded_only"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@color/green"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:text="@string/label_downloaded_only"
|
|
||||||
android:textColor="@color/md_white_1000" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btn_global_search"
|
android:id="@+id/btn_global_search"
|
||||||
style="@style/Theme.Widget.Button"
|
style="@style/Theme.Widget.Button"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/root_coordinator"
|
android:id="@+id/root_coordinator"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -25,6 +26,42 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/downloaded_only"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/green"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="@string/label_downloaded_only"
|
||||||
|
android:textColor="@color/md_white_1000" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/incognito_mode"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/md_grey_800"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="@string/pref_incognito_mode"
|
||||||
|
android:textColor="@color/md_white_1000" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</eu.kanade.tachiyomi.widget.ElevationAppBarLayout>
|
</eu.kanade.tachiyomi.widget.ElevationAppBarLayout>
|
||||||
|
|
||||||
<com.bluelinelabs.conductor.ChangeHandlerFrameLayout
|
<com.bluelinelabs.conductor.ChangeHandlerFrameLayout
|
||||||
|
@ -133,59 +133,56 @@
|
|||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="16dp"
|
||||||
|
android:paddingEnd="16dp">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/btn_favorite"
|
android:id="@+id/btn_favorite"
|
||||||
style="@style/Theme.Widget.Button.Action"
|
style="@style/Theme.Widget.Button.Action"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:checkable="true"
|
|
||||||
android:text="@string/add_to_library"
|
android:text="@string/add_to_library"
|
||||||
app:drawableTopCompat="@drawable/ic_favorite_border_24dp"
|
app:icon="@drawable/ic_favorite_border_24dp"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/btn_tracking"
|
app:layout_constraintEnd_toStartOf="@+id/btn_tracking"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/btn_tracking"
|
android:id="@+id/btn_tracking"
|
||||||
style="@style/Theme.Widget.Button.Action"
|
style="@style/Theme.Widget.Button.Action"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:checkable="true"
|
|
||||||
android:text="@string/manga_tracking_tab"
|
android:text="@string/manga_tracking_tab"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:drawableTopCompat="@drawable/ic_sync_24dp"
|
app:icon="@drawable/ic_sync_24dp"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/btn_webview"
|
app:layout_constraintEnd_toStartOf="@+id/btn_webview"
|
||||||
app:layout_constraintStart_toEndOf="@+id/btn_favorite"
|
app:layout_constraintStart_toEndOf="@+id/btn_favorite"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/btn_webview"
|
android:id="@+id/btn_webview"
|
||||||
style="@style/Theme.Widget.Button.Action"
|
style="@style/Theme.Widget.Button.Action"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/action_web_view"
|
android:text="@string/action_web_view"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:drawableTopCompat="@drawable/ic_public_24dp"
|
app:icon="@drawable/ic_public_24dp"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/btn_migrate"
|
app:layout_constraintEnd_toStartOf="@+id/btn_migrate"
|
||||||
app:layout_constraintStart_toEndOf="@+id/btn_tracking"
|
app:layout_constraintStart_toEndOf="@+id/btn_tracking"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/btn_migrate"
|
android:id="@+id/btn_migrate"
|
||||||
style="@style/Theme.Widget.Button.Action"
|
style="@style/Theme.Widget.Button.Action"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:text="@string/migrate"
|
android:text="@string/migrate"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:drawableTopCompat="@drawable/baseline_swap_calls_24"
|
app:icon="@drawable/baseline_swap_calls_24"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/btn_webview"
|
app:layout_constraintStart_toEndOf="@+id/btn_webview"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
@ -69,6 +69,8 @@
|
|||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_gravity="top"
|
android:layout_gravity="top"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:paddingBottom="8dp" />
|
android:paddingBottom="8dp"
|
||||||
|
android:clipChildren="false"
|
||||||
|
android:clipToPadding="false" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -403,6 +403,10 @@
|
|||||||
<string name="pref_disable_battery_optimization_summary">Helps with background library updates and backups</string>
|
<string name="pref_disable_battery_optimization_summary">Helps with background library updates and backups</string>
|
||||||
<string name="battery_optimization_disabled">Battery optimization is already disabled</string>
|
<string name="battery_optimization_disabled">Battery optimization is already disabled</string>
|
||||||
<string name="battery_optimization_setting_activity_not_found">Couldn\'t open device settings</string>
|
<string name="battery_optimization_setting_activity_not_found">Couldn\'t open device settings</string>
|
||||||
|
<string name="clear_history_completed">History deleted</string>
|
||||||
|
<string name="clear_history_confirmation">Are you sure? All history will be lost.</string>
|
||||||
|
<string name="pref_clear_history">Clear history</string>
|
||||||
|
<string name="pref_clear_history_summary">Delete reading history for all manga</string>
|
||||||
|
|
||||||
<!-- About section -->
|
<!-- About section -->
|
||||||
<string name="website">Website</string>
|
<string name="website">Website</string>
|
||||||
@ -421,6 +425,8 @@
|
|||||||
|
|
||||||
<!-- More -->
|
<!-- More -->
|
||||||
<string name="label_downloaded_only">Downloaded only</string>
|
<string name="label_downloaded_only">Downloaded only</string>
|
||||||
|
<string name="pref_incognito_mode">Incognito mode</string>
|
||||||
|
<string name="pref_incognito_mode_summary">Pauses reading history</string>
|
||||||
<string name="downloaded_only_summary">Filters all manga in your library</string>
|
<string name="downloaded_only_summary">Filters all manga in your library</string>
|
||||||
<plurals name="download_queue_summary">
|
<plurals name="download_queue_summary">
|
||||||
<item quantity="one">1 remaining</item>
|
<item quantity="one">1 remaining</item>
|
||||||
|
@ -254,17 +254,16 @@
|
|||||||
<item name="android:textAllCaps">false</item>
|
<item name="android:textAllCaps">false</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Widget.Button.Action" parent="Widget.MaterialComponents.Button.Icon">
|
<style name="Theme.Widget.Button.Action" parent="Widget.MaterialComponents.Button.UnelevatedButton.Icon">
|
||||||
<item name="elevation">0dp</item>
|
|
||||||
|
|
||||||
<item name="android:textSize">12sp</item>
|
<item name="android:textSize">12sp</item>
|
||||||
|
<item name="android:textAllCaps">false</item>
|
||||||
|
|
||||||
<item name="drawableTint">?attr/colorOnBackground</item>
|
<item name="backgroundTint">@android:color/transparent</item>
|
||||||
<item name="android:drawablePadding">4dp</item>
|
|
||||||
<item name="rippleColor">?attr/colorAccent</item>
|
|
||||||
<item name="android:textColor">?attr/colorOnBackground</item>
|
|
||||||
|
|
||||||
<item name="backgroundTint">@color/outlined_button_bg</item>
|
<item name="iconGravity">top</item>
|
||||||
|
<item name="iconTint">@color/button_action_selector</item>
|
||||||
|
<item name="iconPadding">4dp</item>
|
||||||
|
<item name="android:textColor">@color/button_action_selector</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Widget.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
|
<style name="Theme.Widget.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user