Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PhysicalWebPreferenceFragment.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PhysicalWebPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PhysicalWebPreferenceFragment.java |
| index 5a802b5b48b7a7ac859a153962e0e3c94a999b06..5eedd4d682ef9a668d316feccc3fd951f03dd290 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PhysicalWebPreferenceFragment.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PhysicalWebPreferenceFragment.java |
| @@ -4,11 +4,15 @@ |
| package org.chromium.chrome.browser.preferences.privacy; |
| +import android.Manifest; |
| +import android.content.pm.PackageManager; |
| +import android.os.Build; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.Preference.OnPreferenceChangeListener; |
| import android.preference.PreferenceFragment; |
| +import org.chromium.base.Log; |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.preferences.ChromeSwitchPreference; |
| @@ -16,8 +20,9 @@ import org.chromium.chrome.browser.preferences.ChromeSwitchPreference; |
| * Fragment to manage the Physical Web preference and to explain to the user what it does. |
| */ |
| public class PhysicalWebPreferenceFragment extends PreferenceFragment { |
| - |
| + private static final String TAG = "PhysicalWeb"; |
| private static final String PREF_PHYSICAL_WEB_SWITCH = "physical_web_switch"; |
| + private static final int REQUEST_ID = 0; |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| @@ -27,6 +32,46 @@ public class PhysicalWebPreferenceFragment extends PreferenceFragment { |
| initPhysicalWebSwitch(); |
| } |
| + private void ensureLocationPermission() { |
|
gone
2015/12/28 23:35:56
nit: you can avoid the extra indentation if you fl
|
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
| + if (getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) |
| + == PackageManager.PERMISSION_GRANTED) { |
| + Log.d(TAG, "Location permission already granted"); |
| + setPhysicalWebEnabled(true); |
| + return; |
| + } |
| + |
| + Log.d(TAG, "Requesting location permission"); |
| + requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ID); |
| + return; |
| + } |
| + |
| + setPhysicalWebEnabled(true); |
| + } |
| + |
| + |
| + @Override |
| + public void onRequestPermissionsResult(int requestCode, String permissions[], |
| + int[] grantResults) { |
| + // TODO(cco3): Add UMA here. |
| + switch (requestCode) { |
| + case REQUEST_ID: |
| + if (grantResults.length > 0 |
| + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { |
| + Log.d(TAG, "Location permission granted"); |
| + } else { |
| + Log.d(TAG, "Location permission rejected"); |
| + } |
| + break; |
| + default: |
| + } |
| + |
| + // It doesn't matter whether we were given the location permission or not. We will flip |
| + // the setting to true and let the PreferenceManager figure out what to do with the |
| + // location permission or lack thereof. |
| + setPhysicalWebEnabled(true); |
| + } |
| + |
| private void initPhysicalWebSwitch() { |
| ChromeSwitchPreference physicalWebSwitch = |
| (ChromeSwitchPreference) findPreference(PREF_PHYSICAL_WEB_SWITCH); |
| @@ -38,11 +83,17 @@ public class PhysicalWebPreferenceFragment extends PreferenceFragment { |
| physicalWebSwitch.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { |
| @Override |
| public boolean onPreferenceChange(Preference preference, Object newValue) { |
| - PrivacyPreferencesManager.getInstance(getActivity()).setPhysicalWebEnabled( |
| - (boolean) newValue); |
| + if ((boolean) newValue) { |
| + ensureLocationPermission(); |
| + } else { |
| + setPhysicalWebEnabled(false); |
| + } |
| return true; |
| } |
| }); |
| } |
| -} |
| + private void setPhysicalWebEnabled(boolean value) { |
| + PrivacyPreferencesManager.getInstance(getActivity()).setPhysicalWebEnabled(value); |
| + } |
| +} |