summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/ui
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 /src/com/android/camera/ui
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
Diffstat (limited to 'src/com/android/camera/ui')
-rw-r--r--src/com/android/camera/ui/PieItem.java15
-rw-r--r--src/com/android/camera/ui/PieRenderer.java60
2 files changed, 32 insertions, 43 deletions
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;
}