diff options
author | Michael Kolb <kolby@google.com> | 2013-04-30 09:23:23 -0700 |
---|---|---|
committer | Michael Kolb <kolby@google.com> | 2013-04-30 09:23:23 -0700 |
commit | b7c49994231f31f5cf4de4a66eec7a85a3bd9551 (patch) | |
tree | af702be3a4b029483296d1ec0ac6cf65bed7dfe9 | |
parent | 6cf36371a5888be8e137af1ede183bd592bb07b2 (diff) | |
download | android_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.java | 74 | ||||
-rw-r--r-- | src/com/android/camera/PieController.java | 12 | ||||
-rw-r--r-- | src/com/android/camera/VideoMenu.java | 58 | ||||
-rw-r--r-- | src/com/android/camera/ui/PieItem.java | 15 | ||||
-rw-r--r-- | src/com/android/camera/ui/PieRenderer.java | 60 |
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; } |