| 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..970d9d8802478786012f617710055e61b855b146 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,9 +6,6 @@ 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.ThreadUtils;
|
| @@ -16,13 +13,14 @@ import org.chromium.base.VisibleForTesting;
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.base.annotations.SuppressFBWarnings;
|
| import org.chromium.chrome.browser.ChromeApplication;
|
| +import org.chromium.components.location.LocationUtils;
|
| import org.chromium.content.browser.ContentViewCore;
|
| 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.hasAndroidLocationPermission(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;
|
|
|