diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/ExternalLinkOpenerTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/ExternalLinkOpenerTest.kt
index f14f23c2b..ccb11a824 100644
--- a/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/ExternalLinkOpenerTest.kt
+++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/ExternalLinkOpenerTest.kt
@@ -51,7 +51,7 @@ internal class ExternalLinkOpenerTest {
every { intent.data } returns Uri.parse(url.toString())
val lambdaSlot = slot<() -> Unit>()
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
- externalLinkOpener.openExternalUrl(intent)
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
verify {
alertDialogShower.show(
KiwixDialog.ExternalLinkPopup,
@@ -72,7 +72,7 @@ internal class ExternalLinkOpenerTest {
every { intent.data } returns uri
val lambdaSlot = slot<() -> Unit>()
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
- externalLinkOpener.openExternalUrl(intent)
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
verify {
alertDialogShower.show(
KiwixDialog.ExternalLinkPopup,
@@ -92,7 +92,7 @@ internal class ExternalLinkOpenerTest {
every { intent.data } returns Uri.parse("https://github.com/")
val lambdaSlot = slot<() -> Unit>()
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
- externalLinkOpener.openExternalUrl(intent)
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
verify {
alertDialogShower.show(
KiwixDialog.ExternalLinkPopup,
@@ -112,7 +112,7 @@ internal class ExternalLinkOpenerTest {
every { intent.data } returns Uri.parse("https://github.com/")
val lambdaSlot = slot<() -> Unit>()
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
- externalLinkOpener.openExternalUrl(intent)
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
verify {
alertDialogShower.show(
KiwixDialog.ExternalLinkPopup,
@@ -133,7 +133,7 @@ internal class ExternalLinkOpenerTest {
every { intent.resolveActivity(activity.packageManager) } returns mockk()
every { sharedPreferenceUtil.prefExternalLinkPopup } returns false
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
- externalLinkOpener.openExternalUrl(intent)
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
verify { activity.startActivity(intent) }
}
@@ -143,9 +143,19 @@ internal class ExternalLinkOpenerTest {
val externalLinkOpener = ExternalLinkOpener(activity, sharedPreferenceUtil, alertDialogShower)
mockkStatic(Toast::class)
justRun {
- Toast.makeText(activity, R.string.no_reader_application_installed, Toast.LENGTH_LONG).show()
+ Toast.makeText(activity, R.string.no_browser_application_installed, Toast.LENGTH_LONG).show()
}
- externalLinkOpener.openExternalUrl(intent)
- verify { activity.toast(R.string.no_reader_application_installed) }
+ externalLinkOpener.openExternalUrl(intent, R.string.no_browser_application_installed)
+ verify { activity.toast(R.string.no_browser_application_installed) }
+ justRun {
+ Toast.makeText(activity, R.string.no_pdf_application_installed, Toast.LENGTH_LONG).show()
+ }
+ externalLinkOpener.openExternalUrl(intent, R.string.no_pdf_application_installed)
+ verify { activity.toast(R.string.no_pdf_application_installed) }
+ justRun {
+ Toast.makeText(activity, R.string.no_epub_application_installed, Toast.LENGTH_LONG).show()
+ }
+ externalLinkOpener.openExternalUrl(intent, R.string.no_epub_application_installed)
+ verify { activity.toast(R.string.no_epub_application_installed) }
}
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt
index 0919cb88e..fbe8644a3 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt
@@ -221,7 +221,10 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
}
private fun openSupportKiwixExternalLink() {
- externalLinkOpener.openExternalUrl(KIWIX_SUPPORT_URL.toUri().browserIntent())
+ externalLinkOpener.openExternalUrl(
+ KIWIX_SUPPORT_URL.toUri().browserIntent(),
+ R.string.no_browser_application_installed
+ )
}
override fun onBackPressed() {
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
index bb4d7774e..4ffca687c 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
@@ -1382,8 +1382,8 @@ abstract class CoreReaderFragment :
sharedPreferenceUtil?.putPrefFullScreen(false)
}
- override fun openExternalUrl(intent: Intent) {
- externalLinkOpener?.openExternalUrl(intent)
+ override fun openExternalUrl(intent: Intent, errorMessageId: Int) {
+ externalLinkOpener?.openExternalUrl(intent, errorMessageId)
}
protected fun openZimFile(file: File, isCustomApp: Boolean = false) {
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.kt
index a58235bb9..fcb845653 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.kt
@@ -29,6 +29,7 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.core.content.FileProvider
import org.kiwix.kiwixmobile.core.CoreApp.Companion.instance
+import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
@@ -70,7 +71,7 @@ open class CoreWebViewClient(
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
- callback.openExternalUrl(intent)
+ callback.openExternalUrl(intent, R.string.no_browser_application_installed)
return true
}
@@ -102,7 +103,11 @@ open class CoreWebViewClient(
flags = Intent.FLAG_ACTIVITY_NO_HISTORY
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
- callback.openExternalUrl(intent)
+ val errorMessage = if (extension == "application/pdf")
+ R.string.no_pdf_application_installed
+ else
+ R.string.no_epub_application_installed
+ callback.openExternalUrl(intent, errorMessage)
}
}
return true
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/WebViewCallback.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/WebViewCallback.kt
index d15eca03a..2c10c9c88 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/WebViewCallback.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/WebViewCallback.kt
@@ -24,7 +24,7 @@ interface WebViewCallback {
fun webViewUrlLoading()
fun webViewUrlFinishedLoading()
fun webViewFailedLoading(failingUrl: String)
- fun openExternalUrl(intent: Intent)
+ fun openExternalUrl(intent: Intent, errorMessageId: Int)
fun webViewProgressChanged(progress: Int, webView: WebView)
fun webViewTitleUpdated(title: String)
fun webViewPageChanged(page: Int, maxPages: Int)
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/ExternalLinkOpener.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/ExternalLinkOpener.kt
index a0c2e42c2..486fa3dc9 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/ExternalLinkOpener.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/ExternalLinkOpener.kt
@@ -21,7 +21,6 @@ package org.kiwix.kiwixmobile.core.utils
import android.app.Activity
import android.content.Intent
import android.speech.tts.TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA
-import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.extensions.toast
import org.kiwix.kiwixmobile.core.utils.dialog.AlertDialogShower
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
@@ -33,7 +32,7 @@ class ExternalLinkOpener @Inject constructor(
private val alertDialogShower: AlertDialogShower
) {
- fun openExternalUrl(intent: Intent) {
+ fun openExternalUrl(intent: Intent, errorMessageId: Int) {
if (intent.resolveActivity(activity.packageManager) != null) {
// Show popup with warning that this url is external and could lead to additional costs
// or may event not work when the user is offline.
@@ -43,7 +42,7 @@ class ExternalLinkOpener @Inject constructor(
openLink(intent)
}
} else {
- activity.toast(R.string.no_reader_application_installed)
+ activity.toast(errorMessageId)
}
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/AlertDialogShower.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/AlertDialogShower.kt
index 55fa7433e..0963fd912 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/AlertDialogShower.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/AlertDialogShower.kt
@@ -73,11 +73,11 @@ class AlertDialogShower @Inject constructor(private val activity: Activity) :
}
uri?.let {
/*
- Check if it is valid url then show it to the user
- otherwise don't show uri to the user as they are not directly openable in the external app.
+ Check if it is external browser url then show it to the user
+ otherwise don't show uri to the user as they are not directly openable in the external browser.
We place this condition to improve the user experience see https://github.com/kiwix/kiwix-android/pull/3455
*/
- if (!"$it".startsWith("content://")) {
+ if ("$it".startsWith("http://") || "$it".startsWith("https://")) {
showUrlInDialog(this, it)
}
dialog.getView?.let { setView(it()) }
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index baf86fde3..63be22e39 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -63,6 +63,9 @@
The language of this page is not supported. The article may not be properly read.
Could not find an installed application for this type of file
Please install an email service provider or email us at %1s
+ Please install any web browser to open it e.g. chrome or firefox.
+ Please install any pdf reader application to open it.
+ Please install any epub reader application to open it.
No Content Headers Found
To access offline content we need access to your storage
To download zim files we need write access to your storage