From 3fb6af5fe7b4b287fe381f53a7d3c5225fb75c44 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Wed, 20 Aug 2014 14:38:59 -0700 Subject: Add accessibility announcements for call state changes * Add new accessibility-related strings * Create and send accessibility events as necessary when a button's state changes Bug: 17147682 Bug: 17144849 Bug: 17161247 Change-Id: Ib1637993c644c4f159e850bdb9d54e0f00d3a68e --- InCallUI/res/values/strings.xml | 24 +++++++-- .../com/android/incallui/CallButtonFragment.java | 58 ++++++++++++++++++++-- 2 files changed, 76 insertions(+), 6 deletions(-) (limited to 'InCallUI') diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml index 964286aa0..fc2ee20c8 100644 --- a/InCallUI/res/values/strings.xml +++ b/InCallUI/res/values/strings.xml @@ -486,12 +486,30 @@ --> backspace - - Speakerphone enabled. + + Speakerphone selected - + + Earpiece selected + + + Wired headset selected + + + Bluetooth headset selected + + Call muted. + + Call unmuted. + + + Call put on hold. + + + Call removed from hold. + Answer diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java index 9b141dac1..09a3bc292 100644 --- a/InCallUI/src/com/android/incallui/CallButtonFragment.java +++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java @@ -16,9 +16,9 @@ package com.android.incallui; +import android.content.Context; import android.graphics.drawable.LayerDrawable; import android.os.Bundle; - import android.telecomm.AudioState; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; @@ -26,6 +26,8 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.PopupMenu; @@ -60,6 +62,8 @@ public class CallButtonFragment private View mManageConferenceButton; private View mGenericMergeButton; + private int mPrevAudioMode = 0; + // Constants for Drawable.setAlpha() private static final int HIDDEN = 0; private static final int VISIBLE = 255; @@ -224,7 +228,11 @@ public class CallButtonFragment @Override public void setMute(boolean value) { - mMuteButton.setSelected(value); + if (mMuteButton.isSelected() != value) { + mMuteButton.setSelected(value); + maybeSendAccessibilityEvent(mMuteButton, value ? R.string.accessibility_call_muted + : R.string.accessibility_call_unmuted); + } } @Override @@ -249,7 +257,12 @@ public class CallButtonFragment @Override public void setHold(boolean value) { - mHoldButton.setSelected(value); + if (mHoldButton.isSelected() != value) { + mHoldButton.setSelected(value); + maybeSendAccessibilityEvent(mHoldButton, + value ? R.string.accessibility_call_put_on_hold : + R.string.accessibility_call_removed_from_hold); + } } @Override @@ -372,6 +385,30 @@ public class CallButtonFragment public void setAudio(int mode) { updateAudioButtons(getPresenter().getSupportedAudio()); refreshAudioModePopup(); + + if (mPrevAudioMode != mode) { + if (mPrevAudioMode != 0) { + int stringId = 0; + switch (mode) { + case AudioState.ROUTE_EARPIECE: + stringId = R.string.accessibility_earpiece_selected; + break; + case AudioState.ROUTE_BLUETOOTH: + stringId = R.string.accessibility_bluetooth_headset_selected; + break; + case AudioState.ROUTE_WIRED_HEADSET: + stringId = R.string.accessibility_wired_headset_selected; + break; + case AudioState.ROUTE_SPEAKER: + stringId = R.string.accessibility_speakerphone_selected; + break; + } + if (stringId != 0) { + maybeSendAccessibilityEvent(mAudioButton, stringId); + } + } + mPrevAudioMode = mode; + } } @Override @@ -651,4 +688,19 @@ public class CallButtonFragment public void hideExtraRow() { mExtraRowButton.setVisibility(View.GONE); } + + private void maybeSendAccessibilityEvent(View view, int stringId) { + final Context context = getActivity(); + AccessibilityManager manager = + (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); + if (manager != null && manager.isEnabled()) { + AccessibilityEvent e = AccessibilityEvent.obtain(); + e.setSource(view); + e.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT); + e.setClassName(getClass().getName()); + e.setPackageName(context.getPackageName()); + e.getText().add(context.getResources().getString(stringId)); + manager.sendAccessibilityEvent(e); + } + } } -- cgit v1.2.3