Merge "Fix TB can't visited all items in category list" into ub-launcher3-master
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index 9abeecf..182cb17 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -413,6 +413,18 @@
     }
 
     @Override
+    public void expandBottomSheet() {
+        if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
+            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
+        }
+    }
+
+    @Override
+    public int getBottomSheetState() {
+        return mBottomSheetBehavior.getState();
+    }
+
+    @Override
     public void updateThumbnail(WallpaperInfo wallpaperInfo) {
         new android.os.Handler().post(() -> {
             // A config change may have destroyed the activity since the refresh started, so check
diff --git a/src/com/android/wallpaper/picker/CategorySelectorFragment.java b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
index 92ee944..ff0855d 100644
--- a/src/com/android/wallpaper/picker/CategorySelectorFragment.java
+++ b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
@@ -28,6 +28,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
 import android.widget.TextView;
@@ -39,6 +40,7 @@
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
 
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
@@ -49,6 +51,7 @@
 import com.android.wallpaper.util.SizeCalculator;
 
 import com.bumptech.glide.Glide;
+import com.google.android.material.bottomsheet.BottomSheetBehavior;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -86,6 +89,16 @@
          * Sets the title in the toolbar.
          */
         void setToolbarTitle(CharSequence title);
+
+        /**
+         * Expand the bottom sheet if it's not expanded.
+         */
+        void expandBottomSheet();
+
+        /**
+         * Get bottom sheet current state.
+         */
+        int getBottomSheetState();
     }
 
     private RecyclerView mImageGrid;
@@ -104,7 +117,6 @@
                              @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment_category_selector, container,
                 /* attachToRoot= */ false);
-
         mImageGrid = view.findViewById(R.id.category_grid);
         mImageGrid.addItemDecoration(new GridPaddingDecoration(
                 getResources().getDimensionPixelSize(R.dimen.grid_padding)));
@@ -120,6 +132,8 @@
                     windowInsets.getSystemWindowInsetBottom());
             return windowInsets;
         });
+        mImageGrid.setAccessibilityDelegateCompat(
+                new CategoryRecyclerViewAccessibilityDelegate(mImageGrid));
         getCategorySelectorFragmentHost().setToolbarTitle(getText(R.string.wallpaper_title));
 
         return view;
@@ -451,4 +465,29 @@
             return 1;
         }
     }
+
+    private class CategoryRecyclerViewAccessibilityDelegate
+            extends RecyclerViewAccessibilityDelegate {
+
+        CategoryRecyclerViewAccessibilityDelegate(@NonNull RecyclerView recyclerView) {
+            super(recyclerView);
+        }
+
+        @Override
+        public boolean onRequestSendAccessibilityEvent(
+                ViewGroup host, View child, AccessibilityEvent event) {
+            int itemPos;
+            if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
+                itemPos = mImageGrid.getChildLayoutPosition(child);
+
+                // Expand the bottom sheet when TB travel to second column.
+                if (getCategorySelectorFragmentHost() != null
+                        && (getCategorySelectorFragmentHost()).getBottomSheetState()
+                        != BottomSheetBehavior.STATE_EXPANDED && itemPos >= getNumColumns()) {
+                    (getCategorySelectorFragmentHost()).expandBottomSheet();
+                }
+            }
+            return super.onRequestSendAccessibilityEvent(host, child, event);
+        }
+    }
 }