package com.example.database;
import android.os.AsyncTask;
import android.os.Build;
import com.example.database.query.Query;
import org.alfonz.utility.Logcat;
import java.util.LinkedList;
import java.util.List;
public class DatabaseCallManager
{
private List<DatabaseCallTask> mTaskList = new LinkedList<>();
public DatabaseCallManager()
{
}
public void executeTask(Query query, DatabaseCallListener listener)
{
DatabaseCallTask task = new DatabaseCallTask(query, listener);
mTaskList.add(task);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
// use AsyncTask.THREAD_POOL_EXECUTOR or AsyncTask.SERIAL_EXECUTOR
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
task.execute();
}
}
public boolean finishTask(DatabaseCallTask task)
{
return mTaskList.remove(task);
}
public int getTasksCount()
{
return mTaskList.size();
}
public boolean hasRunningTask(Class<?> queryClass)
{
String className = queryClass.getSimpleName();
for(DatabaseCallTask task : mTaskList)
{
String taskName = task.getQuery().getClass().getSimpleName();
if(className.equals(taskName)) return true;
}
return false;
}
public void cancelAllTasks()
{
for(int i = mTaskList.size() - 1; i >= 0; i--)
{
DatabaseCallTask task = mTaskList.get(i);
if(task != null)
{
task.cancel(true);
mTaskList.remove(task);
}
}
}
public void printRunningTasks()
{
for(DatabaseCallTask task : mTaskList)
{
Logcat.d(task == null ? "null" : (task.getQuery().getClass().getSimpleName() + " " + task.getStatus().toString()));
}
if(mTaskList.isEmpty()) Logcat.d("empty");
}
}