Rewrite and enable genre tag editing
This commit is contained in:
parent
201356afeb
commit
b8129ff4f6
@ -2,10 +2,16 @@ package eu.kanade.tachiyomi.ui.manga
|
|||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.InputType
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.core.view.children
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import com.afollestad.materialdialogs.customview.customView
|
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.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.R
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.source.LocalSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.util.lang.chop
|
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_artist
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_author
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_author
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_cover
|
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 customCoverUri: Uri? = null
|
||||||
|
|
||||||
private var willResetCover = false
|
// private var willResetCover = false
|
||||||
|
|
||||||
private val infoController
|
private val infoController
|
||||||
get() = targetController as MangaAllInOneController
|
get() = targetController as MangaAllInOneController
|
||||||
@ -77,7 +84,7 @@ class EditMangaDialog : DialogController {
|
|||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(view.manga_cover)
|
.into(view.manga_cover)
|
||||||
// view.manga_cover.loadAny(manga)
|
|
||||||
val isLocal = manga.source == LocalSource.ID
|
val isLocal = manga.source == LocalSource.ID
|
||||||
|
|
||||||
if (isLocal) {
|
if (isLocal) {
|
||||||
@ -88,7 +95,7 @@ class EditMangaDialog : DialogController {
|
|||||||
view.manga_author.append(manga.author ?: "")
|
view.manga_author.append(manga.author ?: "")
|
||||||
view.manga_artist.append(manga.artist ?: "")
|
view.manga_artist.append(manga.artist ?: "")
|
||||||
view.manga_description.append(manga.description ?: "")
|
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 {
|
} else {
|
||||||
if (manga.title != manga.originalTitle) {
|
if (manga.title != manga.originalTitle) {
|
||||||
view.title.append(manga.title)
|
view.title.append(manga.title)
|
||||||
@ -102,7 +109,7 @@ class EditMangaDialog : DialogController {
|
|||||||
if (manga.description != manga.originalDescription) {
|
if (manga.description != manga.originalDescription) {
|
||||||
view.manga_description.append(manga.description ?: "")
|
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}"
|
view.title.hint = "${resources?.getString(R.string.title)}: ${manga.originalTitle}"
|
||||||
if (manga.originalAuthor != null) {
|
if (manga.originalAuthor != null) {
|
||||||
@ -139,7 +146,7 @@ class EditMangaDialog : DialogController {
|
|||||||
else dialogView?.manga_genres_tags?.setChips(manga.originalGenre?.split(", "))
|
else dialogView?.manga_genres_tags?.setChips(manga.originalGenre?.split(", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fun updateCover(uri: Uri) {
|
/*fun updateCover(uri: Uri) {
|
||||||
willResetCover = false
|
willResetCover = false
|
||||||
dialogView!!.manga_cover.loadAny(uri)
|
dialogView!!.manga_cover.loadAny(uri)
|
||||||
customCoverUri = uri
|
customCoverUri = uri
|
||||||
@ -154,25 +161,57 @@ class EditMangaDialog : DialogController {
|
|||||||
infoController.presenter.updateMangaInfo(
|
infoController.presenter.updateMangaInfo(
|
||||||
dialogView?.title?.text.toString(),
|
dialogView?.title?.text.toString(),
|
||||||
dialogView?.manga_author?.text.toString(), dialogView?.manga_artist?.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() {
|
private fun ChipGroup.setChips(items: List<String>?) {
|
||||||
dialogView?.manga_genres_tags?.childCount
|
removeAllViews()
|
||||||
|
|
||||||
/*for (i in 0 until dialogView?.manga_genres_tags?.childCount) {
|
items?.forEach { item ->
|
||||||
val child: View = getChildAt(i)
|
val chip = Chip(context).apply {
|
||||||
if (child is Chip) {
|
text = item
|
||||||
if (child.isChecked) {
|
|
||||||
checkedIds.add(child.getId())
|
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 {
|
private companion object {
|
||||||
const val KEY_MANGA = "manga_id"
|
const val KEY_MANGA = "manga_id"
|
||||||
}
|
}
|
||||||
|
@ -204,31 +204,31 @@ class MangaAllInOnePresenter(
|
|||||||
title: String?,
|
title: String?,
|
||||||
author: String?,
|
author: String?,
|
||||||
artist: String?,
|
artist: String?,
|
||||||
description: String?
|
description: String?,
|
||||||
// tags: Array<String>?
|
tags: List<String>?
|
||||||
) {
|
) {
|
||||||
if (manga.source == LocalSource.ID) {
|
if (manga.source == LocalSource.ID) {
|
||||||
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
|
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
|
||||||
manga.author = author?.trimOrNull()
|
manga.author = author?.trimOrNull()
|
||||||
manga.artist = artist?.trimOrNull()
|
manga.artist = artist?.trimOrNull()
|
||||||
manga.description = description?.trimOrNull()
|
manga.description = description?.trimOrNull()
|
||||||
/*val tagsString = tags?.joinToString(", ") { it.capitalize() }*/
|
val tagsString = tags?.joinToString(", ")
|
||||||
/*manga.genre = if (tags.isNullOrEmpty()) null else tagsString?.trim()*/
|
manga.genre = if (tags.isNullOrEmpty()) null else tagsString?.trim()
|
||||||
LocalSource(downloadManager.context).updateMangaInfo(manga)
|
LocalSource(downloadManager.context).updateMangaInfo(manga)
|
||||||
db.updateMangaInfo(manga).executeAsBlocking()
|
db.updateMangaInfo(manga).executeAsBlocking()
|
||||||
} else {
|
} else {
|
||||||
/*val genre = if (!tags.isNullOrEmpty() && tags.joinToString(", ") != manga.genre) {
|
val genre = if (!tags.isNullOrEmpty() && tags.joinToString(", ") != manga.genre) {
|
||||||
tags.map { it.capitalize() }.toTypedArray()
|
tags.toTypedArray()
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}*/
|
}
|
||||||
val manga = CustomMangaManager.MangaJson(
|
val manga = CustomMangaManager.MangaJson(
|
||||||
manga.id!!,
|
manga.id!!,
|
||||||
title?.trimOrNull(),
|
title?.trimOrNull(),
|
||||||
author?.trimOrNull(),
|
author?.trimOrNull(),
|
||||||
artist?.trimOrNull(),
|
artist?.trimOrNull(),
|
||||||
description?.trimOrNull()
|
description?.trimOrNull(),
|
||||||
// genre
|
genre
|
||||||
)
|
)
|
||||||
customMangaManager.saveMangaInfo(manga)
|
customMangaManager.saveMangaInfo(manga)
|
||||||
}
|
}
|
||||||
|
@ -35,44 +35,72 @@
|
|||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:text="@string/reset_cover" />-->
|
android:text="@string/reset_cover" />-->
|
||||||
|
|
||||||
<EditText
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/title"
|
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/title"
|
|
||||||
android:layout_marginEnd="16dp"
|
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:inputType="text"
|
android:layout_marginEnd="16dp">
|
||||||
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"/>
|
|
||||||
|
|
||||||
<EditText
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:id="@+id/manga_artist"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="Author"
|
android:inputType="text"
|
||||||
android:layout_marginEnd="16dp"
|
android:maxLines="1"
|
||||||
android:layout_marginStart="16dp"
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
|
||||||
android:inputType="text"
|
|
||||||
android:maxLines="1"/>
|
|
||||||
|
|
||||||
<EditText
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:id="@+id/manga_description"
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp">
|
||||||
android:hint="@string/description"
|
|
||||||
android:inputType="text|textMultiLine"
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:scrollHorizontally="false" />
|
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
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/manga_genres_tags"
|
android:id="@+id/manga_genres_tags"
|
||||||
@ -87,11 +115,11 @@
|
|||||||
android:id="@+id/reset_tags"
|
android:id="@+id/reset_tags"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
style="@style/Theme.Widget.Button.FilledAccent"
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:text="Clear Tags" />
|
android:text="@string/reset_tags" />
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -125,6 +125,7 @@
|
|||||||
<string name="pref_latest_tab_language_code">Display language code next to name</string>
|
<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="no_source_categories">No source categories available</string>
|
||||||
<string name="invalid_category_name">Invalid category name</string>
|
<string name="invalid_category_name">Invalid category name</string>
|
||||||
|
<string name="add_tag">Add Tag</string>
|
||||||
|
|
||||||
<!-- AZ -->
|
<!-- AZ -->
|
||||||
<string name="az_recommends">See Recommendations</string>
|
<string name="az_recommends">See Recommendations</string>
|
||||||
@ -135,5 +136,6 @@
|
|||||||
<string name="manhua">Manhua</string>
|
<string name="manhua">Manhua</string>
|
||||||
<string name="comic">Comic</string>
|
<string name="comic">Comic</string>
|
||||||
<string name="webtoon">Webtoon</string>
|
<string name="webtoon">Webtoon</string>
|
||||||
|
<string name="reset_tags">Reset Tags</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user