mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-12 23:45:09 +01:00
More stuff
Last updated sorting is called "Latest chapter" now Fixing some mangas being called manhwas Fixed library searching from tags Broswing manga from source now starts with the details and tags expanded Restored click on thumbnail in details Restored copying title and aurthor Made toolbar in details translucent Added mark all unread and mark previous as read in detail Fixed changing grid size
This commit is contained in:
parent
c62ec99aff
commit
c8570759fa
@ -31,7 +31,7 @@ interface Category : Serializable {
|
||||
|
||||
fun sortingMode(): Int? = when (mangaSort) {
|
||||
ALPHA_ASC, ALPHA_DSC -> LibrarySort.ALPHA
|
||||
UPDATED_ASC, UPDATED_DSC -> LibrarySort.LAST_UPDATED
|
||||
UPDATED_ASC, UPDATED_DSC -> LibrarySort.LATEST_CHAPTER
|
||||
UNREAD_ASC, UNREAD_DSC -> LibrarySort.UNREAD
|
||||
LAST_READ_ASC, LAST_READ_DSC -> LibrarySort.LAST_READ
|
||||
TOTAL_ASC, TOTAL_DSC -> LibrarySort.TOTAL
|
||||
@ -41,7 +41,7 @@ interface Category : Serializable {
|
||||
|
||||
fun sortRes(): Int = when (mangaSort) {
|
||||
ALPHA_ASC, ALPHA_DSC -> R.string.title
|
||||
UPDATED_ASC, UPDATED_DSC -> R.string.action_sort_last_updated
|
||||
UPDATED_ASC, UPDATED_DSC -> R.string.action_sort_latest_chapter
|
||||
UNREAD_ASC, UNREAD_DSC -> R.string.action_filter_unread
|
||||
LAST_READ_ASC, LAST_READ_DSC -> R.string.action_sort_last_read
|
||||
TOTAL_ASC, TOTAL_DSC -> R.string.action_sort_total
|
||||
@ -60,7 +60,7 @@ interface Category : Serializable {
|
||||
fun changeSortTo(sort: Int) {
|
||||
mangaSort = when (sort) {
|
||||
LibrarySort.ALPHA -> ALPHA_ASC
|
||||
LibrarySort.LAST_UPDATED -> UPDATED_ASC
|
||||
LibrarySort.LATEST_CHAPTER -> UPDATED_ASC
|
||||
LibrarySort.UNREAD -> UNREAD_ASC
|
||||
LibrarySort.LAST_READ -> LAST_READ_ASC
|
||||
LibrarySort.TOTAL -> ALPHA_ASC
|
||||
@ -96,7 +96,7 @@ interface Category : Serializable {
|
||||
id = -1
|
||||
mangaSort = when (libSort) {
|
||||
LibrarySort.ALPHA -> ALPHA_ASC
|
||||
LibrarySort.LAST_UPDATED -> UPDATED_ASC
|
||||
LibrarySort.LATEST_CHAPTER -> UPDATED_ASC
|
||||
LibrarySort.UNREAD -> UNREAD_ASC
|
||||
LibrarySort.LAST_READ -> LAST_READ_ASC
|
||||
LibrarySort.TOTAL -> TOTAL_ASC
|
||||
|
@ -33,8 +33,9 @@ interface Chapter : SChapter, Serializable {
|
||||
chapter_number = -1f
|
||||
}
|
||||
|
||||
fun createH(): Chapter = ChapterImpl().apply {
|
||||
fun createHeader(isExpanded: Boolean): Chapter = ChapterImpl().apply {
|
||||
id = Long.MIN_VALUE
|
||||
read = isExpanded
|
||||
manga_id = null
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,11 @@ interface Manga : SManga {
|
||||
val sourceName = Injekt.get<SourceManager>().getOrStub(source).name
|
||||
val currentTags = currentGenres()?.split(",")?.map { it.trim().toLowerCase(Locale.US) }
|
||||
return if (currentTags?.any
|
||||
{ tag ->
|
||||
tag.startsWith("japanese") || tag == "manga"
|
||||
} == true)
|
||||
TYPE_MANGA
|
||||
else if (currentTags?.any
|
||||
{ tag ->
|
||||
tag.startsWith("english") || tag == "comic"
|
||||
} == true || isComicSource(sourceName))
|
||||
@ -51,10 +56,14 @@ interface Manga : SManga {
|
||||
TYPE_MANHUA
|
||||
else if (currentTags?.any
|
||||
{ tag ->
|
||||
tag == "long strip" || tag == "manhwa" ||
|
||||
tag.contains("webtoon")
|
||||
tag == "long strip" || tag == "manhwa"
|
||||
} == true || isWebtoonSource(sourceName))
|
||||
TYPE_MANHWA
|
||||
else if (currentTags?.any
|
||||
{ tag ->
|
||||
tag.startsWith("webtoon")
|
||||
} == true)
|
||||
TYPE_WEBTOON
|
||||
else TYPE_MANGA
|
||||
}
|
||||
|
||||
@ -65,7 +74,8 @@ interface Manga : SManga {
|
||||
{ tag ->
|
||||
tag == "long strip" || tag == "manhwa" ||
|
||||
tag.contains("webtoon")
|
||||
} == true || isWebtoonSource(sourceName))
|
||||
} == true || isWebtoonSource(sourceName) ||
|
||||
sourceName.contains("tapastic", true))
|
||||
ReaderActivity.WEBTOON
|
||||
else if (currentTags?.any
|
||||
{ tag ->
|
||||
@ -142,14 +152,11 @@ interface Manga : SManga {
|
||||
const val DISPLAY_NUMBER = 0x00100000
|
||||
const val DISPLAY_MASK = 0x00100000
|
||||
|
||||
const val READ_WEBTOON = 0
|
||||
const val READ_LTR = 1
|
||||
const val READ_RTL = 2
|
||||
|
||||
const val TYPE_MANGA = 0
|
||||
const val TYPE_MANHWA = 1
|
||||
const val TYPE_MANHUA = 2
|
||||
const val TYPE_COMIC = 3
|
||||
const val TYPE_WEBTOON = 4
|
||||
|
||||
fun create(source: Long): Manga = MangaImpl().apply {
|
||||
this.source = source
|
||||
|
@ -139,7 +139,7 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) :
|
||||
else
|
||||
"Read"
|
||||
}
|
||||
LibrarySort.LAST_UPDATED -> {
|
||||
LibrarySort.LATEST_CHAPTER -> {
|
||||
val lastUpdate = (iFlexible as LibraryItem).manga.last_update
|
||||
if (lastUpdate > 0)
|
||||
getShortDate(Date(lastUpdate))
|
||||
|
@ -86,8 +86,6 @@ open class LibraryController(
|
||||
*/
|
||||
protected var query = ""
|
||||
|
||||
var customQuery = ""
|
||||
|
||||
/**
|
||||
* Currently selected mangas.
|
||||
*/
|
||||
@ -258,24 +256,6 @@ open class LibraryController(
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChangeEnded(
|
||||
changeHandler: ControllerChangeHandler,
|
||||
changeType: ControllerChangeType
|
||||
) {
|
||||
super.onChangeEnded(changeHandler, changeType)
|
||||
if (changeType.isEnter) {
|
||||
if (customQuery.isNotEmpty()) {
|
||||
query = customQuery
|
||||
((activity as MainActivity).toolbar.menu.findItem(
|
||||
R.id.action_search
|
||||
)?.actionView as? SearchView)?.setQuery(
|
||||
customQuery, true
|
||||
)
|
||||
}
|
||||
customQuery = ""
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResumed(activity: Activity) {
|
||||
super.onActivityResumed(activity)
|
||||
if (observeLater && ::presenter.isInitialized) {
|
||||
@ -509,7 +489,7 @@ open class LibraryController(
|
||||
}
|
||||
|
||||
open fun search(query: String) {
|
||||
this.customQuery = query
|
||||
onSearch(query)
|
||||
}
|
||||
|
||||
override fun handleRootBack(): Boolean {
|
||||
|
@ -100,7 +100,7 @@ class LibraryHeaderItem(private val categoryF: (Int) -> Category, val catId: Int
|
||||
sortText.text = itemView.context.getString(R.string.sort_by_,
|
||||
itemView.context.getString(
|
||||
when (category.sortingMode()) {
|
||||
LibrarySort.LAST_UPDATED -> R.string.action_sort_last_updated
|
||||
LibrarySort.LATEST_CHAPTER -> R.string.action_sort_latest_chapter
|
||||
LibrarySort.DRAG_AND_DROP ->
|
||||
if (category.id == -1) R.string.category
|
||||
else R.string.action_sort_drag_and_drop
|
||||
@ -168,7 +168,7 @@ class LibraryHeaderItem(private val categoryF: (Int) -> Category, val catId: Int
|
||||
LibrarySort.TOTAL -> R.id.action_total_chaps
|
||||
LibrarySort.LAST_READ -> R.id.action_last_read
|
||||
LibrarySort.UNREAD -> R.id.action_unread
|
||||
LibrarySort.LAST_UPDATED -> R.id.action_update
|
||||
LibrarySort.LATEST_CHAPTER -> R.id.action_update
|
||||
else -> R.id.action_alpha
|
||||
}
|
||||
)
|
||||
|
@ -245,11 +245,11 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
|
||||
}
|
||||
|
||||
override fun reattachAdapter() {
|
||||
libraryLayout = preferences.libraryLayout().getOrDefault()
|
||||
if (libraryLayout == 0) recycler.spanCount = 1
|
||||
else recycler.columnWidth = (90 + (preferences.gridSize().getOrDefault() * 30)).dpToPx
|
||||
val position =
|
||||
(recycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
|
||||
libraryLayout = preferences.libraryLayout().getOrDefault()
|
||||
recycler.adapter = adapter
|
||||
|
||||
(recycler.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(position, 0)
|
||||
|
@ -170,7 +170,10 @@ class LibraryPresenter(
|
||||
if (filterUnread == STATE_REALLY_EXCLUDE && item.manga.unread > 0) return@f false
|
||||
|
||||
if (filterMangaType > 0) {
|
||||
if (filterMangaType != item.manga.mangaType()) return@f false
|
||||
if (if (filterMangaType == Manga.TYPE_MANHWA)
|
||||
(filterMangaType != item.manga.mangaType() &&
|
||||
filterMangaType != Manga.TYPE_WEBTOON)
|
||||
else filterMangaType != item.manga.mangaType()) return@f false
|
||||
}
|
||||
|
||||
if (filterCompleted == STATE_INCLUDE && item.manga.status != SManga.COMPLETED)
|
||||
@ -297,7 +300,7 @@ class LibraryPresenter(
|
||||
val manga2LastRead = lastReadManga[i2.manga.id!!] ?: lastReadManga.size
|
||||
manga1LastRead.compareTo(manga2LastRead)
|
||||
}
|
||||
sortingMode == LibrarySort.LAST_UPDATED -> i2.manga.last_update.compareTo(i1
|
||||
sortingMode == LibrarySort.LATEST_CHAPTER -> i2.manga.last_update.compareTo(i1
|
||||
.manga.last_update)
|
||||
sortingMode == LibrarySort.UNREAD ->
|
||||
when {
|
||||
@ -364,7 +367,7 @@ class LibraryPresenter(
|
||||
category.mangaSort != null -> {
|
||||
var sort = when (category.sortingMode()) {
|
||||
LibrarySort.ALPHA -> sortAlphabetical(i1, i2)
|
||||
LibrarySort.LAST_UPDATED -> i2.manga.last_update.compareTo(i1.manga.last_update)
|
||||
LibrarySort.LATEST_CHAPTER -> i2.manga.last_update.compareTo(i1.manga.last_update)
|
||||
LibrarySort.UNREAD -> when {
|
||||
i1.manga.unread == i2.manga.unread -> 0
|
||||
i1.manga.unread == 0 -> if (category.isAscending()) 1 else -1
|
||||
|
@ -4,7 +4,7 @@ object LibrarySort {
|
||||
|
||||
const val ALPHA = 0
|
||||
const val LAST_READ = 1
|
||||
const val LAST_UPDATED = 2
|
||||
const val LATEST_CHAPTER = 2
|
||||
const val UNREAD = 3
|
||||
const val TOTAL = 4
|
||||
const val DRAG_AND_DROP = 6
|
||||
|
@ -1,5 +1,9 @@
|
||||
package eu.kanade.tachiyomi.ui.manga
|
||||
|
||||
import android.animation.Animator
|
||||
import android.animation.AnimatorListenerAdapter
|
||||
import android.animation.AnimatorSet
|
||||
import android.animation.ObjectAnimator
|
||||
import android.animation.ValueAnimator
|
||||
import android.app.Activity
|
||||
import android.app.PendingIntent
|
||||
@ -10,6 +14,7 @@ import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
@ -21,6 +26,7 @@ import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.DecelerateInterpolator
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.content.pm.ShortcutInfoCompat
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
@ -29,6 +35,11 @@ import androidx.core.graphics.drawable.IconCompat
|
||||
import androidx.palette.graphics.Palette
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.transition.ChangeBounds
|
||||
import androidx.transition.ChangeImageTransform
|
||||
import androidx.transition.TransitionManager
|
||||
import androidx.transition.TransitionSet
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
@ -65,6 +76,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaController.Companion.FROM_CATALOGUE_EXT
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.ChapterMatHolder
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.ChaptersAdapter
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.DownloadCustomChaptersDialog
|
||||
import eu.kanade.tachiyomi.ui.manga.info.EditMangaDialog
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
@ -83,8 +95,7 @@ import jp.wasabeef.glide.transformations.CropSquareTransformation
|
||||
import jp.wasabeef.glide.transformations.MaskTransformation
|
||||
import kotlinx.android.synthetic.main.main_activity.*
|
||||
import kotlinx.android.synthetic.main.manga_details_controller.*
|
||||
import kotlinx.android.synthetic.main.manga_details_controller.swipe_refresh
|
||||
import kotlinx.android.synthetic.main.manga_info_controller.*
|
||||
import kotlinx.android.synthetic.main.manga_header_item.*
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.io.File
|
||||
@ -94,6 +105,7 @@ class MangaDetailsController : BaseController,
|
||||
FlexibleAdapter.OnItemLongClickListener,
|
||||
ChaptersAdapter.MangaHeaderInterface,
|
||||
ChangeMangaCategoriesDialog.Listener,
|
||||
DownloadCustomChaptersDialog.Listener,
|
||||
NoToolbarElevationController {
|
||||
|
||||
constructor(manga: Manga?,
|
||||
@ -129,12 +141,17 @@ class MangaDetailsController : BaseController,
|
||||
var coverColor:Int? = null
|
||||
var toolbarIsColored = false
|
||||
private var snack: Snackbar? = null
|
||||
private val fromCatalogue = args.getBoolean(FROM_CATALOGUE_EXTRA, false)
|
||||
val fromCatalogue = args.getBoolean(FROM_CATALOGUE_EXTRA, false)
|
||||
var coverDrawable:Drawable? = null
|
||||
/**
|
||||
* Adapter containing a list of chapters.
|
||||
*/
|
||||
private var adapter: ChaptersAdapter? = null
|
||||
|
||||
// Hold a reference to the current animator,
|
||||
// so that it can be canceled mid-way.
|
||||
private var currentAnimator: Animator? = null
|
||||
|
||||
var headerHeight = 0
|
||||
|
||||
init {
|
||||
@ -183,8 +200,10 @@ class MangaDetailsController : BaseController,
|
||||
}
|
||||
|
||||
presenter.onCreate()
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
recycler.setOnScrollChangeListener { _, _, _, _, _ ->
|
||||
|
||||
recycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
super.onScrolled(recyclerView, dx, dy)
|
||||
val atTop = !recycler.canScrollVertically(-1)
|
||||
if ((!atTop && !toolbarIsColored) || (atTop && toolbarIsColored)) {
|
||||
toolbarIsColored = !atTop
|
||||
@ -194,10 +213,10 @@ class MangaDetailsController : BaseController,
|
||||
if (colorAnimator?.isRunning == true) activity?.window?.statusBarColor
|
||||
?: color
|
||||
else ColorUtils.setAlphaComponent(
|
||||
color, if (toolbarIsColored) 0 else 255
|
||||
color, if (toolbarIsColored) 0 else 175
|
||||
)
|
||||
val colorTo = ColorUtils.setAlphaComponent(
|
||||
color, if (toolbarIsColored) 255 else 0
|
||||
color, if (toolbarIsColored) 175 else 0
|
||||
)
|
||||
colorAnimator?.cancel()
|
||||
colorAnimator = ValueAnimator.ofObject(
|
||||
@ -209,13 +228,19 @@ class MangaDetailsController : BaseController,
|
||||
activity?.window?.statusBarColor = (animator.animatedValue as Int)
|
||||
}
|
||||
colorAnimator?.start()
|
||||
val isCurrentController = router?.backstack?.lastOrNull()?.controller() == this
|
||||
val isCurrentController =
|
||||
router?.backstack?.lastOrNull()?.controller() == this@MangaDetailsController
|
||||
if (isCurrentController) setTitle()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
setPaletteColor()
|
||||
|
||||
if (manga?.initialized != true)
|
||||
swipe_refresh.post {
|
||||
swipe_refresh.isRefreshing = true
|
||||
}
|
||||
|
||||
swipe_refresh.setOnRefreshListener {
|
||||
presenter.refreshAll()
|
||||
}
|
||||
@ -230,6 +255,7 @@ class MangaDetailsController : BaseController,
|
||||
override fun onResourceReady(resource: Drawable,
|
||||
transition: Transition<in Drawable>?
|
||||
) {
|
||||
coverDrawable = resource
|
||||
Palette.from(
|
||||
(resource as BitmapDrawable).bitmap).generate {
|
||||
if (recycler == null) return@generate
|
||||
@ -247,8 +273,9 @@ class MangaDetailsController : BaseController,
|
||||
(recycler.findViewHolderForAdapterPosition(0) as? MangaHeaderHolder)
|
||||
?.setBackDrop(backDropColor)
|
||||
if (toolbarIsColored) {
|
||||
(activity as MainActivity).toolbar.setBackgroundColor(backDropColor)
|
||||
activity?.window?.statusBarColor = backDropColor
|
||||
val translucentColor = ColorUtils.setAlphaComponent(backDropColor, 175)
|
||||
(activity as MainActivity).toolbar.setBackgroundColor(translucentColor)
|
||||
activity?.window?.statusBarColor = translucentColor
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -370,6 +397,7 @@ class MangaDetailsController : BaseController,
|
||||
R.id.action_bookmark -> bookmarkChapters(chapters, true)
|
||||
R.id.action_remove_bookmark -> bookmarkChapters(chapters, false)
|
||||
R.id.action_mark_as_read -> markAsRead(chapters)
|
||||
R.id.action_mark_previous_as_read -> markPreviousAsRead(item)
|
||||
R.id.action_mark_as_unread -> markAsUnread(chapters)
|
||||
}
|
||||
true
|
||||
@ -379,6 +407,15 @@ class MangaDetailsController : BaseController,
|
||||
popup.show()
|
||||
}
|
||||
|
||||
private fun markPreviousAsRead(chapter: ChapterItem) {
|
||||
val adapter = adapter ?: return
|
||||
val chapters = if (presenter.sortDescending()) adapter.items.reversed() else adapter.items
|
||||
val chapterPos = chapters.indexOf(chapter)
|
||||
if (chapterPos != -1) {
|
||||
markAsRead(chapters.take(chapterPos))
|
||||
}
|
||||
}
|
||||
|
||||
private fun bookmarkChapters(chapters: List<ChapterItem>, bookmarked: Boolean) {
|
||||
//destroyActionModeIfNeeded()
|
||||
presenter.bookmarkChapters(chapters, bookmarked)
|
||||
@ -417,6 +454,8 @@ class MangaDetailsController : BaseController,
|
||||
menu.findItem(R.id.action_download).isVisible = !presenter.isLockedFromSearch
|
||||
menu.findItem(R.id.action_mark_all_as_read).isVisible =
|
||||
presenter.getNextUnreadChapter() != null && !presenter.isLockedFromSearch
|
||||
menu.findItem(R.id.action_mark_all_as_unread).isVisible =
|
||||
!presenter.allUnread() && !presenter.isLockedFromSearch
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
@ -434,6 +473,7 @@ class MangaDetailsController : BaseController,
|
||||
.negativeButton(android.R.string.cancel)
|
||||
.show()
|
||||
}
|
||||
R.id.action_mark_all_as_unread -> markAsUnread(presenter.chapters)
|
||||
R.id.download_next, R.id.download_next_5, R.id.download_next_10,
|
||||
R.id.download_custom, R.id.download_unread, R.id.download_all
|
||||
-> downloadChapters(item.itemId)
|
||||
@ -446,7 +486,7 @@ class MangaDetailsController : BaseController,
|
||||
* Called to run Intent with [Intent.ACTION_SEND], which show share dialog.
|
||||
*/
|
||||
override fun prepareToShareManga() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && manga_cover.drawable != null)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && coverDrawable != null)
|
||||
GlideApp.with(activity!!).asBitmap().load(presenter.manga).into(object :
|
||||
CustomTarget<Bitmap>() {
|
||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||
@ -486,7 +526,7 @@ class MangaDetailsController : BaseController,
|
||||
}
|
||||
}
|
||||
|
||||
private fun openInWebView() {
|
||||
override fun openInWebView() {
|
||||
val source = presenter.source as? HttpSource ?: return
|
||||
|
||||
val url = try {
|
||||
@ -626,7 +666,14 @@ class MangaDetailsController : BaseController,
|
||||
}
|
||||
|
||||
private fun showCustomDownloadDialog() {
|
||||
// DownloadCustomChaptersDialog(this, presenter.chapters.size).showDialog(router)
|
||||
DownloadCustomChaptersDialog(this, presenter.chapters.size).showDialog(router)
|
||||
}
|
||||
|
||||
override fun downloadCustomChapters(amount: Int) {
|
||||
val chaptersToDownload = presenter.getUnreadChaptersSorted().take(amount)
|
||||
if (chaptersToDownload.isNotEmpty()) {
|
||||
downloadChapters(chaptersToDownload)
|
||||
}
|
||||
}
|
||||
|
||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
||||
@ -710,32 +757,52 @@ class MangaDetailsController : BaseController,
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (presenter.toggleFavorite()) {
|
||||
val categories = presenter.getCategories()
|
||||
val defaultCategoryId = presenter.preferences.defaultCategory()
|
||||
val defaultCategory = categories.find { it.id == defaultCategoryId }
|
||||
when {
|
||||
defaultCategory != null -> presenter.moveMangaToCategory(manga, defaultCategory)
|
||||
defaultCategoryId == 0 || categories.isEmpty() -> // 'Default' or no category
|
||||
presenter.moveMangaToCategory(manga, null)
|
||||
else -> {
|
||||
val ids = presenter.getMangaCategoryIds(manga)
|
||||
val preselected = ids.mapNotNull { id ->
|
||||
categories.indexOfFirst { it.id == id }.takeIf { it != -1 }
|
||||
}.toTypedArray()
|
||||
|
||||
ChangeMangaCategoriesDialog(
|
||||
this,
|
||||
listOf(manga),
|
||||
categories,
|
||||
preselected
|
||||
).showDialog(router)
|
||||
}
|
||||
}
|
||||
showAddedSnack()
|
||||
} else {
|
||||
showRemovedSnack()
|
||||
if (!manga.favorite) {
|
||||
toggleMangaFavorite()
|
||||
}
|
||||
else {
|
||||
val headerHolder = recycler.findViewHolderForAdapterPosition(0) as? MangaHeaderHolder ?:
|
||||
return
|
||||
val popup = PopupMenu(view!!.context, headerHolder.favorite_button)
|
||||
popup.menu.add(R.string.remove_from_library)
|
||||
|
||||
// Set a listener so we are notified if a menu item is clicked
|
||||
popup.setOnMenuItemClickListener {
|
||||
toggleMangaFavorite()
|
||||
true
|
||||
}
|
||||
popup.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleMangaFavorite() {
|
||||
val manga = presenter.manga
|
||||
if (presenter.toggleFavorite()) {
|
||||
val categories = presenter.getCategories()
|
||||
val defaultCategoryId = presenter.preferences.defaultCategory()
|
||||
val defaultCategory = categories.find { it.id == defaultCategoryId }
|
||||
when {
|
||||
defaultCategory != null -> presenter.moveMangaToCategory(manga, defaultCategory)
|
||||
defaultCategoryId == 0 || categories.isEmpty() -> // 'Default' or no category
|
||||
presenter.moveMangaToCategory(manga, null)
|
||||
else -> {
|
||||
val ids = presenter.getMangaCategoryIds(manga)
|
||||
val preselected = ids.mapNotNull { id ->
|
||||
categories.indexOfFirst { it.id == id }.takeIf { it != -1 }
|
||||
}.toTypedArray()
|
||||
|
||||
ChangeMangaCategoriesDialog(
|
||||
this,
|
||||
listOf(manga),
|
||||
categories,
|
||||
preselected
|
||||
).showDialog(router)
|
||||
}
|
||||
}
|
||||
showAddedSnack()
|
||||
} else {
|
||||
showRemovedSnack()
|
||||
}
|
||||
}
|
||||
|
||||
@ -762,7 +829,9 @@ class MangaDetailsController : BaseController,
|
||||
}
|
||||
})
|
||||
}
|
||||
(activity as? MainActivity)?.setUndoSnackBar(snack, fab_favorite)
|
||||
val favButton = (recycler.findViewHolderForAdapterPosition(0)
|
||||
as? MangaHeaderHolder)?.favorite_button
|
||||
(activity as? MainActivity)?.setUndoSnackBar(snack, favButton)
|
||||
}
|
||||
|
||||
override fun mangaPresenter(): MangaDetailsPresenter = presenter
|
||||
@ -775,19 +844,158 @@ class MangaDetailsController : BaseController,
|
||||
/**
|
||||
* Copies a string to clipboard
|
||||
*
|
||||
* @param label Label to show to the user describing the content
|
||||
* @param content the actual text to copy to the board
|
||||
* @param label Label to show to the user describing the content
|
||||
*/
|
||||
private fun copyToClipboard(label: String, content: String, resId: Int) {
|
||||
override fun copyToClipboard(content: String, label: Int) {
|
||||
if (content.isBlank()) return
|
||||
|
||||
val activity = activity ?: return
|
||||
val view = view ?: return
|
||||
|
||||
val contentType = view.context.getString(label)
|
||||
val clipboard = activity.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clipboard.setPrimaryClip(ClipData.newPlainText(label, content))
|
||||
clipboard.setPrimaryClip(ClipData.newPlainText(contentType, content))
|
||||
|
||||
snack = view.snack(view.context.getString(R.string.copied_to_clipboard, view.context
|
||||
.getString(resId)))
|
||||
snack = view.snack(view.context.getString(R.string.copied_to_clipboard, contentType))
|
||||
}
|
||||
|
||||
override fun handleBack(): Boolean {
|
||||
if (manga_cover_full?.visibility == View.VISIBLE)
|
||||
{
|
||||
manga_cover_full?.performClick()
|
||||
return true
|
||||
}
|
||||
return super.handleBack()
|
||||
}
|
||||
|
||||
override fun zoomImageFromThumb(thumbView: View) {
|
||||
// If there's an animation in progress, cancel it immediately and proceed with this one.
|
||||
currentAnimator?.cancel()
|
||||
|
||||
// Load the high-resolution "zoomed-in" image.
|
||||
val expandedImageView = manga_cover_full ?: return
|
||||
val fullBackdrop = full_backdrop
|
||||
val image = coverDrawable ?: return
|
||||
expandedImageView.setImageDrawable(image)
|
||||
|
||||
// Hide the thumbnail and show the zoomed-in view. When the animation
|
||||
// begins, it will position the zoomed-in view in the place of the
|
||||
// thumbnail.
|
||||
thumbView.alpha = 0f
|
||||
expandedImageView.visibility = View.VISIBLE
|
||||
fullBackdrop.visibility = View.VISIBLE
|
||||
|
||||
// Set the pivot point to 0 to match thumbnail
|
||||
|
||||
swipe_refresh.isEnabled = false
|
||||
|
||||
val rect = Rect()
|
||||
thumbView.getGlobalVisibleRect(rect)
|
||||
expandedImageView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
height = thumbView.height
|
||||
width = thumbView.width
|
||||
topMargin = rect.top
|
||||
leftMargin = rect.left
|
||||
rightMargin = rect.right
|
||||
bottomMargin = rect.bottom
|
||||
}
|
||||
expandedImageView.requestLayout()
|
||||
|
||||
expandedImageView.post {
|
||||
val defMargin = 16.dpToPx
|
||||
expandedImageView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
width = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
topMargin = defMargin + headerHeight
|
||||
leftMargin = defMargin
|
||||
rightMargin = defMargin
|
||||
bottomMargin = defMargin + recycler.paddingBottom
|
||||
}
|
||||
val shortAnimationDuration = resources?.getInteger(
|
||||
android.R.integer.config_shortAnimTime
|
||||
) ?: 0
|
||||
|
||||
// TransitionSet for the full cover because using animation for this SUCKS
|
||||
val transitionSet = TransitionSet()
|
||||
val bound = ChangeBounds()
|
||||
transitionSet.addTransition(bound)
|
||||
val changeImageTransform = ChangeImageTransform()
|
||||
transitionSet.addTransition(changeImageTransform)
|
||||
transitionSet.duration = shortAnimationDuration.toLong()
|
||||
TransitionManager.beginDelayedTransition(frame_layout, transitionSet)
|
||||
|
||||
// AnimationSet for backdrop because idk how to use TransitionSet
|
||||
currentAnimator = AnimatorSet().apply {
|
||||
play(
|
||||
ObjectAnimator.ofFloat(fullBackdrop, View.ALPHA, 0f, 0.5f)
|
||||
)
|
||||
duration = shortAnimationDuration.toLong()
|
||||
interpolator = DecelerateInterpolator()
|
||||
addListener(object : AnimatorListenerAdapter() {
|
||||
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
TransitionManager.endTransitions(frame_layout)
|
||||
currentAnimator = null
|
||||
}
|
||||
|
||||
override fun onAnimationCancel(animation: Animator) {
|
||||
TransitionManager.endTransitions(frame_layout)
|
||||
currentAnimator = null
|
||||
}
|
||||
})
|
||||
start()
|
||||
}
|
||||
|
||||
expandedImageView.setOnClickListener {
|
||||
currentAnimator?.cancel()
|
||||
|
||||
val rect = Rect()
|
||||
thumbView.getGlobalVisibleRect(rect)
|
||||
expandedImageView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
height = thumbView.height
|
||||
width = thumbView.width
|
||||
topMargin = rect.top
|
||||
leftMargin = rect.left
|
||||
rightMargin = rect.right
|
||||
bottomMargin = rect.bottom
|
||||
}
|
||||
|
||||
// Zoom out back to tc thumbnail
|
||||
val transitionSet = TransitionSet()
|
||||
val bound = ChangeBounds()
|
||||
transitionSet.addTransition(bound)
|
||||
val changeImageTransform = ChangeImageTransform()
|
||||
transitionSet.addTransition(changeImageTransform)
|
||||
transitionSet.duration = shortAnimationDuration.toLong()
|
||||
TransitionManager.beginDelayedTransition(frame_layout, transitionSet)
|
||||
|
||||
// Animation to remove backdrop and hide the full cover
|
||||
currentAnimator = AnimatorSet().apply {
|
||||
play(ObjectAnimator.ofFloat(fullBackdrop, View.ALPHA, 0f))
|
||||
duration = shortAnimationDuration.toLong()
|
||||
interpolator = DecelerateInterpolator()
|
||||
addListener(object : AnimatorListenerAdapter() {
|
||||
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
thumbView.alpha = 1f
|
||||
expandedImageView.visibility = View.GONE
|
||||
fullBackdrop.visibility = View.GONE
|
||||
swipe_refresh.isEnabled = true
|
||||
currentAnimator = null
|
||||
}
|
||||
|
||||
override fun onAnimationCancel(animation: Animator) {
|
||||
thumbView.alpha = 1f
|
||||
expandedImageView.visibility = View.GONE
|
||||
fullBackdrop.visibility = View.GONE
|
||||
swipe_refresh.isEnabled = true
|
||||
currentAnimator = null
|
||||
}
|
||||
})
|
||||
start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -28,7 +28,6 @@ import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource
|
||||
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
||||
import eu.kanade.tachiyomi.util.system.launchUI
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@ -67,7 +66,7 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
|
||||
var chapters:List<ChapterItem> = emptyList()
|
||||
private set
|
||||
|
||||
var headerItem = ChapterItem(Chapter.createH(), manga)
|
||||
var headerItem = ChapterItem(Chapter.createHeader(controller.fromCatalogue), manga)
|
||||
|
||||
fun onCreate() {
|
||||
isLockedFromSearch = SecureActivityDelegate.shouldBeLocked()
|
||||
@ -75,10 +74,9 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
|
||||
downloadManager.addListener(this)
|
||||
LibraryUpdateService.setListener(this)
|
||||
if (!manga.initialized) {
|
||||
isLoading = true
|
||||
controller.setRefresh(true)
|
||||
controller.updateHeader()
|
||||
launchUI {
|
||||
controller.setRefresh(true)
|
||||
}
|
||||
refreshAll()
|
||||
}
|
||||
else {
|
||||
@ -243,11 +241,9 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
|
||||
true -> { c1, c2 -> c2.chapter_number.compareTo(c1.chapter_number) }
|
||||
false -> { c1, c2 -> c1.chapter_number.compareTo(c2.chapter_number) }
|
||||
}
|
||||
else -> throw NotImplementedError("Unimplemented sorting method")
|
||||
else -> { c1, c2 -> c1.source_order.compareTo(c2.source_order) }
|
||||
}
|
||||
chapters = chapters.sortedWith(Comparator(sortFunction))
|
||||
//if (sortDescending())
|
||||
// chapters = chapters.reversed()
|
||||
return chapters
|
||||
}
|
||||
|
||||
@ -258,6 +254,8 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
|
||||
return chapters.sortedByDescending { it.source_order }.find { !it.read }
|
||||
}
|
||||
|
||||
fun allUnread(): Boolean = chapters.none { it.read }
|
||||
|
||||
fun getUnreadChaptersSorted() = chapters
|
||||
.filter { !it.read && it.status == Download.NOT_DOWNLOADED }
|
||||
.distinctBy { it.name }
|
||||
|
@ -1,5 +1,6 @@
|
||||
package eu.kanade.tachiyomi.ui.manga
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.view.View
|
||||
@ -27,9 +28,12 @@ import java.util.Locale
|
||||
|
||||
class MangaHeaderHolder(
|
||||
private val view: View,
|
||||
private val adapter: ChaptersAdapter
|
||||
private val adapter: ChaptersAdapter,
|
||||
startExpanded: Boolean
|
||||
) : MangaChapterHolder(view, adapter) {
|
||||
|
||||
|
||||
|
||||
init {
|
||||
start_reading_button.setOnClickListener { adapter.coverListener?.readNextChapter() }
|
||||
top_view.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
||||
@ -49,7 +53,8 @@ class MangaHeaderHolder(
|
||||
filter_button.setOnClickListener { adapter.coverListener?.showChapterFilter() }
|
||||
filters_text.setOnClickListener { adapter.coverListener?.showChapterFilter() }
|
||||
chapters_title.setOnClickListener { adapter.coverListener?.showChapterFilter() }
|
||||
share_button.setOnClickListener { adapter.coverListener?.prepareToShareManga() }
|
||||
webview_button.setOnClickListener { adapter.coverListener?.openInWebView() }
|
||||
share_button.setOnClickListener { adapter.coverListener?.prepareToShareManga() }
|
||||
favorite_button.setOnClickListener {
|
||||
adapter.coverListener?.favoriteManga(false)
|
||||
}
|
||||
@ -57,6 +62,17 @@ class MangaHeaderHolder(
|
||||
adapter.coverListener?.favoriteManga(true)
|
||||
true
|
||||
}
|
||||
manga_full_title.setOnLongClickListener {
|
||||
adapter.coverListener?.copyToClipboard(manga_full_title.text.toString(), R.string.manga_info_full_title_label)
|
||||
true
|
||||
}
|
||||
manga_author.setOnLongClickListener {
|
||||
adapter.coverListener?.copyToClipboard(manga_author.text.toString(), R.string.manga_info_author_label)
|
||||
true
|
||||
}
|
||||
manga_cover.setOnClickListener { adapter.coverListener?.zoomImageFromThumb(cover_card) }
|
||||
if (startExpanded)
|
||||
expandDesc()
|
||||
}
|
||||
|
||||
private fun expandDesc() {
|
||||
@ -68,6 +84,7 @@ class MangaHeaderHolder(
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun bind(item: ChapterItem, manga: Manga) {
|
||||
val presenter = adapter.coverListener?.mangaPresenter() ?: return
|
||||
manga_full_title.text = manga.currentTitle()
|
||||
@ -79,11 +96,11 @@ class MangaHeaderHolder(
|
||||
|
||||
if (manga.currentAuthor() == manga.currentArtist() ||
|
||||
manga.currentArtist().isNullOrBlank())
|
||||
manga_author.text = manga.currentAuthor()
|
||||
manga_author.text = manga.currentAuthor()?.trim()
|
||||
else {
|
||||
manga_author.text = "${manga.currentAuthor()?.trim()}, ${manga.currentArtist()}"
|
||||
}
|
||||
manga_summary.text = manga.currentDesc() ?: itemView.context.getString(R.string
|
||||
manga_summary.text = manga.currentDesc()?.trim() ?: itemView.context.getString(R.string
|
||||
.no_description)
|
||||
|
||||
manga_summary.post {
|
||||
@ -100,6 +117,7 @@ class MangaHeaderHolder(
|
||||
manga.mangaType() == Manga.TYPE_MANHWA -> R.string.manhwa
|
||||
manga.mangaType() == Manga.TYPE_MANHUA -> R.string.manhua
|
||||
manga.mangaType() == Manga.TYPE_COMIC -> R.string.comic
|
||||
manga.mangaType() == Manga.TYPE_WEBTOON -> R.string.webtoon
|
||||
else -> R.string.manga
|
||||
}
|
||||
).toLowerCase(Locale.getDefault()))
|
||||
|
@ -45,7 +45,8 @@ class ChapterItem(val chapter: Chapter, val manga: Manga) :
|
||||
}
|
||||
|
||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): MangaChapterHolder {
|
||||
return if (chapter.isHeader) MangaHeaderHolder(view, adapter as ChaptersAdapter)
|
||||
return if (chapter.isHeader) MangaHeaderHolder(view, adapter as ChaptersAdapter,
|
||||
startExpanded = chapter.read)
|
||||
else ChapterMatHolder(view, adapter as ChaptersAdapter)
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.manga.chapter
|
||||
|
||||
import android.content.Context
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.R
|
||||
@ -61,11 +62,14 @@ class ChaptersAdapter(
|
||||
fun coverColor(): Int?
|
||||
fun mangaPresenter(): MangaDetailsPresenter
|
||||
fun prepareToShareManga()
|
||||
fun openInWebView()
|
||||
fun readNextChapter()
|
||||
fun downloadChapter(position: Int)
|
||||
fun topCoverHeight(): Int
|
||||
fun tagClicked(text: String)
|
||||
fun showChapterFilter()
|
||||
fun favoriteManga(longPress: Boolean)
|
||||
fun copyToClipboard(content: String, label: Int)
|
||||
fun zoomImageFromThumb(thumbView: View)
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ class SettingsReaderController : SettingsController() {
|
||||
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_viewer, R.string.webtoon)
|
||||
entryRange = 1..4
|
||||
defaultValue = 1
|
||||
}
|
||||
@ -102,7 +102,7 @@ class SettingsReaderController : SettingsController() {
|
||||
}
|
||||
}
|
||||
preferenceCategory {
|
||||
titleRes = R.string.webtoon_viewer
|
||||
titleRes = R.string.webtoon
|
||||
|
||||
switchPreference {
|
||||
key = Keys.cropBordersWebtoon
|
||||
|
@ -11,14 +11,14 @@ class AutofitRecyclerView @JvmOverloads constructor(context: Context, attrs: Att
|
||||
val manager = GridLayoutManager(context, 1)
|
||||
|
||||
var columnWidth = -1
|
||||
/* set(value) {
|
||||
set(value) {
|
||||
field = value
|
||||
if (value > 0) {
|
||||
if (value > 0 && measuredWidth > 0) {
|
||||
val count = max(1, measuredWidth / value)
|
||||
spanCount = count
|
||||
manager.spanCount = count
|
||||
//manager.spanCount = count
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
var spanCount = 0
|
||||
|
@ -125,7 +125,7 @@
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="32sp">
|
||||
android:layout_height="30sp">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/title"
|
||||
style="@style/TextAppearance.Regular.Body1.Light"
|
||||
|
@ -79,22 +79,22 @@
|
||||
android:drawableEnd="@drawable/ic_sort_white_24dp"
|
||||
android:drawablePadding="6dp"
|
||||
android:drawableTint="@color/gray_button"
|
||||
android:ellipsize="none"
|
||||
android:ellipsize="start"
|
||||
android:focusable="true"
|
||||
android:gravity="center|end"
|
||||
android:textAlignment="textEnd"
|
||||
android:maxLines="2"
|
||||
android:padding="6dp"
|
||||
android:textAlignment="textEnd"
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="normal"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toBottomOf="@id/category_title"
|
||||
app:layout_constraintTop_toTopOf="@id/category_title"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="1.0"
|
||||
app:layout_constraintStart_toEndOf="@id/space"
|
||||
app:layout_constraintTop_toTopOf="@id/category_title"
|
||||
app:layout_constraintWidth_min="100dp"
|
||||
tools:text="Drag and Drop" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -2,13 +2,13 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@id/frame_layout"
|
||||
android:id="@+id/frame_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?android:colorBackground">
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@id/swipe_refresh"
|
||||
android:id="@+id/swipe_refresh"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?android:colorBackground">
|
||||
@ -25,30 +25,6 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/chapters_title"
|
||||
tools:listitem="@layout/chapters_mat_item"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/full_backdrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:alpha="0"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="@color/md_black_1000"
|
||||
android:visibility="invisible"
|
||||
tools:background="@color/md_black_1000" />
|
||||
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/manga_cover_full"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:contentDescription="@string/description_cover"
|
||||
android:visibility="invisible" />
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
<eu.davidea.fastscroller.FastScroller
|
||||
android:id="@+id/fast_scroller"
|
||||
@ -57,4 +33,30 @@
|
||||
android:layout_gravity="end"
|
||||
app:fastScrollerBubbleEnabled="false"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<View
|
||||
android:id="@+id/full_backdrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:alpha="0"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="@color/md_black_1000"
|
||||
android:visibility="invisible"
|
||||
tools:background="@color/md_black_1000" />
|
||||
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/manga_cover_full"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:elevation="10dp"
|
||||
android:translationZ="20dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:contentDescription="@string/description_cover"
|
||||
android:visibility="invisible" />
|
||||
</FrameLayout>
|
@ -64,6 +64,9 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:adjustViewBounds="true"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:contentDescription="@string/description_cover"
|
||||
android:maxHeight="300dp"
|
||||
tools:background="@color/material_grey_700"
|
||||
@ -164,14 +167,29 @@
|
||||
android:text="@string/manga_tracking_tab"
|
||||
app:icon="@drawable/ic_sync_black_24dp" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/share_button"
|
||||
android:id="@+id/webview_button"
|
||||
style="@style/Theme.Widget.CustomImageButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:tooltipText="@string/action_open_in_web_view"
|
||||
android:padding="5dp"
|
||||
android:contentDescription="@string/action_open_in_web_view"
|
||||
android:src="@drawable/ic_open_in_webview_white_24dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/share_button"
|
||||
style="@style/Theme.Widget.CustomImageButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:tooltipText="@string/action_share"
|
||||
android:padding="5dp"
|
||||
android:contentDescription="@string/action_share"
|
||||
android:src="@drawable/ic_share_white_24dp" />
|
||||
@ -214,7 +232,7 @@
|
||||
<View
|
||||
android:id="@+id/more_bg_gradient"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="20sp"
|
||||
android:layout_height="16sp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:background="@drawable/full_gradient"
|
||||
android:backgroundTint="?android:attr/colorBackground"
|
||||
@ -224,7 +242,7 @@
|
||||
<View
|
||||
android:id="@+id/more_bg_solid"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="20sp"
|
||||
android:layout_height="16sp"
|
||||
android:layout_marginStart="45dp"
|
||||
android:background="?android:attr/colorBackground"
|
||||
app:layout_constraintBottom_toBottomOf="@id/manga_summary"
|
||||
@ -331,6 +349,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:padding="5dp"
|
||||
android:tooltipText="@string/action_filter"
|
||||
android:src="@drawable/ic_filter_list_white_24dp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/chapters_title"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
@ -232,7 +232,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="@string/webtoon_viewer"
|
||||
android:text="@string/webtoon"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/action_update"
|
||||
android:title="@string/action_sort_last_updated"
|
||||
android:title="@string/action_sort_latest_chapter"
|
||||
android:icon="@drawable/ic_blank_24dp"/>
|
||||
|
||||
<item
|
||||
|
@ -15,4 +15,7 @@
|
||||
<item android:id="@+id/action_remove_bookmark"
|
||||
android:title="@string/action_remove_bookmark"
|
||||
android:visible="true" />
|
||||
|
||||
<item android:id="@+id/action_mark_previous_as_read"
|
||||
android:title="@string/action_mark_previous_as_read"/>
|
||||
</menu>
|
@ -15,7 +15,7 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/action_update"
|
||||
android:title="@string/action_sort_last_updated"
|
||||
android:title="@string/action_sort_latest_chapter"
|
||||
android:icon="@drawable/ic_blank_24dp"/>
|
||||
<item
|
||||
android:id="@+id/action_unread"
|
||||
|
@ -11,7 +11,7 @@
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:icon="@drawable/ic_file_download_white_24dp"
|
||||
android:title="@string/action_share"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<item
|
||||
@ -42,8 +42,9 @@
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_open_in_web_view"
|
||||
android:title="@string/action_open_in_web_view"
|
||||
android:id="@+id/action_mark_all_as_unread"
|
||||
android:icon="@drawable/ic_done_all_white_24dp"
|
||||
android:title="@string/action_mark_all_as_unread"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
|
@ -131,7 +131,7 @@
|
||||
<string name="left_to_right_viewer">من اليسار لليمين</string>
|
||||
<string name="right_to_left_viewer">من اليمين لليسار</string>
|
||||
<string name="vertical_viewer">عموديا</string>
|
||||
<string name="webtoon_viewer">ويبتون</string>
|
||||
<string name="webtoon">ويبتون</string>
|
||||
<string name="pref_image_scale_type">كيفية ضبط الأبعاد</string>
|
||||
<string name="scale_type_fit_screen">ملائمة الشاشة</string>
|
||||
<string name="scale_type_stretch">التمدد</string>
|
||||
|
@ -120,7 +120,7 @@
|
||||
<string name="left_to_right_viewer">От ляво надясно</string>
|
||||
<string name="right_to_left_viewer">От дясно наляво</string>
|
||||
<string name="vertical_viewer">Вертикално</string>
|
||||
<string name="webtoon_viewer">Уебкомикс</string>
|
||||
<string name="webtoon">Уебкомикс</string>
|
||||
<string name="pref_image_scale_type">Увеличение</string>
|
||||
<string name="scale_type_fit_screen">Запълване</string>
|
||||
<string name="scale_type_stretch">Разтегляне</string>
|
||||
|
@ -130,7 +130,7 @@
|
||||
<string name="left_to_right_viewer">বাম থেকে ডানে</string>
|
||||
<string name="right_to_left_viewer">ডান থেকে বামে</string>
|
||||
<string name="vertical_viewer">সোঁজাসুজি</string>
|
||||
<string name="webtoon_viewer">ওয়েবটুন</string>
|
||||
<string name="webtoon">ওয়েবটুন</string>
|
||||
<string name="pref_image_scale_type">স্কেল ধরণ</string>
|
||||
<string name="scale_type_fit_screen">সম্পূর্ণ স্ক্রিন</string>
|
||||
<string name="scale_type_stretch">ছড়ানো</string>
|
||||
|
@ -151,7 +151,7 @@
|
||||
<string name="left_to_right_viewer">D\'esquerra a dreta</string>
|
||||
<string name="right_to_left_viewer">De dreta a esquerra</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Webtoons</string>
|
||||
<string name="webtoon">Webtoons</string>
|
||||
<string name="pager_viewer">Paginat</string>
|
||||
<string name="pref_image_scale_type">Tipus d\'escalat</string>
|
||||
<string name="scale_type_fit_screen">Ajusta a la pantalla</string>
|
||||
|
@ -242,7 +242,7 @@
|
||||
<string name="pref_viewer_type">Výchozí prohlížeč</string>
|
||||
<string name="default_viewer">Výchozí</string>
|
||||
<string name="vertical_viewer">Vertikální</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Typ úpravy velikosti</string>
|
||||
<string name="scale_type_fit_screen">Přizpůsobit obrazovce</string>
|
||||
<string name="scale_type_stretch">Natáhnout</string>
|
||||
|
@ -124,7 +124,7 @@
|
||||
<string name="left_to_right_viewer">Links nach rechts</string>
|
||||
<string name="right_to_left_viewer">Rechts nach links</string>
|
||||
<string name="vertical_viewer">Vertikal</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Skalierung</string>
|
||||
<string name="scale_type_fit_screen">Bild ausfüllen</string>
|
||||
<string name="scale_type_stretch">Strecken</string>
|
||||
|
@ -152,7 +152,7 @@
|
||||
<string name="left_to_right_viewer">Αριστερά προς τα δεξιά</string>
|
||||
<string name="right_to_left_viewer">Δεξιά προς τα αριστερά</string>
|
||||
<string name="vertical_viewer">Κάθετα</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pager_viewer">Σελιδοποίηση</string>
|
||||
<string name="pref_image_scale_type">Διάσταση κλίμακας</string>
|
||||
<string name="scale_type_fit_screen">Προσαρμογή στην οθόνη</string>
|
||||
|
@ -92,7 +92,7 @@
|
||||
<string name="left_to_right_viewer">Izquierda a derecha</string>
|
||||
<string name="right_to_left_viewer">Derecha a izquierda</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Tipo de escalado</string>
|
||||
<string name="scale_type_fit_screen">Ajustar a la pantalla</string>
|
||||
<string name="scale_type_stretch">Estirado</string>
|
||||
|
@ -209,7 +209,7 @@
|
||||
<string name="left_to_right_viewer">Vasemmalta oikealle</string>
|
||||
<string name="right_to_left_viewer">Oikealta vasemmalle</string>
|
||||
<string name="vertical_viewer">Pystysuora</string>
|
||||
<string name="webtoon_viewer">Webtoon-tyylinen</string>
|
||||
<string name="webtoon">Webtoon-tyylinen</string>
|
||||
<string name="pager_viewer">Sivut</string>
|
||||
<string name="pref_image_scale_type">Skaalauksen tyyppi</string>
|
||||
<string name="scale_type_fit_screen">Sovita näyttöön</string>
|
||||
|
@ -112,7 +112,7 @@
|
||||
<string name="left_to_right_viewer">Gauche à droite</string>
|
||||
<string name="right_to_left_viewer">Droite à gauche</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Type de mise à l\'échelle</string>
|
||||
<string name="scale_type_fit_screen">Adapter à l\'écran</string>
|
||||
<string name="scale_type_stretch">Étirer</string>
|
||||
|
@ -127,7 +127,7 @@
|
||||
<string name="left_to_right_viewer">बाएं से दाएं</string>
|
||||
<string name="right_to_left_viewer">दाएं से बाएं</string>
|
||||
<string name="vertical_viewer">शीर्ष से असंतत</string>
|
||||
<string name="webtoon_viewer">वेबटून</string>
|
||||
<string name="webtoon">वेबटून</string>
|
||||
<string name="pref_image_scale_type">मापन प्ररूप</string>
|
||||
<string name="scale_type_fit_screen">उपयुक्त स्क्रीन</string>
|
||||
<string name="scale_type_stretch">खींचें</string>
|
||||
|
@ -142,7 +142,7 @@
|
||||
<string name="left_to_right_viewer">Balról jobbra</string>
|
||||
<string name="right_to_left_viewer">Jobbról balra</string>
|
||||
<string name="vertical_viewer">Függőlegesen</string>
|
||||
<string name="webtoon_viewer">Folytonos</string>
|
||||
<string name="webtoon">Folytonos</string>
|
||||
<string name="scale_type_fit_screen">Képernyőhöz igazítás</string>
|
||||
<string name="label_migration">Forrás váltása</string>
|
||||
<string name="label_extensions">Bővítmények</string>
|
||||
|
@ -126,7 +126,7 @@
|
||||
<string name="left_to_right_viewer">Kiri ke kanan</string>
|
||||
<string name="right_to_left_viewer">Kanan ke kiri</string>
|
||||
<string name="vertical_viewer">Vertikal</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Tipe skala</string>
|
||||
<string name="scale_type_fit_screen">Pas layar</string>
|
||||
<string name="scale_type_stretch">Rentangkan</string>
|
||||
|
@ -111,7 +111,7 @@
|
||||
<string name="left_to_right_viewer">Da sinistra a destra</string>
|
||||
<string name="right_to_left_viewer">Da destra a sinistra</string>
|
||||
<string name="vertical_viewer">Verticale</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Scala</string>
|
||||
<string name="scale_type_fit_screen">Adatta a schermo</string>
|
||||
<string name="scale_type_stretch">Riempi schermo</string>
|
||||
|
@ -130,7 +130,7 @@
|
||||
<string name="left_to_right_viewer">左から右</string>
|
||||
<string name="right_to_left_viewer">右から左</string>
|
||||
<string name="vertical_viewer">縦反転</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pager_viewer">ページャ</string>
|
||||
<string name="pref_image_scale_type">スケールの種類</string>
|
||||
<string name="scale_type_fit_screen">フィット画面</string>
|
||||
|
@ -140,7 +140,7 @@
|
||||
<string name="left_to_right_viewer">왼쪽에서 오른쪽으로</string>
|
||||
<string name="right_to_left_viewer">오른쪽에서 왼쪽으로</string>
|
||||
<string name="vertical_viewer">수직으로</string>
|
||||
<string name="webtoon_viewer">웹툰</string>
|
||||
<string name="webtoon">웹툰</string>
|
||||
<string name="scale_type_stretch">늘리기</string>
|
||||
<string name="scale_type_fit_width">가로 맞추기</string>
|
||||
<string name="scale_type_fit_height">세로 맞추기</string>
|
||||
|
@ -126,7 +126,7 @@
|
||||
<string name="left_to_right_viewer">Kiri ke kanan</string>
|
||||
<string name="right_to_left_viewer">Kanan ke kiri</string>
|
||||
<string name="vertical_viewer">Menegak</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Skala</string>
|
||||
<string name="scale_type_fit_screen">Muat skrin</string>
|
||||
<string name="scale_type_stretch">Regang</string>
|
||||
|
@ -147,7 +147,7 @@
|
||||
<string name="left_to_right_viewer">Venstre til høyre</string>
|
||||
<string name="right_to_left_viewer">Høyre til venstre</string>
|
||||
<string name="vertical_viewer">Loddrett</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Skalatype</string>
|
||||
<string name="scale_type_fit_screen">Tilpass skjerm</string>
|
||||
<string name="scale_type_stretch">Strekk</string>
|
||||
|
@ -105,7 +105,7 @@
|
||||
<string name="left_to_right_viewer">Links naar rechts</string>
|
||||
<string name="right_to_left_viewer">Rechts naar links</string>
|
||||
<string name="vertical_viewer">Verticaal</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="scale_type_stretch">Uitrekken</string>
|
||||
<string name="scale_type_fit_width">Aanpassen aan de breedte</string>
|
||||
<string name="scale_type_fit_height">Aanpassen aan de hoogte</string>
|
||||
|
@ -184,7 +184,7 @@
|
||||
<string name="left_to_right_viewer">Od lewej do prawej</string>
|
||||
<string name="right_to_left_viewer">Od prawej do lewej</string>
|
||||
<string name="vertical_viewer">Pionowo</string>
|
||||
<string name="webtoon_viewer">Web-komiks</string>
|
||||
<string name="webtoon">Web-komiks</string>
|
||||
<string name="pref_viewer_type">Domyślny styl czytania</string>
|
||||
<string name="scale_type_fit_screen">Dopasuj do ekranu</string>
|
||||
<string name="scale_type_stretch">Rozciągnij</string>
|
||||
|
@ -126,7 +126,7 @@
|
||||
<string name="left_to_right_viewer">Esquerda para direita</string>
|
||||
<string name="right_to_left_viewer">Direita para esquerda</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Vertical contínuo</string>
|
||||
<string name="webtoon">Vertical contínuo</string>
|
||||
<string name="pref_image_scale_type">Tipo de escala</string>
|
||||
<string name="scale_type_fit_screen">Ajustar à tela</string>
|
||||
<string name="scale_type_stretch">Estender</string>
|
||||
|
@ -95,7 +95,7 @@
|
||||
<string name="left_to_right_viewer">Esquerda para Direita</string>
|
||||
<string name="right_to_left_viewer">Direita para Esquerda</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pref_image_scale_type">Tipo de escala</string>
|
||||
<string name="scale_type_fit_screen">Ajustar ao ecrã</string>
|
||||
<string name="scale_type_stretch">Esticar</string>
|
||||
|
@ -152,7 +152,7 @@
|
||||
<string name="left_to_right_viewer">De la stânga la dreapta</string>
|
||||
<string name="right_to_left_viewer">De la dreapta la stânga</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Benzi desenate web</string>
|
||||
<string name="webtoon">Benzi desenate web</string>
|
||||
<string name="pager_viewer">Setări pagini</string>
|
||||
<string name="pref_image_scale_type">Tip de mărime</string>
|
||||
<string name="scale_type_fit_screen">Potrivire ecran</string>
|
||||
|
@ -652,7 +652,7 @@
|
||||
|
||||
<string name="want_to_read">Хочу прочитать</string>
|
||||
|
||||
<string name="webtoon_viewer">Веб-комикс</string>
|
||||
<string name="webtoon">Веб-комикс</string>
|
||||
|
||||
<string name="white_background">Белый</string>
|
||||
|
||||
|
@ -153,7 +153,7 @@
|
||||
<string name="left_to_right_viewer">Dae manca a destra</string>
|
||||
<string name="right_to_left_viewer">Dae destra a manca</string>
|
||||
<string name="vertical_viewer">Verticale</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pager_viewer">Impaginadore</string>
|
||||
<string name="pref_image_scale_type">Casta de iscala</string>
|
||||
<string name="scale_type_fit_screen">Adata a s\'ischermu</string>
|
||||
|
@ -166,7 +166,7 @@
|
||||
<string name="left_to_right_viewer">Zľava doprava</string>
|
||||
<string name="right_to_left_viewer">Sprava doľava</string>
|
||||
<string name="vertical_viewer">Vertikálne</string>
|
||||
<string name="webtoon_viewer">Ako Webtoon - Zhora dole a strany sa spájajú do jednej dlhej</string>
|
||||
<string name="webtoon">Ako Webtoon - Zhora dole a strany sa spájajú do jednej dlhej</string>
|
||||
<string name="pager_viewer">pager</string>
|
||||
<string name="pref_image_scale_type">Mód škálovania</string>
|
||||
<string name="scale_type_fit_screen">Prispôsobiť obrazovke</string>
|
||||
|
@ -153,7 +153,7 @@
|
||||
<string name="left_to_right_viewer">S leva na desno</string>
|
||||
<string name="right_to_left_viewer">S desna na levo</string>
|
||||
<string name="vertical_viewer">Verticalno</string>
|
||||
<string name="webtoon_viewer">"Webtoon "</string>
|
||||
<string name="webtoon">"Webtoon "</string>
|
||||
<string name="pager_viewer">Stranično</string>
|
||||
<string name="pref_image_scale_type">Tip skaliranja</string>
|
||||
<string name="scale_type_fit_screen">Popuni ekran</string>
|
||||
|
@ -152,7 +152,7 @@
|
||||
<string name="left_to_right_viewer">Vänster till höger</string>
|
||||
<string name="right_to_left_viewer">Höger till vänster</string>
|
||||
<string name="vertical_viewer">Vertikal</string>
|
||||
<string name="webtoon_viewer">Webbtoon</string>
|
||||
<string name="webtoon">Webbtoon</string>
|
||||
<string name="pager_viewer">Sidläsare</string>
|
||||
<string name="pref_image_scale_type">Skal typ</string>
|
||||
<string name="scale_type_fit_screen">Passa skärmen</string>
|
||||
|
@ -155,7 +155,7 @@
|
||||
<string name="left_to_right_viewer">จากซ้ายไปขวา</string>
|
||||
<string name="right_to_left_viewer">จากขวาไปซ้าย</string>
|
||||
<string name="vertical_viewer">แนวตั้ง</string>
|
||||
<string name="webtoon_viewer">เว็บตูน</string>
|
||||
<string name="webtoon">เว็บตูน</string>
|
||||
<string name="pager_viewer">การแสดงหน้า</string>
|
||||
<string name="pref_image_scale_type">ชนิดของมาตราส่วน</string>
|
||||
<string name="scale_type_fit_screen">หน้าจอพอดี</string>
|
||||
|
@ -156,7 +156,7 @@
|
||||
<string name="left_to_right_viewer">Kaliwa pakanan</string>
|
||||
<string name="right_to_left_viewer">Kanan pakaliwa</string>
|
||||
<string name="vertical_viewer">Patayo</string>
|
||||
<string name="webtoon_viewer">Pa-webtoon</string>
|
||||
<string name="webtoon">Pa-webtoon</string>
|
||||
<string name="pager_viewer">Pager</string>
|
||||
<string name="pref_image_scale_type">Uri ng pag-scale</string>
|
||||
<string name="scale_type_fit_screen">Pagkasyahin sa screen</string>
|
||||
|
@ -151,7 +151,7 @@
|
||||
<string name="left_to_right_viewer">Soldan sağa</string>
|
||||
<string name="right_to_left_viewer">Sağdan sola</string>
|
||||
<string name="vertical_viewer">Dikey</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pager_viewer">Sayfalama</string>
|
||||
<string name="pref_image_scale_type">Boyutlandırma türü</string>
|
||||
<string name="scale_type_fit_screen">Ekrana sığdır</string>
|
||||
|
@ -152,7 +152,7 @@
|
||||
<string name="left_to_right_viewer">Зліва направо</string>
|
||||
<string name="right_to_left_viewer">Справа наліво</string>
|
||||
<string name="vertical_viewer">Вертикальний</string>
|
||||
<string name="webtoon_viewer">Комікс</string>
|
||||
<string name="webtoon">Комікс</string>
|
||||
<string name="pager_viewer">Сторінка</string>
|
||||
<string name="pref_image_scale_type">Масштабування</string>
|
||||
<string name="scale_type_fit_screen">По екрану</string>
|
||||
|
@ -115,7 +115,7 @@
|
||||
<string name="left_to_right_viewer">Trái sang phải</string>
|
||||
<string name="right_to_left_viewer">Phải sang trái</string>
|
||||
<string name="vertical_viewer">Theo chiều dọc</string>
|
||||
<string name="webtoon_viewer">Chế độ cuộn</string>
|
||||
<string name="webtoon">Chế độ cuộn</string>
|
||||
<string name="pref_image_scale_type">Kiểu tỉ lệ</string>
|
||||
<string name="scale_type_fit_screen">Vừa màn hình</string>
|
||||
<string name="scale_type_stretch">Kéo dãn</string>
|
||||
|
@ -151,7 +151,7 @@
|
||||
<string name="left_to_right_viewer">从左到右</string>
|
||||
<string name="right_to_left_viewer">从右到左</string>
|
||||
<string name="vertical_viewer">从上到下</string>
|
||||
<string name="webtoon_viewer">卷纸模式</string>
|
||||
<string name="webtoon">卷纸模式</string>
|
||||
<string name="pager_viewer">页面</string>
|
||||
<string name="pref_image_scale_type">显示模式</string>
|
||||
<string name="scale_type_fit_screen">填充屏幕</string>
|
||||
|
@ -222,7 +222,7 @@
|
||||
<string name="left_to_right_viewer">由左至右</string>
|
||||
<string name="right_to_left_viewer">由右至左</string>
|
||||
<string name="vertical_viewer">由上至下</string>
|
||||
<string name="webtoon_viewer">Webtoon 式</string>
|
||||
<string name="webtoon">Webtoon 式</string>
|
||||
<string name="pager_viewer">單頁式</string>
|
||||
<string name="pref_image_scale_type">縮放模式</string>
|
||||
<string name="scale_type_fit_screen">符合螢幕</string>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<item>@string/left_to_right_viewer</item>
|
||||
<item>@string/right_to_left_viewer</item>
|
||||
<item>@string/vertical_viewer</item>
|
||||
<item>@string/webtoon_viewer</item>
|
||||
<item>@string/webtoon</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="reader_themes">
|
||||
|
@ -69,6 +69,7 @@
|
||||
<string name="action_select_all">Select all</string>
|
||||
<string name="action_mark_as_read">Mark as read</string>
|
||||
<string name="action_mark_all_as_read">Mark all as read</string>
|
||||
<string name="action_mark_all_as_unread">Mark all as unread</string>
|
||||
<string name="action_mark_as_unread">Mark as unread</string>
|
||||
<string name="action_mark_previous_as_read">Mark previous as read</string>
|
||||
<string name="action_mark_multiple">Mark multiple</string>
|
||||
@ -126,7 +127,8 @@
|
||||
<string name="action_copy_now">Copy now</string>
|
||||
<string name="action_reorganize_by">Reorder</string>
|
||||
<string name="action_reverse_order">Reverse order</string>
|
||||
<string name="action_sort_last_updated">Last updated</string>
|
||||
<string name="action_sort_last_updated">Last Updated</string>
|
||||
<string name="action_sort_latest_chapter">Latest chapter</string>
|
||||
<string name="action_hide_title">Hide title</string>
|
||||
<string name="action_show_title">Show title</string>
|
||||
<string name="action_newest">Newest</string>
|
||||
@ -298,7 +300,7 @@
|
||||
<string name="left_to_right_viewer">Left to right</string>
|
||||
<string name="right_to_left_viewer">Right to left</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="pager_viewer">Pager</string>
|
||||
<string name="pref_image_scale_type">Scale type</string>
|
||||
<string name="scale_type_fit_screen">Fit screen</string>
|
||||
@ -509,6 +511,7 @@
|
||||
</plurals>
|
||||
<string name="no_description">No description</string>
|
||||
<string name="mark_all_as_read_message">Mark all chapters as read?</string>
|
||||
<string name="remove_from_library">Remove from library</string>
|
||||
|
||||
<!-- Manga chapters fragment -->
|
||||
<string name="start_reading">Start reading</string>
|
||||
|
Loading…
Reference in New Issue
Block a user