package ru.bsuirhelper.android.appwidget; import android.annotation.TargetApi; 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.net.Uri; import android.os.Build; import android.view.View; import android.widget.RemoteViews; import org.joda.time.DateTime; import ru.bsuirhelper.android.ApplicationSettings; import ru.bsuirhelper.android.R; import ru.bsuirhelper.android.core.schedule.Lesson; import ru.bsuirhelper.android.core.schedule.ScheduleManager; import ru.bsuirhelper.android.ui.ActivityDrawerMenu; /** * Created by Влад on 04.02.14. */ public class ScheduleWidgetProviderBase extends AppWidgetProvider { public static final String UPDATE_ACTION = "UDATE_ACTION"; @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int i = 0; i < appWidgetIds.length; i++) { Intent intent = new Intent(context, ScheduleWidgetService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); String defaultGroup = ApplicationSettings.getInstance(context).getString("defaultgroup", null); int subgroup = 1; if (defaultGroup != null) { subgroup = ApplicationSettings.getInstance(context).getInt(defaultGroup, 1); } ScheduleManager scheduleManager = ScheduleManager.getInstance(context); setOnClickWidget(context, rv, i); if (defaultGroup == null) { rv.setViewVisibility(R.id.widget_textView, View.VISIBLE); rv.setTextViewText(R.id.widget_textView, "Загрузить расписание"); } else { DateTime lessonDay = DateTime.now(); if (scheduleManager.isLessonsEndToday(defaultGroup, subgroup)) { rv.setTextViewText(R.id.widget_date, "Расписание на завтра"); lessonDay = lessonDay.plusDays(1); } else { rv.setTextViewText(R.id.widget_date, "Расписание на сегодня"); } Lesson[] lessons = scheduleManager.getLessonsOfDay(defaultGroup, lessonDay, ApplicationSettings.getInstance(context).getInt(defaultGroup, subgroup)); if (lessons.length > 0) { rv.setViewVisibility(R.id.widget_textView, View.INVISIBLE); rv.setRemoteAdapter(R.id.widget_listView, intent); } else { rv.setViewVisibility(R.id.widget_textView, View.VISIBLE); rv.setTextViewText(R.id.widget_textView, "Занятий нет"); } } appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } notifyRecreateListView(context); super.onUpdate(context, appWidgetManager, appWidgetIds); } private void setOnClickWidget(Context context, RemoteViews rv, int appWidgetId) { Intent startMainActivity = new Intent(context, ActivityDrawerMenu.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, startMainActivity, PendingIntent.FLAG_UPDATE_CURRENT); rv.setOnClickPendingIntent(R.id.widget_schedule, pendingIntent); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action != null && action.equals(UPDATE_ACTION)) { final AppWidgetManager manager = AppWidgetManager.getInstance(context); int appWidgetIds[] = manager.getAppWidgetIds( new ComponentName(context, ScheduleWidgetProviderBase.class)); if (Build.VERSION.SDK_INT > 10) { onUpdate(context, manager, appWidgetIds); } } else { super.onReceive(context, intent); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void notifyRecreateListView(Context context) { final AppWidgetManager manager = AppWidgetManager.getInstance(context); int appWidgetIds[] = manager.getAppWidgetIds( new ComponentName(context, ScheduleWidgetProviderBase.class)); manager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_listView); } }