diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 356c9ab9..391ea5fa 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -23,6 +23,11 @@ + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index dba70b93..adc06bea 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,6 +1,6 @@ PhoneGap - file:///android_asset/index.html + file:///android_asset/www/index.html Snap diff --git a/src/com/phonegap/demo/CameraLauncher.java b/src/com/phonegap/demo/CameraLauncher.java index eff8214d..8d503142 100644 --- a/src/com/phonegap/demo/CameraLauncher.java +++ b/src/com/phonegap/demo/CameraLauncher.java @@ -1,13 +1,7 @@ package com.phonegap.demo; - -import java.io.ByteArrayOutputStream; - -import android.graphics.BitmapFactory; -import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; import android.webkit.WebView; -import org.apache.commons.codec.binary.Base64; + public class CameraLauncher { @@ -23,25 +17,18 @@ public class CameraLauncher { public void takePicture(int quality) { - mGap.startCamera(); + mGap.startCamera(quality); } /* Return Base64 Encoded String to Javascript */ - public void processPicture( byte[] data ) + public void processPicture( String js_out ) + { + mAppView.loadUrl("javascript:navigator.camera.win('" + js_out + "');"); + } + + public void failPicture(String err) { - ByteArrayOutputStream jpeg_data = new ByteArrayOutputStream(); - Bitmap myMap = BitmapFactory.decodeByteArray(data, 0, data.length); - if (myMap.compress(CompressFormat.JPEG, quality, jpeg_data)) - { - byte[] code = jpeg_data.toByteArray(); - byte[] output = Base64.encodeBase64(code); - String js_out = output.toString(); - mAppView.loadUrl("javascript:Camera.win('" + js_out + "');"); - } - else - { - mAppView.loadUrl("javascript:Camera.fail();"); - } + mAppView.loadUrl("javascript:navigator.camera.fail('" + err + "');"); } } diff --git a/src/com/phonegap/demo/CameraPreview.java b/src/com/phonegap/demo/CameraPreview.java index 91dae3df..fc9e50fa 100644 --- a/src/com/phonegap/demo/CameraPreview.java +++ b/src/com/phonegap/demo/CameraPreview.java @@ -1,10 +1,16 @@ package com.phonegap.demo; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.apache.commons.codec.binary.Base64; + import android.app.Activity; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.PixelFormat; +import android.graphics.Bitmap.CompressFormat; import android.hardware.Camera; import android.net.Uri; import android.os.Bundle; @@ -19,7 +25,7 @@ import android.widget.Button; public class CameraPreview extends Activity implements SurfaceHolder.Callback{ - private static final String TAG = "CameraApiTest"; + private static final String TAG = "PhoneGapCamera"; private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; @@ -45,6 +51,8 @@ public class CameraPreview extends Activity implements SurfaceHolder.Callback{ mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mIntent = this.getIntent(); + quality = mIntent.getIntExtra("quality", 100); + Button stopButton = (Button) findViewById(R.id.go); stopButton.setOnClickListener(mSnapListener); } @@ -86,12 +94,29 @@ public class CameraPreview extends Activity implements SurfaceHolder.Callback{ } }; - // Store what we have and get out! + /* + * We can't just store and exit, because Android freezes up when we try to cram a picture across a process in a Bundle. + * We HAVE to compress this data and send back the compressed data + */ public void storeAndExit(byte[] data) { - mIntent.putExtra("picture", data); - setResult(RESULT_OK, mIntent); - finish(); + ByteArrayOutputStream jpeg_data = new ByteArrayOutputStream(); + Bitmap myMap = BitmapFactory.decodeByteArray(data, 0, data.length); + try { + if (myMap.compress(CompressFormat.JPEG, quality, jpeg_data)) + { + byte[] code = jpeg_data.toByteArray(); + byte[] output = Base64.encodeBase64(code); + String js_out = output.toString(); + mIntent.putExtra("picture", js_out); + setResult(RESULT_OK, mIntent); + } + } + catch(Exception e) + { + //Do shit here + } + finish(); } public boolean onKeyDown(int keyCode, KeyEvent event) diff --git a/src/com/phonegap/demo/DroidGap.java b/src/com/phonegap/demo/DroidGap.java index adc4e209..69af638f 100644 --- a/src/com/phonegap/demo/DroidGap.java +++ b/src/com/phonegap/demo/DroidGap.java @@ -134,19 +134,28 @@ public class DroidGap extends Activity { // This is required to start the camera activity! It has to come from the previous activity - public void startCamera() + public void startCamera(int quality) { Intent i = new Intent(this, CameraPreview.class); + i.setAction("android.intent.action.PICK"); + i.putExtra("quality", quality); startActivityForResult(i, 0); } protected void onActivityResult(int requestCode, int resultCode, Intent intent) { - byte [] data; + String data; super.onActivityResult(requestCode, resultCode, intent); - data = intent.getByteArrayExtra("picture"); - // Send the graphic back to the class that needs it - launcher.processPicture(data); + if (resultCode == RESULT_OK) + { + data = intent.getStringExtra("picture"); + // Send the graphic back to the class that needs it + launcher.processPicture(data); + } + else + { + launcher.failPicture("Did not complete!"); + } } } \ No newline at end of file