package com.smit.rssreader; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import com.google.code.rome.android.repackaged.com.sun.syndication.feed.synd.SyndEntry; import com.google.code.rome.android.repackaged.com.sun.syndication.feed.synd.SyndFeed; import com.smit.EasyLauncher.R; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.AdapterView.OnItemSelectedListener; public class CustomerDialog extends AlertDialog { private Context context = null; private RSSOpenHelper rssOpenHelper = null; private CustomerDialogListener listener = null; private int id = 0; private String[] category = null; private String selectedCategory = null; private SpinnerBaseAdapter ba = new SpinnerBaseAdapter(); private CustomerDialogListener sLitener = new SpinnerListener(); private InteractiveServer inter; ProgressDialog pDialog = null; private DialogReciver diaReciver ; private EditText field_category; private EditText field_description; private Button btn_add; private Button btn_cancle; private EditText field_url; private Spinner spinner_choose; private Button rssAdd; private Button rssCancle; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub FeedCategory fc = (FeedCategory) msg.obj; SyndFeed feed = fc.getRssFeed(); String url = fc.getRssUrl(); if (feed == null) { new PopupDialog("��ܰ��ʾ", "����ʧ��,���������RSS��ַ�ĺϷ��ԣ�", context).show(); pDialog.dismiss(); } else { String channelTitle = feed.getTitle().trim(); int count = feed.getEntries().size(); SyndEntry entry = null; for (int i = 0; i < count; i++) { entry =(SyndEntry)feed.getEntries().get(i); String itemTitle = entry.getTitle().trim(); String strDes = entry.getDescription().getValue().trim(); String itemDes = ""; if(strDes.contains("<span")){ int index = strDes.indexOf("<span"); itemDes = strDes.substring(0, index-1); }else{ itemDes = strDes; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String itemPub = sdf.format(entry.getPublishedDate()); String itemLink = entry.getLink().trim(); rssOpenHelper.insertRssInfo(selectedCategory, url, channelTitle, itemTitle, itemDes, itemPub, itemLink, RssReaderConstant.NOTREAD,RssReaderConstant.FEEDNOTONSERVER); } field_url.setText(" "); dismiss(); pDialog.dismiss(); listener.onOkClick(); } super.handleMessage(msg); } }; public CustomerDialog(Context context, int id, CustomerDialogListener listener, InteractiveServer inter) { super(context); this.context = context; this.id = id; this.listener = listener; this.inter = inter; IntentFilter filter = new IntentFilter(); filter.addAction(RssReaderConstant.IQRESPONSEYES); filter.addAction(RssReaderConstant.IQRESPONSENO); diaReciver = new DialogReciver(); context.registerReceiver(diaReciver, filter); rssOpenHelper = new RSSOpenHelper(context); } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub if (id == 1) { LayoutInflater categoryInflater = LayoutInflater.from(context); View categoryLayout = categoryInflater.inflate( R.layout.rss_add_category_dialog, null); setView(categoryLayout); super.onCreate(savedInstanceState); // �߼�˳��ע��ֻ�ܷ������� field_category = (EditText) categoryLayout .findViewById(R.id.txtcategory); field_description = (EditText) categoryLayout .findViewById(R.id.txtdescription); btn_add = (Button) categoryLayout.findViewById(R.id.add); btn_cancle = (Button) categoryLayout.findViewById(R.id.canle); btn_cancle.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dismiss(); } }); btn_add.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String cate = field_category.getText().toString().trim(); String description = field_description.getText().toString() .trim(); if (cate.equals("")) { new PopupDialog("������ʾ��", "RSS�����Ϊ�գ�", context).show(); } else if (isSameOfCategory(cate)) { new PopupDialog("��ܰ��ʾ��", "������Ѵ��ڣ�", context).show(); } else { rssOpenHelper.insertCategory(cate, description); Cursor c1 = rssOpenHelper.query(); if (c1.moveToFirst()) { int d = c1.getCount(); Log.i("----", "------" + d); } } listener.onOkClick(); sLitener.onOkClick(); field_category.setText(" "); field_description.setText(" "); dismiss(); } }); } if (id == 2) { LayoutInflater rssInflater = LayoutInflater.from(context); View rssLayout = rssInflater.inflate(R.layout.rss_add_rss_dialog, null); setView(rssLayout); super.onCreate(savedInstanceState); // �߼�˳��ע��ֻ�ܷ������� field_url = (EditText) rssLayout.findViewById(R.id.rssurl); spinner_choose = (Spinner) rssLayout .findViewById(R.id.spinnerchoose); rssAdd = (Button) rssLayout.findViewById(R.id.rssadd); rssCancle = (Button) rssLayout.findViewById(R.id.rsscanle); // ��ʼ��spinner getDataSource(); spinner_choose.setAdapter(ba); spinner_choose .setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub LinearLayout ll = (LinearLayout) view; TextView text = (TextView) ll.getChildAt(0); selectedCategory = text.getText().toString(); // selectedId = position + 1; Log.i("��ѡ���ֶ�", "------" + selectedCategory); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); // ȡ����ť���ü����� rssCancle.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub field_url.setText(" "); dismiss(); } }); // ��Ӱ�ť���ü����� rssAdd.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub final String url = field_url.getText().toString().trim(); List<URL> urlList = new ArrayList<URL>(); // ��֤RSS Feed��ַ�ĺϷ��� if (url.equals("")) { new PopupDialog("������ʾ:", "RSS��ַ����Ϊ��", context).show(); }else{ String cate = getCategoryOfRssUrl(url); if(cate == null){ pDialog = new ProgressDialog(context); pDialog.setTitle("���ڴ���"); pDialog.setMessage("���Ժ�......"); pDialog.show(); if(inter!=null){ urlList = initUrlList(url); inter.subscribe(urlList); }else{ HttpGetThread hgt = new HttpGetThread(url, handler, selectedCategory); hgt.start(); } }else{ new PopupDialog("��ܰ��ʾ:", "����ӵ�RSS��ַ�Ѿ�������:"+ cate + "���У�", context).show(); } } } }); } } // ��ij��RSS�������RSS��ַʱ���ж������ظ� private String getCategoryOfRssUrl(String url) { Cursor c = rssOpenHelper.queryWithUrl(url); if (c.moveToFirst()) { int cateIndex = c.getColumnIndex(RSSOpenHelper.RSS_CATEGORY); return c.getString(cateIndex); }else{ c.close(); return null; } } // ���RSS����ֶ�ʱ�ж��Ƿ���ӹ����ֶ� private boolean isSameOfCategory(String str) { Cursor c = rssOpenHelper.queryCategory(); if (c.moveToFirst()) { while (!c.isAfterLast()) { String str1 = c.getString(0); if (str1.equals(str)) { c.close(); return true; } c.moveToNext(); } } c.close(); return false; } // �ж�RSS��ַ�Ƿ���һ����ʽ�Ϸ���URI private List<URL> initUrlList(String feedUrl) { List<URL> list = new ArrayList<URL>(); try { list.add(new URL(feedUrl)); } catch (MalformedURLException e) { // TODO Auto-generated catch block new PopupDialog("������ʾ��", "rss��ַ��ʽ����ȷ��", context).show(); return null; } return list; } // get����Դ private void getDataSource() { int i = 0; Cursor cursor = rssOpenHelper.query(); if (cursor.moveToFirst()) { category = new String[cursor.getCount()]; int categoryIndex = cursor .getColumnIndex(RSSOpenHelper.RSS_CATEGORY); while (!cursor.isAfterLast()) { category[i] = cursor.getString(categoryIndex); cursor.moveToNext(); i++; } } cursor.close(); } // //�����ɺ��öԻ�����ʧ // private void disappear(){ // if(){ // // }else if{ // // } // } private class SpinnerBaseAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub if (category != null) { return category.length; } else { return 0; } } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LinearLayout ll = new LinearLayout(context); ll.setOrientation(LinearLayout.HORIZONTAL); TextView tv = new TextView(context); tv.setText(category[position]); Log.i("����ֶ�", "----" + category[position]); tv.setTextSize(22); tv.setTextColor(Color.BLACK); tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); tv.setGravity(Gravity.CENTER_VERTICAL); ll.addView(tv); return ll; } } private class SpinnerListener implements CustomerDialogListener { @Override public void onCancelClick() { // TODO Auto-generated method stub } @Override public void onOkClick() { // TODO Auto-generated method stub getDataSource(); ba.notifyDataSetChanged(); } } private class DialogReciver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); String message = intent.getExtras().getString("FEEDURL"); String subFlag = intent.getExtras().getString("SUBUNSUB"); if(action.equals(RssReaderConstant.IQRESPONSEYES)){ if(subFlag.equals("sub")){ new PopupDialog("��ܰ��ʾ", message+"���ijɹ���", context).show(); pDialog.dismiss(); field_url.setText(""); dismiss(); } }else if(action.equals(RssReaderConstant.IQRESPONSENO)){ if(subFlag.equals("sub")){ HttpGetThread hgt = new HttpGetThread(message, handler, selectedCategory); hgt.start(); //pDialog.dismiss(); } } } } }