package ca.uwccf.prayerbox.Data; import java.util.ArrayList; import ca.uwccf.prayerbox.R; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.RemoteViews; import android.widget.RemoteViewsService; public class PrayerRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private static ArrayList<Prayer> mPrayerItems = new ArrayList<Prayer>(); private int mAppWidgetId; private Context mContext; public PrayerRemoteViewsFactory(Context context, Intent intent){ mContext = context; mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } @Override public int getCount() { return mPrayerItems.size(); } @Override public long getItemId(int position) { return position; } @Override public RemoteViews getLoadingView() { return null; } @Override public RemoteViews getViewAt(int position) { RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_prayer_list_item); Prayer pitem = mPrayerItems.get(position); rv.setTextViewText(R.id.label, pitem.subject); rv.setTextViewText(R.id.request, pitem.request); rv.setTextViewText(R.id.author, pitem.author); rv.setTextViewText(R.id.date, pitem.date); Bundle extras = new Bundle(); extras.putString(PrayerWidgetProvider.SUBJECT, pitem.subject); extras.putString(PrayerWidgetProvider.REQUEST, pitem.request); extras.putString(PrayerWidgetProvider.DATE, pitem.date); extras.putString(PrayerWidgetProvider.PRAYER_ID, pitem.prayer_id); extras.putString(PrayerWidgetProvider.AUTHOR, pitem.author); extras.putBoolean(PrayerWidgetProvider.ISStarred, pitem.isStarred); Intent fillInIntent = new Intent(); fillInIntent.putExtras(extras); // Make it possible to distinguish the individual on-click // action of a given item rv.setOnClickFillInIntent(R.id.widget_item, fillInIntent); return rv; } @Override public int getViewTypeCount() { return 1; } @Override public boolean hasStableIds() { return false; } @Override public void onCreate() { populatePrayerItems(); } public void populatePrayerItems(){ StringRequest request = new StringRequest(Request.Method.POST, "http://prayer.uwccf.ca/api/prayerproxy.php", new Response.Listener<String>() { @Override public void onResponse(String result) { PrayerParser pray_parser = new PrayerParser(result); mPrayerItems = pray_parser.parsePrayerList(); AppWidgetManager widgetManager = AppWidgetManager.getInstance(mContext); widgetManager.notifyAppWidgetViewDataChanged(widgetManager.getAppWidgetIds( new ComponentName(mContext, PrayerWidgetProvider.class)), R.id.widget_plist); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }){ }; PrayerApplication.getInstance().addToRequestQueue(request); } @Override public void onDataSetChanged() { } @Override public void onDestroy() { // TODO Auto-generated method stub } }