Added Reader type for manga to seperate manga type

Using manhwa wording again
Fixes for swipe refresh in manga page
Fixed layout when expaning detials in manga info
This commit is contained in:
Jay 2020-03-03 12:37:28 -08:00
parent d58923acbf
commit dace5b4de7
13 changed files with 132 additions and 95 deletions

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.data.database.models
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import uy.kohesive.injekt.injectLazy
import java.util.Locale
@ -38,11 +39,9 @@ interface Manga : SManga {
val currentTags = currentGenres()?.split(",")?.map { it.trim().toLowerCase(Locale.US) }
return if (currentTags?.any
{ tag ->
tag == "long strip" || tag == "manhwa" ||
tag.contains("webtoon")
} == true ||
sourceManager.getOrStub(source).name.contains("webtoon", true))
TYPE_WEBTOON
tag.startsWith("english") || tag == "comic"
} == true)
TYPE_COMIC
else if (currentTags?.any
{ tag ->
tag.startsWith("chinese") || tag == "manhua"
@ -50,12 +49,33 @@ interface Manga : SManga {
TYPE_MANHUA
else if (currentTags?.any
{ tag ->
tag.startsWith("english") || tag == "comic"
} == true)
TYPE_COMIC
tag == "long strip" || tag == "manhwa" ||
tag.contains("webtoon")
} == true ||
sourceManager.getOrStub(source).name.contains("webtoon", true))
TYPE_MANHWA
else TYPE_MANGA
}
fun defaultReaderType(): Int {
val sourceManager: SourceManager by injectLazy()
val currentTags = currentGenres()?.split(",")?.map { it.trim().toLowerCase(Locale.US) }
return if (currentTags?.any
{ tag ->
tag == "long strip" || tag == "manhwa" ||
tag.contains("webtoon")
} == true ||
sourceManager.getOrStub(source).name.contains("webtoon", true))
ReaderActivity.WEBTOON
else if (currentTags?.any
{ tag ->
tag.startsWith("chinese") || tag == "manhua" ||
tag.startsWith("english") || tag == "comic"
} == true)
ReaderActivity.LEFT_TO_RIGHT
else 0
}
// Used to display the chapter's title one way or another
var displayMode: Int
get() = chapter_flags and DISPLAY_MASK
@ -106,8 +126,12 @@ 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_WEBTOON = 1
const val TYPE_MANHWA = 1
const val TYPE_MANHUA = 2
const val TYPE_COMIC = 3

View File

@ -174,7 +174,7 @@ class LibraryPresenter(
if ((filterMangaType == Manga.TYPE_MANHUA) && mangaType != Manga.TYPE_MANHUA)
return@f false
if ((filterMangaType == Manga.TYPE_COMIC) && mangaType != Manga.TYPE_COMIC) return@f false
if ((filterMangaType == Manga.TYPE_WEBTOON) && mangaType != Manga.TYPE_WEBTOON) return@f false
if ((filterMangaType == Manga.TYPE_MANHWA) && mangaType != Manga.TYPE_MANHWA) return@f false
}

View File

@ -215,7 +215,7 @@ class SortFilterBottomSheet @JvmOverloads constructor(context: Context, attrs: A
}
val librryManga = db.getLibraryMangas().executeAsBlocking()
val types = mutableListOf<Int>()
if (librryManga.any { it.mangaType() == Manga.TYPE_WEBTOON }) types.add(R.string.webtoon_viewer)
if (librryManga.any { it.mangaType() == Manga.TYPE_MANHWA }) types.add(R.string.manhwa)
if (librryManga.any { it.mangaType() == Manga.TYPE_MANHUA }) types.add(R.string.manhua)
if (librryManga.any { it.mangaType() == Manga.TYPE_COMIC }) types.add(R.string.comic)
if (types.isNotEmpty()) {

View File

@ -57,6 +57,7 @@ import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
import eu.kanade.tachiyomi.util.view.getText
import eu.kanade.tachiyomi.util.view.snack
@ -235,7 +236,7 @@ class MangaChaptersController : BaseController,
}
fun showError(message: String) {
swipe_refresh.isRefreshing = false
swipe_refresh?.isRefreshing = false
view?.snack(message)
}
@ -277,7 +278,7 @@ class MangaChaptersController : BaseController,
adapter?.updateDataSet(listOf(ChapterItem(Chapter.createH(), presenter.manga)))
}
else {
swipe_refresh.isRefreshing = false
swipe_refresh?.isRefreshing = false
adapter?.updateDataSet(
listOf(ChapterItem(Chapter.createH(), presenter.manga)) + presenter.chapters
)
@ -286,8 +287,9 @@ class MangaChaptersController : BaseController,
fun updateChapters(chapters: List<ChapterItem>) {
swipe_refresh.isRefreshing = false
swipe_refresh?.isRefreshing = false
if (presenter.chapters.isEmpty() && fromCatalogue && !presenter.hasRequested) {
launchUI { swipe_refresh?.isRefreshing = true }
presenter.fetchChaptersFromSource()
}
adapter?.updateDataSet(listOf(ChapterItem(Chapter.createH(), presenter.manga)) + chapters)

View File

@ -31,7 +31,7 @@ class MangaHeaderHolder(
init {
start_reading_button.setOnClickListener { adapter.coverListener?.readNextChapter() }
top_view.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = adapter.coverListener?.topCoverHeight() ?: 0
height = adapter.coverListener?.topCoverHeight() ?: 0
}
more_button.setOnClickListener { expandDesc() }
manga_summary.setOnClickListener { expandDesc() }
@ -86,11 +86,13 @@ class MangaHeaderHolder(
if (manga_summary.lineCount < 3 && manga.currentGenres().isNullOrBlank()) {
more_button_group.gone()
}
else
more_button_group.visible()
}
manga_summary_label.text = itemView.context.getString(R.string.about_this,
itemView.context.getString(
when {
manga.mangaType() == Manga.TYPE_WEBTOON -> R.string.webtoon_viewer
manga.mangaType() == Manga.TYPE_MANHWA -> R.string.manhwa
manga.mangaType() == Manga.TYPE_MANHUA -> R.string.manhua
manga.mangaType() == Manga.TYPE_COMIC -> R.string.comic
else -> R.string.manga
@ -149,7 +151,7 @@ class MangaHeaderHolder(
chapters_title.text = itemView.resources.getQuantityString(R.plurals.chapters, count, count)
top_view.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = adapter.coverListener?.topCoverHeight() ?: 0
height = adapter.coverListener?.topCoverHeight() ?: 0
}
manga_status.text = (itemView.context.getString( when (manga.status) {
@ -173,11 +175,16 @@ class MangaHeaderHolder(
fun setTopHeight(newHeight: Int) {
top_view.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = newHeight
height = newHeight
}
}
fun setBackDrop(color: Int) {
true_backdrop.setBackgroundColor(color)
}
override fun onLongClick(view: View?): Boolean {
super.onLongClick(view)
return false
}
}

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.ui.manga
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category
@ -17,6 +18,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
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.system.launchUI
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@ -50,10 +52,17 @@ class MangaPresenter(private val controller: MangaChaptersController,
fun onCreate() {
isLockedFromSearch = SecureActivityDelegate.shouldBeLocked()
downloadManager.addListener(this)
if (!manga.initialized)
fetchMangaFromSource()
updateChapters()
controller.updateChapters(this.chapters)
if (!manga.initialized) {
controller.updateHeader()
launchUI {
controller.setRefresh(true)
}
refreshAll()
}
else {
updateChapters()
controller.updateChapters(this.chapters)
}
}
fun onDestroy() {
@ -363,7 +372,9 @@ class MangaPresenter(private val controller: MangaChaptersController,
}
private fun trimException(e: java.lang.Exception): String {
return e.message?.split(": ")?.drop(1)?.joinToString(": ") ?: "Error"
return (if (e.message?.contains(": ") == true)
e.message?.split(": ")?.drop(1)?.joinToString(": ")
else e.message) ?: preferences.context.getString(R.string.unknown_error)
}
/**

View File

@ -23,6 +23,7 @@ import android.widget.SeekBar
import androidx.appcompat.app.AppCompatDelegate
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.snackbar.Snackbar
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
@ -49,6 +50,7 @@ import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.snack
import eu.kanade.tachiyomi.util.view.visible
import eu.kanade.tachiyomi.widget.SimpleAnimationListener
import eu.kanade.tachiyomi.widget.SimpleSeekBarListener
@ -64,6 +66,7 @@ import rx.subscriptions.CompositeSubscription
import timber.log.Timber
import uy.kohesive.injekt.injectLazy
import java.io.File
import java.util.Locale
import java.util.concurrent.TimeUnit
import kotlin.math.abs
@ -125,6 +128,8 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>(),
@Suppress("DEPRECATION")
private var progressDialog: ProgressDialog? = null
private var snackbar:Snackbar? = null
companion object {
@Suppress("unused")
const val LEFT_TO_RIGHT = 1
@ -196,6 +201,8 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>(),
bottomSheet = null
progressDialog?.dismiss()
progressDialog = null
snackbar?.dismiss()
snackbar = null
}
/**
@ -323,6 +330,7 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>(),
menuVisible = visible
if (visible) coroutine?.cancel()
if (visible) {
snackbar?.dismiss()
systemUi?.show()
reader_menu.visibility = View.VISIBLE
reader_menu_bottom.visibility = View.VISIBLE
@ -370,13 +378,34 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>(),
*/
fun setManga(manga: Manga) {
val prevViewer = viewer
val newViewer = when (presenter.getMangaViewer()) {
val noDefault = manga.viewer == -1
val mangaViewer = presenter.getMangaViewer()
val newViewer = when (mangaViewer) {
RIGHT_TO_LEFT -> R2LPagerViewer(this)
VERTICAL -> VerticalPagerViewer(this)
WEBTOON -> WebtoonViewer(this)
else -> L2RPagerViewer(this)
}
if (noDefault && presenter.manga?.viewer!! > 0) {
snackbar = reader_layout.snack(
getString(
R.string.reading_mode, getString(
when (mangaViewer) {
RIGHT_TO_LEFT -> R.string.right_to_left_viewer
VERTICAL -> R.string.vertical_viewer
WEBTOON -> R.string.webtoon_style
else -> R.string.left_to_right_viewer
}
).toLowerCase(Locale.getDefault())
), 8000
) {
setAction(R.string.action_use_default) {
presenter.setMangaViewer(0)
}
}
}
// Destroy previous viewer if there was one
if (prevViewer != null) {
prevViewer.destroy()

View File

@ -397,12 +397,7 @@ class ReaderPresenter(
fun getMangaViewer(): Int {
val manga = manga ?: return preferences.defaultViewer()
if (manga.viewer == -1) {
val type = when(manga.mangaType()) {
Manga.TYPE_WEBTOON -> ReaderActivity.WEBTOON
Manga.TYPE_COMIC, Manga.TYPE_MANHUA -> ReaderActivity.LEFT_TO_RIGHT
else -> 0
}
manga.viewer = type
manga.viewer = manga.defaultReaderType()
db.updateMangaViewer(manga).asRxObservable().subscribe()
}
return if (manga.viewer == 0) preferences.defaultViewer() else manga.viewer

View File

@ -65,7 +65,7 @@ Unit)? = null): Snackbar {
snack.f()
}
val theme = Injekt.get<PreferencesHelper>().theme()
if (theme == 3 || theme == 6) {
if (theme == 3) {
val textView: TextView =
snack.view.findViewById(com.google.android.material.R.id.snackbar_text)
val button: Button? =

View File

@ -6,30 +6,15 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/guideline"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="52dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/true_backdrop" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="137dp" />
<View
android:id="@+id/true_backdrop"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/bottom_line"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_min="200dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/bottom_line"
app:layout_constraintVertical_bias="0.0"
tools:background="@color/material_red_400" />
@ -56,46 +41,22 @@
<View
android:id="@+id/top_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintBottom_toTopOf="@id/top_line"
android:layout_height="100dp"
android:layout_marginTop="0dp"
app:layout_constraintBottom_toTopOf="@id/cover_card"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.48000002" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/top_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:constraint_referenced_ids="cover_card,manga_layout"
tools:layout_editor_absoluteY="93dp" />
<FrameLayout
android:id="@+id/manga_layout"
android:layout_width="100dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="@id/guideline"
app:layout_constraintDimensionRatio="h,7:10"
app:layout_constraintStart_toStartOf="parent">
</FrameLayout>
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/cover_card"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginStart="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="@id/guideline"
app:layout_constraintEnd_toEndOf="@id/manga_layout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/top_view"
app:layout_constraintTop_toTopOf="@id/true_backdrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintVertical_bias="1.0">
<ImageView
@ -123,19 +84,20 @@
android:textIsSelectable="false"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/manga_layout"
app:layout_constraintStart_toEndOf="@id/cover_card"
app:layout_constraintTop_toTopOf="@id/cover_card"
tools:text="Title Example" />
<TextView
android:id="@+id/manga_author"
android:textAppearance="@style/TextAppearance.Regular.Body1.SemiBold"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="?android:attr/textColorSecondary"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:maxLines="1"
android:maxLines="2"
android:text="@string/manga_info_author_label"
android:textAppearance="@style/TextAppearance.Regular.Body1.SemiBold"
android:textColor="?android:attr/textColorSecondary"
android:textIsSelectable="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/manga_full_title"
@ -158,6 +120,7 @@
style="@style/TextAppearance.Regular.Body1.Secondary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:maxLines="1"
android:textIsSelectable="false"
@ -173,7 +136,7 @@
android:layout_margin="6dp"
android:orientation="horizontal"
app:barrierDirection="bottom"
app:constraint_referenced_ids="manga_source,manga_layout,cover_card" />
app:constraint_referenced_ids="manga_source,cover_card" />
<LinearLayout
@ -241,8 +204,9 @@
android:layout_marginEnd="16dp"
android:maxLines="3"
android:textIsSelectable="false"
app:layout_constraintBottom_toTopOf="@id/start_reading_button"
app:layout_constraintBottom_toTopOf="@id/manga_genres_tags"
app:layout_constraintEnd_toEndOf="parent"
tools:maxLines="10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/manga_summary_label"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
@ -301,6 +265,8 @@
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:visibility="gone"
tools:visibility="visible"
tools:layout_height="100dp"
app:atg_backgroundColor="@android:color/transparent"
app:atg_borderColor="@color/md_blue_A400"
app:atg_borderStrokeWidth="1dp"
@ -314,12 +280,15 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/less_button"
style="@style/Theme.Widget.Button.TextButton"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/less"
android:visibility="gone"
tools:visibility="visible"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:textAlignment="textEnd"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/start_reading_button"
app:layout_constraintTop_toBottomOf="@id/manga_genres_tags"

View File

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/reader_layout"
android:gravity="center">
<FrameLayout

View File

@ -2,6 +2,12 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_mark_as_read"
android:title="@string/action_mark_as_read" />
<item android:id="@+id/action_mark_as_unread"
android:title="@string/action_mark_as_unread" />
<item android:id="@+id/action_bookmark"
android:title="@string/action_bookmark"
android:visible="true" />
@ -9,14 +15,4 @@
<item android:id="@+id/action_remove_bookmark"
android:title="@string/action_remove_bookmark"
android:visible="true" />
<item android:id="@+id/action_mark_as_read"
android:title="@string/action_mark_as_read" />
<item android:id="@+id/action_mark_as_unread"
android:title="@string/action_mark_as_unread" />
<item android:id="@+id/action_mark_multiple"
android:title="@string/action_mark_multiple"/>
</menu>

View File

@ -114,6 +114,7 @@
<string name="action_save">Save</string>
<string name="action_reset">Reset</string>
<string name="action_undo">Undo</string>
<string name="action_use_default">Use Default</string>
<string name="action_create">Create</string>
<string name="action_restore">Restore</string>
<string name="action_webview_back">Back</string>
@ -610,6 +611,8 @@
<string name="transition_pages_loading">Loading pages…</string>
<string name="transition_pages_error">Failed to load pages: %1$s</string>
<string name="reader_pull_up_for_more_options">Pull up for more options</string>
<string name="reading_mode">Reading %1$s</string>
<string name="webtoon_style">webtoon style</string>
<!-- Recent manga fragment -->
<string name="recent_manga_source">%1$s - Ch.%2$s</string>