diff --git a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java
index e7d468570..aee53e48e 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java
@@ -163,6 +163,8 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
public static final String PREF_STORAGE_TITLE = "pref_selected_title";
+ public static final String PREF_EXTERNAL_LINK_POPUP = "pref_external_link_popup";
+
public static final String contactEmailAddress = "android@kiwix.org";
public static boolean isFullscreenOpened;
@@ -181,6 +183,8 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
private boolean isOpenNewTabInBackground;
+ private boolean isExternalLinkPopup;
+
public static boolean refresh;
public static boolean wifiOnly;
@@ -920,13 +924,53 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
@Override
public void openExternalUrl(Intent intent) {
if (intent.resolveActivity(getPackageManager()) != null) {
- startActivity(intent);
+ // 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.
+ if (intent.hasExtra("external_link")
+ && intent.getBooleanExtra("external_link", false)
+ && isExternalLinkPopup) {
+ externalLinkPopup(intent);
+ } else {
+ startActivity(intent);
+ }
} else {
String error = getString(R.string.no_reader_application_installed);
Toast.makeText(this, error, Toast.LENGTH_LONG).show();
}
}
+ private void externalLinkPopup(Intent intent) {
+ new AlertDialog.Builder(this, dialogStyle())
+ .setTitle(R.string.external_link_popup_dialog_title)
+ .setMessage(R.string.external_link_popup_dialog_message)
+ .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ // do nothing
+ }
+ })
+ .setNeutralButton(R.string.do_not_ask_anymore, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ PreferenceManager
+ .getDefaultSharedPreferences(KiwixMobileActivity.this)
+ .edit()
+ .putBoolean(PREF_EXTERNAL_LINK_POPUP, false)
+ .apply();
+ isExternalLinkPopup = false;
+
+ startActivity(intent);
+ }
+ })
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ startActivity(intent);
+ }
+ })
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .show();
+ }
public boolean openZimFile(File file, boolean clearHistory) {
if (file.canRead() || Build.VERSION.SDK_INT < 19 || (BuildConfig.IS_CUSTOM_APP
@@ -1568,6 +1612,7 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
isFullscreenOpened = sharedPreferences.getBoolean(PREF_FULLSCREEN, false);
boolean isZoomEnabled = sharedPreferences.getBoolean(PREF_ZOOM_ENABLED, false);
isOpenNewTabInBackground = sharedPreferences.getBoolean(PREF_NEW_TAB_BACKGROUND, false);
+ isExternalLinkPopup = sharedPreferences.getBoolean(PREF_EXTERNAL_LINK_POPUP, true);
if (isZoomEnabled) {
int zoomScale = (int) sharedPreferences.getFloat(PREF_ZOOM, 100.0f);
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/KiwixWebViewClient.java b/app/src/main/java/org/kiwix/kiwixmobile/KiwixWebViewClient.java
index 902611fdc..9526cef89 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/KiwixWebViewClient.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/KiwixWebViewClient.java
@@ -56,6 +56,7 @@ public class KiwixWebViewClient extends WebViewClient {
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ intent.putExtra("external_link", true);
callback.openExternalUrl(intent);
return true;
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
index 2bde4c5cb..e7eea5ef1 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
@@ -87,7 +87,6 @@ public class KiwixSettingsActivity extends AppCompatActivity {
public static final String PREF_WIFI_ONLY = "pref_wifi_only";
-
public static final String PREF_BOTTOM_TOOLBAR = "pref_bottomtoolbar";
public static String zimFile;
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 10cb31d85..625e1d674 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -182,4 +182,9 @@
(%1$d)
MultiZim Search
Allow app to search the across ZIM files (Warning Very Experimental).
+ Warn when entering external links
+ Display popup to warn about additional costs or not working in offline links.
+ Entering External Link
+ You are entering an external link. This could lead to additional costs for data transfer or will just not work when you are offline. Do you want to continue?
+ Do not ask anymore
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index acb4fda5c..e7f3f1100 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -46,6 +46,12 @@
android:title="@string/pref_newtab_background_title"
android:summary="@string/pref_newtab_background_summary"/>
+
+