summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-06-29 23:39:20 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-29 23:39:20 +0000
commit8852a4f4a401d3592c64b1ea6a36f3f870465543 (patch)
treed5138d7cc44a3569dbe193af5ca6757712689887
parent2f5652047649b04e1068719ccc0de567566cb7c0 (diff)
parentea23b32e942eb13fabb404a35a1bf7d797ec2d33 (diff)
am 73728797: Merge "Correctly handle accessibility for incoming/outgoing calls" into mnc-dev
* commit '737287977018acf1744a620056cf54b486037199': Correctly handle accessibility for incoming/outgoing calls
-rw-r--r--InCallUI/src/com/android/incallui/CallCardFragment.java35
-rw-r--r--InCallUI/src/com/android/incallui/CallCardPresenter.java21
2 files changed, 46 insertions, 10 deletions
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 02a1802cf..d58310cfc 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -42,6 +42,7 @@ import android.view.ViewPropertyAnimator;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageButton;
@@ -92,6 +93,13 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
* resetting to its previous value.
*/
private static final long CALL_STATE_LABEL_RESET_DELAY_MS = 3000;
+ /**
+ * Amount of time to wait before sending an announcement via the accessibility manager.
+ * When the call state changes to an outgoing or incoming state for the first time, the
+ * UI can often be changing due to call updates or contact lookup. This allows the UI
+ * to settle to a stable state to ensure that the correct information is announced.
+ */
+ private static final long ACCESSIBILITY_ANNOUNCEMENT_DELAY_MS = 500;
private AnimatorSet mAnimatorSet;
private int mShrinkAnimationDuration;
@@ -604,15 +612,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
} else {
mCallStateVideoCallIcon.setVisibility(View.GONE);
}
-
- if (state == Call.State.INCOMING) {
- if (callStateLabel != null) {
- getView().announceForAccessibility(callStateLabel.getCallStateLabel());
- }
- if (mPrimaryName.getText() != null) {
- getView().announceForAccessibility(mPrimaryName.getText());
- }
- }
}
private void setCallStateLabel(CallStateLabel callStateLabel) {
@@ -861,9 +860,10 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
}
public void dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
+ if (event.getEventType() == AccessibilityEvent.TYPE_ANNOUNCEMENT) {
dispatchPopulateAccessibilityEvent(event, mCallStateLabel);
dispatchPopulateAccessibilityEvent(event, mPrimaryName);
+ dispatchPopulateAccessibilityEvent(event, mCallTypeLabel);
dispatchPopulateAccessibilityEvent(event, mPhoneNumber);
return;
}
@@ -878,6 +878,21 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
}
@Override
+ public void sendAccessibilityAnnouncement() {
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if (getView() != null && getView().getParent() != null) {
+ AccessibilityEvent event = AccessibilityEvent.obtain(
+ AccessibilityEvent.TYPE_ANNOUNCEMENT);
+ dispatchPopulateAccessibilityEvent(event);
+ getView().getParent().requestSendAccessibilityEvent(getView(), event);
+ }
+ }
+ }, ACCESSIBILITY_ANNOUNCEMENT_DELAY_MS);
+ }
+
+ @Override
public void setEndCallButtonEnabled(boolean enabled, boolean animate) {
if (enabled != mFloatingActionButton.isEnabled()) {
if (animate) {
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index cef0cd5c3..3f9c567d6 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -35,6 +35,7 @@ import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
+import android.view.accessibility.AccessibilityManager;
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
@@ -279,6 +280,8 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
// Hide the end call button instantly if we're receiving an incoming call.
getUi().setEndCallButtonEnabled(shouldShowEndCallButton(mPrimary, callState),
callState != Call.State.INCOMING /* animate */);
+
+ maybeSendAccessibilityEvent(oldState, newState);
}
@Override
@@ -828,6 +831,23 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
return true;
}
+ private void maybeSendAccessibilityEvent(InCallState oldState, InCallState newState) {
+ if (mContext == null) {
+ return;
+ }
+ final AccessibilityManager am = (AccessibilityManager) mContext.getSystemService(
+ Context.ACCESSIBILITY_SERVICE);
+ if (!am.isEnabled()) {
+ return;
+ }
+ if ((oldState != InCallState.OUTGOING && newState == InCallState.OUTGOING)
+ || (oldState != InCallState.INCOMING && newState == InCallState.INCOMING)) {
+ if (getUi() != null) {
+ getUi().sendAccessibilityAnnouncement();
+ }
+ }
+ }
+
public interface CallCardUi extends Ui {
void setVisible(boolean on);
void setCallCardVisible(boolean visible);
@@ -851,5 +871,6 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
void showManageConferenceCallButton(boolean visible);
boolean isManageConferenceVisible();
void animateForNewOutgoingCall();
+ void sendAccessibilityAnnouncement();
}
}