From 10f4ba0198904a3d7679771ce845c847d940226f Mon Sep 17 00:00:00 2001 From: Michael Kolb Date: Wed, 10 Apr 2013 08:50:51 -0700 Subject: Add menu labels Bug: 8618169 Change-Id: Iea1ac7256450afd2870c144099459f32868c699f --- src/com/android/camera/CameraSettings.java | 4 ++++ src/com/android/camera/ListPreference.java | 15 +++++++++++++++ src/com/android/camera/PhotoMenu.java | 15 +++++++++++++++ src/com/android/camera/PieController.java | 2 ++ src/com/android/camera/drawable/TextDrawable.java | 23 ++++++++++++++++++++--- src/com/android/camera/ui/PieItem.java | 9 +++++++++ src/com/android/camera/ui/PieRenderer.java | 21 ++++++++++++++++++++- 7 files changed, 85 insertions(+), 4 deletions(-) (limited to 'src/com') diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index d0d575c5f..ede4156c7 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -247,8 +247,10 @@ public class CameraSettings { // show only integer values for exposure compensation int maxValue = Math.min(3, (int) FloatMath.floor(max * step)); int minValue = Math.max(-3, (int) FloatMath.ceil(min * step)); + String explabel = mContext.getResources().getString(R.string.pref_exposure_label); CharSequence entries[] = new CharSequence[maxValue - minValue + 1]; CharSequence entryValues[] = new CharSequence[maxValue - minValue + 1]; + CharSequence labels[] = new CharSequence[maxValue - minValue + 1]; int[] icons = new int[maxValue - minValue + 1]; TypedArray iconIds = mContext.getResources().obtainTypedArray( R.array.pref_camera_exposure_icons); @@ -257,10 +259,12 @@ public class CameraSettings { StringBuilder builder = new StringBuilder(); if (i > 0) builder.append('+'); entries[maxValue - i] = builder.append(i).toString(); + labels[maxValue - i] = explabel + " " + builder.toString(); icons[maxValue - i] = iconIds.getResourceId(3 + i, 0); } exposure.setUseSingleIcon(true); exposure.setEntries(entries); + exposure.setLabels(labels); exposure.setEntryValues(entryValues); exposure.setLargeIconIds(icons); } diff --git a/src/com/android/camera/ListPreference.java b/src/com/android/camera/ListPreference.java index a29b19719..9ea2e34ec 100644 --- a/src/com/android/camera/ListPreference.java +++ b/src/com/android/camera/ListPreference.java @@ -40,6 +40,7 @@ public class ListPreference extends CameraPreference { private CharSequence[] mEntries; private CharSequence[] mEntryValues; + private CharSequence[] mLabels; private boolean mLoaded = false; public ListPreference(Context context, AttributeSet attrs) { @@ -68,6 +69,8 @@ public class ListPreference extends CameraPreference { setEntries(a.getTextArray(R.styleable.ListPreference_entries)); setEntryValues(a.getTextArray( R.styleable.ListPreference_entryValues)); + setLabels(a.getTextArray( + R.styleable.ListPreference_labels)); a.recycle(); } @@ -83,6 +86,10 @@ public class ListPreference extends CameraPreference { return mEntryValues; } + public CharSequence[] getLabels() { + return mLabels; + } + public void setEntries(CharSequence entries[]) { mEntries = entries == null ? new CharSequence[0] : entries; } @@ -91,6 +98,10 @@ public class ListPreference extends CameraPreference { mEntryValues = values == null ? new CharSequence[0] : values; } + public void setLabels(CharSequence labels[]) { + mLabels = labels == null ? new CharSequence[0] : labels; + } + public String getValue() { if (!mLoaded) { mValue = getSharedPreferences().getString(mKey, @@ -135,6 +146,10 @@ public class ListPreference extends CameraPreference { return mEntries[findIndexOfValue(getValue())].toString(); } + public String getLabel() { + return mLabels[findIndexOfValue(getValue())].toString(); + } + protected void persistStringValue(String value) { SharedPreferences.Editor editor = getSharedPreferences().edit(); editor.putString(mKey, value); diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index f5ba733c9..09c96b26a 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -17,6 +17,7 @@ package com.android.camera; import android.content.Context; +import android.content.res.Resources; import android.hardware.Camera.Parameters; import android.view.LayoutInflater; @@ -65,20 +66,26 @@ public class PhotoMenu extends PieController mPopup = null; 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)); mRenderer.addItem(item); } // exposure compensation if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) { item = makeItem(CameraSettings.KEY_EXPOSURE, POS_EXP, 5); + item.setLabel(res.getString(R.string.pref_exposure_label)); mRenderer.addItem(item); } // camera switcher if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) { item = makeItem(R.drawable.ic_switch_photo_facing_holo_light); + ListPreference lpref = group.findPreference(CameraSettings.KEY_CAMERA_ID); item.setPosition(POS_SWITCH, 5); + item.setLabel(lpref.getLabel()); + final PieItem fitem = item; item.setOnClickListener(new OnClickListener() { @Override public void onClick(PieItem item) { @@ -91,6 +98,7 @@ public class PhotoMenu extends PieController index = (index + 1) % values.length; int newCameraId = Integer .parseInt((String) values[index]); + fitem.setLabel(camPref.getLabel()); mListener.onCameraPickerClicked(newCameraId); } } @@ -99,8 +107,11 @@ public class PhotoMenu extends PieController } // hdr if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) { + ListPreference lp = group.findPreference(CameraSettings.KEY_CAMERA_HDR); item = makeItem(R.drawable.ic_hdr); + item.setLabel(lp.getLabel()); item.setPosition(POS_HDR, 5); + final PieItem fitem = item; item.setOnClickListener(new OnClickListener() { @Override public void onClick(PieItem item) { @@ -112,6 +123,7 @@ public class PhotoMenu extends PieController int index = (pref.findIndexOfValue(pref.getValue()) + 1) % 2; pref.setValueIndex(index); onSettingChanged(pref); + fitem.setLabel(pref.getLabel()); } } }); @@ -121,10 +133,12 @@ public class PhotoMenu extends PieController // 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); } // settings popup @@ -137,6 +151,7 @@ public class PhotoMenu extends PieController CameraSettings.KEY_TIMER_SOUND_EFFECTS, }; 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 diff --git a/src/com/android/camera/PieController.java b/src/com/android/camera/PieController.java index a9b8575ef..5ccab5e72 100644 --- a/src/com/android/camera/PieController.java +++ b/src/com/android/camera/PieController.java @@ -104,6 +104,7 @@ public class PieController { } PieItem item = makeItem(resid); item.setPosition(position, count); + item.setLabel(pref.getTitle().toUpperCase()); mPreferences.add(pref); mPreferenceMap.put(pref, item); int nOfEntries = pref.getEntries().length; @@ -116,6 +117,7 @@ public class PieController { inner = makeItem(pref.getEntries()[i]); } inner.setPosition(i, nOfEntries); + inner.setLabel(pref.getLabels()[i]); item.addItem(inner); final int index = i; inner.setOnClickListener(new OnClickListener() { diff --git a/src/com/android/camera/drawable/TextDrawable.java b/src/com/android/camera/drawable/TextDrawable.java index 2e86364e7..ac5f1ce92 100644 --- a/src/com/android/camera/drawable/TextDrawable.java +++ b/src/com/android/camera/drawable/TextDrawable.java @@ -37,6 +37,10 @@ public class TextDrawable extends Drawable { private int mIntrinsicWidth; private int mIntrinsicHeight; + public TextDrawable(Resources res) { + this(res, ""); + } + public TextDrawable(Resources res, CharSequence text) { mText = text; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -49,11 +53,24 @@ public class TextDrawable extends Drawable { mIntrinsicHeight = mPaint.getFontMetricsInt(null); } + public void setText(CharSequence txt) { + mText = txt; + if (txt == null) { + mIntrinsicWidth = 0; + mIntrinsicHeight = 0; + } else { + mIntrinsicWidth = (int) (mPaint.measureText(mText, 0, mText.length()) + .5); + mIntrinsicHeight = mPaint.getFontMetricsInt(null); + } + } + @Override public void draw(Canvas canvas) { - Rect bounds = getBounds(); - canvas.drawText(mText, 0, mText.length(), - bounds.centerX(), bounds.centerY(), mPaint); + if (mText != null) { + Rect bounds = getBounds(); + canvas.drawText(mText, 0, mText.length(), + bounds.centerX(), bounds.centerY(), mPaint); + } } @Override diff --git a/src/com/android/camera/ui/PieItem.java b/src/com/android/camera/ui/PieItem.java index 6128e0422..6dbcb85d5 100644 --- a/src/com/android/camera/ui/PieItem.java +++ b/src/com/android/camera/ui/PieItem.java @@ -44,6 +44,7 @@ public class PieItem { private Path mPath; private OnClickListener mOnClickListener; private float mAlpha; + private CharSequence mLabel; // Gray out the view when disabled private static final float ENABLED_ALPHA = 1; @@ -59,6 +60,14 @@ public class PieItem { mEnabled = true; } + public void setLabel(CharSequence txt) { + mLabel = txt; + } + + public CharSequence getLabel() { + return mLabel; + } + public void setPosition(int pos, int count) { mPosition = pos; mCount = count; diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java index 0969e4e63..4374fa624 100644 --- a/src/com/android/camera/ui/PieRenderer.java +++ b/src/com/android/camera/ui/PieRenderer.java @@ -27,7 +27,6 @@ import android.graphics.PointF; import android.graphics.RectF; import android.os.Handler; import android.os.Message; -import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; import android.view.animation.Animation; @@ -35,6 +34,7 @@ import android.view.animation.Animation.AnimationListener; import android.view.animation.LinearInterpolator; import android.view.animation.Transformation; +import com.android.camera.drawable.TextDrawable; import com.android.gallery3d.R; import java.util.ArrayList; @@ -133,6 +133,7 @@ public class PieRenderer extends OverlayRenderer private FadeOutAnimation mFadeOut; private volatile boolean mFocusCancelled; private PointF mPolar = new PointF(); + private TextDrawable mLabel; @@ -213,6 +214,7 @@ public class PieRenderer extends OverlayRenderer mSliceRadius = res.getDimensionPixelSize(R.dimen.pie_item_radius); mArcRadius = res.getDimensionPixelSize(R.dimen.pie_arc_radius); mArcOffset = res.getDimensionPixelSize(R.dimen.pie_arc_offset); + mLabel = new TextDrawable(res); } private PieItem getRoot() { @@ -269,6 +271,7 @@ public class PieRenderer extends OverlayRenderer } } } + mLabel.setText(""); mOpen.clear(); mOpen.add(root); layoutPie(); @@ -335,6 +338,15 @@ public class PieRenderer extends OverlayRenderer private void layoutPie() { layoutItems(0, getRoot().getItems()); + layoutLabel(0); + } + + private void layoutLabel(int level) { + int x = mPieCenterX; + int y = mArcCenterY - mArcRadius - (level + 2) * mRadiusInc; + int w = mLabel.getIntrinsicWidth(); + int h = mLabel.getIntrinsicHeight(); + mLabel.setBounds(x - w/2, y - h/2, x + w/2, y + h/2); } private void layoutItems(int level, List items) { @@ -480,6 +492,7 @@ public class PieRenderer extends OverlayRenderer for (PieItem item : getParent().getItems()) { drawItem(Math.max(0, mOpen.size() - 2), canvas, item, alpha); } + mLabel.draw(canvas); } if (hasOpenItem()) { int level = getLevel(); @@ -491,6 +504,7 @@ public class PieRenderer extends OverlayRenderer drawItem(level, canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1); } } + mLabel.draw(canvas); } canvas.restoreToCount(state); } @@ -606,6 +620,7 @@ public class PieRenderer extends OverlayRenderer } else { deselect(); } + mLabel.setText(""); return false; } PieItem item = findItem(mPolar); @@ -665,6 +680,8 @@ public class PieRenderer extends OverlayRenderer if (item != null && item.isEnabled()) { item.setSelected(true); mCurrentItem = item; + mLabel.setText(mCurrentItem.getLabel()); + layoutLabel(getLevel()); } else { mCurrentItem = null; } @@ -690,6 +707,7 @@ public class PieRenderer extends OverlayRenderer mCurrentItem = item; if ((mCurrentItem != getOpenItem()) && mCurrentItem.hasItems()) { openCurrentItem(); + layoutLabel(getLevel()); } } else { mCurrentItem = null; @@ -728,6 +746,7 @@ public class PieRenderer extends OverlayRenderer mXFade = null; ci.setSelected(false); mOpening = false; + mLabel.setText(""); } @Override -- cgit v1.2.3