package net.sgoliver.android.widgets;
import java.util.Calendar;
import java.util.GregorianCalendar;
import android.app.Application;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.RemoteViews;
public class MiWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context,
AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
//Iteramos la lista de widgets en ejecuci�n
for (int i = 0; i < appWidgetIds.length; i++)
{
//ID del widget actual
int widgetId = appWidgetIds[i];
//Actualizamos el widget actual
actualizarWidget(context, appWidgetManager, widgetId);
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("net.sgoliver.android.widgets.ACTUALIZAR_WIDGET")) {
//Obtenemos el ID del widget a actualizar
int widgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
//Obtenemos el widget manager de nuestro contexto
AppWidgetManager widgetManager =
AppWidgetManager.getInstance(context);
//Actualizamos el widget
if (widgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
actualizarWidget(context, widgetManager, widgetId);
}
}
}
@Override
public void onDeleted(Context context, int[] appWidgetIds)
{
//Accedemos a las preferencias de la aplicaci�n
SharedPreferences prefs =
context.getSharedPreferences("WidgetPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
//Eliminamos las preferencias de los widgets borrados
for(int i=0; i<appWidgetIds.length; i++)
{
//ID del widget actual
int widgetId = appWidgetIds[i];
editor.remove("msg_" + widgetId);
}
//Aceptamos los cambios
editor.commit();
super.onDeleted(context, appWidgetIds);
}
public static void actualizarWidget(Context context,
AppWidgetManager appWidgetManager, int widgetId)
{
//Recuperamos el mensaje personalizado para el widget actual
SharedPreferences prefs =
context.getSharedPreferences("WidgetPrefs", Context.MODE_PRIVATE);
String mensaje = prefs.getString("msg_" + widgetId, "Hora actual:");
//Obtenemos la lista de controles del widget actual
RemoteViews controles =
new RemoteViews(context.getPackageName(), R.layout.miwidget);
//Asociamos los 'eventos' al widget
Intent intent = new Intent("net.sgoliver.android.widgets.ACTUALIZAR_WIDGET");
intent.putExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, widgetId,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
controles.setOnClickPendingIntent(R.id.BtnActualizar, pendingIntent);
Intent intent2 = new Intent(context, MainActivity.class);
PendingIntent pendingIntent2 =
PendingIntent.getActivity(context, widgetId,
intent2, PendingIntent.FLAG_UPDATE_CURRENT);
controles.setOnClickPendingIntent(R.id.FrmWidget, pendingIntent2);
//Actualizamos el mensaje en el control del widget
controles.setTextViewText(R.id.LblMensaje, mensaje);
//Obtenemos la hora actual
Calendar calendario = new GregorianCalendar();
String hora = calendario.getTime().toLocaleString();
//Actualizamos la hora en el control del widget
controles.setTextViewText(R.id.LblHora, hora);
//Notificamos al manager de la actualizaci�n del widget actual
appWidgetManager.updateAppWidget(widgetId, controles);
}
}