package com.jieehd.villain.toolkit;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.Preference;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
public class FeedbackTab extends ListActivity {
public static String URL = "http://dl.dropbox.com/u/44265003/bugs.json";
public static JSONObject json;
public static Preference avail_tweaks;
public static String name;
public static ListView showTweaks;
public static List<String> listItems = new ArrayList<String>();
public static List<String> urlItems = new ArrayList<String>();
public static ArrayAdapter<String> adapter;
public static Dialog dialog;
public static Context cx;
/** Called when the activity is first created. */
@Override
@SuppressWarnings("unused")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new ArrayAdapter<String>(this,R.layout.row_bugs, R.id.filename,listItems);
setListAdapter(adapter);
dialog = new Dialog(this);
dialog.setTitle(getString(R.string.loading_dialog_title));
dialog.setContentView(R.layout.spinner_dialog);
Spinner spin = (Spinner) findViewById(R.id.spinner);
dialog.show();
listItems.clear();
new Read().execute();
}
public class Display {
public HashMap<String, String> mContent;
public String name;
public String url;
public Display (HashMap<String,String> tweaks_list) {
mContent = tweaks_list;
for (Map.Entry<String, String> entry : mContent.entrySet()) {
name = entry.getKey();
url = entry.getValue();
runOnUiThread(new Runnable() {
public void run() {
listItems.add(name);
urlItems.add(url);
}
});
}
}
}
// A class that will run Toast messages in the main GUI context
private class ToastMessageTask extends AsyncTask<String, String, String> {
String toastMessage;
@Override
protected String doInBackground(String... params) {
toastMessage = params[0];
return toastMessage;
}
@SuppressWarnings("unused")
protected void OnProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
// This is executed in the context of the main GUI thread
protected void onPostExecute(String result){
Toast toast = Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT);
toast.show();
}
}
public JSONObject getQuote() throws ClientProtocolException, IOException, JSONException{
HttpClient client = new DefaultHttpClient();
StringBuilder url = new StringBuilder(URL);
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
int status = r.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONObject stream = new JSONObject(data);
JSONObject tweaks = stream.getJSONObject("current-bugs");
return tweaks;
} else {
return null;
}
}
public class Read extends AsyncTask<String, Integer, Display> {
@Override
protected Display doInBackground(String... params) {
// TODO Auto-generated method stub
try {
json = getQuote();
JSONArray avail_tweaks = null;
HashMap<String, String> tweaks_list = new HashMap<String, String>();
avail_tweaks = json.getJSONArray("buglist");
for (int i = 0; i < avail_tweaks.length(); i++) {
JSONObject row = avail_tweaks.getJSONObject(i);
name = row.getString("bug");
String desc = row.getString("desc");
tweaks_list.put(name, desc);
}
return new Display(tweaks_list);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
new ToastMessageTask().execute("A server issue occured, please try again.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
new ToastMessageTask().execute("Error whilst reading content.");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
new ToastMessageTask().execute("No bugs HOORAY!");
}
return null;
}
@Override
public void onPostExecute(final Display result) {
dialog.dismiss();
adapter.notifyDataSetChanged();
}
}
}