Commit fb353304 authored by Leo Zhang's avatar Leo Zhang Committed by Commit Bot

Fix translate infobar accessibility message.

Added "Translate" to the general accessibility message and refactored
getAccessibilityMessage param from TextView to CharSequence.

Tested "out/Default/bin/run_chrome_public_test_apk -vv -f InfoBarTest*"
and Passed all tests.

Bug: 723115
Change-Id: I1b2b973cea35bdda984cb885b13642393e247245
Reviewed-on: https://chromium-review.googlesource.com/665900Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Commit-Queue: Leo Zhang <googleo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506615}
parent 6e1ee267
......@@ -133,23 +133,26 @@ public abstract class InfoBar implements InfoBarView {
}
/**
* Returns the accessibility message from the view to announce when this infobar is first shown.
* Returns the accessibility message to announce when this infobar is first shown.
*/
protected CharSequence getAccessibilityMessage(TextView messageView) {
return messageView.getText();
protected CharSequence getAccessibilityMessage(CharSequence defaultTitle) {
return defaultTitle == null ? "" : defaultTitle;
}
@Override
public CharSequence getAccessibilityText() {
if (mView == null) return "";
// Compact layout doesn't have a proper view to provide meaningful message, so we return a
// general message to let users know there is a bar on the bottom.
// TODO(googleo): Fetch the accessibility message from the compact layout.
if (usesCompactLayout()) return mContext.getString(R.string.bottom_bar_screen_position);
TextView messageView = (TextView) mView.findViewById(R.id.infobar_message);
if (messageView == null) return "";
return getAccessibilityMessage(messageView)
+ mContext.getString(R.string.bottom_bar_screen_position);
CharSequence title = null;
if (usesCompactLayout()) {
title = getAccessibilityMessage(title);
} else {
// For normal infobar, make an announcement only when a proper TextView is assigned.
TextView messageView = (TextView) mView.findViewById(R.id.infobar_message);
if (messageView == null) return "";
title = getAccessibilityMessage(messageView.getText());
}
return title + mContext.getString(R.string.bottom_bar_screen_position);
}
@Override
......
......@@ -4,8 +4,6 @@
package org.chromium.chrome.browser.infobar;
import android.widget.TextView;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ResourceId;
......@@ -31,7 +29,7 @@ public class PreviewsInfoBar extends ConfirmInfoBar {
}
@Override
protected CharSequence getAccessibilityMessage(TextView messageView) {
protected CharSequence getAccessibilityMessage(CharSequence defaultMessage) {
return getContext().getString(R.string.previews_infobar_accessibility_title);
}
......
......@@ -466,6 +466,11 @@ public class TranslateCompactInfoBar extends InfoBar
dismissMenusAndSnackbars();
}
@Override
protected CharSequence getAccessibilityMessage(CharSequence defaultMessage) {
return getContext().getString(R.string.translate_button);
}
/**
* Returns true if overflow menu is showing. This is only used for automation testing.
*/
......
......@@ -74,11 +74,11 @@ public class InfoBarTest {
private EmbeddedTestServer mTestServer;
private InfoBarTestAnimationListener mListener;
private static class TestInfoBar extends ConfirmInfoBar {
private static class TestInfoBar extends InfoBar {
private boolean mCompact;
private TestInfoBar(String message) {
super(0, null, message, null, null, null);
super(0, null, message);
}
@Override
......@@ -91,6 +91,23 @@ public class InfoBarTest {
}
}
private static class TestInfoBarWithAccessibilityMessage extends TestInfoBar {
private CharSequence mAccessibilityMessage;
private TestInfoBarWithAccessibilityMessage(String message) {
super(message);
}
public void setAccessibilityMessage(CharSequence accessibilityMessage) {
mAccessibilityMessage = accessibilityMessage;
}
@Override
protected CharSequence getAccessibilityMessage(CharSequence defaultMessage) {
return mAccessibilityMessage;
}
}
private void waitUntilDataReductionPromoInfoBarAppears() {
CriteriaHelper.pollUiThread(new Criteria() {
@Override
......@@ -158,9 +175,9 @@ public class InfoBarTest {
TestInfoBar infoBarCompact = new TestInfoBar(null);
infoBarCompact.setContext(ContextUtils.getApplicationContext());
infoBarCompact.setUsesCompactLayout(true);
Assert.assertEquals("Infobar shouldn't have accessibility message before createView()", "",
infoBarCompact.getAccessibilityText());
infoBarCompact.setUsesCompactLayout(true);
infoBarCompact.createView();
Assert.assertEquals("Infobar should have accessibility message after createView()",
ContextUtils.getApplicationContext().getString(R.string.bottom_bar_screen_position),
......@@ -179,6 +196,47 @@ public class InfoBarTest {
infoBarWithMessage.getAccessibilityText());
}
/**
* Verify getAccessibilityMessage() for infobar with customized accessibility message.
*/
@Test
@MediumTest
@Feature({"Browser", "Main"})
public void testInfobarGetCustomizedAccessibilityMessage() {
String messsage = "Hello world";
String customizedAccessibilityMessage = "Customized";
TestInfoBarWithAccessibilityMessage infoBarWithAccessibilityMessage =
new TestInfoBarWithAccessibilityMessage(messsage);
infoBarWithAccessibilityMessage.setContext(ContextUtils.getApplicationContext());
infoBarWithAccessibilityMessage.setAccessibilityMessage(customizedAccessibilityMessage);
Assert.assertEquals("Infobar shouldn't have accessibility message before createView()", "",
infoBarWithAccessibilityMessage.getAccessibilityText());
infoBarWithAccessibilityMessage.createView();
Assert.assertEquals(
"Infobar should have customized accessibility message after createView()",
customizedAccessibilityMessage
+ ContextUtils.getApplicationContext().getString(
R.string.bottom_bar_screen_position),
infoBarWithAccessibilityMessage.getAccessibilityText());
TestInfoBarWithAccessibilityMessage infoBarCompcatWithAccessibilityMessage =
new TestInfoBarWithAccessibilityMessage(messsage);
infoBarCompcatWithAccessibilityMessage.setContext(ContextUtils.getApplicationContext());
infoBarCompcatWithAccessibilityMessage.setUsesCompactLayout(true);
infoBarCompcatWithAccessibilityMessage.setAccessibilityMessage(
customizedAccessibilityMessage);
Assert.assertEquals("Infobar shouldn't have accessibility message before createView()", "",
infoBarCompcatWithAccessibilityMessage.getAccessibilityText());
infoBarCompcatWithAccessibilityMessage.createView();
Assert.assertEquals(
"Infobar should have customized accessibility message after createView()",
customizedAccessibilityMessage
+ ContextUtils.getApplicationContext().getString(
R.string.bottom_bar_screen_position),
infoBarCompcatWithAccessibilityMessage.getAccessibilityText());
}
/**
* Verify PopUp InfoBar.
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment