package com.love.apps.BT4U; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; public class Updates extends SherlockFragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } private BTUpdateArrayAdapter theAdapter; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //System.out.println(" HEY I MADE IT"); super.onCreateView(inflater, container, savedInstanceState); setHasOptionsMenu(true); final View v = inflater.inflate(R.layout.activity_btupdates, container, false); ListView lv = (ListView)v.findViewById(R.id.btupdates_list); theAdapter = new BTUpdateArrayAdapter(this.getActivity().getBaseContext(),android.R.layout.simple_list_item_1); lv.setAdapter(theAdapter); UpdatesGetter updates_getter = new UpdatesGetter(); updates_getter.execute("http://www.blacksburg.gov/rss.aspx?type=5&cat=17¶mtime=Current"); return v; } class UpdatesGetter extends AsyncTask<String, Integer, String>{ protected String doInBackground(String... params) { try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpRequest = new HttpGet(params[0]); HttpResponse response = httpClient.execute(httpRequest); InputStream in = response.getEntity().getContent(); InputStreamReader ir = new InputStreamReader(in); BufferedReader bin = new BufferedReader(ir); String line = null; StringBuffer buff = new StringBuffer(); while((line = bin.readLine())!=null){ buff.append(line+"\n"); } bin.close(); //System.out.println(buff.toString()); return buff.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } private String resultsSoFar = ""; protected void onPostExecute(String result) { resultsSoFar = resultsSoFar + result; if (result!=null && result.contains("</rss>")) { try{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler(){ String[] data = {"","","",""}; int index = -1; public void startElement(String uri, String localName,String qName, org.xml.sax.Attributes attributes) throws SAXException { if (qName.equals("item")) { data = new String[4]; for (int i=0; i<data.length; i++) { data[i] = ""; } index = -1; } else if (qName.equals("title")) { index = 0; } else if (qName.equals("pubDate")) { index = 1; } else if (qName.equals("description")) { index = 2; } else if (qName.equals("link")) { index = 3; } else { index = -1; } } public void endElement(String uri, String localName, String qName) { if (qName.equals("item")) { for (int i=0; i<data.length;i++) { data[i] = data[i].replace(" ", " "); } Updates.this.theAdapter.add(new NewsItem(data[0],data[1],data[2],data[3])); Log.d("Parser","Added a newsitem"); index = -1; } } public void characters(char[] ch, int start, int length) { if (index !=-1) data[index] = data[index] + new String(ch,start,length); } }; saxParser.parse(new ByteArrayInputStream(resultsSoFar.getBytes()), handler); }catch(Exception e){e.printStackTrace();}; } else { } } private void log(String string) { // TODO Auto-generated method stub Log.i("Updates.java", string); } } public class NewsItem { public String title; public String pubDate; public String description; public String link; public NewsItem(String title, String pubDate, String description, String link) { this.title = title; this.pubDate = pubDate; this.description = description; this.link = link; } } public class BTUpdateArrayAdapter extends BaseAdapter { ArrayList<NewsItem> items; long id; public BTUpdateArrayAdapter(Context context, int textViewResourceId) { super(); items = new ArrayList<NewsItem>(); id = textViewResourceId; } public void add(NewsItem ni) { items.add(ni); Log.d("Adapter","size: "+items.size()); this.notifyDataSetChanged(); } public int getCount() { Log.d("Adapter","getCount: "+items.size()); return items.size(); } public Object getItem(int arg0) { return items.get(arg0); } public long getItemId(int position) { return id; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { TextView theView = new TextView(Updates.this.getActivity().getBaseContext()); theView.setTextColor(0xff330000); theView.setText(items.get(position).title); theView.setMinHeight(50); final int index = position; theView.setOnClickListener(new OnClickListener(){ public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(Updates.this.getActivity()); builder.setTitle(items.get(index).title) .setMessage(items.get(index).description) .setPositiveButton("Read on BT's site", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(items.get(index).link)); Updates.this.getActivity().startActivity(intent); } }) .setNegativeButton("Close", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); } }); return theView; } else { ((TextView)convertView).setText(items.get(position).title); return convertView; } } } private final int settingsId = 1; @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem addFavItem = menu.add(Menu.NONE, settingsId, settingsId, "Settings"); addFavItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case settingsId: Intent i = new Intent(this.getActivity(), SettingsActivity.class); startActivity(i); return true; } return false; } }