package fr.tvbarthel.apps.simplethermometer.widget;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import fr.tvbarthel.apps.simplethermometer.services.TemperatureUpdaterService;
import fr.tvbarthel.apps.simplethermometer.utils.ConnectivityUtils;
import fr.tvbarthel.apps.simplethermometer.utils.PreferenceUtils;
/**
* An {@link android.appwidget.AppWidgetProvider} used to update the
* Simple Thermometer Widgets
*/
public class STWidgetProvider extends AppWidgetProvider {
//An intent Action used to notify a data change: text color, temperature value
// temperature unit etc.
public static final String APPWIDGET_DATA_CHANGED =
"fr.vbarthel.apps.simplethermometer.widget.STWidgetProvider.DataChanged";
/*
AppWidgetProvider overrides
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
updateAppWidgets(context, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
final String action = intent.getAction();
boolean needAnUpdate = false;
if (STWidgetProvider.APPWIDGET_DATA_CHANGED.equals(action)) {
//if a data changed, an update is needed.
needAnUpdate = true;
} else if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action) && ConnectivityUtils.isNetworkConnected(context)) {
//if the temperature is outdated and there is a network connection
//an update is needed.
needAnUpdate = true;
}
if (needAnUpdate) {
//Retrieve the Simple Thermometer Widget Ids
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
final ComponentName thisWidget = new ComponentName(context, STWidgetProvider.class);
final int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
//Update the Simple Thermometer Widgets
updateAppWidgets(context, allWidgetIds);
}
}
/*
Private Methods
*/
/**
* Update the Simple Thermometer Widgets by starting a {@link fr.tvbarthel.apps.simplethermometer.widget.STWidgetUpdateService}
*
* @param context context
* @param appWidgetIds widget ids
*/
private void updateAppWidgets(Context context, int[] appWidgetIds) {
if (PreferenceUtils.isTemperatureOutdated(context.getApplicationContext(), false)) {
// Need to update the temperature
TemperatureUpdaterService.startForUpdate(context);
} else {
//Build an intent to start the update service
final Intent intent = new Intent(context.getApplicationContext(), STWidgetUpdateService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
context.startService(intent);
}
}
}