diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java index 387009a9f3..b7fc65ce07 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java @@ -44,13 +44,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import de.greenrobot.dao.query.Query; import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; -import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.URLFilterEntry; -import nodomain.freeyourgadget.gadgetbridge.entities.URLFilterEntryDao; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper; @@ -58,10 +54,9 @@ import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton; public class GBWebClient extends WebViewClient { - private String[] AllowedDomains = new String[]{ + private String[] LocallySupportedDomains = new String[]{ "openweathermap.org", //for weather :) "rawgit.com", //for trekvolle - "tagesschau.de" //for internal watchapp tests }; private static final Logger LOG = LoggerFactory.getLogger(GBWebClient.class); @@ -86,7 +81,8 @@ public class GBWebClient extends WebViewClient { } private WebResourceResponse mimicReply(Uri requestedUri) { - boolean urlIsAllowed = StringUtils.indexOfAny(requestedUri.getHost(), AllowedDomains) != -1; + boolean locallySupported = StringUtils.indexOfAny(requestedUri.getHost(), LocallySupportedDomains) != -1; + boolean urlIsAllowed = locallySupported; List urlFilterEntries = DBHelper.getURLFilterEntries(); // Search for matches @@ -99,10 +95,18 @@ public class GBWebClient extends WebViewClient { } } + // Handle OpenWeatherMap locally + boolean forceLocal = false; + SharedPreferences sharedPreferences = GBApplication.getPrefs().getPreferences(); + if (locallySupported && sharedPreferences.getBoolean("pref_key_internethelper_force_local", true)) { + matchFound = true; + urlIsAllowed = true; + forceLocal = true; + } + // Add to database if missing if (requestedUri.getHost() != null && !requestedUri.toString().startsWith("file://") && !matchFound) { LOG.info("URL not matched with URLFilterEntry, storing new entry"); - SharedPreferences sharedPreferences = GBApplication.getPrefs().getPreferences(); String defaultAction = sharedPreferences.getString("pref_key_internethelper_new_url_action", "deny"); urlIsAllowed = defaultAction.equals("allow"); URLFilterEntry filterEntry = new URLFilterEntry(); @@ -113,7 +117,7 @@ public class GBWebClient extends WebViewClient { // Handle request if (requestedUri.getHost() != null && !requestedUri.toString().startsWith("file://") && urlIsAllowed) { - if (WebViewSingleton.getInstance().ensureInternetHelperBound()) { + if (!forceLocal && WebViewSingleton.getInstance().ensureInternetHelperBound()) { LOG.debug("WEBVIEW forwarding request to the internet helper"); try { return WebViewSingleton.getInstance().send(requestedUri); diff --git a/app/src/main/res/xml/internethelper_preferences.xml b/app/src/main/res/xml/internethelper_preferences.xml index d1546ccd27..33c446cb8b 100644 --- a/app/src/main/res/xml/internethelper_preferences.xml +++ b/app/src/main/res/xml/internethelper_preferences.xml @@ -17,6 +17,13 @@ android:summary="Set the default action to take when a URL is requested that isn't already in the list below." android:title="New URL action" app:iconSpaceReserved="false" /> +