leanback: add missing navigation sound when falling to smooth scroll

Test: build leanback-demos and tested on device

Change-Id: Ic5287ded119193b14fcb246af10cf0d6ee49f6a6
diff --git a/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java b/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
index ca7116d..f31e65c 100644
--- a/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
+++ b/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
@@ -25,6 +25,7 @@
 import android.content.Context;
 import android.graphics.PointF;
 import android.graphics.Rect;
+import android.media.AudioManager;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Parcel;
@@ -461,6 +462,8 @@
     final SparseIntArray mPositionToRowInPostLayout = new SparseIntArray();
     int[] mDisappearingPositions;
 
+    AudioManager mAudioManager;
+
     RecyclerView.Recycler mRecycler;
 
     private static final Rect sTempRect = new Rect();
@@ -1238,6 +1241,14 @@
         return p.getOpticalTop(v) + p.getAlignY();
     }
 
+    AudioManager getAudioManager() {
+        if (mAudioManager == null) {
+            mAudioManager = (AudioManager) mBaseGridView.getContext()
+                .getSystemService(Context.AUDIO_SERVICE);
+        }
+        return mAudioManager;
+    }
+
     /**
      * Save Recycler and State for convenience.  Must be paired with leaveContext().
      */
@@ -2861,6 +2872,21 @@
                 mPendingMoveSmoothScroller.decreasePendingMoves();
             }
         }
+        int soundEffect;
+        if (mOrientation == HORIZONTAL) {
+            boolean rtl = getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+            if (rtl) {
+                soundEffect = forward ? AudioManager.FX_FOCUS_NAVIGATION_LEFT :
+                        AudioManager.FX_FOCUS_NAVIGATION_RIGHT;
+            } else {
+                soundEffect = forward ? AudioManager.FX_FOCUS_NAVIGATION_RIGHT :
+                        AudioManager.FX_FOCUS_NAVIGATION_LEFT;
+            }
+        } else {
+            soundEffect = forward ? AudioManager.FX_FOCUS_NAVIGATION_DOWN :
+                    AudioManager.FX_FOCUS_NAVIGATION_UP;
+        }
+        getAudioManager().playSoundEffect(soundEffect);
     }
 
     @Override