diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraFragment.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraFragment.java index 7c523a3..ca0bb4a 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraFragment.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraFragment.java @@ -4,9 +4,9 @@ import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Matrix; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; +import android.media.Image; import android.net.Uri; import android.os.Bundle; import android.app.Fragment; @@ -18,6 +18,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.RelativeLayout; import nl.myhyvesbookplus.tagram.controller.PostUploader; @@ -46,7 +47,6 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL private Camera mCamera; private CameraPreview mPreview; - private byte[] mPhotoRaw; private Bitmap mPhoto; private int facing = Camera.CameraInfo.CAMERA_FACING_BACK; @@ -91,22 +91,16 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL final View view = inflater.inflate(R.layout.fragment_camera, container, false); mCamera = getCameraInstance(facing); - Camera.Parameters params = mCamera.getParameters(); - params.setRotation(0); - mCamera.setParameters(params); mPreview = new CameraPreview(getActivity().getBaseContext(), mCamera); - final RelativeLayout pictureButtons = (RelativeLayout) view.findViewById(R.id.picture_taken_buttons); final RelativeLayout filterButtons = (RelativeLayout) view.findViewById(R.id.filter_buttons); final RelativeLayout mCameraLayout = (RelativeLayout) view.findViewById(R.id.camera_preview); -// final RelativeLayout mImageTaken = (RelativeLayout) view.findViewById(R.id.picture_view); mCameraLayout.addView(mPreview); // Draw buttons over preview view.findViewById(R.id.picture_button).bringToFront(); view.findViewById(R.id.switch_camera_button).bringToFront(); - pictureButtons.bringToFront(); filterButtons.bringToFront(); (view.findViewById(R.id.switch_camera_button)).setOnClickListener(new View.OnClickListener() { @@ -131,8 +125,6 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL mCamera.takePicture(null, null, new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { -// Bitmap bmp = rotate(BitmapFactory.decodeByteArray(data, 0, data.length, null), 90); -// mPhoto = bmp; mPhoto = BitmapFactory.decodeByteArray(data, 0, data.length, null); PicturePreview mPicPreview = new PicturePreview(getActivity().getBaseContext(), mPhoto); @@ -143,7 +135,6 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL filterButtons.setVisibility(View.VISIBLE); filterButtons.bringToFront(); -// mPicPreview.invalidate(); switchButtons(view); } }); @@ -153,7 +144,11 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL (view.findViewById(R.id.upload_button)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + view.findViewById(R.id.comment_box).setClickable(true); + view.findViewById(R.id.comment_box).setVisibility(View.VISIBLE); view.findViewById(R.id.comment_box).bringToFront(); + view.findViewById(R.id.filter_buttons).setVisibility(View.GONE); + ((FloatingActionButton)view.findViewById(R.id.upload_button)).hide(); } }); @@ -169,7 +164,6 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL upload.uploadPicture(new BitmapPost(((PicturePreview)view.findViewById(R.id.pic_preview)).getPicture(), comment)); mPhoto.recycle(); - mPhoto = null; filterButtons.setVisibility(View.GONE); switchButtons(view); @@ -177,9 +171,6 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL mCameraLayout.removeView(mPreview); mCamera = getCameraInstance(facing); - Camera.Parameters params = mCamera.getParameters(); - params.setRotation(90); - mCamera.setParameters(params); mPreview = new CameraPreview(getActivity().getBaseContext(), mCamera); mCameraLayout.addView(mPreview); @@ -188,7 +179,30 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL view.findViewById(R.id.switch_camera_button).bringToFront(); mCameraLayout.removeView(view.findViewById(R.id.pic_preview)); + } + }); + (view.findViewById(R.id.comment_cancel)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((EditText) view.findViewById(R.id.comment_text)).setText(""); + + mPhoto.recycle(); + + filterButtons.setVisibility(View.GONE); + switchButtons(view); + + mCameraLayout.removeView(mPreview); + + mCamera = getCameraInstance(facing); + + mPreview = new CameraPreview(getActivity().getBaseContext(), mCamera); + mCameraLayout.addView(mPreview); + + view.findViewById(R.id.picture_button).bringToFront(); + view.findViewById(R.id.switch_camera_button).bringToFront(); + + mCameraLayout.removeView(view.findViewById(R.id.pic_preview)); } }); @@ -204,7 +218,7 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL mCameraLayout.addView(mPicPreview); - view.findViewById(R.id.picture_taken_buttons).bringToFront(); + view.findViewById(R.id.upload_button).bringToFront(); filterButtons.setVisibility(View.VISIBLE); filterButtons.bringToFront(); } @@ -222,7 +236,7 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL mCameraLayout.addView(mPicPreview); - view.findViewById(R.id.picture_taken_buttons).bringToFront(); + view.findViewById(R.id.upload_button).bringToFront(); filterButtons.setVisibility(View.VISIBLE); filterButtons.bringToFront(); } @@ -273,20 +287,13 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL public void onDestroyView() { super.onDestroyView(); - int padding = 16; // 6 dps + int padding = 16; float scale = getResources().getDisplayMetrics().density; int dp = (int) (padding * scale + 0.5f); ((AppCompatActivity)getActivity()).getSupportActionBar().show(); getActivity().findViewById(R.id.content).setPadding(dp,dp,dp,dp); } - public static Bitmap rotate(Bitmap bmp, int degree) { - Matrix mtx = new Matrix(); - mtx.setRotate(degree); - - return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mtx, true); - } - public static Camera getCameraInstance(int facing) { Camera c = null; try { @@ -305,23 +312,26 @@ public class CameraFragment extends Fragment implements PostUploader.PostUploadL } public void switchButtons(View view) { - RelativeLayout pictureButtons = (RelativeLayout) view.findViewById(R.id.picture_taken_buttons); FloatingActionButton upload = (FloatingActionButton) view.findViewById(R.id.upload_button); -// FloatingActionButton save = (FloatingActionButton) view.findViewById(R.id.save_button); + ImageButton picButton = (ImageButton) view.findViewById(R.id.picture_button); + ImageButton switchButton = (ImageButton) view.findViewById(R.id.switch_camera_button); - if (((Integer)upload.getVisibility()).equals(View.VISIBLE)) { + if (((Integer)picButton.getVisibility()).equals(View.GONE)) { + Log.d(TAG, "switchButtons: GONE"); upload.hide(); -// save.hide(); - view.findViewById(R.id.picture_button).setVisibility(View.VISIBLE); - view.findViewById(R.id.switch_camera_button).setVisibility(View.VISIBLE); + picButton.setVisibility(View.VISIBLE); + switchButton.setVisibility(View.VISIBLE); + + picButton.bringToFront(); + switchButton.bringToFront(); } else { - pictureButtons.bringToFront(); + Log.d(TAG, "switchButtons: VISIBLE"); + upload.bringToFront(); upload.show(); -// save.show(); - view.findViewById(R.id.picture_button).setVisibility(View.GONE); - view.findViewById(R.id.switch_camera_button).setVisibility(View.GONE); + picButton.setVisibility(View.GONE); + switchButton.setVisibility(View.GONE); } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraPreview.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraPreview.java index 0f07ad2..3e99389 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraPreview.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/CameraPreview.java @@ -34,21 +34,14 @@ public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (mHolder.getSurface() == null){ - // preview surface does not exist return; } - // stop preview before making changes try { mCamera.stopPreview(); } catch (Exception e){ - // ignore: tried to stop a non-existent preview } - // set preview size and make any resize, rotate or - // reformatting changes here - - // start preview with new settings try { mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); @@ -60,6 +53,7 @@ public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback @Override public void surfaceDestroyed(SurfaceHolder holder) { + Log.d(TAG, "surfaceDestroyed: CAMERA DESTROYED"); mCamera.stopPreview(); mCamera.release(); } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/PicturePreview.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/PicturePreview.java index 736e1b6..47a2a46 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/PicturePreview.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/PicturePreview.java @@ -2,10 +2,12 @@ package nl.myhyvesbookplus.tagram; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; +import android.graphics.Matrix; import android.graphics.Paint; import android.util.Log; import android.view.SurfaceHolder; @@ -16,9 +18,11 @@ import android.view.SurfaceView; */ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callback { + private static final String TAG = "PicturePreveiew"; private static final int FILTER_NONE = 0; private static final int FILTER_SEPIA = 1; private static final int FILTER_BW = 2; + private static final int FILTER_NEG = 3; private static int currentFilter = FILTER_NONE; @@ -27,9 +31,10 @@ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callbac public PicturePreview(Context context, Bitmap bmp) { super(context); - picture = Bitmap.createScaledBitmap(bmp, bmp.getWidth() / 2, bmp.getHeight() / 2, false); -// picture = Bitmap.createBitmap(bmp); setWillNotDraw(false); + + picture = Bitmap.createScaledBitmap(bmp, bmp.getWidth() / 2, bmp.getHeight() / 2, false); + Log.d(TAG, "PicturePreview: " + bmp.getWidth() + " " + bmp.getHeight()); } @Override @@ -38,38 +43,62 @@ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callbac ColorMatrix cm = new ColorMatrix(); Paint paint = new Paint(); ColorMatrixColorFilter filter; + Canvas saveCanvas = new Canvas(); switch (currentFilter) { case FILTER_NONE: - canvas.drawBitmap(picture, 0, 0, null); - canvas.rotate(90); - filterPicture = picture; + canvas.drawBitmap(rotate(picture, 90), 0, 0, null); + filterPicture = rotate(picture, 90); break; case FILTER_SEPIA: - canvas.drawBitmap(toSepia(picture), 0, 0, null); - canvas.rotate(90); - filterPicture = toSepia(picture); - break; - case FILTER_BW: - Canvas bw = new Canvas(); -// filterPicture = Bitmap.createBitmap(1920, 1440, null); - filterPicture = Bitmap.createBitmap(picture.getWidth() / 2, picture.getHeight() / 2, Bitmap.Config.ARGB_8888); - cm.setSaturation(0); + filterPicture = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); + Log.d(TAG, "onDraw: " + Integer.toString(canvas.getWidth())); + + float[] sepia = {0.393f,0.769f,0.189f,0f,0f, + 0.349f,0.686f,0.168f,0f,0f, + 0.272f,0.534f,0.131f,0f,0f, + 0f, 0f, 0f, 1f, 0f}; + cm.set(sepia); + filter = new ColorMatrixColorFilter(cm); paint.setColorFilter(filter); - bw.setBitmap(filterPicture); - bw.drawBitmap(picture, 0, 0, paint); - bw.rotate(90); - canvas.drawBitmap(picture, 0, 0, paint); - canvas.rotate(90); + saveCanvas.drawBitmap(rotate(picture, 90), 0, 0, paint); + canvas.drawBitmap(rotate(picture, 90), 0, 0, paint); break; + case FILTER_BW: + filterPicture = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); + + cm.setSaturation(0); + + filter = new ColorMatrixColorFilter(cm); + paint.setColorFilter(filter); + saveCanvas.setBitmap(filterPicture); + saveCanvas.drawBitmap(rotate(picture, 90), 0, 0, paint); + canvas.drawBitmap(rotate(picture, 90), 0, 0, paint); + break; + case FILTER_NEG: + filterPicture = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); + + float[] neg = {-1f,0f,0f,0f,255f, + 0f,-1f,0f,0f,255f, + 0f,0f,-1f,0f,255f, + 0f,0f,0f,1f,0f}; + cm.set(neg); + + filter = new ColorMatrixColorFilter(cm); + paint.setColorFilter(filter); + saveCanvas.setBitmap(filterPicture); + saveCanvas.drawBitmap(rotate(picture, 90), 0, 0, paint); + canvas.drawBitmap(rotate(picture, 90), 0, 0, paint); + break; + } } public static void filterPrev() { switch (currentFilter) { case FILTER_NONE: - currentFilter = FILTER_BW; + currentFilter = FILTER_NEG; break; case FILTER_SEPIA: currentFilter = FILTER_NONE; @@ -77,6 +106,9 @@ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callbac case FILTER_BW: currentFilter = FILTER_SEPIA; break; + case FILTER_NEG: + currentFilter = FILTER_BW; + break; } } @@ -89,44 +121,23 @@ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callbac currentFilter = FILTER_BW; break; case FILTER_BW: + currentFilter = FILTER_NEG; + break; + case FILTER_NEG: currentFilter = FILTER_NONE; break; } } - public Bitmap toSepia(Bitmap color) { - int red, green, blue, pixel; - int height = color.getHeight(); - int width = color.getWidth(); - int depth = 20; + public static Bitmap rotate(Bitmap bmp, int degree) { + Matrix mtx = new Matrix(); + mtx.postRotate(degree); - Bitmap sepia = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - - int[] pixels = new int[width * height]; - color.getPixels(pixels, 0, width, 0, 0, width, height); - for (int i = 0; i < pixels.length; i++) { - pixel = pixels[i]; - - red = (pixel >> 16) & 0xFF; - green = (pixel >> 8) & 0xFF; - blue = pixel & 0xFF; - - red = green = blue = (red + green + blue) / 3; - - red += (depth * 2); - green += depth; - - if (red > 255) - red = 255; - if (green > 255) - green = 255; - pixels[i] = (0xFF << 24) | (red << 16) | (green << 8) | blue; - } - sepia.setPixels(pixels, 0, width, 0, 0, width, height); - return sepia; + return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mtx, true); } public Bitmap getPicture() { + picture.recycle(); return filterPicture; } @@ -140,5 +151,8 @@ public class PicturePreview extends SurfaceView implements SurfaceHolder.Callbac @Override public void surfaceDestroyed(SurfaceHolder holder) { + Log.d(TAG, "surfaceDestroyed: PICTURE DESTROYED"); + picture.recycle(); + filterPicture.recycle(); } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.png b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.png deleted file mode 100644 index 7726760..0000000 Binary files a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.xml new file mode 100644 index 0000000..ccd28b4 --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_back_black_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.png b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.png deleted file mode 100644 index 8b5a681..0000000 Binary files a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.xml new file mode 100644 index 0000000..71b0a99 --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_arrow_forward_black_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_camera_black_24dp.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_camera_black_24dp.xml new file mode 100644 index 0000000..8dd7426 --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_camera_black_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_switch_camera_black_24dp.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_switch_camera_black_24dp.xml new file mode 100644 index 0000000..3b6736d --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/drawable/ic_switch_camera_black_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_camera.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_camera.xml index 27b8601..9815205 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_camera.xml +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_camera.xml @@ -18,20 +18,23 @@ android:layout_centerHorizontal="true" android:background="@android:color/transparent" android:layout_margin="10dp" - android:padding="10dp" + android:padding="15dp" android:scaleType="center" - android:scaleX="2" - android:scaleY="2" - app:srcCompat="@android:drawable/ic_menu_camera" /> + android:scaleX="2.5" + android:scaleY="2.5" + android:src="@drawable/ic_camera_black_24dp"/> + android:src="@drawable/ic_switch_camera_black_24dp"/> @@ -64,8 +69,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" - android:scaleX="0.5" - android:scaleY="0.5" + android:scaleX="2" + android:scaleY="2" + android:padding="10dp" + android:layout_margin="10dp" android:layout_alignParentRight="true" android:src="@drawable/ic_arrow_forward_black_24dp"/> @@ -74,13 +81,17 @@ android:id="@+id/comment_box" android:layout_width="match_parent" android:layout_height="wrap_content" + android:visibility="gone" + android:clickable="false" android:layout_margin="10dp" + android:padding="5dp" + android:background="@android:color/background_light" android:orientation="vertical"> + android:text="@string/comment"/> -