summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/ui
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2016-01-15 09:53:27 +0100
committerMichael Bestas <mikeioannina@gmail.com>2017-01-04 22:00:39 +0200
commitc0baee603dde98bc93fc70d67501fb99a3e90837 (patch)
tree4f363b96e53da95bd4ea54cb13b4bc451b92bd27 /src/com/android/camera/ui
parent26679b4450b89b9f26f0a7519855731c966691a2 (diff)
downloadandroid_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.java35
-rw-r--r--src/com/android/camera/ui/HistogramView.java130
-rw-r--r--src/com/android/camera/ui/RotatableLayout.java2
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
+}