package com.cnblogs.android;
import java.util.ArrayList;
import java.util.List;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.cnblogs.android.adapter.RssListAdapter;
import com.cnblogs.android.dal.RssListDalHelper;
import com.cnblogs.android.entity.RssList;
/**
* �ҵĶ���
* @author walkingp
* @date:2012-3-22
*
*/
public class MyRssActivity extends SuperMainView {
List<RssList> listRss = new ArrayList<RssList>();
int pageIndex = 1;// ҳ��
ListView listView;
private RssListAdapter adapter;// ����Դ
ProgressBar bodyProgressBar;// ����ListView���ؿ�
ImageButton btnRefresh;// ˢ�°�ť
ProgressBar topProgressBar;// ���ذ�ť
TextView txtNoData;// û������
private ProgressDialog progressDialog;
int lastItemPosition;
Resources res;// ��Դ
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.my_rss_layout);
res = this.getResources();
InitialControls();
BindControls();
new PageTask().execute();
//ע��㲥
UpdateListViewReceiver receiver=new UpdateListViewReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.cnblogs.com.update_rsslist");
registerReceiver(receiver, filter);
}
/**
* ��ʼ���б�
*/
private void InitialControls() {
listView = (ListView) findViewById(R.id.rss_list);
bodyProgressBar = (ProgressBar) findViewById(R.id.rssList_progressBar);
btnRefresh = (ImageButton) findViewById(R.id.btn_refresh);
topProgressBar = (ProgressBar) findViewById(R.id.rss_progressBar);
txtNoData = (TextView) findViewById(R.id.txtNoData);
}
/**
* ���¼�
*/
private void BindControls() {
// ��ת������
btnRefresh.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MyRssActivity.this, RssCateActivity.class);
startActivityForResult(intent, 0);
}
});
// �����ת
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
TextView tvTitle = (TextView) v
.findViewById(R.id.rss_item_title);
TextView tvUrl = (TextView) v.findViewById(R.id.rss_item_url);
TextView tvIsCnblogs = (TextView) v
.findViewById(R.id.rss_item_is_cnblogs);
TextView tvAuthor = (TextView) v
.findViewById(R.id.rss_item_author);
String title = tvTitle.getText().toString();
String url = tvUrl.getText().toString();
boolean isCnblogs = tvIsCnblogs.getText().toString()
.equals("1");
String author = tvAuthor.getText().toString();
Intent intent = new Intent();
Bundle bundle = new Bundle();
if (isCnblogs) {// ����
intent.setClass(MyRssActivity.this,
AuthorBlogActivity.class);
bundle.putString("blogName", title);
bundle.putString("author", author);
} else {
intent.setClass(MyRssActivity.this, RssItemsActivity.class);
bundle.putString("title", title);
bundle.putString("url", url);
}
lastItemPosition=listView.getSelectedItemPosition();
intent.putExtras(bundle);
startActivity(intent);
}
});
// �����¼�
listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_rss_contextmenu, menu);
menu.setHeaderTitle(R.string.menu_bar_title);
}
});
}
// �����˵���Ӧ����
@Override
public boolean onContextItemSelected(MenuItem item) {
int itemIndex = item.getItemId();
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
View v = menuInfo.targetView;
switch (itemIndex) {
case R.id.menu_unrss://ȡ������
default:
//��ʾProgressDialog
progressDialog = ProgressDialog.show(MyRssActivity.this, "�˶���Ŀ", "���ڴ����˶��У����Ժ�", true, false);
TextView tvLink=(TextView)v.findViewById(R.id.rss_item_url);
String link=tvLink.getText().toString();
RssListDalHelper helper=new RssListDalHelper(getApplicationContext());
try{
helper.Delete(link);
Toast.makeText(getApplicationContext(), R.string.unrss_succ, Toast.LENGTH_SHORT).show();
}catch(Exception ex){
Toast.makeText(getApplicationContext(), R.string.unrss_fail, Toast.LENGTH_SHORT).show();
}
progressDialog.dismiss();
// �㲥
TextView tvTitle = (TextView) v.findViewById(R.id.rss_item_title);
TextView tvSummary = (TextView) v.findViewById(R.id.rss_item_summary);
TextView tvId = (TextView) v.findViewById(R.id.rss_item_id);
TextView tvIsCnblogs = (TextView) v.findViewById(R.id.rss_item_is_cnblogs);
TextView tvAuthor = (TextView) v.findViewById(R.id.rss_item_author);
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putStringArray("rsslist",
new String[]{tvAuthor.getText().toString() ,tvSummary.getText().toString(),
tvId.getText().toString(),tvTitle.getText().toString(),
"",link,
tvIsCnblogs.getText().toString()
});
bundle.putBoolean("isrss", false);
intent.putExtras(bundle);
intent.setAction("android.cnblogs.com.update_rsslist");
sendBroadcast(intent);
}
return super.onContextItemSelected(item);
}
/**
* ��������
*
* @author walkingp
* @date 2012-3-13
*/
public class PageTask extends AsyncTask<String, Integer, List<RssList>> {
@Override
protected List<RssList> doInBackground(String... params) {
RssListDalHelper helper = new RssListDalHelper(
getApplicationContext());
return helper.GetRssList();
}
@Override
protected void onPostExecute(List<RssList> result) {
if (listView.getCount() == 0) {
bodyProgressBar.setVisibility(View.GONE);
topProgressBar.setVisibility(View.GONE);
btnRefresh.setVisibility(View.VISIBLE);
}
if (result == null || result.size() == 0) {
txtNoData.setVisibility(View.VISIBLE);
} else {
adapter = new RssListAdapter(getApplicationContext(), result,
listView, RssListAdapter.EnumSource.MyRss, adapter);
listView.setAdapter(adapter);
listView.setSelection(lastItemPosition);
}
}
@Override
protected void onPreExecute() {
if (listView.getCount() == 0) {
bodyProgressBar.setVisibility(View.VISIBLE);
topProgressBar.setVisibility(View.VISIBLE);
btnRefresh.setVisibility(View.GONE);
}
}
}
/**
* ���ɾ�����ݣ��㲥��
* @author Administrator
*
*/
public class UpdateListViewReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context content, Intent intent) {
Bundle bundle=intent.getExtras();
String[] arr=bundle.getStringArray("rsslist");
if(arr!=null){
boolean isRss=bundle.getBoolean("isrss");
RssList entity=new RssList();
entity.SetAuthor(arr[0]);
entity.SetDescription(arr[1]);
entity.SetGuid(arr[2]);
entity.SetTitle(arr[3]);
entity.SetImage(arr[4]);
entity.SetLink(arr[5]);
entity.SetIsCnblogs(arr[6].equals("1"));
if(isRss){
List<RssList> list=new ArrayList<RssList>();
list.add(entity);
adapter.AddMoreData(list);
}else{
adapter.RemoveData(entity);
}
}
}
}
}