diff options
author | Danny Baumann <dannybaumann@web.de> | 2016-01-15 09:53:27 +0100 |
---|---|---|
committer | Michael Bestas <mikeioannina@gmail.com> | 2017-01-04 22:00:39 +0200 |
commit | c0baee603dde98bc93fc70d67501fb99a3e90837 (patch) | |
tree | 4f363b96e53da95bd4ea54cb13b4bc451b92bd27 /src/com/android/camera/ui | |
parent | 26679b4450b89b9f26f0a7519855731c966691a2 (diff) | |
download | android_packages_apps_Snap-c0baee603dde98bc93fc70d67501fb99a3e90837.tar.gz android_packages_apps_Snap-c0baee603dde98bc93fc70d67501fb99a3e90837.tar.bz2 android_packages_apps_Snap-c0baee603dde98bc93fc70d67501fb99a3e90837.zip |
Fix up layout of auto HDR notice and histogram view.
Change-Id: I61f93c68b52d81c5e19919a5b0b894cf51dd35c4
Diffstat (limited to 'src/com/android/camera/ui')
-rw-r--r-- | src/com/android/camera/ui/CameraControls.java | 35 | ||||
-rw-r--r-- | src/com/android/camera/ui/HistogramView.java | 130 | ||||
-rw-r--r-- | src/com/android/camera/ui/RotatableLayout.java | 2 |
3 files changed, 163 insertions, 4 deletions
diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java index 186626015..a93b41773 100644 --- a/src/com/android/camera/ui/CameraControls.java +++ b/src/com/android/camera/ui/CameraControls.java @@ -38,6 +38,7 @@ import android.widget.TextView; import java.util.ArrayList; import org.codeaurora.snapcam.R; +import com.android.camera.CameraManager; import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.RotateImageView; import com.android.camera.ShutterButton; @@ -65,6 +66,8 @@ public class CameraControls extends RotatableLayout { private View mReviewDoneButton; private View mReviewCancelButton; private View mReviewRetakeButton; + private View mAutoHdrNotice; + private HistogramView mHistogramView; private ArrowTextView mRefocusToast; private int mSize; @@ -84,9 +87,11 @@ public class CameraControls extends RotatableLayout { private static final int INDICATOR_INDEX = 8; private static final int MUTE_INDEX = 9; private static final int VIDEO_SHUTTER_INDEX = 10; + private static final int HISTOGRAM_INDEX = 11; + private static final int AUTO_HDR_INDEX = 12; private static final int ANIME_DURATION = 300; - private float[][] mLocX = new float[4][11]; - private float[][] mLocY = new float[4][11]; + private float[][] mLocX = new float[4][13]; + private float[][] mLocY = new float[4][13]; private boolean mLocSet = false; private boolean mHideRemainingPhoto = false; private LinearLayout mRemainingPhotos; @@ -297,6 +302,8 @@ public class CameraControls extends RotatableLayout { mFilterModeSwitcher = findViewById(R.id.filter_mode_switcher); mRemainingPhotos = (LinearLayout) findViewById(R.id.remaining_photos); mRemainingPhotosText = (TextView) findViewById(R.id.remaining_photos_text); + mAutoHdrNotice = (TextView) findViewById(R.id.auto_hdr_notice); + mHistogramView = (HistogramView) findViewById(R.id.histogram); } @Override @@ -322,6 +329,13 @@ public class CameraControls extends RotatableLayout { mBackgroundView.setVisibility(View.GONE); setLocation(r - l, b - t); + center(mAutoHdrNotice, l, t + mSize, r, + t + mSize + mAutoHdrNotice.getMeasuredHeight(), + orientation, rotation, new Rect(), AUTO_HDR_INDEX); + center(mHistogramView, l, t + mSize, + r, t + mSize + mHistogramView.getMeasuredHeight(), + orientation, rotation, new Rect(), HISTOGRAM_INDEX); + View retake = findViewById(R.id.btn_retake); if (retake != null) { mReviewRetakeButton = retake; @@ -516,6 +530,10 @@ public class CameraControls extends RotatableLayout { } } + public void setAutoHdrEnabled(boolean enabled) { + mAutoHdrNotice.setVisibility(enabled ? View.VISIBLE : View.GONE); + } + public void hideUI() { if (!mAnimating) enableTouch(false); @@ -995,19 +1013,30 @@ public class CameraControls extends RotatableLayout { } } + public void setHistogramEnabled(boolean enabled, CameraManager.CameraProxy camera) { + mHistogramView.setVisibility(enabled ? View.VISIBLE : View.GONE); + mHistogramView.setCamera(camera); + } + + public void updateHistogramData(int[] data) { + mHistogramView.updateData(data); + } + public void setOrientation(int orientation, boolean animation) { mOrientation = orientation; View[] views = { mSceneModeSwitcher, mFilterModeSwitcher, mFrontBackSwitcher, TsMakeupManager.HAS_TS_MAKEUP ? mTsMakeupSwitcher : mHdrSwitcher, mMenu, mShutter, mPreview, mSwitcher, mMute, mReviewRetakeButton, - mReviewCancelButton, mReviewDoneButton + mReviewCancelButton, mReviewDoneButton, mAutoHdrNotice, mHistogramView }; for (View v : views) { if (v != null) { if (v instanceof RotateImageView) { ((RotateImageView) v).setOrientation(orientation, animation); + } else if (v instanceof HistogramView) { + ((HistogramView) v).setRotation(-orientation); } } } diff --git a/src/com/android/camera/ui/HistogramView.java b/src/com/android/camera/ui/HistogramView.java new file mode 100644 index 000000000..2ae2c40a8 --- /dev/null +++ b/src/com/android/camera/ui/HistogramView.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * Copyright (C) 2013-2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.camera.ui; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.view.View; + +import com.android.camera.CameraManager; + +public class HistogramView extends View { + private static final int STATS_SIZE = 256; + + private int[] mData = new int[STATS_SIZE + 1]; + private boolean mDataValid; + + private Bitmap mBitmap; + private Paint mPaint = new Paint(); + private Paint mPaintRect = new Paint(); + private Canvas mCanvas = new Canvas(); + private float mWidth; + private float mHeight; + private CameraManager.CameraProxy mGraphCameraDevice; + + public HistogramView(Context context, AttributeSet attrs) { + super(context,attrs); + + mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); + mPaintRect.setColor(0xFFFFFFFF); + mPaintRect.setStyle(Paint.Style.FILL); + } + + public void setCamera(CameraManager.CameraProxy camera) { + mGraphCameraDevice = camera; + if (camera == null) { + mDataValid = false; + } + } + + public void updateData(int[] data) { + if (data.length == mData.length) { + System.arraycopy(data, 0, mData, 0, data.length); + drawGraph(); + mDataValid = true; + invalidate(); + } + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); + mCanvas.setBitmap(mBitmap); + mWidth = w; + mHeight = h; + if (mDataValid) { + drawGraph(); + } + super.onSizeChanged(w, h, oldw, oldh); + } + + @Override + protected void onDraw(Canvas canvas) { + if (mDataValid && mBitmap != null) { + canvas.drawBitmap(mBitmap, 0, 0, null); + if (mGraphCameraDevice != null) { + mGraphCameraDevice.sendHistogramData(); + } + } + } + + private void drawGraph() { + final float border = 5; + float graphheight = mHeight - (2 * border); + float graphwidth = mWidth - (2 * border); + float bargap = 0.0f; + float barwidth = graphwidth/STATS_SIZE; + + mCanvas.drawColor(0xFFAAAAAA); + mPaint.setColor(Color.BLACK); + + for (int k = 0; k <= (graphheight /32) ; k++) { + float y = (float)(32 * k)+ border; + mCanvas.drawLine(border, y, graphwidth + border , y, mPaint); + } + for (int j = 0; j <= (graphwidth /32); j++) { + float x = (float)(32 * j)+ border; + mCanvas.drawLine(x, border, x, graphheight + border, mPaint); + } + + //Assumption: The first element contains the maximum value. + int maxValue = Integer.MIN_VALUE; + if (mData[0] == 0) { + for (int i = 1; i <= STATS_SIZE ; i++) { + maxValue = Math.max(maxValue, mData[i]); + } + } else { + maxValue = mData[0]; + } + + for (int i = 1; i <= STATS_SIZE; i++) { + float scaled = Math.min(STATS_SIZE, + (float) mData[i] * (float) STATS_SIZE / (float) maxValue); + float left = (bargap * (i+1)) + (barwidth * i) + border; + float top = graphheight + border; + float right = left + barwidth; + float bottom = top - scaled; + mCanvas.drawRect(left, top, right, bottom, mPaintRect); + } + } +} + diff --git a/src/com/android/camera/ui/RotatableLayout.java b/src/com/android/camera/ui/RotatableLayout.java index 6867e6a8b..702590f9f 100644 --- a/src/com/android/camera/ui/RotatableLayout.java +++ b/src/com/android/camera/ui/RotatableLayout.java @@ -280,4 +280,4 @@ public class RotatableLayout extends FrameLayout { rotateClockwise(view); rotateClockwise(view); } -}
\ No newline at end of file +} |