diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 893947d4ad076..2126793ef9f24 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2923,6 +2923,30 @@ public final class Settings { */ public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; + /** + * Setting to turn off walled garden test on Wi-Fi. Feature is enabled by default and + * the setting needs to be set to 0 to disable it. + * @hide + */ + public static final String WIFI_WATCHDOG_WALLED_GARDEN_TEST_ENABLED = + "wifi_watchdog_walled_garden_test_enabled"; + + /** + * The URL used for walled garden check upon a new conection. WifiWatchdogService + * fetches the URL and checks to see if {@link #WIFI_WATCHDOG_WALLED_GARDEN_PATTERN} + * is not part of the title string to notify the user on the presence of a walled garden. + * @hide + */ + public static final String WIFI_WATCHDOG_WALLED_GARDEN_URL = + "wifi_watchdog_walled_garden_url"; + + /** + * The pattern string in the fetched URL used to detect a walled garden + * @hide + */ + public static final String WIFI_WATCHDOG_WALLED_GARDEN_PATTERN = + "wifi_watchdog_walled_garden_pattern"; + /** * The maximum number of times we will retry a connection to an access * point for which we have failed in acquiring an IP address from DHCP. diff --git a/services/java/com/android/server/WifiWatchdogService.java b/services/java/com/android/server/WifiWatchdogService.java index 6ef6963c8a691..6c7895e35b142 100644 --- a/services/java/com/android/server/WifiWatchdogService.java +++ b/services/java/com/android/server/WifiWatchdogService.java @@ -36,16 +36,21 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Slog; +import java.io.BufferedInputStream; +import java.io.InputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import java.net.URL; import java.util.Collection; import java.util.List; import java.util.Random; +import java.util.Scanner; /** * {@link WifiWatchdogService} monitors the initial connection to a Wi-Fi @@ -195,6 +200,34 @@ public class WifiWatchdogService { return Settings.Secure.getInt(mContentResolver, Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, 250); } + + /** + * @see android.provider.Settings.Secure#WIFI_WATCHDOG_WALLED_GARDEN_TEST_ENABLED + */ + private Boolean isWalledGardenTestEnabled() { + return Settings.Secure.getInt(mContentResolver, + Settings.Secure.WIFI_WATCHDOG_WALLED_GARDEN_TEST_ENABLED, 1) == 1; + } + + /** + * @see android.provider.Settings.Secure#WIFI_WATCHDOG_WALLED_GARDEN_URL + */ + private String getWalledGardenUrl() { + String url = Settings.Secure.getString(mContentResolver, + Settings.Secure.WIFI_WATCHDOG_WALLED_GARDEN_URL); + if (TextUtils.isEmpty(url)) return "http://www.google.com/"; + return url; + } + + /** + * @see android.provider.Settings.Secure#WIFI_WATCHDOG_WALLED_GARDEN_PATTERN + */ + private String getWalledGardenPattern() { + String pattern = Settings.Secure.getString(mContentResolver, + Settings.Secure.WIFI_WATCHDOG_WALLED_GARDEN_PATTERN); + if (TextUtils.isEmpty(pattern)) return "