Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
index 80e99d216127fb858413c9b48057d608e4d20d82..acfe0adecba4f98d4eb1f9b29f6ab745c32e18be 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
@@ -6,11 +6,9 @@ package org.chromium.chrome.browser.preferences; |
import android.Manifest; |
import android.content.Context; |
-import android.content.Intent; |
-import android.location.LocationManager; |
-import android.provider.Settings; |
import org.chromium.base.ContextUtils; |
+import org.chromium.base.LocationUtils; |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.annotations.CalledByNative; |
@@ -21,8 +19,8 @@ import org.chromium.content_public.browser.WebContents; |
import org.chromium.ui.base.WindowAndroid; |
/** |
- * Provides methods for querying Android system-wide location settings as well as Chrome's internal |
- * location setting. |
+ * Provides methods for querying Chrome's internal location setting and |
+ * combining that with the system-wide setting and permissions. |
* |
* This class should be used only on the UI thread. |
*/ |
@@ -56,15 +54,16 @@ public class LocationSettings { |
@CalledByNative |
private static boolean canSitesRequestLocationPermission(WebContents webContents) { |
- if (!LocationSettings.getInstance().isSystemLocationSettingEnabled()) return false; |
- |
ContentViewCore cvc = ContentViewCore.fromWebContents(webContents); |
if (cvc == null) return false; |
WindowAndroid windowAndroid = cvc.getWindowAndroid(); |
if (windowAndroid == null) return false; |
+ Context context = windowAndroid.getApplicationContext(); |
- return windowAndroid.hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION) |
- || windowAndroid.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION) |
+ LocationUtils locationUtils = LocationUtils.getInstance(); |
+ if (!locationUtils.isSystemLocationSettingEnabled(context)) return false; |
+ |
+ return locationUtils.chromiumHasLocationPermission(context) |
|| windowAndroid.canRequestPermission(Manifest.permission.ACCESS_FINE_LOCATION); |
} |
@@ -72,7 +71,8 @@ public class LocationSettings { |
* Returns true if location is enabled system-wide and the Chrome location setting is enabled. |
*/ |
public boolean areAllLocationSettingsEnabled() { |
- return isChromeLocationSettingEnabled() && isSystemLocationSettingEnabled(); |
+ return isChromeLocationSettingEnabled() |
+ && LocationUtils.getInstance().isSystemLocationSettingEnabled(mContext); |
} |
/** |
@@ -82,26 +82,6 @@ public class LocationSettings { |
return PrefServiceBridge.getInstance().isAllowLocationEnabled(); |
} |
- /** |
- * Returns whether location is enabled system-wide, i.e. whether Chrome itself is able to access |
- * location. |
- */ |
- public boolean isSystemLocationSettingEnabled() { |
- LocationManager locationManager = |
- (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); |
- return (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) |
- || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)); |
- } |
- |
- /** |
- * Returns an intent to launch Android Location Settings. |
- */ |
- public Intent getSystemLocationSettingsIntent() { |
- Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); |
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- return i; |
- } |
- |
@VisibleForTesting |
public static void setInstanceForTesting(LocationSettings instance) { |
sInstance = instance; |