Rewrite and enable genre tag editing

This commit is contained in:
Jobobby04 2020-07-11 18:34:16 -04:00
parent 201356afeb
commit b8129ff4f6
4 changed files with 129 additions and 60 deletions

View File

@ -2,10 +2,16 @@ package eu.kanade.tachiyomi.ui.manga
import android.app.Dialog
import android.os.Bundle
import android.text.InputType
import android.view.View
import androidx.core.view.children
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.input.getInputField
import com.afollestad.materialdialogs.input.input
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga
@ -14,7 +20,8 @@ import eu.kanade.tachiyomi.data.glide.toMangaThumbnail
import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.lang.chop
import eu.kanade.tachiyomi.util.view.setChips
import eu.kanade.tachiyomi.util.system.getResourceColor
import exh.util.trimOrNull
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_artist
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_author
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_cover
@ -33,7 +40,7 @@ class EditMangaDialog : DialogController {
// private var customCoverUri: Uri? = null
private var willResetCover = false
// private var willResetCover = false
private val infoController
get() = targetController as MangaAllInOneController
@ -77,7 +84,7 @@ class EditMangaDialog : DialogController {
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.centerCrop()
.into(view.manga_cover)
// view.manga_cover.loadAny(manga)
val isLocal = manga.source == LocalSource.ID
if (isLocal) {
@ -88,7 +95,7 @@ class EditMangaDialog : DialogController {
view.manga_author.append(manga.author ?: "")
view.manga_artist.append(manga.artist ?: "")
view.manga_description.append(manga.description ?: "")
view.manga_genres_tags.setChips(manga.genre?.split(", ") ?: emptyList())
view.manga_genres_tags.setChips(manga.genre?.split(",")?.map { it.trim() } ?: emptyList())
} else {
if (manga.title != manga.originalTitle) {
view.title.append(manga.title)
@ -102,7 +109,7 @@ class EditMangaDialog : DialogController {
if (manga.description != manga.originalDescription) {
view.manga_description.append(manga.description ?: "")
}
view.manga_genres_tags.setChips(manga.genre?.split(", ") ?: emptyList())
view.manga_genres_tags.setChips(manga.genre?.split(",")?.map { it.trim() } ?: emptyList())
view.title.hint = "${resources?.getString(R.string.title)}: ${manga.originalTitle}"
if (manga.originalAuthor != null) {
@ -139,7 +146,7 @@ class EditMangaDialog : DialogController {
else dialogView?.manga_genres_tags?.setChips(manga.originalGenre?.split(", "))
}
/* fun updateCover(uri: Uri) {
/*fun updateCover(uri: Uri) {
willResetCover = false
dialogView!!.manga_cover.loadAny(uri)
customCoverUri = uri
@ -154,25 +161,57 @@ class EditMangaDialog : DialogController {
infoController.presenter.updateMangaInfo(
dialogView?.title?.text.toString(),
dialogView?.manga_author?.text.toString(), dialogView?.manga_artist?.text.toString(),
dialogView?.manga_description?.text.toString()
dialogView?.manga_description?.text.toString(), dialogView?.manga_genres_tags?.getTextStrings()
)
// ,
// dialogView?.manga_genres_tags?.tags)
}
private fun getAllChips() {
dialogView?.manga_genres_tags?.childCount
private fun ChipGroup.setChips(items: List<String>?) {
removeAllViews()
/*for (i in 0 until dialogView?.manga_genres_tags?.childCount) {
val child: View = getChildAt(i)
if (child is Chip) {
if (child.isChecked) {
checkedIds.add(child.getId())
items?.forEach { item ->
val chip = Chip(context).apply {
text = item
isCloseIconVisible = true
closeIcon?.setTint(context.getResourceColor(R.attr.colorAccent))
setOnCloseIconClickListener {
removeView(this)
}
}
}*/
addView(chip)
}
val addTagChip = Chip(context).apply {
setText(R.string.add_tag)
chipIcon = context.getDrawable(R.drawable.ic_add_24dp)
chipIcon?.setTint(context.getResourceColor(R.attr.colorAccent))
textStartPadding = 0F
setOnClickListener {
MaterialDialog(context)
.title(R.string.add_tag)
.input(inputType = InputType.TYPE_CLASS_TEXT)
.positiveButton(android.R.string.ok) {
val newTag = it.getInputField().text.toString().trimOrNull()
if (items != null && newTag != null) setChips(items + listOf(newTag))
else if (newTag != null) setChips(listOf(newTag))
}
.negativeButton(android.R.string.cancel)
.show()
}
}
addView(addTagChip)
}
private fun ChipGroup.getTextStrings(): List<String>? = children.mapNotNull {
if (it is Chip && !it.text.toString().contains(context.getString(R.string.add_tag), ignoreCase = true)) {
it.text.toString()
} else null
}.toList()
private companion object {
const val KEY_MANGA = "manga_id"
}

View File

@ -204,31 +204,31 @@ class MangaAllInOnePresenter(
title: String?,
author: String?,
artist: String?,
description: String?
// tags: Array<String>?
description: String?,
tags: List<String>?
) {
if (manga.source == LocalSource.ID) {
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
manga.author = author?.trimOrNull()
manga.artist = artist?.trimOrNull()
manga.description = description?.trimOrNull()
/*val tagsString = tags?.joinToString(", ") { it.capitalize() }*/
/*manga.genre = if (tags.isNullOrEmpty()) null else tagsString?.trim()*/
val tagsString = tags?.joinToString(", ")
manga.genre = if (tags.isNullOrEmpty()) null else tagsString?.trim()
LocalSource(downloadManager.context).updateMangaInfo(manga)
db.updateMangaInfo(manga).executeAsBlocking()
} else {
/*val genre = if (!tags.isNullOrEmpty() && tags.joinToString(", ") != manga.genre) {
tags.map { it.capitalize() }.toTypedArray()
} else {
null
}*/
val genre = if (!tags.isNullOrEmpty() && tags.joinToString(", ") != manga.genre) {
tags.toTypedArray()
} else {
null
}
val manga = CustomMangaManager.MangaJson(
manga.id!!,
title?.trimOrNull(),
author?.trimOrNull(),
artist?.trimOrNull(),
description?.trimOrNull()
// genre
description?.trimOrNull(),
genre
)
customMangaManager.saveMangaInfo(manga)
}

View File

@ -35,44 +35,72 @@
android:layout_marginStart="16dp"
android:text="@string/reset_cover" />-->
<EditText
android:id="@+id/title"
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/title"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:inputType="text"
android:maxLines="1"/>
<EditText
android:id="@+id/manga_author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Artist"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:inputType="text"
android:maxLines="1"/>
android:layout_marginEnd="16dp">
<EditText
android:id="@+id/manga_artist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Author"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:inputType="text"
android:maxLines="1"/>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<EditText
android:id="@+id/manga_description"
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:hint="@string/description"
android:inputType="text|textMultiLine"
android:scrollHorizontally="false" />
android:layout_marginEnd="16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manga_author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manga_artist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manga_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text|textMultiLine"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.chip.ChipGroup
android:id="@+id/manga_genres_tags"
@ -87,11 +115,11 @@
android:id="@+id/reset_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
style="@style/Theme.Widget.Button.FilledAccent"
android:textAllCaps="false"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:text="Clear Tags" />
android:text="@string/reset_tags" />
<View
android:layout_width="match_parent"

View File

@ -125,6 +125,7 @@
<string name="pref_latest_tab_language_code">Display language code next to name</string>
<string name="no_source_categories">No source categories available</string>
<string name="invalid_category_name">Invalid category name</string>
<string name="add_tag">Add Tag</string>
<!-- AZ -->
<string name="az_recommends">See Recommendations</string>
@ -135,5 +136,6 @@
<string name="manhua">Manhua</string>
<string name="comic">Comic</string>
<string name="webtoon">Webtoon</string>
<string name="reset_tags">Reset Tags</string>
</resources>