Rewrite and enable manga cover editing, Manga info edit is finished!

This commit is contained in:
Jobobby04 2020-07-11 20:55:06 -04:00
parent b8129ff4f6
commit 6469121f41
5 changed files with 102 additions and 27 deletions

View File

@ -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
)
}

View File

@ -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"

View File

@ -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
}
/**

View File

@ -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"

View File

@ -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>