aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java
diff options
context:
space:
mode:
authorLuis Vidal <lvidal@cyngn.com>2016-03-29 14:37:07 -0700
committerLuis Vidal <lvidal@cyngn.com>2016-04-22 15:18:37 -0700
commitc56159a628e4b7033cc33bac7df33a55f9b421a7 (patch)
treeabcf47dd59ec89bd2457abf5e351b8362e2d4036 /src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java
parent8af8dab921671bdcb0cf0472c1a96d068ac6a640 (diff)
downloadandroid_packages_apps_LockClock-c56159a628e4b7033cc33bac7df33a55f9b421a7.tar.gz
android_packages_apps_LockClock-c56159a628e4b7033cc33bac7df33a55f9b421a7.tar.bz2
android_packages_apps_LockClock-c56159a628e4b7033cc33bac7df33a55f9b421a7.zip
Refactor cLock to use the new Weather API
- Content provider was removed - Weather sources (Yahoo and OpenWeatherMap) were removed. Those providers will reside in their own package. - cLock was refactored to use the Weather API to process weather updates and city name disambiguation - cLock will let the active weather service provider decide whether back to back requests are OK. In other words, cLock does not enforce the 10 min wait period between requests anymore TICKET: CYNGNOS-2116 Change-Id: I87ccd5727013dbbd7e96ce0a8e3d4f766f823072
Diffstat (limited to 'src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java')
-rw-r--r--src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java103
1 files changed, 83 insertions, 20 deletions
diff --git a/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java b/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java
index 1a42a20..0824a4b 100644
--- a/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java
+++ b/src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java
@@ -19,7 +19,6 @@ package com.cyanogenmod.lockclock.preference;
import android.Manifest;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -31,31 +30,24 @@ import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
-
import com.cyanogenmod.lockclock.ClockWidgetProvider;
import com.cyanogenmod.lockclock.R;
import com.cyanogenmod.lockclock.misc.Constants;
import com.cyanogenmod.lockclock.misc.Preferences;
import com.cyanogenmod.lockclock.weather.WeatherUpdateService;
+import cyanogenmod.weather.CMWeatherManager;
public class WeatherPreferences extends PreferenceFragment implements
- SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener {
+ SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener,
+ CMWeatherManager.WeatherServiceProviderChangeListener {
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,
- Constants.WEATHER_CUSTOM_LOCATION_CITY
- };
- private static final String[] WEATHER_REFRESH_KEYS = new String[] {
- Constants.SHOW_WEATHER,
- Constants.WEATHER_REFRESH_INTERVAL
- };
-
private SwitchPreference mUseCustomLoc;
private EditTextPreference mCustomWeatherLoc;
private ListPreference mFontColor;
@@ -65,8 +57,8 @@ public class WeatherPreferences extends PreferenceFragment implements
private SwitchPreference mUseCustomlocation;
private SwitchPreference mShowWeather;
private Context mContext;
- private ContentResolver mResolver;
private Runnable mPostResumeRunnable;
+ private PreferenceScreen mWeatherSource;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -74,7 +66,6 @@ public class WeatherPreferences extends PreferenceFragment implements
getPreferenceManager().setSharedPreferencesName(Constants.PREF_NAME);
addPreferencesFromResource(R.xml.preferences_weather);
mContext = getActivity();
- mResolver = mContext.getContentResolver();
// Load items that need custom summaries etc.
mUseCustomLoc = (SwitchPreference) findPreference(Constants.WEATHER_USE_CUSTOM_LOCATION);
@@ -84,6 +75,18 @@ public class WeatherPreferences extends PreferenceFragment implements
mIconSet = (IconSelectionPreference) findPreference(Constants.WEATHER_ICONS);
mUseMetric = (SwitchPreference) findPreference(Constants.WEATHER_USE_METRIC);
mUseCustomlocation = (SwitchPreference) findPreference(Constants.WEATHER_USE_CUSTOM_LOCATION);
+ mWeatherSource = (PreferenceScreen) findPreference(Constants.WEATHER_SOURCE);
+ mWeatherSource.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ if (Preferences.getWeatherSource(mContext) != null && mShowWeather.isChecked()) {
+ mWeatherSource.notifyDependencyChange(false);
+ } else {
+ mWeatherSource.notifyDependencyChange(true);
+ }
+ return false;
+ }
+ });
mShowWeather = (SwitchPreference) findPreference(Constants.SHOW_WEATHER);
mShowWeather.setOnPreferenceChangeListener(this);
@@ -116,15 +119,34 @@ public class WeatherPreferences extends PreferenceFragment implements
mPostResumeRunnable = null;
}
+ final CMWeatherManager weatherManager = CMWeatherManager.getInstance(mContext);
+ weatherManager.registerWeatherServiceProviderChangeListener(this);
+
+ mWeatherSource.setEnabled(mShowWeather.isChecked());
+
updateLocationSummary();
updateFontColorsSummary();
updateIconSetSummary();
+ updateWeatherProviderSummary(getWeatherProviderName());
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+ final CMWeatherManager weatherManager = CMWeatherManager.getInstance(mContext);
+ weatherManager.unregisterWeatherServiceProviderChangeListener(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mUseCustomlocation.isChecked()
+ && Preferences.getCustomWeatherLocationCity(mContext) == null) {
+ //The user decided to toggle the custom location switch, but forgot to set a custom
+ //location, we need to go back to geo location
+ Preferences.setUseCustomWeatherLocation(mContext, false);
+ }
}
@Override
@@ -152,18 +174,24 @@ public class WeatherPreferences extends PreferenceFragment implements
forceWeatherUpdate = true;
}
- // If the weather source has changes, invalidate the custom location settings and change
- // back to GeoLocation to force the user to specify a new custom location if needed
if (TextUtils.equals(key, Constants.WEATHER_SOURCE)) {
- Preferences.setCustomWeatherLocationId(mContext, null);
+ // The weather source changed, invalidate the custom location settings and change
+ // back to GeoLocation to force the user to specify a new custom location if needed
Preferences.setCustomWeatherLocationCity(mContext, null);
+ Preferences.setCustomWeatherLocation(mContext, null);
Preferences.setUseCustomWeatherLocation(mContext, false);
mUseCustomlocation.setChecked(false);
updateLocationSummary();
}
- if (key.equals(Constants.WEATHER_USE_CUSTOM_LOCATION)
- || key.equals(Constants.WEATHER_CUSTOM_LOCATION_CITY)) {
+ if (key.equals(Constants.WEATHER_USE_CUSTOM_LOCATION)) {
+ if (!mUseCustomLoc.isChecked() || (mUseCustomLoc.isChecked() &&
+ Preferences.getCustomWeatherLocation(mContext) != null)) {
+ forceWeatherUpdate = true;
+ }
+ }
+
+ if (key.equals(Constants.WEATHER_CUSTOM_LOCATION_CITY) && mUseCustomLoc.isChecked()) {
forceWeatherUpdate = true;
}
@@ -171,6 +199,15 @@ public class WeatherPreferences extends PreferenceFragment implements
needWeatherUpdate = true;
}
+ if (key.equals(Constants.SHOW_WEATHER)) {
+ mWeatherSource.setEnabled(mShowWeather.isChecked());
+ if (Preferences.getWeatherSource(mContext) != null && mShowWeather.isChecked()) {
+ mWeatherSource.notifyDependencyChange(false);
+ } else {
+ mWeatherSource.notifyDependencyChange(true);
+ }
+ }
+
if (Constants.DEBUG) {
Log.v(TAG, "Preference " + key + " changed, need update " +
needWeatherUpdate + " force update " + forceWeatherUpdate);
@@ -199,7 +236,7 @@ public class WeatherPreferences extends PreferenceFragment implements
private void updateLocationSummary() {
if (mUseCustomLoc.isChecked()) {
- String location = Preferences.customWeatherLocationCity(mContext);
+ String location = Preferences.getCustomWeatherLocationCity(mContext);
if (location == null) {
location = getResources().getString(R.string.unknown);
}
@@ -274,4 +311,30 @@ public class WeatherPreferences extends PreferenceFragment implements
}
return true;
}
+
+ @Override
+ public void onWeatherServiceProviderChanged(String providerName) {
+ updateWeatherProviderSummary(providerName);
+ }
+
+ private void updateWeatherProviderSummary(String providerName) {
+ if (providerName != null) {
+ mWeatherSource.setSummary(providerName);
+ Preferences.setWeatherSource(mContext, providerName);
+ } else {
+ mWeatherSource.setSummary(R.string.weather_source_not_selected);
+ Preferences.setWeatherSource(mContext, null);
+ }
+
+ if (providerName != null && mShowWeather.isChecked()) {
+ mWeatherSource.notifyDependencyChange(false);
+ } else {
+ mWeatherSource.notifyDependencyChange(true);
+ }
+ }
+
+ private String getWeatherProviderName() {
+ final CMWeatherManager weatherManager = CMWeatherManager.getInstance(mContext);
+ return weatherManager.getActiveWeatherServiceProviderLabel();
+ }
}