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"/> + +