Rewrite and enable manga cover editing, Manga info edit is finished!
This commit is contained in:
parent
b8129ff4f6
commit
6469121f41
@ -1,6 +1,7 @@
|
||||
package eu.kanade.tachiyomi.ui.manga
|
||||
|
||||
import android.app.Dialog
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.view.View
|
||||
@ -21,12 +22,16 @@ 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.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.util.view.visibleIf
|
||||
import exh.util.trimOrNull
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.cover_layout
|
||||
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
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_description
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_genres_tags
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_cover
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_tags
|
||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.title
|
||||
import uy.kohesive.injekt.Injekt
|
||||
@ -38,9 +43,9 @@ class EditMangaDialog : DialogController {
|
||||
|
||||
private val manga: Manga
|
||||
|
||||
// private var customCoverUri: Uri? = null
|
||||
private var customCoverUri: Uri? = null
|
||||
|
||||
// private var willResetCover = false
|
||||
private var willResetCover = false
|
||||
|
||||
private val infoController
|
||||
get() = targetController as MangaAllInOneController
|
||||
@ -126,17 +131,16 @@ class EditMangaDialog : DialogController {
|
||||
}
|
||||
}
|
||||
view.manga_genres_tags.clearFocus()
|
||||
/*view.cover_layout.setOnClickListener {
|
||||
view.cover_layout.setOnClickListener {
|
||||
infoController.changeCover()
|
||||
}*/
|
||||
}
|
||||
view.reset_tags.setOnClickListener { resetTags() }
|
||||
/*view.reset_cover.visibleIf(!isLocal)
|
||||
view.reset_cover.visibleIf { !isLocal }
|
||||
view.reset_cover.setOnClickListener {
|
||||
view.manga_cover.loadAny(manga, builder = {
|
||||
parameters(Parameters.Builder().set(MangaFetcher.realCover, true).build())
|
||||
})
|
||||
view.context.toast(R.string.cover_reset_toast)
|
||||
customCoverUri = null
|
||||
willResetCover = true
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
private fun resetTags() {
|
||||
@ -146,11 +150,15 @@ 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)
|
||||
GlideApp.with(dialogView!!.context)
|
||||
.load(uri)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
.centerCrop()
|
||||
.into(dialogView!!.manga_cover)
|
||||
customCoverUri = uri
|
||||
}*/
|
||||
}
|
||||
|
||||
override fun onDestroyView(view: View) {
|
||||
super.onDestroyView(view)
|
||||
@ -161,7 +169,8 @@ 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_genres_tags?.getTextStrings()
|
||||
dialogView?.manga_description?.text.toString(), dialogView?.manga_genres_tags?.getTextStrings(),
|
||||
customCoverUri, willResetCover
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,7 @@ import eu.kanade.tachiyomi.util.view.snack
|
||||
import eu.kanade.tachiyomi.util.view.visible
|
||||
import exh.EH_SOURCE_ID
|
||||
import exh.EXH_SOURCE_ID
|
||||
import java.io.IOException
|
||||
import java.util.Date
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlinx.coroutines.CancellationException
|
||||
@ -1024,6 +1025,39 @@ class MangaAllInOneController :
|
||||
}
|
||||
}
|
||||
|
||||
fun changeCover() {
|
||||
if (manga?.favorite == true) {
|
||||
val intent = Intent(Intent.ACTION_GET_CONTENT)
|
||||
intent.type = "image/*"
|
||||
startActivityForResult(
|
||||
Intent.createChooser(
|
||||
intent,
|
||||
resources?.getString(R.string.select_cover_image)
|
||||
),
|
||||
101
|
||||
)
|
||||
} else {
|
||||
activity?.toast(R.string.cover_must_be_in_library)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (requestCode == 101) {
|
||||
if (data == null || resultCode != Activity.RESULT_OK) return
|
||||
val activity = activity ?: return
|
||||
try {
|
||||
val uri = data.data ?: return
|
||||
if (editMangaDialog != null) editMangaDialog?.updateCover(uri)
|
||||
else {
|
||||
presenter.editCoverWithStream(uri)
|
||||
}
|
||||
} catch (error: IOException) {
|
||||
activity.toast(R.string.failed_to_update_cover)
|
||||
Timber.e(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
// EXH -->
|
||||
const val UPDATE_EXTRA = "update"
|
||||
|
@ -1,5 +1,6 @@
|
||||
package eu.kanade.tachiyomi.ui.manga
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import com.google.gson.Gson
|
||||
import com.jakewharton.rxrelay.BehaviorRelay
|
||||
@ -25,6 +26,7 @@ import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource
|
||||
import eu.kanade.tachiyomi.util.prepUpdateCover
|
||||
import eu.kanade.tachiyomi.util.removeCovers
|
||||
import eu.kanade.tachiyomi.util.shouldDownloadNewChapters
|
||||
import eu.kanade.tachiyomi.util.updateCoverLastModified
|
||||
import exh.EH_SOURCE_ID
|
||||
import exh.EXH_SOURCE_ID
|
||||
import exh.MERGED_SOURCE_ID
|
||||
@ -205,7 +207,9 @@ class MangaAllInOnePresenter(
|
||||
author: String?,
|
||||
artist: String?,
|
||||
description: String?,
|
||||
tags: List<String>?
|
||||
tags: List<String>?,
|
||||
uri: Uri?,
|
||||
resetCover: Boolean = false
|
||||
) {
|
||||
if (manga.source == LocalSource.ID) {
|
||||
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
|
||||
@ -232,13 +236,36 @@ class MangaAllInOnePresenter(
|
||||
)
|
||||
customMangaManager.saveMangaInfo(manga)
|
||||
}
|
||||
/*if (uri != null) {
|
||||
editCoverWithStream(uri)
|
||||
} else if (resetCover) {
|
||||
coverCache.deleteCustomCover(manga)
|
||||
controller.setPaletteColor()
|
||||
}*/
|
||||
updateManga(updateInfo = false)
|
||||
|
||||
if (uri != null) {
|
||||
editCoverWithStream(uri)
|
||||
} else if (resetCover) {
|
||||
controller.setRefreshing(true)
|
||||
coverCache.deleteCustomCover(manga)
|
||||
}
|
||||
|
||||
if (uri == null && resetCover) {
|
||||
fetchMangaFromSource(manualFetch = true, fetchChapters = false)
|
||||
} else {
|
||||
updateManga(updateInfo = false)
|
||||
}
|
||||
}
|
||||
|
||||
fun editCoverWithStream(uri: Uri): Boolean {
|
||||
val inputStream =
|
||||
downloadManager.context.contentResolver.openInputStream(uri) ?: return false
|
||||
if (manga.source == LocalSource.ID) {
|
||||
LocalSource.updateCover(downloadManager.context, manga, inputStream)
|
||||
manga.updateCoverLastModified(db)
|
||||
return true
|
||||
}
|
||||
|
||||
if (manga.favorite) {
|
||||
coverCache.setCustomCoverToCache(manga, inputStream)
|
||||
manga.updateCoverLastModified(db)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
@ -15,25 +14,24 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/manga_cover"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="100dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:minWidth="75dp"
|
||||
android:layout_height="150dp"
|
||||
android:contentDescription="@string/description_cover"
|
||||
android:background="@drawable/rounded_rectangle"
|
||||
android:src="@mipmap/ic_launcher"/>
|
||||
</FrameLayout>
|
||||
|
||||
<!--<Button
|
||||
<Button
|
||||
android:id="@+id/reset_cover"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Theme.Widget"
|
||||
style="@style/Theme.Widget.Button.FilledAccent"
|
||||
android:textAllCaps="false"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:text="@string/reset_cover" />-->
|
||||
android:text="@string/reset_cover" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
|
||||
|
@ -126,6 +126,10 @@
|
||||
<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>
|
||||
<string name="cover_reset_toast">The cover will be updated when you exit manga info edit</string>
|
||||
<string name="select_cover_image">Select cover image</string>
|
||||
<string name="cover_must_be_in_library">Must be in library to edit cover images</string>
|
||||
<string name="failed_to_update_cover">Failed to update cover</string>
|
||||
|
||||
<!-- AZ -->
|
||||
<string name="az_recommends">See Recommendations</string>
|
||||
@ -136,6 +140,9 @@
|
||||
<string name="manhua">Manhua</string>
|
||||
<string name="comic">Comic</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
|
||||
<!-- SY -->
|
||||
<string name="reset_tags">Reset Tags</string>
|
||||
<string name="reset_cover">Reset Cover</string>
|
||||
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user