package com.aiyou.appwidget;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import com.aiyou.R;
import com.aiyou.bbs.bean.Article;
import com.aiyou.bbs.bean.Widget;
import com.aiyou.utils.JsonHelper;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.logcat.Logcat;
import com.aiyou.utils.thread.ThreadUtils;
import android.annotation.TargetApi;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
import android.widget.Toast;
/**
* 十大列表的adapter
*
* @author sollian
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class WidgetViewsFactory implements
RemoteViewsService.RemoteViewsFactory {
private static final String TAG = WidgetViewsFactory.class.getSimpleName();
private static final String KEY_MSG = "msg";
private ArrayList<Article> mArticleList = new ArrayList<>();
private Context mContext;
private Widget mWidget;
@SuppressWarnings("unused")
private int mAppWidgetId;
private Handler mHandler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
String str = msg.getData().getString(KEY_MSG);
Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show();
return true;
}
});
public WidgetViewsFactory(Context context, Intent intent,
ArrayList<Article> listArticle) {
this.mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
this.mArticleList = listArticle;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return mArticleList.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews row = new RemoteViews(mContext.getPackageName(),
R.layout.widget_row);
row.setTextViewText(R.id.widget_row_tv_title,
mArticleList.get(position).title);
if (position % 2 == 0) {
row.setImageViewResource(R.id.widget_row_iv_bg,
R.drawable.background_widget_list_white);
} else {
row.setImageViewResource(R.id.widget_row_iv_bg,
R.drawable.background_widget_list_blue);
}
Intent i = new Intent();
Bundle extras = new Bundle();
extras.putSerializable(WidgetProvider.EXTRA_ARTICLE,
mArticleList.get(position));
i.putExtras(extras);
row.setOnClickFillInIntent(R.id.widget_row_tv_title, i);
return row;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void onDataSetChanged() {
Future<?> future = getWidget();
if (future != null) {
try {
boolean result = (Boolean) future.get();
if (!result) {
return;
}
} catch (InterruptedException e) {
Logcat.e(TAG, "onDataSetChanged() InterruptedException");
} catch (ExecutionException e) {
Logcat.e(TAG, "onDataSetChanged() ExecutionException:" + e.getMessage());
}
} else {
return;
}
mArticleList.clear();
mArticleList.addAll(Arrays.asList(mWidget.articles));
sendMessage("更新成功");
}
/**
* 发送消息
*
* @param str
*/
private void sendMessage(String str) {
Message msg = mHandler.obtainMessage();
Bundle data = msg.getData();
data.putString(KEY_MSG, str);
msg.setData(data);
mHandler.sendMessage(msg);
}
/**
* 获取十大的线程
*/
private Future<?> getWidget() {
if (!NetWorkManager.getInstance(mContext).isNetAvailable()) {
sendMessage(NetWorkManager.MSG_NONET);
return null;
}
return ThreadUtils.submit(new Callable<Boolean>() {
@Override
public Boolean call() {
String strJson = Widget.getTopten(mContext);
if (strJson == null) {
sendMessage(NetWorkManager.MSG_NONET);
return false;
}
String str = JsonHelper.checkError(strJson);
if (null == str) {
// 非错误信息
mWidget = new Widget(strJson);
return true;
} else {
sendMessage(str);
return false;
}
}
});
}
}