summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout-xlarge/camera_control.xml33
-rw-r--r--src/com/android/camera/Camera.java13
-rw-r--r--src/com/android/camera/VideoCamera.java13
-rw-r--r--src/com/android/camera/ui/SettingsWheel.java143
4 files changed, 187 insertions, 15 deletions
diff --git a/res/layout-xlarge/camera_control.xml b/res/layout-xlarge/camera_control.xml
index 91e11ce..31ee6be 100644
--- a/res/layout-xlarge/camera_control.xml
+++ b/res/layout-xlarge/camera_control.xml
@@ -17,7 +17,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/control_bar"
android:layout_height="match_parent"
- android:layout_width="190dp"
+ android:layout_width="240dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:layout_marginLeft="10dp"
@@ -41,32 +41,35 @@
android:layout="@layout/zoom_picker"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
- android:layout_toRightOf="@id/image_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_centerInParent="true"/>
- <com.android.camera.ShutterButton android:id="@+id/shutter_button"
- android:layout_centerInParent="true"
- android:layout_alignParentRight="true"
- android:layout_toRightOf="@id/image_list"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:scaleType="center"
- android:clickable="true"
- android:focusable="true"
- android:src="@drawable/btn_ic_camera_shutter"
- android:background="@drawable/btn_shutter"/>
+ <com.android.camera.ui.SettingsWheel android:id="@+id/settings_wheel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:layout_alignParentRight="true"
+ android:layout_toRightOf="@id/image_list">
+ <com.android.camera.ShutterButton android:id="@+id/shutter_button"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:scaleType="center"
+ android:clickable="true"
+ android:focusable="true"
+ android:src="@drawable/btn_ic_camera_shutter"
+ android:background="@drawable/btn_shutter" />
+ </com.android.camera.ui.SettingsWheel>
<LinearLayout android:id="@+id/camera_switch_set"
android:orientation="vertical"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
- android:layout_toRightOf="@id/image_list"
android:layout_height="wrap_content"
- android:layout_width="wrap_content">
+ android:layout_width="wrap_content"
+ android:layout_marginRight="17dp">
<com.android.camera.RotateImageView android:id="@+id/video_switch_icon"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index aecb386..2a974bd 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -21,6 +21,7 @@ import com.android.camera.gallery.IImageList;
import com.android.camera.ui.CameraHeadUpDisplay;
import com.android.camera.ui.GLRootView;
import com.android.camera.ui.HeadUpDisplay;
+import com.android.camera.ui.SettingsWheel;
import com.android.camera.ui.ZoomControllerListener;
import android.app.Activity;
@@ -238,6 +239,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
private final Handler mHandler = new MainHandler();
private CameraHeadUpDisplay mHeadUpDisplay;
+ private SettingsWheel mSettingsWheel;
// multiple cameras support
private int mNumberOfCameras;
@@ -349,6 +351,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
mHeadUpDisplay = new CameraHeadUpDisplay(this);
mHeadUpDisplay.setListener(new MyHeadUpDisplayListener());
initializeHeadUpDisplay();
+ initializeSettingsWheel();
mFirstTimeInitialized = true;
changeHeadUpDisplayState();
addIdleHandler();
@@ -1070,6 +1073,16 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
}
}
+ private void initializeSettingsWheel() {
+ mSettingsWheel = (SettingsWheel) findViewById(R.id.settings_wheel);
+ if (mSettingsWheel != null) {
+ CameraSettings settings = new CameraSettings(this, mInitialParams,
+ mCameraId, CameraHolder.instance().getCameraInfo());
+ mSettingsWheel.initialize(this,
+ settings.getPreferenceGroup(R.xml.camera_preferences));
+ }
+ }
+
private void initializeHeadUpDisplay() {
CameraSettings settings = new CameraSettings(this, mInitialParams,
mCameraId, CameraHolder.instance().getCameraInfo());
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 5c4e621..ed77165 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -22,6 +22,7 @@ import com.android.camera.ui.CamcorderHeadUpDisplay;
import com.android.camera.ui.GLRootView;
import com.android.camera.ui.GLView;
import com.android.camera.ui.HeadUpDisplay;
+import com.android.camera.ui.SettingsWheel;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
@@ -137,6 +138,7 @@ public class VideoCamera extends NoSearchActivity
private ImageView mVideoFrame;
private GLRootView mGLRootView;
private CamcorderHeadUpDisplay mHeadUpDisplay;
+ private SettingsWheel mSettingsWheel;
private MenuItem mSwitchTimeLapseMenuItem;
private boolean mIsVideoCaptureIntent;
@@ -396,6 +398,7 @@ public class VideoCamera extends NoSearchActivity
mHeadUpDisplay = new CamcorderHeadUpDisplay(this);
mHeadUpDisplay.setListener(new MyHeadUpDisplayListener());
initializeHeadUpDisplay();
+ initializeSettingsWheel();
}
private void changeHeadUpDisplayState() {
@@ -437,6 +440,16 @@ public class VideoCamera extends NoSearchActivity
mGLRootView = null;
}
+ private void initializeSettingsWheel() {
+ mSettingsWheel = (SettingsWheel) findViewById(R.id.settings_wheel);
+ if (mSettingsWheel != null) {
+ CameraSettings settings = new CameraSettings(this, mParameters,
+ mCameraId, CameraHolder.instance().getCameraInfo());
+ mSettingsWheel.initialize(this,
+ settings.getPreferenceGroup(R.xml.video_preferences));
+ }
+ }
+
@Override
protected void onStart() {
super.onStart();
diff --git a/src/com/android/camera/ui/SettingsWheel.java b/src/com/android/camera/ui/SettingsWheel.java
new file mode 100644
index 0000000..7a94702
--- /dev/null
+++ b/src/com/android/camera/ui/SettingsWheel.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2010 The Android Open Source 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 com.android.camera.CameraSettings;
+import com.android.camera.ComboPreferences;
+import com.android.camera.IconListPreference;
+import com.android.camera.PreferenceGroup;
+import com.android.camera.R;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.widget.Button;
+import android.view.ViewGroup;
+import android.view.View;
+
+import java.lang.Math;
+
+/**
+ * A view that contains camera settings and shutter buttons. The settings are
+ * spreaded around the shutter button.
+ */
+public class SettingsWheel extends ViewGroup {
+ private static final String TAG = "SettingsWheel";
+ private ComboPreferences mSharedPrefs;
+ private PreferenceGroup mPreferenceGroup;
+
+ public SettingsWheel(Context context) {
+ super(context);
+ }
+
+ public SettingsWheel(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public SettingsWheel(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onMeasure(int widthSpec, int heightSpec) {
+ // Measure all children.
+ int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+ for (int i = 0; i < getChildCount(); i++) {
+ getChildAt(i).measure(freeSpec, freeSpec);
+ }
+
+ // Measure myself.
+ View shutterButton = getChildAt(0);
+ int desiredWidth = (int)(shutterButton.getMeasuredWidth() * 2.5);
+ int desiredHeight = (int)(shutterButton.getMeasuredHeight() * 3);
+ int widthMode = MeasureSpec.getMode(widthSpec);
+ int heightMode = MeasureSpec.getMode(heightSpec);
+ int measuredWidth, measuredHeight;
+ if (widthMode == MeasureSpec.UNSPECIFIED) {
+ measuredWidth = desiredWidth;
+ } else if (widthMode == MeasureSpec.AT_MOST) {
+ measuredWidth = Math.min(desiredWidth, MeasureSpec.getSize(widthSpec));
+ } else { // MeasureSpec.EXACTLY
+ measuredWidth = MeasureSpec.getSize(widthSpec);
+ }
+ if (heightMode == MeasureSpec.UNSPECIFIED) {
+ measuredHeight = desiredHeight;
+ } else if (heightMode == MeasureSpec.AT_MOST) {
+ measuredHeight = Math.min(desiredHeight, MeasureSpec.getSize(heightSpec));
+ } else { // MeasureSpec.EXACTLY
+ measuredHeight = MeasureSpec.getSize(heightSpec);
+ }
+ setMeasuredDimension(measuredWidth, measuredHeight);
+ }
+
+ @Override
+ protected void onLayout(
+ boolean changed, int left, int top, int right, int bottom) {
+ int count = getChildCount();
+ if (count == 0) return;
+
+ // Layout the shutter button.
+ View shutterButton = findViewById(R.id.shutter_button);
+ int width = shutterButton.getMeasuredWidth();
+ int height = shutterButton.getMeasuredHeight();
+ int xCenter = (right - left) - width / 2;
+ int yCenter = (bottom - top) / 2;
+ shutterButton.layout(xCenter - width / 2, yCenter - height / 2,
+ xCenter + width / 2, yCenter + height / 2);
+
+ // Layout the settings. The icons are spreaded on the left side of the
+ // shutter button. So the angle starts from 90 to 270 degrees.
+ if (count == 1) return;
+ double radius = shutterButton.getMeasuredWidth();
+ double intervalDegrees = 180.0 / (count - 2);
+ double initialDegrees = 90.0;
+ int index = 0;
+ for (int i = 0; i < count; ++i) {
+ View view = getChildAt(i);
+ if (view == shutterButton) continue;
+ double degree = initialDegrees + intervalDegrees * index;
+ double radian = degree * Math.PI / 180.0;
+ int x = xCenter + (int)(radius * Math.cos(radian));
+ int y = yCenter - (int)(radius * Math.sin(radian));
+ width = view.getMeasuredWidth();
+ height = view.getMeasuredHeight();
+ view.layout(x - width / 2, y - height / 2, x + width / 2,
+ y + height / 2);
+ index++;
+ }
+ }
+
+ protected void addIndicator(
+ Context context, PreferenceGroup group, String key) {
+ IconListPreference pref = (IconListPreference) group.findPreference(key);
+ if (pref == null) return;
+ int index = pref.findIndexOfValue(pref.getValue());
+ Button b = new Button(context);
+ b.setBackgroundResource(pref.getLargeIconIds()[index]);
+ addView(b);
+ }
+
+ public void initialize(Context context, PreferenceGroup group) {
+ mPreferenceGroup = group;
+ mSharedPrefs = ComboPreferences.get(context);
+ addIndicator(context, group, CameraSettings.KEY_FLASH_MODE);
+ addIndicator(context, group, CameraSettings.KEY_WHITE_BALANCE);
+ addIndicator(context, group, CameraSettings.KEY_RECORD_LOCATION);
+ addIndicator(context, group, CameraSettings.KEY_CAMERA_ID);
+ requestLayout();
+ }
+}