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

Side by Side 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, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.preferences; 5 package org.chromium.chrome.browser.preferences;
6 6
7 import android.Manifest; 7 import android.Manifest;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent;
10 import android.location.LocationManager;
11 import android.provider.Settings;
9 12
10 import org.chromium.base.ContextUtils; 13 import org.chromium.base.ContextUtils;
11 import org.chromium.base.ThreadUtils; 14 import org.chromium.base.ThreadUtils;
12 import org.chromium.base.VisibleForTesting; 15 import org.chromium.base.VisibleForTesting;
13 import org.chromium.base.annotations.CalledByNative; 16 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.base.annotations.SuppressFBWarnings; 17 import org.chromium.base.annotations.SuppressFBWarnings;
15 import org.chromium.chrome.browser.ChromeApplication; 18 import org.chromium.chrome.browser.ChromeApplication;
16 import org.chromium.components.location.LocationUtils;
17 import org.chromium.content.browser.ContentViewCore; 19 import org.chromium.content.browser.ContentViewCore;
18 import org.chromium.content_public.browser.WebContents; 20 import org.chromium.content_public.browser.WebContents;
19 import org.chromium.ui.base.WindowAndroid; 21 import org.chromium.ui.base.WindowAndroid;
20 22
21 /** 23 /**
22 * Provides methods for querying Chrome's internal location setting and 24 * Provides methods for querying Android system-wide location settings as well a s Chrome's internal
23 * combining that with the system-wide setting and permissions. 25 * location setting.
24 * 26 *
25 * This class should be used only on the UI thread. 27 * This class should be used only on the UI thread.
26 */ 28 */
27 public class LocationSettings { 29 public class LocationSettings {
28 30
29 private static LocationSettings sInstance; 31 private static LocationSettings sInstance;
30 32
31 protected final Context mContext; 33 protected final Context mContext;
32 34
33 /** 35 /**
(...skipping 13 matching lines...) Expand all
47 if (sInstance == null) { 49 if (sInstance == null) {
48 ChromeApplication application = 50 ChromeApplication application =
49 (ChromeApplication) ContextUtils.getApplicationContext(); 51 (ChromeApplication) ContextUtils.getApplicationContext();
50 sInstance = application.createLocationSettings(); 52 sInstance = application.createLocationSettings();
51 } 53 }
52 return sInstance; 54 return sInstance;
53 } 55 }
54 56
55 @CalledByNative 57 @CalledByNative
56 private static boolean canSitesRequestLocationPermission(WebContents webCont ents) { 58 private static boolean canSitesRequestLocationPermission(WebContents webCont ents) {
59 if (!LocationSettings.getInstance().isSystemLocationSettingEnabled()) re turn false;
60
57 ContentViewCore cvc = ContentViewCore.fromWebContents(webContents); 61 ContentViewCore cvc = ContentViewCore.fromWebContents(webContents);
58 if (cvc == null) return false; 62 if (cvc == null) return false;
59 WindowAndroid windowAndroid = cvc.getWindowAndroid(); 63 WindowAndroid windowAndroid = cvc.getWindowAndroid();
60 if (windowAndroid == null) return false; 64 if (windowAndroid == null) return false;
61 Context context = windowAndroid.getApplicationContext();
62 65
63 LocationUtils locationUtils = LocationUtils.getInstance(); 66 return windowAndroid.hasPermission(Manifest.permission.ACCESS_COARSE_LOC ATION)
64 if (!locationUtils.isSystemLocationSettingEnabled(context)) return false ; 67 || windowAndroid.hasPermission(Manifest.permission.ACCESS_FINE_L OCATION)
65
66 return locationUtils.hasAndroidLocationPermission(context)
67 || windowAndroid.canRequestPermission(Manifest.permission.ACCESS _FINE_LOCATION); 68 || windowAndroid.canRequestPermission(Manifest.permission.ACCESS _FINE_LOCATION);
68 } 69 }
69 70
70 /** 71 /**
71 * Returns true if location is enabled system-wide and the Chrome location s etting is enabled. 72 * Returns true if location is enabled system-wide and the Chrome location s etting is enabled.
72 */ 73 */
73 public boolean areAllLocationSettingsEnabled() { 74 public boolean areAllLocationSettingsEnabled() {
74 return isChromeLocationSettingEnabled() 75 return isChromeLocationSettingEnabled() && isSystemLocationSettingEnable d();
75 && LocationUtils.getInstance().isSystemLocationSettingEnabled(mC ontext);
76 } 76 }
77 77
78 /** 78 /**
79 * Returns whether Chrome's user-configurable location setting is enabled. 79 * Returns whether Chrome's user-configurable location setting is enabled.
80 */ 80 */
81 public boolean isChromeLocationSettingEnabled() { 81 public boolean isChromeLocationSettingEnabled() {
82 return PrefServiceBridge.getInstance().isAllowLocationEnabled(); 82 return PrefServiceBridge.getInstance().isAllowLocationEnabled();
83 } 83 }
84 84
85 /**
86 * Returns whether location is enabled system-wide, i.e. whether Chrome itse lf is able to access
87 * location.
88 */
89 public boolean isSystemLocationSettingEnabled() {
90 LocationManager locationManager =
91 (LocationManager) mContext.getSystemService(Context.LOCATION_SER VICE);
92 return (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVID ER)
93 || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDE R));
94 }
95
96 /**
97 * Returns an intent to launch Android Location Settings.
98 */
99 public Intent getSystemLocationSettingsIntent() {
100 Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
101 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
102 return i;
103 }
104
85 @VisibleForTesting 105 @VisibleForTesting
86 public static void setInstanceForTesting(LocationSettings instance) { 106 public static void setInstanceForTesting(LocationSettings instance) {
87 sInstance = instance; 107 sInstance = instance;
88 } 108 }
89 } 109 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698