Fix A11y tools focus on blocked component 2/2
- Add a callback to BottomActionBar, let the registrant receive BottomActionBar's state and disable the a11y param when expended
video: https://drive.google.com/file/d/1T1w1bnAoQYvgpdSa7eYsFPOspjWV4hEP/view?usp=sharing
Bug: 157871987
Test: manually
Change-Id: I59666dde616c86d176d10bee0d1081358bb18959
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index 566cbaa..84bc95b 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -59,6 +59,7 @@
import com.android.wallpaper.util.SizeCalculator;
import com.android.wallpaper.util.WallpaperCropUtils;
import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
import com.android.wallpaper.widget.LockScreenOverlayUpdater;
import com.android.wallpaper.widget.WallpaperColorsLoader;
import com.android.wallpaper.widget.WallpaperInfoView;
@@ -244,6 +245,22 @@
);
mBottomActionBar.setActionSelectedListener(EDIT, this::setEditingEnabled);
mBottomActionBar.setActionClickListener(APPLY, this::onSetWallpaperClicked);
+
+ // Update target view's accessibility param since it will be blocked by the bottom sheet
+ // when expanded.
+ mBottomActionBar.setAccessibilityCallback(new AccessibilityCallback() {
+ @Override
+ public void onBottomSheetCollapsed() {
+ mTabs.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ }
+
+ @Override
+ public void onBottomSheetExpanded() {
+ mTabs.setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+ }
+ });
+
// Will trigger onActionSelected callback to update the editing state.
mBottomActionBar.setDefaultSelectedButton(EDIT);
mBottomActionBar.show();
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index 140ae89..b12aeb4 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -71,6 +71,7 @@
import com.android.wallpaper.util.SizeCalculator;
import com.android.wallpaper.util.WallpaperConnection;
import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
import com.android.wallpaper.widget.LiveTileOverlay;
import com.android.wallpaper.widget.LockScreenOverlayUpdater;
import com.android.wallpaper.widget.WallpaperColorsLoader;
@@ -407,6 +408,21 @@
mWallpaperInfoView = (WallpaperInfoView) LayoutInflater.from(getContext())
.inflate(R.layout.wallpaper_info_view, /* root= */ null);
mBottomActionBar.attachViewToBottomSheetAndBindAction(mWallpaperInfoView, INFORMATION);
+
+ // Update target view's accessibility param since it will be blocked by the bottom sheet
+ // when expanded.
+ mBottomActionBar.setAccessibilityCallback(new AccessibilityCallback() {
+ @Override
+ public void onBottomSheetCollapsed() {
+ mTab.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ }
+
+ @Override
+ public void onBottomSheetExpanded() {
+ mTab.setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+ }
+ });
final Uri uriSettingsSlice = getSettingsSliceUri(mWallpaper.getWallpaperComponent());
if (uriSettingsSlice != null) {
View previewPage = LayoutInflater.from(getContext())
diff --git a/src/com/android/wallpaper/widget/BottomActionBar.java b/src/com/android/wallpaper/widget/BottomActionBar.java
index 805a784..9b8fc73 100644
--- a/src/com/android/wallpaper/widget/BottomActionBar.java
+++ b/src/com/android/wallpaper/widget/BottomActionBar.java
@@ -76,6 +76,22 @@
void onActionSelected(boolean selected);
}
+ /**
+ * A Callback to notify the registrant to change it's accessibility param when
+ * {@link BottomActionBar} state changes.
+ */
+ public interface AccessibilityCallback {
+ /**
+ * Called when {@link BottomActionBar} collapsed.
+ */
+ void onBottomSheetCollapsed();
+
+ /**
+ * Called when {@link BottomActionBar} expanded.
+ */
+ void onBottomSheetExpanded();
+ }
+
// TODO(b/154299462): Separate downloadable related actions from WallpaperPicker.
/** The action items in the bottom action bar. */
public enum BottomAction {
@@ -93,6 +109,7 @@
// The current selected action in the BottomActionBar, can be null when no action is selected.
@Nullable private BottomAction mSelectedAction;
+ @Nullable private AccessibilityCallback mAccessibilityCallback;
public BottomActionBar(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -129,6 +146,8 @@
return;
}
+ notifyAccessibilityCallback(newState);
+
// Enable all buttons when queue is not processing.
enableActions();
if (!isExpandable(mSelectedAction)) {
@@ -278,6 +297,15 @@
}
/**
+ * Sets a AccessibilityCallback.
+ *
+ * @param accessibilityCallback the callback to be notified.
+ */
+ public void setAccessibilityCallback(@Nullable AccessibilityCallback accessibilityCallback) {
+ mAccessibilityCallback = accessibilityCallback;
+ }
+
+ /**
* Shows the specific actions.
*
* @param actions the specific actions
@@ -445,6 +473,18 @@
return action != null && mContentViewMap.containsKey(action);
}
+ private void notifyAccessibilityCallback(int state) {
+ if (mAccessibilityCallback != null) {
+ return;
+ }
+
+ if (state == STATE_COLLAPSED) {
+ mAccessibilityCallback.onBottomSheetCollapsed();
+ } else if (state == STATE_EXPANDED) {
+ mAccessibilityCallback.onBottomSheetExpanded();
+ }
+ }
+
/** A {@link BottomSheetBehavior} that can process a queue of bottom sheet states.*/
public static class QueueStateBottomSheetBehavior<V extends View>
extends BottomSheetBehavior<V> {