package com.lgq.rssreader.task;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.google.gson.Gson;
import com.lgq.rssreader.BlogContentActivity;
import com.lgq.rssreader.MainActivity;
import com.lgq.rssreader.R;
import com.lgq.rssreader.controls.XListView;
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.parser.FeedlyParser;
import com.lgq.rssreader.parser.HttpResponseHandler;
import com.lgq.rssreader.task.RssWidgetService.RssWidgetFactory;
import com.lgq.rssreader.utils.Helper;
import android.annotation.SuppressLint;
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.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.text.format.DateFormat;
import android.text.format.Time;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
public class LargeRssWidgetProvider extends AppWidgetProvider{
public static final String REFRESH = "com.lgq.rssreader.task.RssWidgetProvider.REFRESH";
public static final String LEFT = "com.lgq.rssreader.task.RssWidgetProvider.LEFT";
public static final String RIGHT = "com.lgq.rssreader.task.RssWidgetProvider.RIGHT";
public static final String ITEM = "com.lgq.rssreader.task.RssWidgetProvider.ITEM";
public static final String OPTION = "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS";
@SuppressLint("NewApi")
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for(int i=0, len=appWidgetIds.length;i<len;i++){
buildRemoteView(context, appWidgetManager, appWidgetIds[i]);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
private void buildRemoteView(Context context, AppWidgetManager appWidgetManager, int appWidgetId){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget4_4);
views.setTextViewText(R.id.widget_blog_title, context.getResources().getString(R.string.app_name));
Intent toastIntent = new Intent(context, BlogContentActivity.class);
toastIntent.setAction(ITEM);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
toastIntent.setData(Uri.parse(toastIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getActivity(context, 0, toastIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
views.setPendingIntentTemplate(R.id.listView1, toastPendingIntent);
Intent intent=new Intent(context, RssWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(appWidgetId, R.id.listView1, intent);
Intent refreshIntent = new Intent(context, LargeRssWidgetProvider.class);
refreshIntent.setAction(REFRESH);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent refreshPendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, 0);
views.setOnClickPendingIntent(R.id.widget_refresh, refreshPendingIntent);
Intent leftIntent = new Intent(context, LargeRssWidgetProvider.class);
leftIntent.setAction(LEFT);
leftIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent leftPendingIntent = PendingIntent.getBroadcast(context, 0, leftIntent, 0);
views.setOnClickPendingIntent(R.id.widget_left, leftPendingIntent);
Intent rightIntent = new Intent(context, LargeRssWidgetProvider.class);
rightIntent.setAction(RIGHT);
rightIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent rightPendingIntent = PendingIntent.getBroadcast(context, 0, rightIntent, 0);
views.setOnClickPendingIntent(R.id.widget_right, rightPendingIntent);
//appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.listView1);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onReceive(final Context context, Intent intent){
super.onReceive(context, intent);
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName cmpName = new ComponentName(context, LargeRssWidgetProvider.class);
final int[] appWidgetIds = appWidgetManager.getAppWidgetIds(cmpName);
for(int mAppWidgetId : appWidgetIds){
//int mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
if(intent.getAction().equals(REFRESH)){
Toast.makeText(context, context.getResources().getString(R.string.content_loading), Toast.LENGTH_SHORT).show();
FeedlyParser parser = new FeedlyParser();
Channel c = null;
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);
}
Blog tmp = new Blog();
tmp.TimeStamp = 0;
tmp.PubDate = new Date();
parser.getRssBlog(c, tmp, ReaderApp.getSettings().NumPerRequest, new HttpResponseHandler(){
@Override
public <Blog> void onCallback(List<Blog> blogs, boolean result, String msg, boolean hasMore){
if(result){
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyData2DB((List<com.lgq.rssreader.entity.Blog>) blogs);
helper.Close();
Helper.sound();
RssWidgetFactory.CurrentPage = 1;
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,R.id.listView1);
}else{
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
});
}else if(intent.getAction().equals(OPTION)){
}else if(intent.getAction().equals(LEFT)){
//buildRemoteView(context, appWidgetManager, mAppWidgetId);
if(RssWidgetFactory.CurrentPage > 0){
RssWidgetFactory.CurrentPage = RssWidgetFactory.CurrentPage - 1;
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,R.id.listView1);
}
}else if(intent.getAction().equals(RIGHT)){
//buildRemoteView(context, appWidgetManager, mAppWidgetId);
RssWidgetFactory.CurrentPage = RssWidgetFactory.CurrentPage + 1;
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,R.id.listView1);
}else if(intent.getAction().equals(ITEM)){
}
}
}
}