package io.evercam.androidapp.tasks;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;
import java.net.URL;
import io.evercam.Camera;
import io.evercam.Snapshot;
import io.evercam.androidapp.R;
import io.evercam.androidapp.custom.CustomProgressDialog;
import io.evercam.androidapp.custom.CustomToast;
import io.evercam.androidapp.custom.CustomedDialog;
import io.evercam.androidapp.dto.AppData;
import io.evercam.androidapp.feedback.KeenHelper;
import io.evercam.androidapp.feedback.TestSnapshotFeedbackItem;
import io.evercam.network.discovery.PortScan;
import io.keen.client.java.KeenClient;
public class TestSnapshotTask extends AsyncTask<Void, Void, Drawable>
{
private final String TAG = "TestSnapshotTask";
private String url;
private String ending;
private String username;
private String password;
private Activity activity;
private CustomProgressDialog customProgressDialog;
private String errorMessage = null;
public TestSnapshotTask(String url, String ending, String username, String password, Activity activity)
{
this.url = url;
this.ending = ending;
this.username = username;
this.password = password;
this.activity = activity;
}
@Override
protected void onPreExecute()
{
customProgressDialog = new CustomProgressDialog(activity);
customProgressDialog.show(activity.getString(R.string.retrieving_snapshot));
}
@Override
protected Drawable doInBackground(Void... params)
{
try
{
URL urlObject = new URL(url);
boolean isReachable = PortScan.isPortReachable(urlObject.getHost(),
urlObject.getPort());
if(!isReachable)
{
errorMessage = activity.getString(R.string.snapshot_test_port_closed);
return null;
}
}
catch(Exception e)
{
Log.e(TAG, e.toString());
return null;
}
try
{
Snapshot snapshot = Camera.testSnapshot(url, ending, username, password);
byte[] snapshotData = snapshot.getData();
return new BitmapDrawable(BitmapFactory.decodeByteArray(snapshotData, 0, snapshotData.length));
}
catch(Exception e)
{
Log.e(TAG, e.toString());
}
return null;
}
@Override
protected void onPostExecute(Drawable drawable)
{
customProgressDialog.dismiss();
KeenClient client = KeenHelper.getClient(activity);
if(drawable != null)
{
CustomToast.showSnapshotTestResult(activity, R.string.snapshot_test_success);
CustomedDialog.getSnapshotDialog(activity, drawable).show();
new TestSnapshotFeedbackItem(activity, AppData.defaultUser.getUsername(), true, true)
.setSnapshot_url(url).setCam_username(username).setCam_password(password).sendToKeenIo(client);
}
else
{
String username = "";
if(AppData.defaultUser != null)
{
username = AppData.defaultUser.getUsername();
}
if(errorMessage == null)
{
CustomToast.showInCenterLong(activity, R.string.snapshot_test_failed);
new TestSnapshotFeedbackItem(activity, username, false, true)
.setSnapshot_url(url).setCam_username(username).setCam_password(password).sendToKeenIo(client);
}
else
{
CustomToast.showInCenterLong(activity, errorMessage);
new TestSnapshotFeedbackItem(activity, username, false, false)
.setSnapshot_url(url).setCam_username(username).setCam_password(password).sendToKeenIo(client);
}
}
}
}