Add share/save manga cover when expanded from J2k, not tested
This commit is contained in:
parent
0b6f7c5e23
commit
a4273bb9a2
@ -5,6 +5,7 @@ import android.animation.AnimatorListenerAdapter
|
||||
import android.animation.AnimatorSet
|
||||
import android.animation.ObjectAnimator
|
||||
import android.app.Activity
|
||||
import android.content.ClipData
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.Point
|
||||
@ -85,6 +86,7 @@ import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController
|
||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||
import eu.kanade.tachiyomi.util.chapter.NoChaptersException
|
||||
import eu.kanade.tachiyomi.util.hasCustomCover
|
||||
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.util.view.getCoordinates
|
||||
@ -205,6 +207,8 @@ class MangaController :
|
||||
private var editMergedSettingsDialog: EditMergedSettingsDialog? = null
|
||||
|
||||
private var currentAnimator: Animator? = null
|
||||
|
||||
private var isExpanded: Boolean = false
|
||||
// EXH <--
|
||||
|
||||
init {
|
||||
@ -430,6 +434,8 @@ class MangaController :
|
||||
if (preferences.recommendsInOverflow().get()) menu.findItem(R.id.action_recommend).isVisible = true
|
||||
menu.findItem(R.id.action_merged).isVisible = presenter.manga.source == MERGED_SOURCE_ID
|
||||
menu.findItem(R.id.action_toggle_dedupe).isVisible = false // presenter.manga.source == MERGED_SOURCE_ID
|
||||
menu.findItem(R.id.action_share_cover).isVisible = isExpanded
|
||||
menu.findItem(R.id.action_save).isVisible = isExpanded
|
||||
// SY <--
|
||||
}
|
||||
|
||||
@ -463,14 +469,35 @@ class MangaController :
|
||||
presenter.dedupe = !presenter.dedupe
|
||||
presenter.toggleDedupe()
|
||||
}
|
||||
R.id.action_migrate -> {
|
||||
migrateManga()
|
||||
}
|
||||
// SY <--
|
||||
|
||||
R.id.action_edit_categories -> onCategoriesClick()
|
||||
// SY --> R.id.action_edit_cover -> handleChangeCover() // SY <--
|
||||
// SY --> R.id.action_migrate -> migrateManga() // SY <--
|
||||
R.id.action_migrate -> migrateManga()
|
||||
// SY -->
|
||||
R.id.action_save -> {
|
||||
if (presenter.saveCover()) {
|
||||
activity?.toast(R.string.cover_saved)
|
||||
} else {
|
||||
activity?.toast(R.string.error_saving_cover)
|
||||
}
|
||||
}
|
||||
R.id.action_share_cover -> {
|
||||
val cover = presenter.shareCover(activity!!)
|
||||
if (cover != null) {
|
||||
val stream = cover.getUriCompat(activity!!)
|
||||
val intent = Intent(Intent.ACTION_SEND).apply {
|
||||
putExtra(Intent.EXTRA_STREAM, stream)
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
clipData = ClipData.newRawUri(null, stream)
|
||||
type = "image/*"
|
||||
}
|
||||
startActivity(Intent.createChooser(intent, activity?.getString(R.string.action_share)))
|
||||
} else {
|
||||
activity?.toast(R.string.error_sharing_cover)
|
||||
}
|
||||
}
|
||||
// SY <--
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
@ -742,7 +769,7 @@ class MangaController :
|
||||
|
||||
// SY -->
|
||||
fun onThumbnailClick(thumbView: ImageView) {
|
||||
if (!presenter.manga.initialized) return
|
||||
if (!presenter.manga.initialized || presenter.manga.thumbnail_url == null) return
|
||||
currentAnimator?.cancel()
|
||||
|
||||
val startBoundsInt = Rect()
|
||||
@ -777,6 +804,7 @@ class MangaController :
|
||||
|
||||
binding.expandedImage.pivotX = 0f
|
||||
binding.expandedImage.pivotY = 0f
|
||||
isExpanded = true
|
||||
|
||||
currentAnimator = AnimatorSet().apply {
|
||||
play(
|
||||
@ -809,6 +837,7 @@ class MangaController :
|
||||
|
||||
binding.expandedImage.clicks()
|
||||
.onEach {
|
||||
isExpanded = false
|
||||
currentAnimator?.cancel()
|
||||
|
||||
currentAnimator = AnimatorSet().apply {
|
||||
|
@ -3,9 +3,11 @@ package eu.kanade.tachiyomi.ui.manga
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import com.elvishew.xlog.XLog
|
||||
import com.jakewharton.rxrelay.BehaviorRelay
|
||||
import com.jakewharton.rxrelay.PublishRelay
|
||||
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
|
||||
@ -33,6 +35,8 @@ import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.prepUpdateCover
|
||||
import eu.kanade.tachiyomi.util.removeCovers
|
||||
import eu.kanade.tachiyomi.util.shouldDownloadNewChapters
|
||||
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
||||
import eu.kanade.tachiyomi.util.system.ImageUtil
|
||||
import eu.kanade.tachiyomi.util.updateCoverLastModified
|
||||
import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.TriStateGroup.State
|
||||
import exh.MERGED_SOURCE_ID
|
||||
@ -59,6 +63,7 @@ import timber.log.Timber
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.io.File
|
||||
import java.util.Date
|
||||
|
||||
class MangaPresenter(
|
||||
@ -490,6 +495,50 @@ class MangaPresenter(
|
||||
fun toggleDedupe() {
|
||||
// I cant find any way to call the chapter list subscription to get the chapters again
|
||||
}
|
||||
|
||||
fun shareCover(context: Context): File? {
|
||||
return try {
|
||||
val destDir = File(context.cacheDir, "shared_image")
|
||||
val file = saveCover(destDir)
|
||||
file
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun saveCover(): Boolean {
|
||||
return try {
|
||||
val directory = File(
|
||||
Environment.getExternalStorageDirectory().absolutePath +
|
||||
File.separator + Environment.DIRECTORY_PICTURES +
|
||||
File.separator + R.string.app_name
|
||||
)
|
||||
saveCover(directory)
|
||||
true
|
||||
} catch (e: Exception) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveCover(directory: File): File {
|
||||
val cover = coverCache.getCoverFile(manga)!!
|
||||
val type = ImageUtil.findImageType(cover.inputStream())
|
||||
?: throw Exception("Not an image")
|
||||
|
||||
directory.mkdirs()
|
||||
|
||||
// Build destination file.
|
||||
val filename = DiskUtil.buildValidFilename("${manga.title}.${type.extension}")
|
||||
|
||||
val destFile = File(directory, filename)
|
||||
cover.inputStream().use { input ->
|
||||
destFile.outputStream().use { output ->
|
||||
input.copyTo(output)
|
||||
}
|
||||
}
|
||||
return destFile
|
||||
}
|
||||
|
||||
// SY <--
|
||||
|
||||
/**
|
||||
|
@ -83,4 +83,18 @@
|
||||
android:title="@string/toggle_dedupe"
|
||||
android:visible="false"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_save"
|
||||
android:icon="@drawable/ic_save_black_24dp"
|
||||
android:title="@string/action_save"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share_cover"
|
||||
android:icon="@drawable/ic_share_24dp"
|
||||
android:title="@string/share_cover"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
||||
|
@ -255,6 +255,10 @@
|
||||
<string name="az_recommends">See Recommendations</string>
|
||||
<string name="merge">Merge</string>
|
||||
<string name="merge_with_another_source">Merge With Another</string>
|
||||
<string name="cover_saved">Cover saved</string>
|
||||
<string name="share_cover">Cover saved</string>
|
||||
<string name="error_saving_cover">Error saving cover</string>
|
||||
<string name="error_sharing_cover">Error sharing cover</string>
|
||||
|
||||
<!-- Manga info fragment -->
|
||||
<string name="hiatus">Hiatus</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user