package com.conference.app.lib.ui;
import java.io.ByteArrayOutputStream;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Base64;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import com.conference.app.lib.R;
import com.conference.app.lib.database.DatabaseHelper;
import com.conference.app.lib.database.tables.ConferenceTable;
public class ImageViewer extends Activity {
private static final int DIALOG_LOAD_IMAGE = 1;
private static final String HTML_FORMAT = "<img src=\"data:image/jpeg;base64,%1$s\" />";
private static final int PROGRESS_FINISHED = 100;
private static String cacheFloorplan;
private WebView webView;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imageviewer);
initViews();
new ImageTask().execute();
}
private void initViews() {
webView = (WebView) findViewById(R.id.imageViewer);
webView.getSettings().setBuiltInZoomControls(true);
// webView.getSettings().setDefaultZoom(ZoomDensity.FAR);
webView.getSettings().setLoadWithOverviewMode(true); //Eddie Li Image fit to screen
webView.getSettings().setUseWideViewPort(true); //Eddie Li Image fit to screen
}
@Override
protected Dialog onCreateDialog(final int id) {
if (DIALOG_LOAD_IMAGE == id) {
final ProgressDialog dia = new ProgressDialog(this);
dia.setCancelable(false);
dia.setMessage(getString(R.string.imageviewer_dialog_load));
return dia;
}
return super.onCreateDialog(id);
}
private class ImageTask extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
showDialog(DIALOG_LOAD_IMAGE);
}
@Override
protected String doInBackground(final Void... params) {
if (cacheFloorplan == null) {
final DatabaseHelper helper = new DatabaseHelper(ImageViewer.this);
final SQLiteDatabase db = helper.getReadableDatabase();
final Cursor cursor = db.query(ConferenceTable.TABLE_NAME, ConferenceTable.ALL_COLUMNS, null, null,
null, null, null);
cursor.moveToFirst();
final byte[] binaryImage = cursor.getBlob((cursor.getColumnIndex(ConferenceTable.FLOOR_PLAN_IMAGE)));
cursor.close();
if (db.isOpen()) {
db.close();
}
final Bitmap originalImage = BitmapFactory.decodeByteArray(binaryImage, 0, binaryImage.length);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
originalImage.compress(CompressFormat.PNG, 0, bos);
final byte[] bitmapdata = bos.toByteArray();
final String b64Image = Base64.encodeToString(bitmapdata, Base64.DEFAULT);
final String html = String.format(HTML_FORMAT, b64Image);
cacheFloorplan = html;
}
return cacheFloorplan;
}
@Override
protected void onPostExecute(final String result) {
if (result == null) {
removeDialog(DIALOG_LOAD_IMAGE);
} else {
webView.loadData(result, "text/html", "utf-8");
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(final WebView view, final int newProgress) {
if (newProgress == PROGRESS_FINISHED) {
removeDialog(DIALOG_LOAD_IMAGE);
}
}
});
}
}
}
}