diff options
Diffstat (limited to 'src/com/cyanogenmod/lockclock')
4 files changed, 43 insertions, 7 deletions
diff --git a/src/com/cyanogenmod/lockclock/ClockWidgetProvider.java b/src/com/cyanogenmod/lockclock/ClockWidgetProvider.java index c2ea11c..fbab355 100644 --- a/src/com/cyanogenmod/lockclock/ClockWidgetProvider.java +++ b/src/com/cyanogenmod/lockclock/ClockWidgetProvider.java @@ -27,6 +27,7 @@ import com.cyanogenmod.lockclock.misc.Constants; import com.cyanogenmod.lockclock.misc.Preferences; import com.cyanogenmod.lockclock.misc.WidgetUtils; import com.cyanogenmod.lockclock.weather.ForecastActivity; +import com.cyanogenmod.lockclock.weather.Utils; import com.cyanogenmod.lockclock.weather.WeatherSourceListenerService; import com.cyanogenmod.lockclock.weather.WeatherUpdateService; @@ -49,7 +50,8 @@ public class ClockWidgetProvider extends AppWidgetProvider { if (D) Log.v(TAG, "Received intent " + intent); // Network connection has changed, make sure the weather update service knows about it - if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) { + if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action) + && Utils.isWeatherServiceAvailable(context)) { boolean hasConnection = !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); @@ -123,8 +125,10 @@ public class ClockWidgetProvider extends AppWidgetProvider { @Override public void onEnabled(Context context) { if (D) Log.d(TAG, "Scheduling next weather update"); - context.startService(new Intent(context, WeatherSourceListenerService.class)); - WeatherUpdateService.scheduleNextUpdate(context, true); + if (Utils.isWeatherServiceAvailable(context)) { + context.startService(new Intent(context, WeatherSourceListenerService.class)); + WeatherUpdateService.scheduleNextUpdate(context, true); + } // Start the broadcast receiver (API 16 devices) // This will schedule a repeating alarm every minute to handle the clock refresh @@ -138,9 +142,11 @@ public class ClockWidgetProvider extends AppWidgetProvider { @Override public void onDisabled(Context context) { if (D) Log.d(TAG, "Cleaning up: Clearing all pending alarms"); - context.stopService(new Intent(context, WeatherSourceListenerService.class)); - ClockWidgetService.cancelUpdates(context); - WeatherUpdateService.cancelUpdates(context); + if (Utils.isWeatherServiceAvailable(context)) { + context.stopService(new Intent(context, WeatherSourceListenerService.class)); + ClockWidgetService.cancelUpdates(context); + WeatherUpdateService.cancelUpdates(context); + } // Stop the clock update event (API 16 devices) if (!WidgetUtils.isTextClockAvailable()) { diff --git a/src/com/cyanogenmod/lockclock/misc/Preferences.java b/src/com/cyanogenmod/lockclock/misc/Preferences.java index 49a4632..0e1062e 100644 --- a/src/com/cyanogenmod/lockclock/misc/Preferences.java +++ b/src/com/cyanogenmod/lockclock/misc/Preferences.java @@ -19,6 +19,7 @@ package com.cyanogenmod.lockclock.misc; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; +import com.cyanogenmod.lockclock.weather.Utils; import cyanogenmod.weather.WeatherInfo; import cyanogenmod.weather.WeatherLocation; import org.json.JSONArray; @@ -72,7 +73,8 @@ public class Preferences { } public static boolean showWeather(Context context) { - return getPrefs(context).getBoolean(Constants.SHOW_WEATHER, true); + return getPrefs(context).getBoolean(Constants.SHOW_WEATHER, true) + && Utils.isWeatherServiceAvailable(context); } public static boolean showCalendar(Context context) { diff --git a/src/com/cyanogenmod/lockclock/preference/Preferences.java b/src/com/cyanogenmod/lockclock/preference/Preferences.java index a138c75..dc70081 100644 --- a/src/com/cyanogenmod/lockclock/preference/Preferences.java +++ b/src/com/cyanogenmod/lockclock/preference/Preferences.java @@ -25,6 +25,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import com.cyanogenmod.lockclock.R; +import com.cyanogenmod.lockclock.weather.Utils; import java.util.List; @@ -37,6 +38,15 @@ public class Preferences extends PreferenceActivity { public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.preferences_headers, target); + if (!Utils.isWeatherServiceAvailable(this)) { + for (Header header : target) { + if (header.titleRes == R.string.weather_category) { + target.remove(header); + break; + } + } + } + // Check if triggered from adding a new widget Intent intent = getIntent(); if (intent != null diff --git a/src/com/cyanogenmod/lockclock/weather/Utils.java b/src/com/cyanogenmod/lockclock/weather/Utils.java index 411fe29..6c95867 100644 --- a/src/com/cyanogenmod/lockclock/weather/Utils.java +++ b/src/com/cyanogenmod/lockclock/weather/Utils.java @@ -19,6 +19,7 @@ package com.cyanogenmod.lockclock.weather; import android.content.Context; import android.content.res.Resources; import com.cyanogenmod.lockclock.R; +import cyanogenmod.app.CMContextConstants; import cyanogenmod.providers.WeatherContract; import static cyanogenmod.providers.WeatherContract.WeatherColumns.WeatherCode.NOT_AVAILABLE; @@ -42,6 +43,9 @@ public final class Utils { private static final double DIRECTION_WEST = 293d; private static final double DIRECTION_NORTH_WEST = 338d; + private static boolean weatherServiceFeatureCached; + private static boolean weatherServiceAvailable; + /** * Returns a localized string of the wind direction * @param context Application context to access resources @@ -178,4 +182,18 @@ public final class Utils { return NOT_AVAILABLE; } } + + /** + * Checks if the CM Weather service is available in this device + * @param context + * @return true if service is available, false otherwise + */ + public static boolean isWeatherServiceAvailable(Context context) { + if (!weatherServiceFeatureCached) { + weatherServiceAvailable = context.getPackageManager() + .hasSystemFeature(CMContextConstants.CM_WEATHER_SERVICE); + weatherServiceFeatureCached = true; + } + return weatherServiceAvailable; + } } |