Index: chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManager.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManager.java |
index 30ab1b09a577f9e052c84f899e05148f846cca88..8481f1234415fe8ba93556a594577abf7beaa6be 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/PlatformNetworksManager.java |
@@ -7,6 +7,8 @@ package org.chromium.chrome.browser.omnibox.geo; |
import android.Manifest; |
import android.annotation.TargetApi; |
import android.content.Context; |
+import android.content.Intent; |
+import android.content.IntentFilter; |
import android.content.pm.PackageManager; |
import android.net.wifi.ScanResult; |
import android.net.wifi.WifiInfo; |
@@ -53,10 +55,28 @@ class PlatformNetworksManager { |
static final String UNKNOWN_SSID = "<unknown ssid>"; |
static VisibleWifi getConnectedWifi(Context context, WifiManager wifiManager) { |
- if (!hasLocationAndWifiPermission(context)) { |
- return VisibleWifi.NO_WIFI_INFO; |
+ if (hasLocationAndWifiPermission(context)) { |
+ WifiInfo wifiInfo = wifiManager.getConnectionInfo(); |
+ return connectedWifiInfoToVisibleWifi(wifiInfo); |
+ } |
+ if (hasLocationPermission(context)) { |
+ // Only location permission, so fallback to pre-marshmallow. |
+ return getConnectedWifiPreMarshmallow(context); |
+ } |
+ return VisibleWifi.NO_WIFI_INFO; |
+ } |
+ |
+ static VisibleWifi getConnectedWifiPreMarshmallow(Context context) { |
+ Intent intent = context.getApplicationContext().registerReceiver( |
+ null, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION)); |
+ if (intent != null) { |
+ WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO); |
+ return connectedWifiInfoToVisibleWifi(wifiInfo); |
} |
- WifiInfo wifiInfo = wifiManager.getConnectionInfo(); |
+ return VisibleWifi.NO_WIFI_INFO; |
+ } |
+ |
+ private static VisibleWifi connectedWifiInfoToVisibleWifi(@Nullable WifiInfo wifiInfo) { |
if (wifiInfo == null) { |
return VisibleWifi.NO_WIFI_INFO; |
} |