package com.thomasdh.roosterpgplus.Notifications; import android.app.AlarmManager; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.widget.RemoteViews; import com.thomasdh.roosterpgplus.Data.Rooster; import com.thomasdh.roosterpgplus.Models.Lesuur; import com.thomasdh.roosterpgplus.R; import com.thomasdh.roosterpgplus.RoosterActivity; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import java.text.SimpleDateFormat; import java.util.Calendar; public class WidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // Alle widgets bijwerken for (int widgetID : appWidgetIds) { Rooster.getNextLesuur(context, nextLes -> createWidgetView(context, appWidgetManager, widgetID, nextLes)); } } @SuppressWarnings("deprecation") private void createWidgetView(Context context, AppWidgetManager appWidgetManager, int widgetID, Lesuur nextLes) { RemoteViews views; DateTime notificationDate; AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if(nextLes == null) { views = new RemoteViews(context.getPackageName(), R.layout.rooster_null); /* Try again over een een dag */ notificationDate = DateTime.now().plusDays(1); } else { if (nextLes.verandering) { views = new RemoteViews(context.getPackageName(), R.layout.rooster_uur_gewijzigd_widget); } else { views = new RemoteViews(context.getPackageName(), R.layout.rooster_uur_widget); } if (nextLes.verplaatsing || nextLes.verandering) { views.setTextColor(R.id.rooster_lokaal, Color.parseColor("#FF0000")); } else { views.setTextColor(R.id.rooster_lokaal, Color.parseColor("#000000")); } if (nextLes.isNew) { views.setTextViewText(R.id.rooster_notes, "Nieuwe les"); } else { views.setTextViewText(R.id.rooster_notes, ""); } SimpleDateFormat format = new SimpleDateFormat("HH:mm"); views.setTextViewText(R.id.rooster_vak, nextLes.vak); views.setTextViewText(R.id.rooster_leraar, StringUtils.join(nextLes.leraren, " & ")); views.setTextViewText(R.id.rooster_lokaal, nextLes.lokaal); views.setTextViewText(R.id.rooster_tijden, format.format(nextLes.lesStart) + " - " + format.format(nextLes.lesEind)); int year = nextLes.week < Calendar.getInstance().get(Calendar.WEEK_OF_YEAR) ? /* nieuw jaar */ DateTime.now().getYear() + 1 : DateTime.now().getYear(); notificationDate = DateTime.now() .withYear(year) .withWeekOfWeekyear(nextLes.week) .withDayOfWeek(nextLes.dag) .withTime( nextLes.lesEind.getHours(), nextLes.lesEind.getMinutes(), nextLes.lesEind.getSeconds(), 0 ) .plusMinutes(6); } Intent intent = new Intent(context, RoosterActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.rooster_uur_linearlayout, pendingIntent); Intent refreshIntent = new Intent(context, WidgetProvider.class); refreshIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{widgetID}); PendingIntent refreshPendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_refresh, refreshPendingIntent); alarmManager.set(AlarmManager.RTC_WAKEUP, notificationDate.getMillis(), pendingIntent); appWidgetManager.updateAppWidget(widgetID, views); } }