package pi.eater.rssreader;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import com.vikrant.RssParser;
import com.vikrant.RssParser.Item;
import com.vikrant.RssParser.RssFeed;
public class RssReader extends Activity implements OnInitListener
{
/** Called when the activity is first created. */
static TextToSpeech tts;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
RssParser rss_parser = new RssParser("http://www.npr.org/rss/rss.php?id=1001");
try { rss_parser.parse(); } catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getClass()+": "+ e.getMessage(),
Toast.LENGTH_LONG).show();
return;
}
final RssFeed feed = rss_parser.getFeed();
ArrayList<String> titles = new ArrayList<String>();
for (Item item : feed.items)
{
titles.add(item.title);
}
setContentView(R.layout.main);
ListView lv = (ListView)findViewById(R.id.ListView);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, titles));
tts = new TextToSpeech(this, this);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Item item = feed.items.get(position);
Intent intent = new Intent(RssReader.this, HtmlViewer.class);
String desc = item.description.replaceAll("\\<.*?>","");
String html = String.format(
"<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n" +
"<table><tr><td><img src='%s'>\n"+
" <td><a href='%s'>%s</a>\n"+
"</table>\n"+
"<p>%s\n",
item.media_content, item.link, item.title, desc);
intent.putExtra("html", html);
intent.putExtra("desc", desc);
RssReader.this.startActivity(intent);
}
});
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view,
int arg2, long arg3) {
tts.speak(((TextView)view).getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
return true;
}
});
Button read_btn = (Button) findViewById(R.id.Button_Read);
read_btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!tts.isSpeaking()) {
for (Item item : feed.items)
{
tts.speak(item.title, TextToSpeech.QUEUE_ADD, null);
}
}
}
});
((Button)findViewById(R.id.Button_Stop)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
tts.stop();
}
});
}
public void onInit(int status) {
// TODO Auto-generated method stub
tts.speak("hello", TextToSpeech.QUEUE_ADD, null);
}
}