package com.mehmetakiftutuncu.eshotroid.tasks;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.widget.ListAdapter;
import com.devspark.appmsg.AppMsg;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.mehmetakiftutuncu.eshotroid.Constants;
import com.mehmetakiftutuncu.eshotroid.Main;
import com.mehmetakiftutuncu.eshotroid.R;
import com.mehmetakiftutuncu.eshotroid.database.MyDatabase;
import com.mehmetakiftutuncu.eshotroid.model.Bus;
import com.mehmetakiftutuncu.eshotroid.utilities.Connection;
import com.mehmetakiftutuncu.eshotroid.utilities.Parser;
import com.mehmetakiftutuncu.eshotroid.utilities.Processor;
/**
* An asynchronous task for getting the busses page
*
* @author Mehmet Akif Tütüncü
*/
public class GetBussesPageTask extends AsyncTask<Void, Void, Void> implements Runnable
{
private Context myContext;
private PullToRefreshListView myPtrList;
private ListAdapter oldAdapter;
private ArrayList<Bus> busses;
private String result;
/**
* Tag for debugging
*/
public static final String LOG_TAG = "Eshotroid_GetBussesPageTask";
public GetBussesPageTask(Context context, PullToRefreshListView ptrList)
{
myContext = context;
myPtrList = ptrList;
((Main) context).toggleMode(true);
oldAdapter = ptrList.getRefreshableView().getAdapter();
ptrList.setAdapter(null);
}
@Override
protected Void doInBackground(Void... params)
{
result = Connection.getPage(myContext, Constants.BUSSES_URL);
if(result != null)
{
busses = null;
ArrayList<String> parsedBusses = Parser.parseBusses(result);
if(parsedBusses != null)
{
busses = Processor.processBusses(parsedBusses);
}
if(busses != null)
{
MyDatabase db = new MyDatabase(myContext);
db.openDB();
for(Bus i : busses)
{
db.addOrUpdate(i);
}
db.closeDB();
}
}
new Handler(myContext.getMainLooper()).post(this);
return null;
}
@Override
public void run()
{
if(result != null)
{
if(busses != null)
{
AppMsg.makeText((Activity) myContext, myContext.getString(R.string.info_successful), AppMsg.STYLE_INFO).show();
((Main) myContext).setBussesList(busses);
}
else
{
// Downloaded but couldn't be parsed
myPtrList.setAdapter(oldAdapter);
}
}
else
{
AppMsg.makeText((Activity) myContext, myContext.getString(R.string.error_noConnection), AppMsg.STYLE_ALERT).show();
}
((Main) myContext).toggleMode(false);
myPtrList.onRefreshComplete();
}
}