/**
   * Called when a list item is selected.
   *
   * <p>Updates the state of the list, closes the drawer, and fowards the event to the parent
   * activity to handle.
   *
   * @param position position of the item in the list
   */
  public void selectItem(int position) {
    mCurrentSelectedPosition = position;

    if (mDrawerLayout != null) {
      mDrawerLayout.closeDrawer(mNavigationDrawerContainer);
    }

    if (mCallbacks != null) {
      NavDrawerItem navDrawerItem = mAdapter.getItem(position + 1);
      mCallbacks.onNavigationDrawerItemSelected(
          navDrawerItem, null != navDrawerItem ? navDrawerItem.getTitle() : null);
    }

    mAdapter.notifyDataSetChanged();
  }
        @Override
        public void onItemClick(
            View v, NavigationAdapter.ItemRowHolder vh, NavDrawerItem item, int position) {
          if (null != item.getOnClickListener()) {
            item.onClick(v, vh, position);
            return;
          }

          selectItem(mAdapter.getCorrectPosition(position));
        }
  @Override
  public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mAdapter = new NavigationAdapter(getActivity(), this, initItems());
    mAdapter.setOnItemClickListener(mOnItemClickListener);

    mRecyclerView.addItemDecoration(new OneShotDividerDecorator(getActivity(), 3));
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setAdapter(mAdapter);
    mRecyclerView.requestFocus();
  }
  public List<NavDrawerItem> initItems() {
    // todo: make list items dynamic
    List<NavDrawerItem> navItems = new ArrayList<>();
    navItems.add(new NavDrawerItem(true));
    navItems.add(
        new NavDrawerItem(
            getString(R.string.title_movies), R.drawable.ic_nav_movies, new YTSProvider()));
    navItems.add(
        new NavDrawerItem(
            getString(R.string.title_shows), R.drawable.ic_nav_tv, new EZTVProvider()));
    navItems.add(
        new NavDrawerItem(
            getString(R.string.title_anime), R.drawable.ic_nav_anime, new HaruProvider()));
    if (PrefUtils.get(getActivity(), Prefs.SHOW_VPN, true)
        && VPNHTChecker.isDownloadAvailable(getActivity())) {
      navItems.add(
          mVPNItem =
              new NavDrawerItem(
                  getString(R.string.vpn),
                  R.drawable.ic_nav_vpn,
                  mOnVPNClickListener,
                  VPNManager.getLatestInstance().isConnected()));
    }
    navItems.add(
        new NavDrawerItem(
            getString(R.string.preferences), R.drawable.ic_nav_settings, mOnSettingsClickListener));

    if (mAdapter != null) mAdapter.setItems(navItems);

    VPNManager.State state = VPNManager.getCurrentState();
    NavigationDrawerFragment.NavDrawerItem vpnItem = getVPNItem();
    if (vpnItem != null) {
      if (state.equals(VPNManager.State.DISCONNECTED)) {
        vpnItem.setSwitchValue(false);
        vpnItem.showProgress(false);
      } else if (state.equals(VPNManager.State.CONNECTING)) {
        vpnItem.showProgress(true);
      } else if (state.equals(VPNManager.State.CONNECTED)) {
        vpnItem.setSwitchValue(true);
        vpnItem.showProgress(false);
      }
    }

    return navItems;
  }
 public NavDrawerItem getCurrentItem() {
   return mAdapter.getItem(getSelectedPosition() + 1);
 }