From 7be56ce4faf990d098f46aaf2c863a853dc52a05 Mon Sep 17 00:00:00 2001 From: Christian Sadilek Date: Thu, 25 Jun 2020 10:54:52 -0400 Subject: [PATCH] For #11798: Allow sharing of reader view pages --- .../org/mozilla/fenix/share/ShareController.kt | 16 +++++++++++++++- .../mozilla/fenix/share/ShareControllerTest.kt | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareController.kt b/app/src/main/java/org/mozilla/fenix/share/ShareController.kt index 9a999f3e2..0f768cd9e 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareController.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareController.kt @@ -24,6 +24,7 @@ import mozilla.components.concept.sync.Device import mozilla.components.concept.sync.TabData import mozilla.components.feature.accounts.push.SendTabUseCases import mozilla.components.feature.share.RecentAppsStorage +import mozilla.components.support.ktx.kotlin.isExtensionUrl import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.metrics.Event @@ -172,7 +173,20 @@ class DefaultShareController( @VisibleForTesting fun getShareText() = shareData.joinToString("\n\n") { data -> - data.url.orEmpty() + val url = data.url.orEmpty() + if (url.isExtensionUrl()) { + // Sharing moz-extension:// URLs is not practical in general, as + // they will only work on the current device. + + // We solve this for URLs from our reader extension as they contain + // the original URL as a query parameter. This is a workaround for + // now and needs a clean fix once we have a reader specific protocol + // e.g. ext+reader:// + // https://github.com/mozilla-mobile/android-components/issues/2879 + Uri.parse(url).getQueryParameter("url") ?: url + } else { + url + } } // Navigation between app fragments uses ShareTab as arguments. SendTabUseCases uses TabData. diff --git a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt index cc01aae65..bdea82de0 100644 --- a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt @@ -272,6 +272,22 @@ class ShareControllerTest { assertEquals(textToShare, controller.getShareText()) } + @Test + fun `getShareText attempts to use original URL for reader pages`() { + val shareData = listOf( + ShareData(url = "moz-extension://eb8df45a-895b-4f3a-896a-c0c71ae4/page.html"), + ShareData(url = "moz-extension://eb8df45a-895b-4f3a-896a-c0c71ae5/page.html?url=url0"), + ShareData(url = "url1") + ) + val controller = DefaultShareController( + context, shareData, sendTabUseCases, snackbar, navController, + recentAppStorage, testCoroutineScope, dismiss + ) + + val expectedShareText = "${shareData[0].url}\n\nurl0\n\n${shareData[2].url}" + assertEquals(expectedShareText, controller.getShareText()) + } + @Test fun `ShareTab#toTabData maps a list of ShareTab to a TabData list`() { var tabData: List