src/tz/signaturecapture/CaptureSignature.java
changeset 3 a41c0d4e533c
parent 1 c3780fcb8441
child 5 19822c932652
--- a/src/tz/signaturecapture/CaptureSignature.java	Fri Jan 10 12:24:20 2014 +0100
+++ b/src/tz/signaturecapture/CaptureSignature.java	Fri Jan 10 12:50:46 2014 +0100
@@ -2,8 +2,10 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Calendar;
- 
+
 import android.app.Activity;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -16,13 +18,13 @@
 import android.graphics.RectF;
 import android.os.Bundle;
 import android.os.Environment;
-import android.provider.MediaStore.Images;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
 import android.view.ViewGroup.LayoutParams;
 import android.view.Window;
 import android.widget.Button;
@@ -33,12 +35,11 @@
 public class CaptureSignature extends Activity {
  
     LinearLayout mContent;
-    signature mSignature;
+    SignatureWidget mSignature;
     Button mClear, mGetSign, mCancel;
     public static String tempDir;
     public int count = 1;
     public String current = null;
-    private Bitmap mBitmap;
     View mView;
     File mypath;
  
@@ -63,8 +64,15 @@
  
  
         mContent = (LinearLayout) findViewById(R.id.linearLayout);
-        mSignature = new signature(this, null);
+        mSignature = new SignatureWidget(this, null);
         mSignature.setBackgroundColor(Color.WHITE);
+        mSignature.setOnTouchListener(new OnTouchListener() {
+          @Override
+          public boolean onTouch(View v, MotionEvent event) {
+            mGetSign.setEnabled(true);
+            return false;
+          }
+        });
         mContent.addView(mSignature, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
         mClear = (Button)findViewById(R.id.clear);
         mGetSign = (Button)findViewById(R.id.getsign);
@@ -92,13 +100,20 @@
                 boolean error = captureSignature();
                 if(!error){
                     mView.setDrawingCacheEnabled(true);
-                    mSignature.save(mView);
-                    Bundle b = new Bundle();
-                    b.putString("status", "done");
-                    Intent intent = new Intent();
-                    intent.putExtras(b);
-                    setResult(RESULT_OK,intent);  
-                    finish();
+                    try {
+                        FileOutputStream os = new FileOutputStream(mypath);
+                        mSignature.save(mView, os);
+                        os.flush();
+                        os.close();
+                        setResult(RESULT_OK, new Intent().putExtra("status",
+                            "done"));  
+                        finish();
+                    } catch (IOException e) {
+                        Toast.makeText(CaptureSignature.this, String.format(
+                            "Failed to save signature: %", e.getMessage()),
+                            Toast.LENGTH_LONG).show();
+                    }
+
                 }
             }
         });
@@ -206,7 +221,7 @@
         return (tempdir.isDirectory());
     }
  
-    public class signature extends View
+    public static class SignatureWidget extends View
     {
         private static final float STROKE_WIDTH = 5f;
         private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2;
@@ -217,7 +232,7 @@
         private float lastTouchY;
         private final RectF dirtyRect = new RectF();
  
-        public signature(Context context, AttributeSet attrs)
+        public SignatureWidget(Context context, AttributeSet attrs)
         {
             super(context, attrs);
             paint.setAntiAlias(true);
@@ -227,35 +242,14 @@
             paint.setStrokeWidth(STROKE_WIDTH);
         }
  
-        public void save(View v)
+        public void save(View parent, OutputStream os)
         {
-            Log.v("log_tag", "Width: " + v.getWidth());
-            Log.v("log_tag", "Height: " + v.getHeight());
-            if(mBitmap == null)
-            {
-                mBitmap =  Bitmap.createBitmap (mContent.getWidth(), mContent.getHeight(), Bitmap.Config.RGB_565);;
-            }
-            Canvas canvas = new Canvas(mBitmap);
-            try
-            {
-                FileOutputStream mFileOutStream = new FileOutputStream(mypath);
- 
-                v.draw(canvas);
-                mBitmap.compress(Bitmap.CompressFormat.PNG, 90, mFileOutStream);
-                mFileOutStream.flush();
-                mFileOutStream.close();
-                String url = Images.Media.insertImage(getContentResolver(), mBitmap, "title", null);
-                Log.v("log_tag","url: " + url);
-                //In case you want to delete the file
-                //boolean deleted = mypath.delete();
-                //Log.v("log_tag","deleted: " + mypath.toString() + deleted);
-                //If you want to convert the image to string use base64 converter
- 
-            }
-            catch(Exception e)
-            {
-                Log.v("log_tag", e.toString());
-            }
+            Log.v("log_tag", "Width: " + parent.getWidth());
+            Log.v("log_tag", "Height: " + parent.getHeight());
+            Bitmap bm =  Bitmap.createBitmap(parent.getWidth(), parent.getHeight(), Bitmap.Config.RGB_565);;
+            Canvas canvas = new Canvas(bm);
+            parent.draw(canvas);
+            bm.compress(Bitmap.CompressFormat.PNG, 90, os);
         }
  
         public void clear()
@@ -275,7 +269,6 @@
         {
             float eventX = event.getX();
             float eventY = event.getY();
-            mGetSign.setEnabled(true);
  
             switch (event.getAction())
             {