diff --git a/app/src/main/java/net/bible/android/view/activity/page/BibleView.kt b/app/src/main/java/net/bible/android/view/activity/page/BibleView.kt index 4619eeaa91..2af68cfaf1 100644 --- a/app/src/main/java/net/bible/android/view/activity/page/BibleView.kt +++ b/app/src/main/java/net/bible/android/view/activity/page/BibleView.kt @@ -20,8 +20,6 @@ package net.bible.android.view.activity.page import android.annotation.SuppressLint import android.app.Activity import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.pm.ResolveInfo @@ -75,7 +73,6 @@ import net.bible.android.control.bookmark.StudyPadOrderEvent import net.bible.android.control.bookmark.StudyPadTextEntryDeleted import net.bible.android.control.download.DownloadControl import net.bible.android.control.event.ABEventBus -import net.bible.android.control.event.ToastEvent import net.bible.android.control.event.window.CurrentWindowChangedEvent import net.bible.android.control.event.window.NumberOfWindowsChangedEvent import net.bible.android.control.event.window.ScrollSecondaryWindowEvent @@ -1108,21 +1105,42 @@ class BibleView(val mainBibleActivity: MainBibleActivity, internal inner class LinkLongPressContextMenuInfo(private val targetLink: String) : BibleViewContextMenuInfo { override fun onContextItemSelected(item: MenuItem): Boolean { - val windowMode = when (item.itemId) { - R.id.open_link_in_special_window -> WindowMode.WINDOW_MODE_SPECIAL - R.id.open_link_in_new_window -> WindowMode.WINDOW_MODE_NEW - R.id.open_link_in_this_window -> WindowMode.WINDOW_MODE_THIS - else -> WindowMode.WINDOW_MODE_UNDEFINED + val uri = Uri.parse(targetLink) + if(item.itemId == R.id.copy_link_to_clipboard) { + val osisRef = uri.getQueryParameter("osis")?: return false + val doc = uri.getQueryParameter("doc") + val ordinal = uri.getQueryParameter("ordinal")?.toInt() + val v11n = uri.getQueryParameter("v11n") + val abUrl = CommonUtils.makeAndBibleUrl( + osisRef, + doc, + v11n, + ordinal + ) + CommonUtils.copyToClipboard( + ClipData.newPlainText(abUrl, abUrl), + R.string.reference_copied_to_clipboard + ) + } else { + val windowMode = when (item.itemId) { + R.id.open_link_in_special_window -> WindowMode.WINDOW_MODE_SPECIAL + R.id.open_link_in_new_window -> WindowMode.WINDOW_MODE_NEW + R.id.open_link_in_this_window -> WindowMode.WINDOW_MODE_THIS + else -> WindowMode.WINDOW_MODE_UNDEFINED + } + linkControl.windowMode = windowMode + openLink(uri) + linkControl.windowMode = WindowMode.WINDOW_MODE_UNDEFINED + contextMenuInfo = null } - linkControl.windowMode = windowMode - openLink(Uri.parse(targetLink)) - linkControl.windowMode = WindowMode.WINDOW_MODE_UNDEFINED - contextMenuInfo = null return true } override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.link_context_menu, menu) + + val parsed: Uri = Uri.parse(targetLink) + menu.findItem(R.id.copy_link_to_clipboard).isVisible = parsed.scheme == UriConstants.SCHEME_REFERENCE val openLinksInSpecialWindowByDefault = CommonUtils.settings.getBoolean("open_links_in_special_window_pref", true) val item = if(openLinksInSpecialWindowByDefault) diff --git a/app/src/main/java/net/bible/android/view/activity/page/screen/SplitBibleArea.kt b/app/src/main/java/net/bible/android/view/activity/page/screen/SplitBibleArea.kt index c8c22f44f9..34a030a1e8 100644 --- a/app/src/main/java/net/bible/android/view/activity/page/screen/SplitBibleArea.kt +++ b/app/src/main/java/net/bible/android/view/activity/page/screen/SplitBibleArea.kt @@ -847,11 +847,15 @@ class SplitBibleArea(private val mainBibleActivity: MainBibleActivity): FrameLay ) R.id.copyReference -> CommandPreference( launch = { _, _, _ -> - val doc = window.pageManager.currentPage.currentDocument + val doc = window.pageManager.currentPage.currentDocument?: return@CommandPreference val key = window.pageManager.currentPage.singleKey?: return@CommandPreference val ordinal = window.pageManager.currentPage.anchorOrdinal?.start - val url = CommonUtils.makeAndBibleUrl(doc, key, ordinal)?: return@CommandPreference + val url = CommonUtils.makeAndBibleUrl( + keyStr = key.osisRef, + docInitials = doc.initials, + ordinal = ordinal + ) CommonUtils.copyToClipboard( ClipData.newPlainText(key.name, url), R.string.reference_copied_to_clipboard diff --git a/app/src/main/java/net/bible/service/common/CommonUtils.kt b/app/src/main/java/net/bible/service/common/CommonUtils.kt index 769f554d25..4d986b79b0 100644 --- a/app/src/main/java/net/bible/service/common/CommonUtils.kt +++ b/app/src/main/java/net/bible/service/common/CommonUtils.kt @@ -1557,14 +1557,19 @@ object CommonUtils : CommonUtilsBase() { BackupControl.AbDbFileType.UNKNOWN } - fun makeAndBibleUrl(doc: Book?, key: Key, ordinal: Int?): String? { - var url = "https://andbible.org/bible/${key.osisRef}" + fun makeAndBibleUrl( + keyStr: String, + docInitials: String? = null, + v11n: String? = null, + ordinal: Int? = null + ): String { + var url = "https://andbible.org/bible/$keyStr" val queryParameters = mutableListOf() - if(doc != null) { - queryParameters.add("document=${doc.initials}") - if(doc is SwordBook) { - queryParameters.add("v11n=${doc.versification.name}") - } + if(docInitials != null) { + queryParameters.add("document=$docInitials") + } + if(v11n != null) { + queryParameters.add("v11n=$v11n") } if(ordinal != null) { queryParameters.add("ordinal=${ordinal}") diff --git a/app/src/main/res/menu/link_context_menu.xml b/app/src/main/res/menu/link_context_menu.xml index 494f72a3f4..5b290699c6 100644 --- a/app/src/main/res/menu/link_context_menu.xml +++ b/app/src/main/res/menu/link_context_menu.xml @@ -26,4 +26,8 @@ +