/*
**
** Copyright 2013, Jules White
**
**
*/
package org.magnum.soda.example.maint;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.magnum.soda.android.AndroidSoda;
import org.magnum.soda.android.AndroidSodaListener;
import org.magnum.soda.android.SodaInvokeInUi;
import org.magnum.soda.example.controllers.createreportfragment.CreateReportFragment;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class ReportEditorActivity extends Activity implements
AndroidSodaListener {
private EditText reportTitle_;
private EditText reportContent_;
private TextView creatorText_;
private TextView createtimeText_;
private Button saveButton_;
private Button deleteButton_;
private Button bindLocationButton_;
private Button bindQRButton_;
private Button followButton_;
private ImageButton photoView_;
private String username;
private MaintenanceReports reports_;
private MaintenanceReport currReport_;
private ReportParcelable current;
private static final int STATIC_INTEGER_VALUE = 10;
private String mContent = null;
private byte[] mImageData = null;
private String creator = null;
private AndroidSoda as = null;
private AndroidSodaListener asl_ = null;
Context ctx_ = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
asl_ = this;
setContentView(R.layout.report_form);
try {
reportTitle_ = (EditText) findViewById(R.id.title_text_editreport);
reportContent_ = (EditText) findViewById(R.id.reportEditText_editreport);
saveButton_ = (Button) findViewById(R.id.saveButton_reportedit);
deleteButton_ = (Button) findViewById(R.id.DeleteButton);
bindLocationButton_ = (Button) findViewById(R.id.bindLocationButton);
bindQRButton_ = (Button) findViewById(R.id.BindQR);
followButton_ = (Button) findViewById(R.id.Button_follow);
creatorText_ = (TextView) findViewById(R.id.textView_creatorID);
createtimeText_ = (TextView) findViewById(R.id.textView_createTime);
photoView_ = (ImageButton) findViewById(R.id.image_editreport);
SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.app_name),Context.MODE_PRIVATE);
username = sharedPref.getString("username", "no");
Intent callingintent = getIntent();
if (getIntent().hasExtra("mReport")) {
current = getIntent().getExtras().getParcelable("mReport");
currReport_ = current.getReport();
reportTitle_.setText(currReport_.getTitle());
reportContent_.setText(currReport_.getContents());
creator = currReport_.getCreatorId();
creatorText_.setText(creator);
Date createtime = currReport_.getCreateTime_();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy.MM.dd HH:mm:ss");
createtimeText_.setText(sdf.format(createtime));
byte[] b = current.getReport().getImageData();
if (b != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0,
b.length);
photoView_.setImageBitmap(bitmap);
photoView_.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
photoView_.setAdjustViewBounds(true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
AndroidSoda.init(ctx_, LoginActivity.mHost, 8081, asl_);
photoView_.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
callIntent(getBmp(photoView_.getDrawable()));
}
});
saveButton_.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mContent = reportContent_.getText().toString();
if (mContent != null) {
currReport_.setContents(mContent);
if(photoView_.getDrawable() != null){
mImageData = getBytes(getBmp(photoView_.getDrawable()));
currReport_.setImageData(mImageData);
}
updateReport();
}
}
});
followButton_.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Future<?> Result = AndroidSoda.async(new Runnable() {
@Override
public void run() {
reports_ = as.get(MaintenanceReports.class,
MaintenanceReports.SVC_NAME);
reports_.addFollowerListener(currReport_.getId(),new UserListener() {
@Override
public void userAdded(User u) {
// TODO Auto-generated method stub
}
@Override
public void notifyFollowers(MaintenanceReport u) {
// TODO Auto-generated method stub
Log.d("SODA",
"-------notify followers---: " + u.getContents());
}
});
reports_.addFollower(currReport_,username);
Toast.makeText(ctx_,
username + "is now following this report",
Toast.LENGTH_SHORT).show();
}
});
}
});
deleteButton_.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteReport();
}
});
}
private Bitmap getBmp(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
return bitmap;
}
return null;
}
private void callIntent(Bitmap img) {
Intent i = new Intent(this,
leadtools.annotationsdemo.AnnotationsDemoActivity.class);
i.putExtra("byteArray", getBytes(img));
startActivityForResult(i, STATIC_INTEGER_VALUE);
}
private byte[] getBytes(Bitmap bmp) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bmp.compress(CompressFormat.JPEG, 10 /* ignored for PNG */, bos);
byte[] bitmapdata = bos.toByteArray();
return bitmapdata;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case STATIC_INTEGER_VALUE: {
if (resultCode == Activity.RESULT_OK) {
byte[] b = data.getByteArrayExtra("result");
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
photoView_.setImageBitmap(bitmap);
photoView_.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
photoView_.setAdjustViewBounds(true);
}
break;
}
}
}
private void updateReport() {
List<Future> list = new ArrayList<Future>();
Future<?> Result = AndroidSoda.async(new Runnable() {
@Override
public void run() {
reports_ = as.get(MaintenanceReports.class,
MaintenanceReports.SVC_NAME);
reports_.addListener(new MaintenanceListener() {
@SodaInvokeInUi
public void reportAdded(final MaintenanceReport r) {
}
@Override
public void reportchanged(MaintenanceReport r) {
// TODO Auto-generated method stub
Log.d("SODA",
"Maintenance report modified: "
+ r.getContents());
Toast.makeText(ReportEditorActivity.this,
"Modified report:"+r.getContents(),
Toast.LENGTH_SHORT).show();
if (mContent.equals(r.getContents())) {
Log.d("SODA",
"-------modify---: " + r.getContents());
currReport_.setImageData(r.getImageData());
currReport_.setContents(mContent);
setImage();
}
}
});
reports_.modifyReport(currReport_);
}
});
list.add(Result);
for (Future f : list) {
try {
while (!f.isDone()) {
}
f.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void deleteReport() {
List<Future> list = new ArrayList<Future>();
Future<?> Result = AndroidSoda.async(new Runnable() {
@Override
public void run() {
reports_ = as.get(MaintenanceReports.class,
MaintenanceReports.SVC_NAME);
reports_.deleteReport(currReport_.getId());
}
});
list.add(Result);
for (Future f : list) {
try {
while (!f.isDone()) {
}
f.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setImage() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
byte[] b = currReport_.getImageData();
if (b != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0,
b.length);
photoView_.setImageBitmap(bitmap);
photoView_.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
photoView_.setAdjustViewBounds(true);
}
}
});
}
@Override
public void connected(final AndroidSoda s) {
this.as = s;
}
public void updateReports(List<MaintenanceReport> reports) {
}
}