diff options
author | Luis Vidal <lvidal@cyngn.com> | 2016-03-29 14:37:07 -0700 |
---|---|---|
committer | Luis Vidal <lvidal@cyngn.com> | 2016-04-22 15:18:37 -0700 |
commit | c56159a628e4b7033cc33bac7df33a55f9b421a7 (patch) | |
tree | abcf47dd59ec89bd2457abf5e351b8362e2d4036 /src/com/cyanogenmod/lockclock/preference/WeatherPreferences.java | |
parent | 8af8dab921671bdcb0cf0472c1a96d068ac6a640 (diff) | |
download | android_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.java | 103 |
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(); + } } |