private void scrollInternal(
      float distanceY,
      float distanceYconsumed,
      int[] offsetInWindow,
      boolean argNotifyAboutScrolling) {
    Log.v(TAG, "scrollInternal called");

    if (mTopPlayer == null) {
      mTopPlayer = (TopPlayer) findViewById(R.id.top_player);
    }

    if (mRecyclerView == null) {
      mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    }

    int[] consumed = new int[2];
    consumed[1] = (int) distanceYconsumed;

    if (argNotifyAboutScrolling) startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);

    // int[] offsetInWindow = new int[2];
    if (argNotifyAboutScrolling)
      dispatchNestedPreScroll(0, (int) distanceY, consumed, offsetInWindow);

    int consumedY = consumed[1];
    int unconsumedY =
        (int) (distanceY); // int unconsumedY = (int)(distanceY-consumedY-offsetInWindow[1]);

    if (argNotifyAboutScrolling) dispatchNestedScroll(0, consumedY, 0, unconsumedY, offsetInWindow);

    if (mTopPlayer == null || mRecyclerView == null || mTopPlayer.isFullscreen()) {
      return;
    }

    if (distanceY < 0) {
      if (mRecyclerView.canScrollVertically(DOWN)) {
        // it cannot be larger, scroll recyclerview
        Log.v(TAG, "scroll.run, mRecyclerView1");
        mRecyclerView.scrollBy(0, (int) distanceY);
      } else {
        Log.v(TAG, "scroll.run, mTopPlayer2");
        // mTopPlayer.scrollExternal(distanceY, false);
        mTopPlayer.scrollBy(distanceY);
      }
    } else {
      if (mTopPlayer.isMinimumSize()) {
        Log.v(TAG, "scroll.run, mRecyclerView2");
        mRecyclerView.scrollBy(0, (int) distanceY);
      } else {
        int canscrollup = canScrollUp(mRecyclerView);
        if (canscrollup > 0) {
          Log.v(TAG, "scroll.run, mTopPlayer1 diffY: " + distanceY + " canscroll: " + canscrollup);

          distanceY = distanceY < canscrollup ? distanceY : canscrollup;
          // mTopPlayer.scrollExternal(distanceY, false);
          mTopPlayer.scrollBy(distanceY);
        }
      }
    }
  }
 void handleDragScroll(RecyclerView rv, DragInfo dragInfo) {
   if (rv.getLayoutManager().canScrollHorizontally()) {
     if (rv.canScrollHorizontally(-1) && dragInfo.shouldScrollLeft()) {
       rv.scrollBy(-SCROLL_AMOUNT, 0);
       dragManager.clearNextMove();
     } else if (rv.canScrollHorizontally(1) && dragInfo.shouldScrollRight(rv.getWidth())) {
       rv.scrollBy(SCROLL_AMOUNT, 0);
       dragManager.clearNextMove();
     }
   } else if (rv.getLayoutManager().canScrollVertically()) {
     if (rv.canScrollVertically(-1) && dragInfo.shouldScrollUp()) {
       rv.scrollBy(0, -SCROLL_AMOUNT);
       dragManager.clearNextMove();
     } else if (rv.canScrollVertically(1) && dragInfo.shouldScrollDown(rv.getHeight())) {
       rv.scrollBy(0, SCROLL_AMOUNT);
       dragManager.clearNextMove();
     }
   }
 }
 @Override
 public boolean canScrollVertically(int direction) {
   return mRecyclerView != null && mRecyclerView.canScrollVertically(direction);
 }