diff options
author | Danesh M <daneshm90@gmail.com> | 2016-01-12 13:21:19 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2016-01-15 15:32:34 -0800 |
commit | ff1cf255fd66ef2e2e3b73c11cce47a7258d1195 (patch) | |
tree | 4ae608b311ac5f6d3fef7852a0fd7ff59cbf45cd /src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java | |
parent | a461a5c365b16bdeb5a6a60e4931754b038d1404 (diff) | |
download | android_packages_apps_LockClock-ff1cf255fd66ef2e2e3b73c11cce47a7258d1195.tar.gz android_packages_apps_LockClock-ff1cf255fd66ef2e2e3b73c11cce47a7258d1195.tar.bz2 android_packages_apps_LockClock-ff1cf255fd66ef2e2e3b73c11cce47a7258d1195.zip |
LockClock : Update to v23 + runtime permissions
CYNGNOS-1559
Change-Id: Iaefe9de0a77251b3a2d0f772405ca1d1cdb73630
Diffstat (limited to 'src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java')
-rw-r--r-- | src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java | 56 |
1 files changed, 54 insertions, 2 deletions
diff --git a/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java b/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java index 97dcef6..1a42a20 100644 --- a/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java +++ b/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java @@ -16,6 +16,7 @@ package com.cyanogenmod.lockclock.preference; +import android.Manifest; import android.app.AlertDialog; import android.app.Dialog; import android.content.ContentResolver; @@ -23,6 +24,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.location.LocationManager; import android.os.Bundle; import android.preference.EditTextPreference; @@ -41,8 +43,9 @@ import com.cyanogenmod.lockclock.misc.Preferences; import com.cyanogenmod.lockclock.weather.WeatherUpdateService; public class WeatherPreferences extends PreferenceFragment implements - SharedPreferences.OnSharedPreferenceChangeListener { + SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener { private static final String TAG = "WeatherPreferences"; + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1; private static final String[] LOCATION_PREF_KEYS = new String[] { Constants.WEATHER_USE_CUSTOM_LOCATION, @@ -60,9 +63,10 @@ public class WeatherPreferences extends PreferenceFragment implements private SwitchPreference mUseMetric; private IconSelectionPreference mIconSet; private SwitchPreference mUseCustomlocation; - + private SwitchPreference mShowWeather; private Context mContext; private ContentResolver mResolver; + private Runnable mPostResumeRunnable; @Override public void onCreate(Bundle savedInstanceState) { @@ -81,6 +85,9 @@ public class WeatherPreferences extends PreferenceFragment implements mUseMetric = (SwitchPreference) findPreference(Constants.WEATHER_USE_METRIC); mUseCustomlocation = (SwitchPreference) findPreference(Constants.WEATHER_USE_CUSTOM_LOCATION); + mShowWeather = (SwitchPreference) findPreference(Constants.SHOW_WEATHER); + mShowWeather.setOnPreferenceChangeListener(this); + // At first placement/start default the use of Metric units based on locale // If we had a previously set value already, this will just reset the same value Boolean defValue = Preferences.useMetricUnits(mContext); @@ -99,6 +106,16 @@ public class WeatherPreferences extends PreferenceFragment implements super.onResume(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + + if (!hasLocationPermission(mContext)) { + mShowWeather.setChecked(false); + } + + if (mPostResumeRunnable != null) { + mPostResumeRunnable.run(); + mPostResumeRunnable = null; + } + updateLocationSummary(); updateFontColorsSummary(); updateIconSetSummary(); @@ -171,6 +188,11 @@ public class WeatherPreferences extends PreferenceFragment implements mContext.sendBroadcast(updateIntent); } + public static boolean hasLocationPermission(Context context) { + return context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) + == PackageManager.PERMISSION_GRANTED; + } + //=============================================================================================== // Utility classes and supporting methods //=============================================================================================== @@ -222,4 +244,34 @@ public class WeatherPreferences extends PreferenceFragment implements mIconSet.setSummary(mIconSet.getEntry()); } } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, + int[] grantResults) { + if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // We only get here if user tried to enable the preference, + // hence safe to turn it on after permission is granted + mPostResumeRunnable = new Runnable() { + @Override + public void run() { + mShowWeather.setChecked(true); + } + }; + } + } + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference == mShowWeather) { + if (!hasLocationPermission(mContext)) { + String[] permissions = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}; + requestPermissions(permissions, LOCATION_PERMISSION_REQUEST_CODE); + return false; + } + } + return true; + } } |