diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index c6d6dd10ad..b500b2aa35 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -5,6 +5,7 @@ import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.app.Activity import android.content.Context +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.os.Handler @@ -49,6 +50,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault +import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.ui.base.MaterialMenuSheet import eu.kanade.tachiyomi.ui.base.controller.BaseController import eu.kanade.tachiyomi.ui.category.ManageCategoryDialog @@ -1301,6 +1303,10 @@ class LibraryController( override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { val count = selectedMangas.size // Destroy action mode if there are no items selected. + val migrationItem = menu.findItem(R.id.action_migrate) + val shareItem = menu.findItem(R.id.action_share) + migrationItem.isVisible = selectedMangas.any { it.source != LocalSource.ID } + shareItem.isVisible = migrationItem.isVisible if (count == 0) destroyActionModeIfNeeded() else mode.title = resources?.getString(R.string.selected_, count) return false @@ -1310,6 +1316,7 @@ class LibraryController( override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { when (item.itemId) { R.id.action_move_to_category -> showChangeMangaCategoriesDialog() + R.id.action_share -> shareManga() R.id.action_delete -> { MaterialDialog(activity!!).message(R.string.remove_from_library_question) .positiveButton(R.string.remove) { @@ -1318,7 +1325,9 @@ class LibraryController( } R.id.action_migrate -> { val skipPre = preferences.skipPreMigration().getOrDefault() - PreMigrationController.navigateToMigration(skipPre, router, selectedMangas.mapNotNull { it.id }) + PreMigrationController.navigateToMigration(skipPre, + router, + selectedMangas.filter { it.id != LocalSource.ID }.mapNotNull { it.id }) destroyActionModeIfNeeded() } else -> return false @@ -1326,6 +1335,19 @@ class LibraryController( return true } + private fun shareManga() { + val context = view?.context ?: return + val mangas = selectedMangas.toList() + val urlList = presenter.getMangaUrls(mangas) + if (urlList.isEmpty()) return + val urls = presenter.getMangaUrls(mangas).joinToString("\n") + val intent = Intent(Intent.ACTION_SEND).apply { + type = "text/*" + putExtra(Intent.EXTRA_TEXT, urls) + } + startActivity(Intent.createChooser(intent, context.getString(R.string.share))) + } + private fun deleteMangasFromLibrary() { val mangas = selectedMangas.toList() presenter.removeMangaFromLibrary(mangas) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 5bc4460098..e768555e19 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -685,6 +685,13 @@ class LibraryPresenter( .reduce { set1: Iterable, set2 -> set1.intersect(set2).toMutableList() } } + fun getMangaUrls(mangas: List): List { + return mangas.mapNotNull { manga -> + val source = sourceManager.get(manga.source) as? HttpSource ?: return@mapNotNull null + source.mangaDetailsRequest(manga).url.toString() + } + } + /** * Remove the selected manga from the library. * diff --git a/app/src/main/res/menu/library_selection.xml b/app/src/main/res/menu/library_selection.xml index 869e3623cf..04f7661d4c 100644 --- a/app/src/main/res/menu/library_selection.xml +++ b/app/src/main/res/menu/library_selection.xml @@ -1,17 +1,19 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> - + - + android:title="@string/remove" + app:showAsAction="ifRoom" /> + \ No newline at end of file