package com.cs169.android.assassins; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.hardware.Camera; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.ContentBody; import org.apache.http.entity.mime.content.StringBody; import java.io.ByteArrayOutputStream; import java.io.IOException; public class TakeProfilePictureActivity extends AuthenticationActivity implements SurfaceHolder.Callback { private static final String TAG = "Create User Screen"; Camera mCamera; SurfaceView mSurfaceView; SurfaceHolder mSurfaceHolder; private boolean mPreviewRunning = false; static final int FOTO_MODE = 0; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.take_profile_picture); ImageButton takePictureButton = (ImageButton) findViewById(R.id.takePicture); mSurfaceView = (SurfaceView) findViewById(R.id.preview); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); takePictureButton.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { mCamera.takePicture(null, null, mPictureCallback); } }); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(width, height); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); mCamera.setDisplayOrientation(90); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mPreviewRunning = false; mCamera.release(); } Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] imageData, Camera c) { Log.v("camera info:", "got there:" + (imageData == null)); if (imageData != null) { // TODO: Confirmation dialog Intent mIntent = new Intent(TakeProfilePictureActivity.this, ListOfGamesActivity.class); Bitmap mybitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); int height = mybitmap.getHeight(); int width = mybitmap.getWidth(); int scaledHeight = height / (width / 200); Bitmap scaledBitmap = Bitmap.createScaledBitmap(mybitmap, 200, scaledHeight, true); ByteArrayOutputStream stream = new ByteArrayOutputStream(); scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] byteArray = stream.toByteArray(); String url = InGameService.BASE_URL + "player/updatepicture/"; Log.v("camera info:", "url:" + url); HttpPost httppost = new HttpPost(url); MultipartEntity mp = new MultipartEntity(); ContentBody cb = new ByteArrayBody(byteArray, "image/jpeg", "picture.jpg"); mp.addPart("picture", cb); try { ContentBody token = new StringBody( facebook.getAccessToken()); mp.addPart("access_token", token); httppost.setEntity(mp); InGameService.request(url, false, httppost); } catch (Exception e) { e.printStackTrace(); } mCamera.startPreview(); setResult(FOTO_MODE, mIntent); startActivity(mIntent); finish(); } } }; }