summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Lee <anwlee@google.com>2015-01-05 16:50:47 -0800
committerAndrew Lee <anwlee@google.com>2015-01-07 15:56:48 -0800
commit9ad88c9f1417d5b0dcfa270e916692f11aecc0b5 (patch)
treeb1fb82cb938df2c6b64690b7a11c278144734e45
parentfd392f4371bb4f4aece81e14336f062dc326a38d (diff)
Read enabled/disabled state for InCall buttons.
+ Add CallToggleButton which ignores the content description so that we can substitue our own strings to be read by Talkback when the user clicks on buttons. + Convert ImageButtons with two states into ToggleButtons, so that when focused Talkback automatically reads out their states. For example, now it will read "Mute switch is (not) checked". This required updating some casts and references in the fragment. + Set baselineAligned property for call buttons to false. Because ToggleButtons could have text, it was attempting to align by text baselines which messed with the layout. - Remove a compound button listener which is not used. Bug: 18783204 Change-Id: I0b23f5f63a2bf7c34a34077a75a23ea92dc45bbc
-rw-r--r--InCallUI/res/layout/call_button_fragment.xml13
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonFragment.java37
-rw-r--r--InCallUI/src/com/android/incallui/CallToggleButton.java54
3 files changed, 77 insertions, 27 deletions
diff --git a/InCallUI/res/layout/call_button_fragment.xml b/InCallUI/res/layout/call_button_fragment.xml
index 56d65b07f..2ca640368 100644
--- a/InCallUI/res/layout/call_button_fragment.xml
+++ b/InCallUI/res/layout/call_button_fragment.xml
@@ -47,7 +47,8 @@
android:layout_height="wrap_content"
android:paddingStart="@dimen/button_cluster_horizontal_padding"
android:paddingEnd="@dimen/button_cluster_horizontal_padding"
- android:gravity="bottom|center_horizontal">
+ android:gravity="bottom|center_horizontal"
+ android:baselineAligned="false">
<!-- This row only ever shows either 4 or 5 buttons. This may depend on whether the device
supports "Hold" (i.e. 4 buttons on CDMA devices, 5 buttons on GSM devices.) or whether
@@ -81,7 +82,7 @@
<!-- MIDDLE LEFT SLOT ================================================================== -->
<!-- "Mute" -->
- <ImageButton android:id="@+id/muteButton"
+ <com.android.incallui.CallToggleButton android:id="@+id/muteButton"
style="@style/InCallCompoundButton"
android:background="@drawable/btn_compound_mute"
android:contentDescription="@string/onscreenMuteText" />
@@ -89,7 +90,7 @@
<!-- CENTER SLOT ======================================================================= -->
<!-- "Dialpad" -->
- <ImageButton android:id="@+id/dialpadButton"
+ <com.android.incallui.CallToggleButton android:id="@+id/dialpadButton"
style="@style/InCallCompoundButton"
android:background="@drawable/btn_compound_dialpad"
android:contentDescription="@string/onscreenShowDialpadText" />
@@ -100,7 +101,7 @@
other of these must always be set to GONE. -->
<!-- "Hold" -->
- <ImageButton android:id="@+id/holdButton"
+ <com.android.incallui.CallToggleButton android:id="@+id/holdButton"
style="@style/InCallCompoundButton"
android:background="@drawable/btn_compound_hold"
android:contentDescription="@string/onscreenHoldText" />
@@ -120,7 +121,7 @@
android:visibility="gone" />
<!-- "Switch camera" for video calls. -->
- <ImageButton android:id="@+id/switchCameraButton"
+ <com.android.incallui.CallToggleButton android:id="@+id/switchCameraButton"
style="@style/InCallCompoundButton"
android:background="@drawable/btn_compound_video_switch"
android:contentDescription="@string/onscreenSwitchCameraText"
@@ -148,7 +149,7 @@
android:visibility="gone" />
<!-- "Switch camera" for video calls. -->
- <ImageButton android:id="@+id/pauseVideoButton"
+ <com.android.incallui.CallToggleButton android:id="@+id/pauseVideoButton"
style="@style/InCallCompoundButton"
android:background="@drawable/btn_compound_video_off"
android:contentDescription="@string/onscreenPauseVideoText"
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index 5c67862fc..bb23a8816 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -50,18 +50,18 @@ import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
public class CallButtonFragment
extends BaseFragment<CallButtonPresenter, CallButtonPresenter.CallButtonUi>
implements CallButtonPresenter.CallButtonUi, OnMenuItemClickListener, OnDismissListener,
- View.OnClickListener, CompoundButton.OnCheckedChangeListener {
+ View.OnClickListener {
private ImageButton mAudioButton;
private ImageButton mChangeToVoiceButton;
- private ImageButton mMuteButton;
- private ImageButton mShowDialpadButton;
- private ImageButton mHoldButton;
+ private CompoundButton mMuteButton;
+ private CompoundButton mShowDialpadButton;
+ private CompoundButton mHoldButton;
private ImageButton mSwapButton;
private ImageButton mChangeToVideoButton;
- private ImageButton mSwitchCameraButton;
+ private CompoundButton mSwitchCameraButton;
private ImageButton mAddCallButton;
private ImageButton mMergeButton;
- private ImageButton mPauseVideoButton;
+ private CompoundButton mPauseVideoButton;
private ImageButton mOverflowButton;
private PopupMenu mAudioModePopup;
@@ -102,23 +102,23 @@ public class CallButtonFragment
mAudioButton.setOnClickListener(this);
mChangeToVoiceButton = (ImageButton) parent.findViewById(R.id.changeToVoiceButton);
mChangeToVoiceButton. setOnClickListener(this);
- mMuteButton = (ImageButton) parent.findViewById(R.id.muteButton);
+ mMuteButton = (CompoundButton) parent.findViewById(R.id.muteButton);
mMuteButton.setOnClickListener(this);
- mShowDialpadButton = (ImageButton) parent.findViewById(R.id.dialpadButton);
+ mShowDialpadButton = (CompoundButton) parent.findViewById(R.id.dialpadButton);
mShowDialpadButton.setOnClickListener(this);
- mHoldButton = (ImageButton) parent.findViewById(R.id.holdButton);
+ mHoldButton = (CompoundButton) parent.findViewById(R.id.holdButton);
mHoldButton.setOnClickListener(this);
mSwapButton = (ImageButton) parent.findViewById(R.id.swapButton);
mSwapButton.setOnClickListener(this);
mChangeToVideoButton = (ImageButton) parent.findViewById(R.id.changeToVideoButton);
mChangeToVideoButton.setOnClickListener(this);
- mSwitchCameraButton = (ImageButton) parent.findViewById(R.id.switchCameraButton);
+ mSwitchCameraButton = (CompoundButton) parent.findViewById(R.id.switchCameraButton);
mSwitchCameraButton.setOnClickListener(this);
mAddCallButton = (ImageButton) parent.findViewById(R.id.addButton);
mAddCallButton.setOnClickListener(this);
mMergeButton = (ImageButton) parent.findViewById(R.id.mergeButton);
mMergeButton.setOnClickListener(this);
- mPauseVideoButton = (ImageButton) parent.findViewById(R.id.pauseVideoButton);
+ mPauseVideoButton = (CompoundButton) parent.findViewById(R.id.pauseVideoButton);
mPauseVideoButton.setOnClickListener(this);
mOverflowButton = (ImageButton) parent.findViewById(R.id.overflowButton);
mOverflowButton.setOnClickListener(this);
@@ -145,10 +145,6 @@ public class CallButtonFragment
}
@Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- }
-
- @Override
public void onClick(View view) {
int id = view.getId();
Log.d(this, "onClick(View " + view + ", id " + id + ")...");
@@ -165,8 +161,7 @@ public class CallButtonFragment
getPresenter().changeToVoiceClicked();
break;
case R.id.muteButton: {
- final ImageButton button = (ImageButton) view;
- getPresenter().muteClicked(!button.isSelected());
+ getPresenter().muteClicked(!mMuteButton.isSelected());
break;
}
case R.id.mergeButton:
@@ -174,8 +169,7 @@ public class CallButtonFragment
mMergeButton.setEnabled(false);
break;
case R.id.holdButton: {
- final ImageButton button = (ImageButton) view;
- getPresenter().holdClicked(!button.isSelected());
+ getPresenter().holdClicked(!mHoldButton.isSelected());
break;
}
case R.id.swapButton:
@@ -219,7 +213,7 @@ public class CallButtonFragment
}
Resources res = getActivity().getResources();
- ImageButton[] compoundButtons = {
+ View[] compoundButtons = {
mAudioButton,
mMuteButton,
mShowDialpadButton,
@@ -228,7 +222,7 @@ public class CallButtonFragment
mPauseVideoButton
};
- for (ImageButton button : compoundButtons) {
+ for (View button : compoundButtons) {
final LayerDrawable layers = (LayerDrawable) button.getBackground();
final RippleDrawable btnCompoundDrawable = compoundBackgroundDrawable(themeColors);
layers.setDrawableByLayerId(R.id.compoundBackgroundItem, btnCompoundDrawable);
@@ -770,6 +764,7 @@ public class CallButtonFragment
mShowDialpadButton.setSelected(value);
if (getActivity() != null && getActivity() instanceof InCallActivity) {
((InCallActivity) getActivity()).displayDialpad(value, animate);
+ maybeSendAccessibilityEvent(mShowDialpadButton, R.string.onscreenShowDialpadText);
}
}
diff --git a/InCallUI/src/com/android/incallui/CallToggleButton.java b/InCallUI/src/com/android/incallui/CallToggleButton.java
new file mode 100644
index 000000000..72c1d593f
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/CallToggleButton.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.incallui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.widget.ToggleButton;
+
+public class CallToggleButton extends ToggleButton {
+ private static final String EMPTY_STRING = "";
+
+ public CallToggleButton(Context context) {
+ this(context, null);
+ }
+
+ public CallToggleButton(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public CallToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public CallToggleButton(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ /**
+ * Ignore the content description so it is not read by Talkback. When clicked, we expect
+ * {@link CallButtonFragment#maybeSendAccessibilityEvent} to dispatch an accessibility event
+ * with the text for Talkback to read.
+ */
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setContentDescription(EMPTY_STRING);
+ }
+}