diff options
author | Spike Sprague <spikuru@google.com> | 2014-01-31 22:47:58 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-01-31 22:47:58 +0000 |
commit | 30099ea6efee35f4665d500143d5a3e5a2a4d3b5 (patch) | |
tree | 157d1a83ab600b692b3447599ec37e1aae5d929f | |
parent | 4ba3c72b6cf7b17345a8ffe643a3e21df460893d (diff) | |
parent | 79718f6c6fb60aedd09edeedb2c16d1e2f9fe02d (diff) | |
download | android_packages_apps_Camera2-30099ea6efee35f4665d500143d5a3e5a2a4d3b5.tar.gz android_packages_apps_Camera2-30099ea6efee35f4665d500143d5a3e5a2a4d3b5.tar.bz2 android_packages_apps_Camera2-30099ea6efee35f4665d500143d5a3e5a2a4d3b5.zip |
Merge "adding accessibilty strings to ui items" into gb-ub-photos-denali
-rw-r--r-- | res/layout/bottom_bar_contents.xml | 24 | ||||
-rw-r--r-- | res/values/arrays.xml | 50 | ||||
-rw-r--r-- | res/values/attrs.xml | 1 | ||||
-rw-r--r-- | res/values/strings.xml | 57 | ||||
-rw-r--r-- | src/com/android/camera/ButtonManager.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/MultiToggleImageButton.java | 31 | ||||
-rw-r--r-- | src/com/android/camera/ui/ModeListView.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/util/CameraUtil.java | 17 |
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 |