package de.schatenseite.android.waldemar; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import android.app.AlarmManager; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.widget.RemoteViews; import android.widget.Toast; import de.schatenseite.android.datepreference.DatePreference; public class WaldemarWidget extends AppWidgetProvider { public static String MIDNIGHTLY_WIDGET_UPDATE = "MIDNIGHTLY_WIDGET_UPDATE"; static AlarmManager myAlarmManager; static PendingIntent myPendingIntent; @Override public void onEnabled(Context context) { Intent intent = new Intent( WaldemarWidget.MIDNIGHTLY_WIDGET_UPDATE); PendingIntent pendingIntent = PendingIntent.getBroadcast( context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent); WaldemarWidget.SaveAlarmManager(alarmManager, pendingIntent); Toast.makeText(context, "onEnabled()", Toast.LENGTH_LONG).show(); } @Override public void onDisabled(Context context) { myAlarmManager.cancel(myPendingIntent); Toast.makeText(context, "onDisabled()", Toast.LENGTH_LONG).show(); } @Override public void onReceive(Context context, Intent intent) { if (MIDNIGHTLY_WIDGET_UPDATE.equals(intent.getAction()) || "PreferencesUpdated".equals(intent.getAction())) { Bundle extras = intent.getExtras(); if (extras != null) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ComponentName thisAppWidget = new ComponentName( context.getPackageName(), WaldemarWidget.class.getName()); int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); onUpdate(context, appWidgetManager, appWidgetIds); } } else { super.onReceive(context, intent); } } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } } public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); remoteViews.setTextViewText(R.id.name, prefs.getString("pref_name", context.getString(R.string.title))); Calendar calNow = new GregorianCalendar(); calNow.set(Calendar.HOUR_OF_DAY, 0); calNow.set(Calendar.MINUTE, 0); calNow.set(Calendar.SECOND, 0); long timeNow = calNow.getTimeInMillis(); Calendar calThen = DatePreference.getDateFor(PreferenceManager.getDefaultSharedPreferences(context), "pref_dateThen"); long timeThen = calThen.getTimeInMillis(); long days = Math.round((double) (timeThen - timeNow) / 86400000.); remoteViews.setTextViewText(R.id.daycount, String.valueOf(days)); DateFormat format = SimpleDateFormat.getTimeInstance( SimpleDateFormat.MEDIUM, Locale.getDefault()); remoteViews.setTextViewText(R.id.debug, format.format(new Date())); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } static void SaveAlarmManager(AlarmManager tAlarmManager, PendingIntent tPendingIntent) { myAlarmManager = tAlarmManager; myPendingIntent = tPendingIntent; } }