summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kolb <kolby@google.com>2013-04-30 09:23:23 -0700
committerMichael Kolb <kolby@google.com>2013-04-30 09:23:23 -0700
commitb7c49994231f31f5cf4de4a66eec7a85a3bd9551 (patch)
treeaf702be3a4b029483296d1ec0ac6cf65bed7dfe9
parent6cf36371a5888be8e137af1ede183bd592bb07b2 (diff)
downloadandroid_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.tar.gz
android_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.tar.bz2
android_packages_apps_Snap-b7c49994231f31f5cf4de4a66eec7a85a3bd9551.zip
Remove empty slots from menu
Bug: 8640131 When a specific camera doesn't support one of the menu options, the option is removed from the menu, no empty spot anymore. Change-Id: I002d6347c35cb0bfd5f71d880294f04f45ffb38f
-rw-r--r--src/com/android/camera/PhotoMenu.java74
-rw-r--r--src/com/android/camera/PieController.java12
-rw-r--r--src/com/android/camera/VideoMenu.java58
-rw-r--r--src/com/android/camera/ui/PieItem.java15
-rw-r--r--src/com/android/camera/ui/PieRenderer.java60
5 files changed, 94 insertions, 125 deletions
diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java
index 31fe670ff..f29ed4a8b 100644
--- a/src/com/android/camera/PhotoMenu.java
+++ b/src/com/android/camera/PhotoMenu.java
@@ -36,16 +36,6 @@ public class PhotoMenu extends PieController
ListPrefSettingPopup.Listener {
private static String TAG = "CAM_photomenu";
- private static final int POS_HDR = 0;
- private static final int POS_EXP = 1;
- private static final int POS_MORE = 2;
- private static final int POS_FLASH = 3;
- private static final int POS_SWITCH = 4;
- private static final int POS_LOCATION = 1;
- private static final int POS_WB = 3;
- private static final int POS_SET = 2;
- private static final int POS_SCENE = 4;
-
private final String mSettingOff;
private PhotoUI mUI;
@@ -69,21 +59,32 @@ public class PhotoMenu extends PieController
mSecondPopup = null;
PieItem item = null;
final Resources res = mActivity.getResources();
- // flash
- if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
- item = makeItem(CameraSettings.KEY_FLASH_MODE, POS_FLASH, 5);
- item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
+ // the order is from left to right in the menu
+
+ // hdr
+ if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
+ item = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR, true);
mRenderer.addItem(item);
}
// exposure compensation
if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) {
- item = makeItem(CameraSettings.KEY_EXPOSURE, POS_EXP, 5);
+ item = makeItem(CameraSettings.KEY_EXPOSURE);
item.setLabel(res.getString(R.string.pref_exposure_label));
mRenderer.addItem(item);
}
+ // more settings
+ PieItem more = makeItem(R.drawable.ic_settings_holo_light);
+ more.setLabel(res.getString(R.string.camera_menu_more_label));
+ mRenderer.addItem(more);
+ // flash
+ if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
+ item = makeItem(CameraSettings.KEY_FLASH_MODE);
+ item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
+ mRenderer.addItem(item);
+ }
// camera switcher
if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
- item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, POS_SWITCH, 5, false);
+ item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false);
final PieItem fitem = item;
item.setOnClickListener(new OnClickListener() {
@Override
@@ -103,33 +104,9 @@ public class PhotoMenu extends PieController
});
mRenderer.addItem(item);
}
- // hdr
- if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
- item = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR, POS_HDR, 5, true);
- mRenderer.addItem(item);
- }
- // more settings
- PieItem more = makeItem(R.drawable.ic_settings_holo_light);
- more.setPosition(POS_MORE, 5);
- more.setLabel(res.getString(R.string.camera_menu_more_label));
- mRenderer.addItem(more);
- // white balance
- if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
- item = makeItem(CameraSettings.KEY_WHITE_BALANCE, POS_WB, 5);
- item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
- more.addItem(item);
- }
// location
if (group.findPreference(CameraSettings.KEY_RECORD_LOCATION) != null) {
- item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, POS_LOCATION, 5, true);
- more.addItem(item);
- }
- // scene mode
- if (group.findPreference(CameraSettings.KEY_SCENE_MODE) != null) {
- IconListPreference pref = (IconListPreference) group.findPreference(
- CameraSettings.KEY_SCENE_MODE);
- pref.setUseSingleIcon(true);
- item = makeItem(CameraSettings.KEY_SCENE_MODE, POS_SCENE, 5);
+ item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, true);
more.addItem(item);
}
// settings popup
@@ -141,7 +118,6 @@ public class PhotoMenu extends PieController
};
item = makeItem(R.drawable.ic_settings_holo_light);
item.setLabel(res.getString(R.string.camera_menu_settings_label));
- item.setPosition(POS_SET, 5);
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(PieItem item) {
@@ -152,6 +128,20 @@ public class PhotoMenu extends PieController
}
});
more.addItem(item);
+ // white balance
+ if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
+ item = makeItem(CameraSettings.KEY_WHITE_BALANCE);
+ item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
+ more.addItem(item);
+ }
+ // scene mode
+ if (group.findPreference(CameraSettings.KEY_SCENE_MODE) != null) {
+ IconListPreference pref = (IconListPreference) group.findPreference(
+ CameraSettings.KEY_SCENE_MODE);
+ pref.setUseSingleIcon(true);
+ item = makeItem(CameraSettings.KEY_SCENE_MODE);
+ more.addItem(item);
+ }
}
@Override
diff --git a/src/com/android/camera/PieController.java b/src/com/android/camera/PieController.java
index d2d9c7f0f..3cbcb4bf5 100644
--- a/src/com/android/camera/PieController.java
+++ b/src/com/android/camera/PieController.java
@@ -89,7 +89,7 @@ public class PieController {
return new PieItem(drawable, 0);
}
- public PieItem makeItem(String prefKey, int position, int count) {
+ public PieItem makeItem(String prefKey) {
final IconListPreference pref =
(IconListPreference) mPreferenceGroup.findPreference(prefKey);
if (pref == null) return null;
@@ -104,7 +104,6 @@ public class PieController {
resid = pref.getSingleIcon();
}
PieItem item = makeItem(resid);
- item.setPosition(position, count);
item.setLabel(pref.getTitle().toUpperCase());
mPreferences.add(pref);
mPreferenceMap.put(pref, item);
@@ -117,7 +116,6 @@ public class PieController {
} else {
inner = makeItem(pref.getEntries()[i]);
}
- inner.setPosition(i, nOfEntries);
inner.setLabel(pref.getLabels()[i]);
item.addItem(inner);
final int index = i;
@@ -134,8 +132,7 @@ public class PieController {
return item;
}
- public PieItem makeSwitchItem(final String prefKey, int position, int count,
- boolean addListener) {
+ public PieItem makeSwitchItem(final String prefKey, boolean addListener) {
final IconListPreference pref =
(IconListPreference) mPreferenceGroup.findPreference(prefKey);
if (pref == null) return null;
@@ -150,7 +147,6 @@ public class PieController {
resid = pref.getSingleIcon();
}
PieItem item = makeItem(resid);
- item.setPosition(position, count);
item.setLabel(pref.getLabels()[index]);
item.setImageResource(mActivity, resid);
mPreferences.add(pref);
@@ -183,8 +179,8 @@ public class PieController {
return item;
}
- public void addItem(String prefKey, int position, int count) {
- PieItem item = makeItem(prefKey, position, count);
+ public void addItem(String prefKey) {
+ PieItem item = makeItem(prefKey);
mRenderer.addItem(item);
}
diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java
index fee7665fa..9bfcdea5d 100644
--- a/src/com/android/camera/VideoMenu.java
+++ b/src/com/android/camera/VideoMenu.java
@@ -34,10 +34,6 @@ public class VideoMenu extends PieController
TimeIntervalPopup.Listener {
private static String TAG = "CAM_VideoMenu";
- private static final int POS_WB = 0;
- private static final int POS_SET = 1;
- private static final int POS_FLASH = 3;
- private static final int POS_SWITCH = 2;
private VideoUI mUI;
private String[] mOtherKeys;
@@ -60,20 +56,34 @@ public class VideoMenu extends PieController
mPopup = null;
mPopupStatus = POPUP_NONE;
PieItem item = null;
- // flash
- if (group.findPreference(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE) != null) {
- item = makeItem(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, POS_FLASH, 4);
- mRenderer.addItem(item);
- }
// white balance
if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
- item = makeItem(CameraSettings.KEY_WHITE_BALANCE, POS_WB, 4);
+ item = makeItem(CameraSettings.KEY_WHITE_BALANCE);
mRenderer.addItem(item);
}
+ // settings popup
+ mOtherKeys = new String[] {
+ CameraSettings.KEY_VIDEO_EFFECT,
+ CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL,
+ CameraSettings.KEY_VIDEO_QUALITY,
+ CameraSettings.KEY_RECORD_LOCATION
+ };
+ item = makeItem(R.drawable.ic_settings_holo_light);
+ item.setLabel(mActivity.getResources().getString(R.string.camera_menu_settings_label));
+ item.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(PieItem item) {
+ if (mPopup == null || mPopupStatus != POPUP_FIRST_LEVEL) {
+ initializePopup();
+ mPopupStatus = POPUP_FIRST_LEVEL;
+ }
+ mUI.showPopup(mPopup);
+ }
+ });
+ mRenderer.addItem(item);
// camera switcher
if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
item = makeItem(R.drawable.ic_switch_back);
- item.setPosition(POS_SWITCH, 4);
IconListPreference lpref = (IconListPreference) group.findPreference(
CameraSettings.KEY_CAMERA_ID);
item.setLabel(lpref.getLabel());
@@ -103,27 +113,11 @@ public class VideoMenu extends PieController
});
mRenderer.addItem(item);
}
- // settings popup
- mOtherKeys = new String[] {
- CameraSettings.KEY_VIDEO_EFFECT,
- CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL,
- CameraSettings.KEY_VIDEO_QUALITY,
- CameraSettings.KEY_RECORD_LOCATION
- };
- item = makeItem(R.drawable.ic_settings_holo_light);
- item.setPosition(POS_SET, 4);
- item.setLabel(mActivity.getResources().getString(R.string.camera_menu_settings_label));
- item.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(PieItem item) {
- if (mPopup == null || mPopupStatus != POPUP_FIRST_LEVEL) {
- initializePopup();
- mPopupStatus = POPUP_FIRST_LEVEL;
- }
- mUI.showPopup(mPopup);
- }
- });
- mRenderer.addItem(item);
+ // flash
+ if (group.findPreference(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE) != null) {
+ item = makeItem(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE);
+ mRenderer.addItem(item);
+ }
}
@Override
diff --git a/src/com/android/camera/ui/PieItem.java b/src/com/android/camera/ui/PieItem.java
index 6dbcb85d5..47fe06758 100644
--- a/src/com/android/camera/ui/PieItem.java
+++ b/src/com/android/camera/ui/PieItem.java
@@ -35,8 +35,6 @@ public class PieItem {
private Drawable mDrawable;
private int level;
- private int mPosition;
- private int mCount;
private boolean mSelected;
private boolean mEnabled;
@@ -68,19 +66,6 @@ public class PieItem {
return mLabel;
}
- public void setPosition(int pos, int count) {
- mPosition = pos;
- mCount = count;
- }
-
- public int getPosition() {
- return mPosition;
- }
-
- public int getCount() {
- return mCount;
- }
-
public boolean hasItems() {
return mItems != null;
}
diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java
index a4e7eb044..dcd6350e2 100644
--- a/src/com/android/camera/ui/PieRenderer.java
+++ b/src/com/android/camera/ui/PieRenderer.java
@@ -370,10 +370,12 @@ public class PieRenderer extends OverlayRenderer
Path path = makeSlice(getDegrees(0) + extend, getDegrees(SWEEP_ARC) - extend,
mArcRadius, mArcRadius + mRadiusInc + mRadiusInc / 4,
mPieCenterX, mArcCenterY - level * mRadiusInc);
+ final int count = items.size();
+ int pos = 0;
for (PieItem item : items) {
// shared between items
item.setPath(path);
- float angle = getArcCenter(item);
+ float angle = getArcCenter(item, pos, count);
int w = item.getIntrinsicWidth();
int h = item.getIntrinsicHeight();
// move views to outer border
@@ -386,6 +388,7 @@ public class PieRenderer extends OverlayRenderer
if (item.hasItems()) {
layoutItems(level + 1, item.getItems());
}
+ pos++;
}
}
@@ -403,14 +406,14 @@ public class PieRenderer extends OverlayRenderer
return path;
}
- private float getArcCenter(PieItem item) {
- return getCenter(item.getPosition(), item.getCount(), SWEEP_ARC);
+ private float getArcCenter(PieItem item, int pos, int count) {
+ return getCenter(pos, count, SWEEP_ARC);
}
- private float getSliceCenter(PieItem item) {
+ private float getSliceCenter(PieItem item, int pos, int count) {
float center = (getCenterAngle() - CENTER) * 0.5f + CENTER;
- return center + (item.getCount() - 1) * SWEEP_SLICE / 2f
- - item.getPosition() * SWEEP_SLICE;
+ return center + (count - 1) * SWEEP_SLICE / 2f
+ - pos * SWEEP_SLICE;
}
private float getCenter(int pos, int count, float sweep) {
@@ -520,20 +523,28 @@ public class PieRenderer extends OverlayRenderer
if (!hasOpenItem() || (mXFade != null)) {
// draw base menu
drawArc(canvas, getLevel(), getParent());
+ List<PieItem> items = getParent().getItems();
+ final int count = items.size();
+ int pos = 0;
for (PieItem item : getParent().getItems()) {
- drawItem(Math.max(0, mOpen.size() - 2), canvas, item, alpha);
+ drawItem(Math.max(0, mOpen.size() - 2), pos, count, canvas, item, alpha);
+ pos++;
}
mLabel.draw(canvas);
}
if (hasOpenItem()) {
int level = getLevel();
drawArc(canvas, level, getOpenItem());
- for (PieItem inner : getOpenItem().getItems()) {
+ List<PieItem> items = getOpenItem().getItems();
+ final int count = items.size();
+ int pos = 0;
+ for (PieItem inner : items) {
if (mFadeOut != null) {
- drawItem(level, canvas, inner, alpha);
+ drawItem(level, pos, count, canvas, inner, alpha);
} else {
- drawItem(level, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1);
+ drawItem(level, pos, count, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1);
}
+ pos++;
}
mLabel.draw(canvas);
}
@@ -543,19 +554,9 @@ public class PieRenderer extends OverlayRenderer
private void drawArc(Canvas canvas, int level, PieItem item) {
// arc
if (mState == STATE_PIE) {
- int min = Integer.MAX_VALUE;
- int max = Integer.MIN_VALUE;
- int count = 0;
- for (PieItem child : item.getItems()) {
- final int p = child.getPosition();
- count = child.getCount();
- if (p < min) min = p;
- if (p > max) max = p;
- }
- float start = mCenterAngle + (count - 1) * SWEEP_ARC / 2f - min * SWEEP_ARC
- + SWEEP_ARC / 2f;
- float end = mCenterAngle + (count - 1) * SWEEP_ARC / 2f - max * SWEEP_ARC
- - SWEEP_ARC / 2f;
+ final int count = item.getItems().size();
+ float start = mCenterAngle + (count * SWEEP_ARC / 2f);
+ float end = mCenterAngle - (count * SWEEP_ARC / 2f);
int cy = mArcCenterY - level * mRadiusInc;
canvas.drawArc(new RectF(mPieCenterX - mArcRadius, cy - mArcRadius,
mPieCenterX + mArcRadius, cy + mArcRadius),
@@ -563,14 +564,14 @@ public class PieRenderer extends OverlayRenderer
}
}
- private void drawItem(int level, Canvas canvas, PieItem item, float alpha) {
+ private void drawItem(int level, int pos, int count, Canvas canvas, PieItem item, float alpha) {
if (mState == STATE_PIE) {
if (item.getPath() != null) {
int y = mArcCenterY - level * mRadiusInc;
if (item.isSelected()) {
Paint p = mSelectedPaint;
int state = canvas.save();
- float angle = getArcCenter(item) - SWEEP_ARC / 2f;
+ float angle = getArcCenter(item, pos, count) - SWEEP_ARC / 2f;
angle = getDegrees(angle);
canvas.rotate(angle, mPieCenterX, y);
if (mFadeOut != null) {
@@ -679,8 +680,8 @@ public class PieRenderer extends OverlayRenderer
return polarCoords.y < mArcRadius - mRadiusInc;
}
- private boolean inside(PointF polar, PieItem item) {
- float start = getSliceCenter(item) - SWEEP_SLICE / 2f;
+ private boolean inside(PointF polar, PieItem item, int pos, int count) {
+ float start = getSliceCenter(item, pos, count) - SWEEP_SLICE / 2f;
boolean res = (mArcRadius < polar.y)
&& (start < polar.x)
&& (start + SWEEP_SLICE > polar.x)
@@ -801,10 +802,13 @@ public class PieRenderer extends OverlayRenderer
private PieItem findItem(PointF polar) {
// find the matching item:
List<PieItem> items = getOpenItem().getItems();
+ final int count = items.size();
+ int pos = 0;
for (PieItem item : items) {
- if (inside(polar, item)) {
+ if (inside(polar, item, pos, count)) {
return item;
}
+ pos++;
}
return null;
}