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> {