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:
@@ -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);
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user