package io.evercam.connect;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.mashape.unirest.http.utils.Base64Coder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.Locale;
import io.evercam.connect.db.Camera;
import io.evercam.connect.db.CameraOperation;
import io.evercam.connect.helper.Constants;
import io.evercam.connect.helper.ResourceHelper;
import io.evercam.connect.helper.SharedPrefsManager;
import io.evercam.connect.net.NetInfo;
import io.evercam.connect.signin.LoginActivity;
/**
* CameraDetailActivity
* <p/>
* Camera detail page, show camera thumbnails, model , ports info, live view
* etc.
*/
public class CameraDetailActivity extends Activity
{
public CameraOperation cameraOperation;
public Camera camera;
private final String TAG = "evercamdiscover-CameraDetailActivity";
private String ipstring;
private String ssid;
private Button http_button;
private Button rtsp_button;
private Button editBtn;
private Button portForwardBtn;
private Button setDeviceBtn;
private Button setCameraBtn;
private Button addEvercamButton;
private Context ctxt;
private NetInfo netInfo;
private ImageView snapshot;
private GetSnapshotTask snapshotTask;
private ImageView usernameCross;
private ImageView passwordCross;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera_detail);
EvercamDiscover.sendScreenAnalytics(this, getString(R.string.screen_detail));
ctxt = getApplicationContext();
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayHomeAsUpEnabled(true);
netInfo = new NetInfo(ctxt);
Bundle extras = getIntent().getExtras();
ipstring = extras.getString(Constants.BUNDLE_KEY_IP);
ssid = extras.getString(Constants.BUNDLE_KEY_SSID);
cameraOperation = new CameraOperation(ctxt);
setUpPage();
http_button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string.category_detail_buttons, R.string.action_view_webpage, R.string
.label_view_webpage);
String commonUrl;
if(camera.getSsid().equals(Constants.SAMPLE))
{
commonUrl = Constants.PREFIX_HTTP + camera.getIP() + ":" + camera.getExthttp();
}
else
{
commonUrl = ResourceHelper.getInternalHttpURL(camera);
}
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(commonUrl);
intent.setData(content_url);
startActivity(intent);
}
});
rtsp_button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string
.category_detail_buttons, R.string.action_view_stream, R.string
.label_view_stream);
// Only start video page if the device has either h264 or jpg
// url,
// and has credentials.
if((camera.hasH264URL() || camera.hasJpgURL()) && camera.hasUsername())
{
Intent videoIntent = new Intent(CameraDetailActivity.this, VideoActivity.class);
videoIntent.putExtra(Constants.BUNDLE_KEY_IP, ipstring);
videoIntent.putExtra(Constants.BUNDLE_KEY_SSID, ssid);
startActivity(videoIntent);
}
else
{
Toast toast = Toast.makeText(ctxt, R.string.msg_video_not_avaliable, Toast
.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
});
portForwardBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(CameraDetailActivity
.this);
alertDialog.setTitle(R.string.portForwarding);
alertDialog.setMessage(R.string.forwardGuideMsg);
if(camera.isDemoCamera())
{
alertDialog.setPositiveButton(R.string.ok, null).show();
}
else
{
alertDialog.setPositiveButton(R.string.next, new DialogInterface
.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this,
R.string.category_detail_buttons, R.string
.action_port_forwarding, R.string
.label_port_forwarding);
Intent intentForward = new Intent();
intentForward.setClass(CameraDetailActivity.this,
MainTabActivity.class);
intentForward.putExtra(Constants.BUNDLE_KEY_IP, ipstring);
intentForward.putExtra(Constants.BUNDLE_KEY_SSID, netInfo
.getSsid());
startActivity(intentForward);
}
}).show();
}
}
});
setCameraBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(camera.isDemoCamera())
{
showDemoSetAsCameraDialog();
}
else
{
showSetAsCameraDialog();
}
}
});
setDeviceBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(camera.isDemoCamera())
{
showDemoSetAsCameraDialog();
}
else
{
showSetAsDeviceDialog();
}
}
});
snapshot.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string
.category_detail_buttons, R.string.action_refresh_snapshot, R.string
.action_refresh_snapshot);
Toast toast = Toast.makeText(ctxt, R.string.refresh_snapshot, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
if(camera.getSsid().equals(Constants.SAMPLE))
{
launchSnapshot(ResourceHelper.getExternalHttpURL(camera) + camera.getJpg(),
camera.getUsername(), camera.getPassword(), true);
}
else
{
launchSnapshot(getSnapshotURL(), camera.getUsername(), camera.getPassword(),
false);
}
}
});
editBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
showEditDialog();
}
});
addEvercamButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(camera.isDemoCamera())
{
showDemoAddToEvercamDialog();
}
else
{
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences
(getApplicationContext());
if(SharedPrefsManager.isSignedWithEvercam(sharedPrefs))
{
Intent addToEvercamIntent = new Intent();
addToEvercamIntent.setClass(CameraDetailActivity.this,
AddToEvercamActivity.class);
addToEvercamIntent.putExtra("camera", camera);
startActivity(addToEvercamIntent);
}
else
{
showComfirmLoginDialog();
}
}
}
});
}
@Override
protected void onResume()
{
super.onResume();
setUpPage();
}
@Override
public Intent getParentActivityIntent()
{
this.finish();
return super.getParentActivityIntent();
}
public void setUpPage()
{
camera = cameraOperation.getCamera(ipstring, ssid);
ctxt = getApplicationContext();
TextView ip = (TextView) findViewById(R.id.ipvalue_detail);
TextView mac = (TextView) findViewById(R.id.macvalue_detail);
TextView vendor = (TextView) findViewById(R.id.vendorvalue_detail);
TextView iscamera = (TextView) findViewById(R.id.iscameravalue_detail);
TextView isbonjour = (TextView) findViewById(R.id.isbonjourvalue_detail);
TextView isupnp = (TextView) findViewById(R.id.isupnpvalue_detail);
TextView isonvif = (TextView) findViewById(R.id.isonvifvalue_detail);
TextView model = (TextView) findViewById(R.id.modelvalue_detail);
TextView http = (TextView) findViewById(R.id.httpvalue_detail);
TextView exthttp = (TextView) findViewById(R.id.exthttpvalue_detail);
TextView rtsp = (TextView) findViewById(R.id.rtspvalue_detail);
TextView https = (TextView) findViewById(R.id.httpsvalue_detail);
TextView ftp = (TextView) findViewById(R.id.ftpvalue_detail);
TextView ssh = (TextView) findViewById(R.id.sshvalue_detail);
TextView extrtsp = (TextView) findViewById(R.id.extrtspvalue_detail);
TextView firstseen = (TextView) findViewById(R.id.firstseenvalue_detail);
TextView lastseen = (TextView) findViewById(R.id.lastseenvalue_detail);
LinearLayout bonjour_layout = (LinearLayout) findViewById(R.id.bonjour_layout);
LinearLayout onvif_layout = (LinearLayout) findViewById(R.id.onvif_layout);
LinearLayout https_layout = (LinearLayout) findViewById(R.id.https_layout);
LinearLayout ftp_layout = (LinearLayout) findViewById(R.id.ftp_layout);
LinearLayout ssh_layout = (LinearLayout) findViewById(R.id.ssh_layout);
LinearLayout portforward_layout = (LinearLayout) findViewById(R.id.portforward_layout);
LinearLayout exthttp_layout = (LinearLayout) findViewById(R.id.exthttp_layout);
LinearLayout extrtsp_layout = (LinearLayout) findViewById(R.id.extrtsp_layout);
LinearLayout evercam_layout = (LinearLayout) findViewById(R.id.evercam_layout);
LinearLayout username_layout = (LinearLayout) findViewById(R.id.username_layout);
LinearLayout password_layout = (LinearLayout) findViewById(R.id.password_layout);
TextView username_value = (TextView) findViewById(R.id.usernamevalue_detail);
TextView password_value = (TextView) findViewById(R.id.passwordvalue_detail);
TextView evercam_value = (TextView) findViewById(R.id.isevercamvalue_detail);
snapshot = (ImageView) findViewById(R.id.snapshot_img);
http_button = (Button) findViewById(R.id.camerabutton_http);
rtsp_button = (Button) findViewById(R.id.camerabutton_rtsp);
editBtn = (Button) findViewById(R.id.editButton);
portForwardBtn = (Button) findViewById(R.id.portForwardButton);
setDeviceBtn = (Button) findViewById(R.id.setAsDeviceButton);
setCameraBtn = (Button) findViewById(R.id.setAsCameraButton);
addEvercamButton = (Button) findViewById(R.id.addToEvercamBtn);
usernameCross = (ImageView) findViewById(R.id.username_img);
passwordCross = (ImageView) findViewById(R.id.password_img);
// Is a camera
if(camera.getFlag() == Constants.TYPE_CAMERA)
{
// if username and password not exist in database
if(camera.getUsername() == null)
{
EvercamTask.runAuthTaskOnly(CameraDetailActivity.this);
}
setDeviceBtn.setVisibility(View.VISIBLE);
setCameraBtn.setVisibility(View.GONE);
editBtn.setVisibility(View.VISIBLE);
addEvercamButton.setVisibility(View.VISIBLE);
evercam_layout.setVisibility(View.VISIBLE);
}
// Is not a camera
else
{
setDeviceBtn.setVisibility(View.GONE);
setCameraBtn.setVisibility(View.VISIBLE);
editBtn.setVisibility(View.GONE);
http_button.setVisibility(View.GONE);
rtsp_button.setVisibility(View.GONE);
addEvercamButton.setVisibility(View.GONE);
evercam_layout.setVisibility(View.GONE);
}
// set images
ImageView img = (ImageView) findViewById(R.id.cameradetail_img);
if(camera.getFlag() == Constants.TYPE_CAMERA)
{
img.setImageBitmap(DiscoverMainActivity.thumbnailMap.get(ipstring));
}
else
{
img.setImageResource(R.drawable.question_img_trans);
}
ip.setText(camera.getIP());
if(camera.hasMac())
{
mac.setText(camera.getMAC().toUpperCase(Locale.UK));
}
else
{
mac.setText(NetInfo.EMPTY_MAC);
}
if(camera.hasVendor())
{
vendor.setText(camera.getVendor());
}
else
{
vendor.setText(R.string.unknown);
}
// If is demo camera
if(camera.isDemoCamera())
{
img.setImageResource(R.drawable.ds_2cd7164_e);
snapshot.setVisibility(View.VISIBLE);
setDeviceBtn.setVisibility(View.VISIBLE);
setCameraBtn.setVisibility(View.GONE);
editBtn.setVisibility(View.VISIBLE);
portForwardBtn.setVisibility(View.VISIBLE);
launchSnapshot(ResourceHelper.getExternalHttpURL(camera) + camera.getJpg(), camera
.getUsername(), camera.getPassword(), true);
}
// Show snapshot
else if(camera.hasJpgURL() && camera.getHttp() != 0)
{
snapshot.setVisibility(View.VISIBLE);
launchSnapshot(getSnapshotURL(), camera.getUsername(), camera.getPassword(), false);
}
else if(!camera.hasHTTP())
{
snapshot.setVisibility(View.GONE);
}
if(camera.getFlag() == Constants.TYPE_CAMERA)
{
iscamera.setText(R.string.yes);
}
else
{
iscamera.setText(R.string.no);
}
// display model
if(camera.hasModel())
{
model.setText(camera.getModel());
}
else
{
model.setText(R.string.unknown);
}
// show bonjour, upnp, onvif
if(!(camera.getBonjour() == 0))
{
bonjour_layout.setVisibility(View.VISIBLE);
isbonjour.setText(R.string.yes);
}
else
{
bonjour_layout.setVisibility(View.GONE);
}
if(!(camera.getUpnp() == 0))
{
isupnp.setText(R.string.yes);
}
else
{
isupnp.setText(R.string.unknown);
}
if(!(camera.getOnvif() == 0))
{
onvif_layout.setVisibility(View.VISIBLE);
isonvif.setText(R.string.yes);
}
else
{
onvif_layout.setVisibility(View.GONE);
}
// display rtsp if not null
if(camera.hasRTSP())
{
rtsp.setText(String.valueOf(camera.getRtsp()));
if(camera.getFlag() == Constants.TYPE_CAMERA)
{
rtsp_button.setVisibility(View.VISIBLE);
}
// If not camera
else
{
rtsp_button.setVisibility(View.GONE);
}
}
else
{
rtsp.setText(R.string.unknown);
rtsp_button.setVisibility(View.GONE);
}
// display http port
if(camera.hasHTTP())
{
http_button.setVisibility(View.VISIBLE);
http.setText(String.valueOf(camera.getHttp()));
}
else
{
cameraOperation.updateAttributeInt(camera.getIP(), ssid, "http", 0);
http.setText(R.string.unknown);
http_button.setVisibility(View.GONE);
}
// display internal https if exists
if(camera.hasHTTPS())
{
https_layout.setVisibility(View.VISIBLE);
https.setText(String.valueOf(camera.getHttps()));
}
else
{
https_layout.setVisibility(View.GONE);
}
// display internal ftp if exists
if(camera.hasFTP())
{
ftp_layout.setVisibility(View.VISIBLE);
ftp.setText(String.valueOf(camera.getFtp()));
}
else
{
ftp_layout.setVisibility(View.GONE);
}
// display internal ssh if exists
if(camera.hasSSH())
{
ssh_layout.setVisibility(View.VISIBLE);
ssh.setText(String.valueOf(camera.getSsh()));
}
else
{
ssh_layout.setVisibility(View.GONE);
}
// display external http if not null
if(camera.hasExternalHttp())
{
exthttp_layout.setVisibility(View.VISIBLE);
exthttp.setText(String.valueOf(camera.getExthttp()));
portforward_layout.setVisibility(View.VISIBLE);
}
else
{
exthttp_layout.setVisibility(View.GONE);
portforward_layout.setVisibility(View.GONE);
}
// display external rtsp if not equals 0
if(camera.hasExternalRtsp())
{
extrtsp_layout.setVisibility(View.VISIBLE);
extrtsp.setText(String.valueOf(camera.getExtrtsp()));
portforward_layout.setVisibility(View.VISIBLE);
}
else
{
extrtsp_layout.setVisibility(View.GONE);
portforward_layout.setVisibility(View.GONE);
}
// username and password
if(camera.hasUsername())
{
username_value.setText(camera.getUsername());
if(camera.hasPassword())
{
password_value.setText(camera.getPassword());
}
else
{
password_value.setText("<blank>");
}
if(camera.getSsid().equals(Constants.SAMPLE))
{
username_layout.setVisibility(View.GONE);
password_layout.setVisibility(View.GONE);
}
}
else
{
username_value.setText(R.string.unknown);
password_value.setText(R.string.unknown);
}
firstseen.setText(camera.getFirstSeen());
lastseen.setText(camera.getLastSeen());
if(camera.isEvercam())
{
evercam_value.setText(R.string.yes);
}
else
{
evercam_value.setText(R.string.no);
}
}
public Bitmap getSnapshot(String URL, String username, String password)
{
Bitmap bitmap = null;
if(URL != null && username != null)
{
try
{
DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST,
AuthScope.ANY_PORT), new UsernamePasswordCredentials(username, password));
HttpGet request = new HttpGet(URL);
HttpResponse response;
response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
bitmap = BitmapFactory.decodeStream(inputStream);
}
catch(ClientProtocolException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
return bitmap;
}
public String getSnapshotURL()
{
if(camera.hasJpgURL())
{
return Constants.PREFIX_HTTP + this.ipstring + ":" + camera.getHttp() + camera.getJpg();
}
else
{
return null;
}
}
private void showSetAsCameraDialog()
{
AlertDialog alertDialog = new AlertDialog.Builder(CameraDetailActivity.this).setMessage(R
.string.confirmIsCamera).setPositiveButton(R.string.yes, new DialogInterface
.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string
.category_detail_buttons, R.string.action_report_camera, R.string
.label_report_camera);
cameraOperation.updateAttributeInt(ipstring, ssid, "flag", Constants.TYPE_CAMERA);
setUpPage();
showSendFeedback(Constants.TITLE_SETCAMERA);
}
}).setNegativeButton(R.string.no, null).create();
alertDialog.show();
}
private void showSetAsDeviceDialog()
{
AlertDialog alertDialog = new AlertDialog.Builder(CameraDetailActivity.this).setMessage(R
.string.confirmNotCamera).setPositiveButton(R.string.yes, new DialogInterface
.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string
.category_detail_buttons, R.string.action_report_camera, R.string
.label_report_not_camera);
cameraOperation.updateAttributeInt(ipstring, ssid, "flag", Constants.TYPE_OTHERS);
setUpPage();
showSendFeedback(Constants.TITLE_SETDEVICE);
}
}).setNegativeButton(R.string.no, null).create();
alertDialog.show();
}
private void showSendFeedback(final String type)
{
AlertDialog alertDialog1 = new AlertDialog.Builder(CameraDetailActivity.this)
.setMessage(R.string.reportwarning).setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Intent data = new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:liuting@evercam.io"));
data.putExtra(Intent.EXTRA_SUBJECT, type);
data.putExtra(Intent.EXTRA_TEXT, "Device info:" + camera.toString());
startActivity(data);
}
}).setNegativeButton(R.string.no, null).create();
alertDialog1.show();
}
private void showEditDialog()
{
LayoutInflater mInflater = LayoutInflater.from(ctxt);
final View editView = mInflater.inflate(R.layout.edit_dialog, null);
final AlertDialog.Builder editBuilder = new AlertDialog.Builder(this);
editBuilder.setView(editView);
final EditText editModel = (EditText) editView.findViewById(R.id.editModel_value);
final EditText editHttp = (EditText) editView.findViewById(R.id.editHttp_edit);
final EditText editRtsp = (EditText) editView.findViewById(R.id.editRtsp_edit);
final EditText editHttps = (EditText) editView.findViewById(R.id.editHttps_edit);
final EditText editFtp = (EditText) editView.findViewById(R.id.editFtp_edit);
final EditText editSsh = (EditText) editView.findViewById(R.id.editSsh_edit);
final EditText editUsername = (EditText) editView.findViewById(R.id.editUsername_edit);
final EditText editPassword = (EditText) editView.findViewById(R.id.editPassword_edit);
editModel.setText(camera.getModel());
if(camera.getHttp() == 0)
{
editHttp.setText(null);
}
else
{
editHttp.setText(String.valueOf(camera.getHttp()));
}
if(camera.getRtsp() == 0)
{
editRtsp.setText(null);
}
else
{
editRtsp.setText(String.valueOf(camera.getRtsp()));
}
if(camera.getHttps() == 0)
{
editHttps.setText(null);
}
else
{
editHttps.setText(String.valueOf(camera.getHttps()));
}
if(camera.getFtp() == 0)
{
editFtp.setText(null);
}
else
{
editFtp.setText(String.valueOf(camera.getFtp()));
}
if(camera.getSsh() == 0)
{
editSsh.setText(null);
}
else
{
editSsh.setText(String.valueOf(camera.getSsh()));
}
editUsername.setText(camera.getUsername());
editPassword.setText(camera.getPassword());
if(camera.getSsid().equals(Constants.SAMPLE))
{
editUsername.setText("");
editPassword.setText("");
}
editBuilder.setPositiveButton(R.string.save, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string
.category_detail_buttons, R.string.action_edit_details, R.string
.label_edit_details_confirm);
if(camera.isDemoCamera())
{
closeDialog(dialog);
}
else
{
String newModel = editModel.getText().toString();
String newUsername = editUsername.getText().toString();
String newPassword = editPassword.getText().toString();
String httpStr = editHttp.getText().toString();
String rtspStr = editRtsp.getText().toString();
String httpsStr = editHttps.getText().toString();
String ftpStr = editFtp.getText().toString();
String sshStr = editSsh.getText().toString();
if(httpStr.length() == 0)
{
httpStr = "0";
}
if(rtspStr.length() == 0)
{
rtspStr = "0";
}
if(httpsStr.length() == 0)
{
httpsStr = "0";
}
if(ftpStr.length() == 0)
{
ftpStr = "0";
}
if(sshStr.length() == 0)
{
sshStr = "0";
}
try
{
int newHttp = Integer.parseInt(httpStr);
int newRtsp = Integer.parseInt(rtspStr);
int newHttps = Integer.parseInt(httpsStr);
int newFtp = Integer.parseInt(ftpStr);
int newSsh = Integer.parseInt(sshStr);
// If ports all in 0-65535
if(isInPortRange(newHttp) && isInPortRange(newRtsp) && isInPortRange
(newHttps) && isInPortRange(newFtp) && isInPortRange(newSsh))
{
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid
(), "model", newModel);
cameraOperation.updateAttributeInt(camera.getIP(), camera.getSsid(),
"http", newHttp);
cameraOperation.updateAttributeInt(camera.getIP(), camera.getSsid(), "rtsp", newRtsp);
cameraOperation.updateAttributeInt(camera.getIP(), camera.getSsid(), "https", newHttps);
cameraOperation.updateAttributeInt(camera.getIP(), camera.getSsid(), "ftp", newFtp);
cameraOperation.updateAttributeInt(camera.getIP(), camera.getSsid(), "ssh", newSsh);
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "username", newUsername);
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "password", newPassword);
closeDialog(dialog);
setUpPage();
}
else
{
showPortNotInRange();
keepDialog(dialog);
}
}
catch(NumberFormatException e)
{
showPortNotInRange();
keepDialog(dialog);
}
}
}
});
editBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EvercamDiscover.sendEventAnalytics(CameraDetailActivity.this, R.string.category_detail_buttons, R.string.action_edit_details, R.string.label_edit_details_cancel);
closeDialog(dialog);
}
});
editBuilder.setTitle("Edit Details (" + camera.getIP() + ")");
editBuilder.setCancelable(false);
editBuilder.show();
}
private void showDemoSetAsCameraDialog()
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(CameraDetailActivity.this);
alertDialog.setTitle(R.string.userGuide);
alertDialog.setMessage(R.string.guideMsg_feedback);
alertDialog.setPositiveButton(R.string.ok, null);
alertDialog.show();
}
private void showDemoAddToEvercamDialog()
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(CameraDetailActivity.this);
alertDialog.setTitle(R.string.userGuide);
alertDialog.setMessage(R.string.guideMsg_add_to_evercam);
alertDialog.setPositiveButton(R.string.ok, null);
alertDialog.show();
}
private boolean isInPortRange(int port)
{
if(port >= 0 && port <= 65535)
{
return true;
}
else
{
return false;
}
}
public static void keepDialog(DialogInterface dialog)
{
try
{
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
private void showPortNotInRange()
{
Toast toast = Toast.makeText(ctxt, R.string.portRangeMsg1, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
public static void closeDialog(DialogInterface dialog)
{
try
{
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
private void showComfirmLoginDialog()
{
AlertDialog alertDialog = new AlertDialog.Builder(CameraDetailActivity.this).setMessage(R.string.pleaseSignInBeforeAddCamera).setPositiveButton(R.string.action_signIn, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Intent loginIntent = new Intent();
loginIntent.setClass(CameraDetailActivity.this, LoginActivity.class);
startActivity(loginIntent);
}
}).setNegativeButton(R.string.notNow, null).create();
alertDialog.show();
}
private void launchSnapshot(String url, String username, String password, boolean isSample)
{
// Log.d(TAG, "Launch snapshot: " + url + " " + username + password );
if(snapshotTask != null)
{
snapshotTask = null;
}
snapshotTask = new GetSnapshotTask(url, username, password, isSample);
snapshotTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private class GetSnapshotTask extends AsyncTask<Void, Boolean, Bitmap>
{
String url;
String username;
String password;
boolean isSample;
; // 0:sample 1:other
GetSnapshotTask(String url, String username, String password, boolean isSample)
{
this.url = url;
this.username = username;
this.password = password;
this.isSample = isSample;
}
@Override
protected void onPreExecute()
{
usernameCross.setVisibility(View.GONE);
passwordCross.setVisibility(View.GONE);
}
@Override
protected Bitmap doInBackground(Void... arg0)
{
// Test camera user name and password is valid or not.
try
{
DefaultHttpClient c = new DefaultHttpClient();
HttpGet post = new HttpGet(url);
String encoding = Base64Coder.encodeString(username + ":" + password);
post.setHeader("Authorization", "Basic " + encoding);
org.apache.http.HttpResponse r = c.execute(post);
if(r.getStatusLine().getStatusCode() == 401)
{
publishProgress(true);
}
}
catch(ClientProtocolException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
catch(Exception e)
{
Log.e(TAG, Log.getStackTraceString(e));
}
Bitmap bitmap = getSnapshot(url, username, password);
return bitmap;
}
@Override
protected void onProgressUpdate(Boolean... values)
{
if(values[0])
{
usernameCross.setVisibility(View.VISIBLE);
passwordCross.setVisibility(View.VISIBLE);
}
}
@Override
protected void onPostExecute(Bitmap bitmap)
{
if(!isSample)
{
if(bitmap != null)
{
snapshot.setImageBitmap(bitmap);
setDeviceBtn.setVisibility(View.GONE);
}
else
{
snapshot.setImageResource(R.drawable.fuzz);
}
}
else
{
snapshot.setImageBitmap(bitmap);
}
}
}
}