Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java

Issue 2038753004: Add a LocationUtils class to give all Chromium Android code access to location helpers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Adjust DEPS. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698