package com.amaze.filemanager.services.asynctasks;
import android.database.Cursor;
import android.os.AsyncTask;
import android.view.View;
import android.webkit.WebView;
import com.amaze.filemanager.fragments.DbViewerFragment;
import com.amaze.filemanager.utils.theme.AppTheme;
import java.util.ArrayList;
/**
* Created by Vishal on 20-03-2015.
*/
public class DbViewerTask extends AsyncTask<Void, Integer, Void> {
Cursor schemaCursor, contentCursor;
ArrayList<String> schemaList;
ArrayList<String[]> contentList;
DbViewerFragment dbViewerFragment;
StringBuilder stringBuilder;
WebView webView;
String htmlInit;
public DbViewerTask (Cursor schemaCursor, Cursor contentCursor, WebView webView, DbViewerFragment dbViewerFragment) {
this.schemaCursor = schemaCursor;
this.contentCursor = contentCursor;
this.webView = webView;
this.dbViewerFragment = dbViewerFragment;
stringBuilder = new StringBuilder();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (dbViewerFragment.dbViewer.getAppTheme().equals(AppTheme.DARK)) {
htmlInit = "<html><body>" +
"<table border='1' style='width:100%;color:#ffffff'>";
} else {
htmlInit = "<html><body>" +
"<table border='1' style='width:100%;color:#000000'>";
}
stringBuilder.append(htmlInit);
dbViewerFragment.loadingText.setVisibility(View.VISIBLE);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
dbViewerFragment.loadingText.setText(values[0] + " records loaded");
}
@Override
protected Void doInBackground(Void... params) {
schemaList = getDbTableSchema(schemaCursor);
contentList = getDbTableDetails(contentCursor);
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
dbViewerFragment.getActivity().onBackPressed();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dbViewerFragment.loadingText.setVisibility(View.GONE);
// init schema row
stringBuilder.append("<tr>");
for (String s : schemaList) {
stringBuilder.append("<th>").append(s).append("</th>");
}
stringBuilder.append("</tr>");
for (String[] strings : contentList) {
// init content row
stringBuilder.append("<tr>");
for (int i = 0; i<strings.length; i++) {
stringBuilder.append("<td>").append(strings[i]).append("</td>");
}
stringBuilder.append("</tr>");
}
stringBuilder.append("</table></body></html>");
webView.loadData(stringBuilder.toString(), "text/html", null);
webView.setVisibility(View.VISIBLE);
}
private ArrayList<String[]> getDbTableDetails(Cursor c) {
ArrayList<String[]> result = new ArrayList<>();
int j = 0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
if (!isCancelled()) {
j++;
publishProgress(j);
String[] temp = new String[c.getColumnCount()];
for (int i = 0; i < temp.length; i++) {
int dataType = c.getType(i);
switch (dataType) {
case 0:
// #FIELD_TYPE_NULL
temp[i] = null;
break;
case 1:
// #FIELD_TYPE_INTEGER
temp[i] = String.valueOf(c.getInt(i));
break;
case 2:
// #FIELD_TYPE_FLOAT
temp[i] = String.valueOf(c.getFloat(i));
break;
case 3:
// #FIELD_TYPE_STRING
temp[i] = c.getString(i);
break;
case 4:
// #FIELD_TYPE_BLOB
/*byte[] blob = c.getBlob(i);
blobString = new String(blob);*/
temp[i] = "(BLOB)";
break;
}
}
result.add(temp);
} else {
break;
}
}
return result;
}
private ArrayList<String> getDbTableSchema(Cursor c) {
ArrayList<String> result = new ArrayList<>();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
if (!isCancelled()) {
result.add(c.getString(1));
} else
break;
}
return result;
}
}