package de.htwdd;
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.res.Resources;
import android.os.AsyncTask;
import android.widget.RemoteViews;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import de.htwdd.classes.Mensa;
import de.htwdd.types.Meal;
/**
* Implementation of App Widget functionality.
*/
public class WidgetMensa_4 extends AppWidgetProvider {
private final String[] nameOfDays = DateFormatSymbols.getInstance().getWeekdays();
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_mensa_4);
// There may be multiple widgets active, so update all of them
for (int ID: appWidgetIds)
{
//Create a new intent that will target this class
Intent intent = new Intent(context, WidgetMensa_4.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ID);
intent.setAction("Update");
// Create a new PendingIntent which will be run whenever the widget is clicked
// This PendingIntent will run the intent we just createt before this
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.WidgetMensa, pi);
// Manually run the AsyncTask to initially
new MensaWorker().execute(context);
//Update the Widget
appWidgetManager.updateAppWidget(ID, remoteViews);
}
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
if (intent.getAction().equals("Update"))
{
new MensaWorker().execute(context);
}
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
private class MensaWorker extends AsyncTask<Context, Void, Meal[]>
{
Context context;
RemoteViews views;
Calendar calendar = Calendar.getInstance(Locale.GERMANY);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int day = calendar.get(Calendar.DAY_OF_WEEK);
int week = calendar.get(Calendar.WEEK_OF_YEAR);
@Override
protected Meal[] doInBackground(Context... params)
{
context = params[0];
// Am Freitag nach 15 Uhr, Samstag, Sonntag auf Montag springen
if (day == 7 || day == 1 || (day == 6 && hour >= 15))
{
day = 2;
week++;
}
// Nach 15 Uhr das Essen von morgen anzeigen, außer Freitag / Samstag / Sonntag
else if (hour >= 15)
day++;
// Essen laden
Mensa mensa = new Mensa();
mensa.getDataDay(day,week);
return mensa.Food;
}
@Override
protected void onPostExecute(Meal[] essen)
{
int resID_Title;
int resID_Price;
int count_essen;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
views = new RemoteViews(context.getPackageName(),R.layout.widget_mensa_4);
Resources ressource = context.getResources();
String packageName = context.getPackageName();
// Lösche alle Felder
for (int i = 1; i < 5; i++)
{
views.setTextViewText(ressource.getIdentifier("Food_"+i,"id", packageName), "");
views.setTextViewText(ressource.getIdentifier("Price_" + i, "id", packageName), "");
}
// Anzahl Essen die angezeigt werden
if (essen.length < 4+1)
count_essen = essen.length+1;
else
count_essen = 4+1;
// Zeige Essen an
for (int i = 1; i < count_essen; i++)
{
resID_Title = ressource.getIdentifier("Food_"+i,"id", packageName);
resID_Price = ressource.getIdentifier("Price_" + i, "id", packageName);
views.setTextViewText(resID_Title, cut(essen[i-1].Title));
views.setTextViewText(resID_Price, essen[i-1].Price);
}
// Tag von dem der Speiseplan angezeigt wird
views.setTextViewText(R.id.Menu_from, "Speiseplan von " + nameOfDays[day]);
// Setze aktuellen Stand
views.setTextViewText(R.id.Update, "Stand: " + (new SimpleDateFormat("HH:mm", Locale.getDefault())).format(calendar.getTime()) + " Uhr, " + (new SimpleDateFormat("dd.MM.", Locale.getDefault())).format(calendar.getTime()));
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(new ComponentName(context, WidgetMensa_4.class), views);
}
private String cut(String string)
{
if (string.length() < 44)
return string;
else
return string.substring(0,40)+"...";
}
}
}