package eoc.studio.voicecard.manufacture;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
import eoc.studio.voicecard.R;
import eoc.studio.voicecard.handwriting.HandWritingView;
import android.R.integer;
import android.app.Activity;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class CeateSignatureActivity extends Activity
{
Context context = null;
PhotoSortrView photoSorter = null;
HandWritingView handWritingView = null;
ImageButton changeModeButton = null;
ImageButton saveButton = null;
RelativeLayout sketchpadLayout = null;
private static final int MODE_WRITING = 1;
private static final int MODE_DRAG = 2;
private int uiMode = MODE_WRITING;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_create_signature);
context = getApplicationContext();
findViewById(R.id.Seal_01_imageView).setOnTouchListener(new MyTouchListener());
findViewById(R.id.Seal_01_imageView).setTag(R.drawable.seal01);
findViewById(R.id.Seal_02_imageView).setOnTouchListener(new MyTouchListener());
findViewById(R.id.Seal_02_imageView).setTag(R.drawable.seal02);
findViewById(R.id.sketchpad_RelativeLayout).setOnDragListener(new SketchpadDragListener());
changeModeButton = (ImageButton) findViewById(R.id.changeWriteOrDragButton);
changeModeButton.setOnClickListener(new ChangeModeClickListenr());
changeModeButton.setBackgroundResource(R.drawable.draw_mode);
saveButton = (ImageButton) findViewById(R.id.saveButton);
saveButton.setOnClickListener(new SaveButtonClickListenr());
saveButton.setBackgroundResource(R.drawable.save_button);
handWritingView = new HandWritingView(this);
photoSorter = new PhotoSortrView(this);
sketchpadLayout = (RelativeLayout) findViewById(R.id.sketchpad_RelativeLayout);
sketchpadLayout.addView(photoSorter);
sketchpadLayout.addView(handWritingView);
}
class MyTouchListener implements OnTouchListener
{
public boolean onTouch(View view, MotionEvent motionEvent)
{
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN)
{
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
return true;
}
else
{
return false;
}
}
}
class ChangeModeClickListenr implements OnClickListener
{
@Override
public void onClick(View v)
{
if ((uiMode & MODE_WRITING) == 1)
{
Log.e("CeateSignatureActivity", "MODE_WRITING");
sketchpadLayout.removeAllViews();
sketchpadLayout.addView(handWritingView);
sketchpadLayout.addView(photoSorter);
uiMode = MODE_DRAG;
changeModeButton.setBackgroundResource(R.drawable.drag_mode);
Log.e("CeateSignatureActivity", "change to MODE_DRAG");
}
else
{
Log.e("CeateSignatureActivity", "MODE_DRAG");
sketchpadLayout.removeAllViews();
sketchpadLayout.addView(photoSorter);
sketchpadLayout.addView(handWritingView);
uiMode = MODE_WRITING;
changeModeButton.setBackgroundResource(R.drawable.draw_mode);
Log.e("CeateSignatureActivity", "change to MODE_WRITING");
}
}
}
class SaveButtonClickListenr implements OnClickListener
{
@Override
public void onClick(View v)
{
Log.e("CeateSignatureActivity", "SaveButtonClickListenr click!!");
// Without it the view will have a dimension of 0,0 and the bitmap
// will be null
sketchpadLayout.setDrawingCacheEnabled(true);
Bitmap screenshot = Bitmap.createBitmap(sketchpadLayout.getWidth(),
sketchpadLayout.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(screenshot);
sketchpadLayout.draw(c);
// clear drawing cache
sketchpadLayout.setDrawingCacheEnabled(false);
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/VoiceCard_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file = new File(myDir, fname);
if (file.exists()) file.delete();
try
{
FileOutputStream out = new FileOutputStream(file);
screenshot.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScannerIntent
.setData(Uri.parse("file://" + Environment.getExternalStorageDirectory()
+ "/VoiceCard_images/" + fname));
context.sendBroadcast(mediaScannerIntent);
Toast.makeText(context, "Your image is saved to sdcard", Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class SketchpadDragListener implements OnDragListener
{
@Override
public boolean onDrag(View v, DragEvent event)
{
int action = event.getAction();
switch (event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:
Log.e("CeateSignatureActivity", "ACTION_DRAG_STARTED v.getRelativeTop()"
+ getRelativeTop(v));
Log.e("CeateSignatureActivity", "ACTION_DRAG_STARTED v.getRelativeLeft()"
+ getRelativeLeft(v));
Log.e("CeateSignatureActivity", "ACTION_DRAG_STARTED event.getX()" + event.getX());
Log.e("CeateSignatureActivity", "ACTION_DRAG_STARTED event.getY()" + event.getY());
// do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
Log.e("CeateSignatureActivity", "ACTION_DROP v.getRelativeTop()"
+ getRelativeTop(v));
Log.e("CeateSignatureActivity", "ACTION_DROP v.getRelativeLeft()"
+ getRelativeLeft(v));
Log.e("CeateSignatureActivity", "ACTION_DROP event.getX()" + event.getX());
Log.e("CeateSignatureActivity", "ACTION_DROP event.getY()" + event.getY());
Log.e("CeateSignatureActivity", "ACTION_DROP v.getId() " + v.getId());
View view = (View) event.getLocalState();
Log.e("CeateSignatureActivity", "ACTION_DROP v.getTag() " + view.getTag());
photoSorter.loadOneImgage(context, (Integer) view.getTag(), event.getX(),
event.getY(), 1, 1);
photoSorter.invalidate();
break;
case DragEvent.ACTION_DRAG_ENDED:
default:
break;
}
return true;
}
}
private int getRelativeLeft(View myView)
{
if (myView.getParent() == myView.getRootView())
return myView.getLeft();
else return myView.getLeft() + getRelativeLeft((View) myView.getParent());
}
private int getRelativeTop(View myView)
{
if (myView.getParent() == myView.getRootView())
return myView.getTop();
else return myView.getTop() + getRelativeTop((View) myView.getParent());
}
}