Merge "[16/n] Letterbox Education: focus on the dialog title for accessibility." into tm-dev am: 2e12d3499c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17084163

Change-Id: Ib4c85270692c49596090ae612bafbff4e9420f7f
This commit is contained in:
Tom Natan
2022-03-07 15:45:30 +00:00
committed by Automerger Merge Worker
4 changed files with 22 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
@@ -38,6 +39,7 @@ class LetterboxEduDialogLayout extends ConstraintLayout {
// 204 is simply 255 * 0.8. // 204 is simply 255 * 0.8.
static final int BACKGROUND_DIM_ALPHA = 204; static final int BACKGROUND_DIM_ALPHA = 204;
private View mDialogContainer; private View mDialogContainer;
private TextView mDialogTitle;
private Drawable mBackgroundDim; private Drawable mBackgroundDim;
public LetterboxEduDialogLayout(Context context) { public LetterboxEduDialogLayout(Context context) {
@@ -61,6 +63,10 @@ class LetterboxEduDialogLayout extends ConstraintLayout {
return mDialogContainer; return mDialogContainer;
} }
TextView getDialogTitle() {
return mDialogTitle;
}
Drawable getBackgroundDim() { Drawable getBackgroundDim() {
return mBackgroundDim; return mBackgroundDim;
} }
@@ -84,6 +90,7 @@ class LetterboxEduDialogLayout extends ConstraintLayout {
protected void onFinishInflate() { protected void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
mDialogContainer = findViewById(R.id.letterbox_education_dialog_container); mDialogContainer = findViewById(R.id.letterbox_education_dialog_container);
mDialogTitle = findViewById(R.id.letterbox_education_dialog_title);
mBackgroundDim = getBackground().mutate(); mBackgroundDim = getBackground().mutate();
// Set the alpha of the background dim to 0 for enter animation. // Set the alpha of the background dim to 0 for enter animation.
mBackgroundDim.setAlpha(0); mBackgroundDim.setAlpha(0);

View File

@@ -28,6 +28,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewGroup.MarginLayoutParams;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.wm.shell.R; import com.android.wm.shell.R;
@@ -132,7 +133,7 @@ public class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract {
updateDialogMargins(); updateDialogMargins();
mAnimationController.startEnterAnimation(mLayout, /* endCallback= */ mAnimationController.startEnterAnimation(mLayout, /* endCallback= */
this::setDismissOnClickListener); this::onDialogEnterAnimationEnded);
return mLayout; return mLayout;
} }
@@ -157,11 +158,13 @@ public class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract {
R.layout.letterbox_education_dialog_layout, null); R.layout.letterbox_education_dialog_layout, null);
} }
private void setDismissOnClickListener() { private void onDialogEnterAnimationEnded() {
if (mLayout == null) { if (mLayout == null) {
return; return;
} }
mLayout.setDismissOnClickListener(this::onDismiss); mLayout.setDismissOnClickListener(this::onDismiss);
// Focus on the dialog title for accessibility.
mLayout.getDialogTitle().sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
} }
private void onDismiss() { private void onDismiss() {

View File

@@ -70,6 +70,8 @@ public class LetterboxEduDialogLayoutTest extends ShellTestCase {
public void testOnFinishInflate() { public void testOnFinishInflate() {
assertEquals(mLayout.getDialogContainer(), assertEquals(mLayout.getDialogContainer(),
mLayout.findViewById(R.id.letterbox_education_dialog_container)); mLayout.findViewById(R.id.letterbox_education_dialog_container));
assertEquals(mLayout.getDialogTitle(),
mLayout.findViewById(R.id.letterbox_education_dialog_title));
assertEquals(mLayout.getBackgroundDim(), mLayout.getBackground()); assertEquals(mLayout.getBackgroundDim(), mLayout.getBackground());
assertEquals(mLayout.getBackground().getAlpha(), 0); assertEquals(mLayout.getBackground().getAlpha(), 0);
} }

View File

@@ -41,9 +41,11 @@ import android.testing.AndroidTestingRunner;
import android.view.DisplayCutout; import android.view.DisplayCutout;
import android.view.DisplayInfo; import android.view.DisplayInfo;
import android.view.SurfaceControlViewHost; import android.view.SurfaceControlViewHost;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewGroup.MarginLayoutParams;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -173,13 +175,19 @@ public class LetterboxEduWindowManagerTest extends ShellTestCase {
verifyLayout(layout, mWindowAttrsCaptor.getValue(), /* expectedWidth= */ TASK_WIDTH, verifyLayout(layout, mWindowAttrsCaptor.getValue(), /* expectedWidth= */ TASK_WIDTH,
/* expectedHeight= */ TASK_HEIGHT, /* expectedExtraTopMargin= */ DISPLAY_CUTOUT_TOP, /* expectedHeight= */ TASK_HEIGHT, /* expectedExtraTopMargin= */ DISPLAY_CUTOUT_TOP,
/* expectedExtraBottomMargin= */ DISPLAY_CUTOUT_BOTTOM); /* expectedExtraBottomMargin= */ DISPLAY_CUTOUT_BOTTOM);
View dialogTitle = layout.getDialogTitle();
assertNotNull(dialogTitle);
spyOn(dialogTitle);
// Clicking the layout does nothing until enter animation is done. // Clicking the layout does nothing until enter animation is done.
layout.performClick(); layout.performClick();
verify(mAnimationController, never()).startExitAnimation(any(), any()); verify(mAnimationController, never()).startExitAnimation(any(), any());
// The dialog title shouldn't be focused for Accessibility until enter animation is done.
verify(dialogTitle, never()).sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
verifyAndFinishEnterAnimation(layout); verifyAndFinishEnterAnimation(layout);
verify(dialogTitle).sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
// Exit animation should start following a click on the layout. // Exit animation should start following a click on the layout.
layout.performClick(); layout.performClick();