summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSpike Sprague <spikuru@google.com>2014-01-31 14:50:24 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2014-01-31 14:50:24 -0800
commit6948ff8fc0946eeec29e9be6ff2abce8d1f2abed (patch)
tree76f5aacbbad417606129d500dd28350d91f5daeb
parent123e1a026a267f4296558cbb303790ee116e22c9 (diff)
parent30099ea6efee35f4665d500143d5a3e5a2a4d3b5 (diff)
downloadandroid_packages_apps_Camera2-6948ff8fc0946eeec29e9be6ff2abce8d1f2abed.tar.gz
android_packages_apps_Camera2-6948ff8fc0946eeec29e9be6ff2abce8d1f2abed.tar.bz2
android_packages_apps_Camera2-6948ff8fc0946eeec29e9be6ff2abce8d1f2abed.zip
am 30099ea6: Merge "adding accessibilty strings to ui items" into gb-ub-photos-denali
* commit '30099ea6efee35f4665d500143d5a3e5a2a4d3b5': adding accessibilty strings to ui items
-rw-r--r--res/layout/bottom_bar_contents.xml24
-rw-r--r--res/values/arrays.xml50
-rw-r--r--res/values/attrs.xml1
-rw-r--r--res/values/strings.xml57
-rw-r--r--src/com/android/camera/ButtonManager.java5
-rw-r--r--src/com/android/camera/MultiToggleImageButton.java31
-rw-r--r--src/com/android/camera/ui/ModeListView.java5
-rw-r--r--src/com/android/camera/util/CameraUtil.java17
8 files changed, 180 insertions, 10 deletions
diff --git a/res/layout/bottom_bar_contents.xml b/res/layout/bottom_bar_contents.xml
index 4e8a56fd7..d237833a5 100644
--- a/res/layout/bottom_bar_contents.xml
+++ b/res/layout/bottom_bar_contents.xml
@@ -49,28 +49,32 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
- camera:imageIds="@array/refocus_icons" />
+ camera:imageIds="@array/refocus_icons"
+ camera:contentDescriptionIds="@array/refocus_descriptions" />
<com.android.camera.MultiToggleImageButton
android:id="@+id/hdr_plus_toggle_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@null"
android:layout_weight="1"
- camera:imageIds="@array/pref_camera_hdr_plus_icons" />
+ camera:imageIds="@array/pref_camera_hdr_plus_icons"
+ camera:contentDescriptionIds="@array/hdr_plus_descriptions" />
<com.android.camera.MultiToggleImageButton
android:id="@+id/flash_toggle_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
- camera:imageIds="@array/camera_flashmode_icons" />
+ camera:imageIds="@array/camera_flashmode_icons"
+ camera:contentDescriptionIds="@array/camera_flash_descriptions" />
<com.android.camera.MultiToggleImageButton
android:id="@+id/camera_toggle_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
- camera:imageIds="@array/camera_id_icons" />
+ camera:imageIds="@array/camera_id_icons"
+ camera:contentDescriptionIds="@array/camera_id_descriptions" />
<ImageButton
android:id="@+id/reference_toggle"
android:layout_width="0dp"
@@ -92,7 +96,8 @@
android:layout_height="wrap_content"
android:scaleType="center"
android:background="@null"
- camera:imageIds="@array/settings_toggle_icons"/>
+ camera:imageIds="@array/settings_toggle_icons"
+ camera:contentDescriptionIds="@array/settings_toggle_descriptions" />
</com.android.camera.ui.TopRightMostOverlay>
<com.android.camera.ui.TopRightWeightedLayout
@@ -109,20 +114,23 @@
android:layout_height="wrap_content"
android:src="@drawable/ic_cancel"
android:layout_weight="1"
- android:background="@null" />
+ android:background="@null"
+ android:contentDescription="@string/cancel_button_description" />
<ImageButton
android:id="@+id/done_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_confirm"
android:layout_weight="1"
- android:background="@null" />
+ android:background="@null"
+ android:contentDescription="@string/done_button_description" />
<ImageButton
android:id="@+id/retake_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_back"
android:layout_weight="1"
- android:background="@null" />
+ android:background="@null"
+ android:contentDescription="@string/retake_button_description" />
</com.android.camera.ui.TopRightWeightedLayout>
</merge>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 92e062992..71de30f59 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -212,6 +212,12 @@
<item>@drawable/ic_flash_on</item>
</array>
+ <array name="camera_flash_descriptions" translatable="false">
+ <item>@string/flash_off_desc</item>
+ <item>@string/flash_auto_desc</item>
+ <item>@string/flash_on_desc</item>
+ </array>
+
<array name="camera_flashmode_largeicons" translatable="false">
<item>@drawable/ic_flash_off</item>
<item>@drawable/ic_flash_auto</item>
@@ -250,6 +256,11 @@
<item>@drawable/ic_flash_off</item>
</array>
+ <array name="video_flash_descriptions" translatable="false">
+ <item>@string/torch_on_desc</item>
+ <item>@string/torch_off_desc</item>
+ </array>
+
<array name="video_flashmode_indicator_icons" translatable="false">
<item>@drawable/ic_flash_on_indicator</item>
<item>@drawable/ic_flash_off_indicator</item>
@@ -377,6 +388,12 @@
<item>@drawable/ic_switch_camera_front</item>
</array>
+ <array name="camera_id_descriptions" translatable="false">
+ <item>@string/camera_id_back_desc</item>
+ <item>@string/camera_id_front_desc</item>
+ </array>
+
+
<array name="camera_id_largeicons" translatable="false">
<item>@drawable/ic_switch_camera_back</item>
<item>@drawable/ic_switch_camera_front</item>
@@ -436,11 +453,21 @@
<item>@drawable/ic_hdr_plus_on</item>
</array>
+ <array name="hdr_plus_descriptions" translatable="false">
+ <item>@string/hdr_plus_off_desc</item>
+ <item>@string/hdr_plus_on_desc</item>
+ </array>
+
<array name="pref_camera_hdr_icons" translatable="false">
<item>@drawable/ic_hdr_off</item>
<item>@drawable/ic_hdr_on</item>
</array>
+ <array name="hdr_descriptions" translatable="false">
+ <item>@string/hdr_off_desc</item>
+ <item>@string/hdr_on_desc</item>
+ </array>
+
<array name="pref_camera_hdr_plus_indicator_icons" translatable="false">
<item>@drawable/ic_hdr_plus_off_indicator</item>
<item>@drawable/ic_hdr_plus_on_indicator</item>
@@ -523,6 +550,11 @@
<item>@drawable/ic_refocus</item>
</array>
+ <array name="refocus_descriptions" translatable="false">
+ <item>@string/refocus_off_desc</item>
+ <item>@string/refocus_on_desc</item>
+ </array>
+
<array name="refocus_indicator_icons" translatable="false">
<item>@drawable/ic_refocus_off_indicator</item>
<item>@drawable/ic_refocus_on_indicator</item>
@@ -538,6 +570,12 @@
<item>@drawable/ic_options_active</item>
</array>
+ <array name="settings_toggle_descriptions" translatable="false">
+ <item>@string/settings_open_desc</item>
+ <item>@string/settings_close_desc</item>
+ </array>
+
+
<!--Index of camera modes. -->
<integer name="camera_mode_photo">0</integer>
<integer name="camera_mode_video">1</integer>
@@ -603,6 +641,18 @@
<item>""</item>
</string-array>
+ <string-array name="camera_mode_content_description">
+ <item>@string/mode_camera_desc</item>
+ <item>@string/mode_video_desc</item>
+ <item>@string/mode_advanced_camera_desc</item>
+ <item>@string/mode_photosphere_desc</item>
+ <item>@string/mode_panorama_desc</item>
+ <item>@string/mode_timelapse_desc</item>
+ <item>@string/mode_settings_desc</item>
+ <item>""</item>
+ <item>""</item>
+ </string-array>
+
<array name="camera_mode_icon">
<item>@drawable/ic_camera_normal</item>
<item>@drawable/ic_video_normal</item>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 452acb5f6..a92d6abfe 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -44,5 +44,6 @@
</declare-styleable>
<declare-styleable name="MultiToggleImageButton">
<attr name="imageIds" format="reference" />
+ <attr name="contentDescriptionIds" format="reference" />
</declare-styleable>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 453805c5c..a1b8c1dfe 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -683,6 +683,63 @@ CHAR LIMIT=NONE] -->
<!-- Text shown in the camera mode options list for putting camera in panorama mode [CHAR LIMIT=25] -->
<string name="mode_panorama">Panorama</string>
+ <!-- Accessibility text for switching to camera settings [CHAR_LIMIT=NONE] -->
+ <string name="mode_settings_desc">Open Settings</string>
+ <!-- Accessibility text for switching to normal camera mode [CHAR_LIMIT=NONE] -->
+ <string name="mode_camera_desc">Switch to Camera Mode</string>
+ <!-- Accessibility text for switching to video mode [CHAR_LIMIT=NONE] -->
+ <string name="mode_video_desc">Switch to Video Camera</string>
+ <!-- Accessibility text for switching to photo sphere mode. 'Photo sphere' is a product name. [CHAR_LIMIT=NONE] -->
+ <string name="mode_photosphere_desc">Switch to Photo Sphere Mode</string>
+ <!-- Accessibility text for switching to craft mode. Craft mode contains more advanced features such as capability to refocus and recognize barcode/QR code. [CHAR_LIMIT=NONE] -->
+ <string name="mode_craft_desc">Switch to Advanced Camera Mode</string>
+ <!-- Accessibility text for switching to advanced camera mode. It contains more advanced features such as capability to refocus and recognize barcode/QR code. [CHAR_LIMIT=NONE] -->
+ <string name="mode_advanced_camera_desc">Switch to Advanced Camera Mode</string>
+ <!-- Accessibility text for switching to timelapse mode [CHAR_LIMIT=NONE] -->
+ <string name="mode_timelapse_desc">Switch to Timelapse Mode</string>
+ <!-- Accessibility text for switching to wideangle mode [CHAR_LIMIT=NONE] -->
+ <string name="mode_wideangle_desc">Switch to Wideangle Mode</string>
+ <!-- Accessibility text for switching to panorama mode [CHAR_LIMIT=NONE] -->
+ <string name="mode_panorama_desc">Switch to Panorama Mode</string>
+
+
+ <!-- Accessibility text for refocus toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="refocus_off_desc">Foreground Focus off</string>
+ <string name="refocus_on_desc">Foreground Focus on</string>
+
+ <!-- Accessibility text for settings toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="settings_open_desc">Open settings</string>
+ <string name="settings_close_desc">Close settings</string>
+
+ <!-- Accessibility text for HDR+ toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="hdr_plus_off_desc">HDR Plus off</string>
+ <string name="hdr_plus_on_desc">HDR Plus on</string>
+
+ <!-- Accessibility text for HDR toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="hdr_off_desc">HDR off</string>
+ <string name="hdr_on_desc">HDR on</string>
+
+ <!-- Accessibility text for camera flash toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="flash_off_desc">Flash off</string>
+ <string name="flash_auto_desc">Flash auto</string>
+ <string name="flash_on_desc">Flash on</string>
+
+ <!-- Accessibility text for vide torch (flash) toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="torch_on_desc">Torch on</string>
+ <string name="torch_off_desc">Torch off</string>
+
+ <!-- Accessibility text for camera switch toggle button states [CHAR_LIMIT=NONE] -->
+ <string name="camera_id_back_desc">Back camera</string>
+ <string name="camera_id_front_desc">Front camera</string>
+
+ <!-- Accessibility text for cancel button [CHAR_LIMIT=NONE] -->
+ <string name="cancel_button_description">Cancel</string>
+ <!-- Accessibility text for done button [CHAR_LIMIT=NONE] -->
+ <string name="done_button_description">Done</string>
+ <!-- Accessibility text for retake button [CHAR_LIMIT=NONE] -->
+ <string name="retake_button_description">Retake</string>
+
+
<!-- Text shown in camera settings list for toggling photo location on or off [CHAR LIMIT=25] -->
<string name="setting_location">Location</string>
<!-- Text shown in camera settings list for selecting the size of photos that will be captured [CHAR LIMIT=25] -->
diff --git a/src/com/android/camera/ButtonManager.java b/src/com/android/camera/ButtonManager.java
index 7cf909c9b..8e8ba7df6 100644
--- a/src/com/android/camera/ButtonManager.java
+++ b/src/com/android/camera/ButtonManager.java
@@ -454,6 +454,8 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
if (resIdImages > 0) {
button.overrideImageIds(resIdImages);
}
+ button.overrideContentDescriptions(R.array.camera_flash_descriptions);
+
int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_FLASH_MODE);
button.setState(index >= 0 ? index : 0, false);
@@ -477,6 +479,8 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
if (resIdImages > 0) {
button.overrideImageIds(resIdImages);
}
+ button.overrideContentDescriptions(R.array.video_flash_descriptions);
+
int index = mSettingsManager.getStringValueIndex(
SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE);
button.setState(index >= 0 ? index : 0, false);
@@ -529,6 +533,7 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
if (resIdImages > 0) {
button.overrideImageIds(resIdImages);
}
+ button.overrideContentDescriptions(R.array.hdr_plus_descriptions);
int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_HDR);
button.setState(index >= 0 ? index : 0, false);
diff --git a/src/com/android/camera/MultiToggleImageButton.java b/src/com/android/camera/MultiToggleImageButton.java
index 49b073f25..6b43cd639 100644
--- a/src/com/android/camera/MultiToggleImageButton.java
+++ b/src/com/android/camera/MultiToggleImageButton.java
@@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageButton;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
import com.android.camera2.R;
@@ -50,6 +51,7 @@ public class MultiToggleImageButton extends ImageButton {
private OnStateChangeListener mOnStateChangeListener;
private int mState;
private int[] mImageIds;
+ private int[] mDescIds;
private int mLevel;
public MultiToggleImageButton(Context context) {
@@ -107,6 +109,9 @@ public class MultiToggleImageButton extends ImageButton {
public void setState(int state, boolean callListener) {
mState = state;
setImageResource(mImageIds[mState]);
+ setContentDescription(getResources().getString(mDescIds[mState]));
+ // TODO get talkback to announce the current button state
+ //sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION);
super.setImageLevel(mLevel);
if (callListener && mOnStateChangeListener != null) {
mOnStateChangeListener.stateChanged(this, getState());
@@ -135,8 +140,12 @@ public class MultiToggleImageButton extends ImageButton {
attrs,
R.styleable.MultiToggleImageButton,
0, 0);
- int resId = a.getResourceId(R.styleable.MultiToggleImageButton_imageIds, 0);
- overrideImageIds(resId);
+ int imageIds = a.getResourceId(R.styleable.MultiToggleImageButton_imageIds, 0);
+ overrideImageIds(imageIds);
+
+ int descIds = a.getResourceId(R.styleable.MultiToggleImageButton_contentDescriptionIds, 0);
+ overrideContentDescriptions(descIds);
+
a.recycle();
}
@@ -158,6 +167,24 @@ public class MultiToggleImageButton extends ImageButton {
}
}
+ /**
+ * Override the content descriptions of this button.
+ */
+ public void overrideContentDescriptions(int resId) {
+ TypedArray ids = null;
+ try {
+ ids = getResources().obtainTypedArray(resId);
+ mDescIds = new int[ids.length()];
+ for (int i = 0; i < ids.length(); i++) {
+ mDescIds[i] = ids.getResourceId(i, 0);
+ }
+ } finally {
+ if (ids != null) {
+ ids.recycle();
+ }
+ }
+ }
+
@Override
public void setImageLevel(int level) {
super.setImageLevel(level);
diff --git a/src/com/android/camera/ui/ModeListView.java b/src/com/android/camera/ui/ModeListView.java
index d7386b9ed..939c64303 100644
--- a/src/com/android/camera/ui/ModeListView.java
+++ b/src/com/android/camera/ui/ModeListView.java
@@ -368,6 +368,11 @@ public class ModeListView extends ScrollView {
// Set text
selectorItem.setText(CameraUtil.getCameraModeText(modeId, getContext()));
+
+ // Set content description (for a11y)
+ selectorItem.setContentDescription(CameraUtil
+ .getCameraModeContentDescription(modeId, getContext()));
+
mModeSelectorItems[i] = selectorItem;
}
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index fceafd999..f110317b6 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -1051,6 +1051,23 @@ public class CameraUtil {
}
/**
+ * Gets the mode content description of a specific mode.
+ *
+ * @param modeIndex index of the mode
+ * @param context current context
+ * @return mode content description if the index is valid, otherwise a new empty string
+ */
+ public static String getCameraModeContentDescription(int modeIndex, Context context) {
+ String[] cameraModesDesc = context.getResources()
+ .getStringArray(R.array.camera_mode_content_description);
+ if (modeIndex < 0 || modeIndex >= cameraModesDesc.length) {
+ Log.e(TAG, "Invalid mode index: " + modeIndex);
+ return new String();
+ }
+ return cameraModesDesc[modeIndex];
+ }
+
+ /**
* Gets the shutter icon res id for a specific mode.
*
* @param modeIndex index of the mode