package com.lgq.rssreader.task;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.lgq.rssreader.BlogContentActivity;
import com.lgq.rssreader.R;
import com.lgq.rssreader.core.Config;
import com.lgq.rssreader.core.ReaderApp;
import com.lgq.rssreader.dal.BlogDalHelper;
import com.lgq.rssreader.entity.Blog;
import com.lgq.rssreader.entity.Channel;
import com.lgq.rssreader.entity.Profile;
import com.lgq.rssreader.utils.DateHelper;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
import android.widget.RemoteViewsService.RemoteViewsFactory;
public class RssWidgetService extends RemoteViewsService{
private static final boolean DB = true;
private static final String TAG = "RssReader";
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
log("onGetViewFactory, intent=" + intent);
int mAppWidgetId = 0;
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
return new RssWidgetFactory(getApplicationContext(), intent, mAppWidgetId);
}
public static class RssWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
private Channel c;
private List<Blog> mBlogs;
private int mAppWidgetId;
public static int CurrentPage = 1;
// ����
public RssWidgetFactory(Context context, Intent intent, int appWidgetId) {
log("MyWidgetFactory");
mContext = context;
mAppWidgetId = appWidgetId;
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget4_4);
SharedPreferences prefs = ReaderApp.getAppContext().getSharedPreferences("Widget_Channel", 0);
String content = prefs.getString("Widget_Channel" + mAppWidgetId, "");
if(content.length() > 0 ){
c = new Gson().fromJson(content, Channel.class);
views.setTextViewText(R.id.widget_blog_title, c.Title);
}
views.setTextViewText(R.id.widget_blog_pagenation, String.format(mContext.getResources().getString(R.string.widget_page), CurrentPage));
views.setRemoteAdapter(appWidgetId, R.id.listView1, intent);
AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, views);
}
@Override
public int getCount() {
log("getCount");
return mBlogs.size();
}
@Override
public long getItemId(int position) {
log("getItemId");
return position;
}
// �ڵ���getViewAt�Ĺ���У���ʾһ��LoadingView��
// ���return null����ô������һ��Ĭ�ϵ�loadingView
@Override
public RemoteViews getLoadingView() {
log("getLoadingView");
return null;
}
@Override
public RemoteViews getViewAt(int position) {
log("getViewAt, position=" + position);
if (position < 0 || position >= getCount()) {
return null;
}
RemoteViews views = new RemoteViews(mContext.getPackageName(), R.layout.widget_blog_list_item);
views.setTextViewText(R.id.widget_blog_subtitle, mBlogs.get(position).SubsTitle);
views.setTextColor(R.id.widget_blog_subtitle, mContext.getResources().getColor(R.color.black));
if(mBlogs.get(position).IsStarred)
views.setImageViewResource(R.id.widget_blog_star, R.drawable.star);
else
views.setViewVisibility(R.id.widget_blog_star, View.GONE);
if(mBlogs.get(position).IsRead){
views.setImageViewResource(R.id.widget_blog_read, R.drawable.keepread);
views.setTextColor(R.id.widget_blog_title, mContext.getResources().getColor(R.color.gray));
}
else{
views.setImageViewResource(R.id.widget_blog_read, View.GONE);
views.setTextColor(R.id.widget_blog_title, mContext.getResources().getColor(R.color.black));
}
views.setTextColor(R.id.widget_blog_date, mContext.getResources().getColor(R.color.black));
views.setTextViewText(R.id.widget_blog_date, DateHelper.getDaysBeforeNow(mBlogs.get(position).PubDate));
views.setTextViewText(R.id.widget_blog_title, mBlogs.get(position).Title);
Bundle extras = new Bundle();
extras.putInt("EXTRA_ITEM", position);
extras.putString(BlogContentActivity.CURRENT, new Gson().toJson(mBlogs.get(position)));
if(c != null)
extras.putString(BlogContentActivity.CHANNEL, new Gson().toJson(c));
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
// Make it possible to distinguish the individual on-click
// action of a given item
views.setOnClickFillInIntent(R.id.widget_blog_list_item, fillInIntent);
return views;
}
@Override
public int getViewTypeCount() {
log("getViewTypeCount");
return 1;
}
@Override
public boolean hasStableIds() {
log("hasStableIds");
return true;
}
@Override
public void onCreate() {
log("onCreate");
}
@Override
public void onDataSetChanged() {
log("onDataSetChanged");
BlogDalHelper helper = new BlogDalHelper();
if(c != null)
mBlogs = helper.GetBlogList(c, CurrentPage, ReaderApp.getSettings().NumPerRequest, ReaderApp.getSettings().ShowAllItems);
else
mBlogs = helper.GetTopBlogList();
helper.Close();
}
@Override
public void onDestroy() {
log("onDestroy");
}
}
private static void log(String log) {
if (DB)
Log.d(TAG, log);
}
}