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

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

Issue 2105573002: Revert of 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: 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 970d9d8802478786012f617710055e61b855b146..80e99d216127fb858413c9b48057d608e4d20d82 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,6 +6,9 @@
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;
@@ -13,14 +16,13 @@
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 Chrome's internal location setting and
- * combining that with the system-wide setting and permissions.
+ * Provides methods for querying Android system-wide location settings as well as Chrome's internal
+ * location setting.
*
* This class should be used only on the UI thread.
*/
@@ -54,16 +56,15 @@
@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();
- LocationUtils locationUtils = LocationUtils.getInstance();
- if (!locationUtils.isSystemLocationSettingEnabled(context)) return false;
-
- return locationUtils.hasAndroidLocationPermission(context)
+ return windowAndroid.hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+ || windowAndroid.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)
|| windowAndroid.canRequestPermission(Manifest.permission.ACCESS_FINE_LOCATION);
}
@@ -71,8 +72,7 @@
* Returns true if location is enabled system-wide and the Chrome location setting is enabled.
*/
public boolean areAllLocationSettingsEnabled() {
- return isChromeLocationSettingEnabled()
- && LocationUtils.getInstance().isSystemLocationSettingEnabled(mContext);
+ return isChromeLocationSettingEnabled() && isSystemLocationSettingEnabled();
}
/**
@@ -82,6 +82,26 @@
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