package com.jadn.cc.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.jadn.cc.R;
import com.jadn.cc.core.CarCastApplication;
import com.jadn.cc.core.Subscription;
import com.jadn.cc.trace.TraceUtil;
public class SearchResults extends BaseActivity {
String lastResults;
@SuppressWarnings("unchecked")
private void add(int position) {
ListView listView = (ListView) findViewById(R.id.siteList);
Map<String, String> rowData = (Map<String, String>) listView.getAdapter().getItem(position);
String name = rowData.get("name");
String url = rowData.get("url");
boolean b = contentService.addSubscription(new Subscription(name, url));
if (b) {
Toast.makeText(getApplicationContext(),
"Added subscription to " + name, Toast.LENGTH_LONG)
.show();
} else {
Toast.makeText(getApplicationContext(),
"Already subscribed to " + name, Toast.LENGTH_LONG)
.show();
}
}
private List<Subscription> getResults() {
List<Subscription> res = new ArrayList<Subscription>();
try {
lastResults = contentService.startSearch("-results-");
String[] lines = lastResults.split("\\n");
for (String line : lines) {
if (!line.trim().equals("") && !line.startsWith("#")) {
int eq = line.indexOf('=');
if (eq != -1) {
String name = line.substring(0, eq);
String url = line.substring(eq + 1);
res.add(new Subscription(name, url));
}
}
}
} catch (Exception e) {
CarCastApplication.esay(e);
}
return res;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
showResults();
}
}
@Override
protected void onContentService() {
showResults();
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
if (item.getTitle().equals("Subscribe")) {
add(info.position);
return false;
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subscription_list);
setTitle(CarCastApplication.getAppTitle()+": subscription search results");
ListView listView = (ListView) findViewById(R.id.siteList);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
add(position);
}
});
registerForContextMenu(listView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add("Subscribe");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_results_menu, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (item.getItemId() == R.id.searchAgain) {
finish();
return true;
}
add(((AdapterContextMenuInfo) item.getMenuInfo()).position);
return true;
}
protected void showResults() {
try {
ListView listView = (ListView) findViewById(R.id.siteList);
List<Subscription> sites = getResults();
Toast.makeText(getApplicationContext(),
"Found " + sites.size() + " results", Toast.LENGTH_LONG)
.show();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (Subscription sub: sites) {
Map<String, String> item = new HashMap<String, String>();
item.put("name", sub.name);
item.put("url", sub.url);
list.add(item);
}
SimpleAdapter notes = new SimpleAdapter(this, list,
R.layout.main_item_two_line_row, new String[] { "name",
"url" }, new int[] { R.id.text1, R.id.text2 });
listView.setAdapter(notes);
} catch (Throwable t) {
TraceUtil.report(new RuntimeException("lastResults="+lastResults,t));
Toast.makeText(getApplicationContext(),
"Sorry, problem with search results.",
Toast.LENGTH_LONG).show();
}
}
}