/*
  * (non-Javadoc)
  *
  * @see
  * android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android
  * .support.v4.content.Loader, java.lang.Object)
  */
 @SuppressLint("NewApi")
 @Override
 public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
   switch (loader.getId()) {
     case LOADER_EPG:
       refresh(LOADER_CHANNELLIST);
       break;
     case LOADER_REFRESH_CHANNELLIST:
       /** Prüfung ob das EPG in der Senderliste angezeigt werden soll. */
       if ((showNowPlaying && !showNowPlayingWifi)
           || (showNowPlaying && showNowPlayingWifi && mNetworkInfo.isConnected())) {
         refresh(LOADER_EPG);
       } else {
         refresh(LOADER_CHANNELLIST);
       }
       break;
     default:
       mAdapter.swapCursor(cursor);
       if (selectedPosition != ListView.INVALID_POSITION) {
         getListView().setItemChecked(selectedPosition, true);
       }
       getListView()
           .setSelectionFromTop(
               selectedPosition,
               (int) getResources().getDimension(R.dimen.list_preferred_item_height_small) * 3);
       setListShown(true);
       break;
   }
   getSherlockActivity().invalidateOptionsMenu();
 }
 /**
  * Cursor to channellist.
  *
  * @param position the position
  * @return the array list´
  * @author RayBa
  * @date 07.04.2013
  */
 private ArrayList<Channel> cursorToChannellist() {
   Cursor c = (Cursor) mAdapter.getCursor();
   ArrayList<Channel> chans = new ArrayList<Channel>();
   c.moveToPosition(-1);
   while (c.moveToNext()) {
     Channel channel = cursorToChannel(c);
     chans.add(channel);
   }
   return chans;
 }
  /*
   * (non-Javadoc)
   *
   * @see
   * android.support.v4.app.ListFragment#onListItemClick(android.widget.ListView
   * , android.view.View, int, long)
   */
  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
    if (mCHannelSelectedListener != null) {
      selectedPosition = position;
      Cursor c = mAdapter.getCursor();
      c.moveToPosition(position);
      Channel chan = cursorToChannel(c);
      ArrayList<Channel> chans = cursorToChannellist();
      mCHannelSelectedListener.channelSelected(chans, chan, position);
      getListView().setItemChecked(position, true);
    } else {
      Intent epgPagerIntent =
          new Intent(getActivity(), org.dvbviewer.controller.ui.phone.EpgPagerActivity.class);
      // long[] feedIds = new long[data.getCount()];

      ArrayList<Channel> chans = cursorToChannellist();

      epgPagerIntent.putParcelableArrayListExtra(Channel.class.getName(), chans);
      epgPagerIntent.putExtra("position", position);
      startActivity(epgPagerIntent);
      selectedPosition = ListView.INVALID_POSITION;
    }
  }
  /*
   * (non-Javadoc)
   *
   * @see
   * android.support.v4.app.Fragment#onContextItemSelected(android.view.MenuItem
   * )
   */
  public boolean onContextItemSelected(MenuItem item) {
    if (item.getMenuInfo() != null) {
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
      selectedPosition = info.position;
    }
    Cursor c = mAdapter.getCursor();
    c.moveToPosition(selectedPosition);
    Channel chan = cursorToChannel(c);
    Timer timer;
    switch (item.getItemId()) {
      case R.id.menuTimer:
        timer = cursorToTimer(c);
        if (UIUtils.isTablet(getActivity())) {
          TimerDetails timerdetails = TimerDetails.newInstance();
          Bundle args = new Bundle();
          args.putString(TimerDetails.EXTRA_TITLE, timer.getTitle());
          args.putString(TimerDetails.EXTRA_CHANNEL_NAME, timer.getChannelName());
          args.putLong(TimerDetails.EXTRA_CHANNEL_ID, timer.getChannelId());
          args.putLong(TimerDetails.EXTRA_START, timer.getStart().getTime());
          args.putLong(TimerDetails.EXTRA_END, timer.getEnd().getTime());
          args.putInt(TimerDetails.EXTRA_ACTION, timer.getTimerAction());
          args.putBoolean(TimerDetails.EXTRA_ACTIVE, true);
          timerdetails.setArguments(args);
          timerdetails.show(
              getSherlockActivity().getSupportFragmentManager(), TimerDetails.class.getName());
        } else {
          Intent timerIntent = new Intent(getActivity(), TimerDetailsActivity.class);
          timerIntent.putExtra(TimerDetails.EXTRA_TITLE, timer.getTitle());
          timerIntent.putExtra(TimerDetails.EXTRA_CHANNEL_NAME, timer.getChannelName());
          timerIntent.putExtra(TimerDetails.EXTRA_CHANNEL_ID, timer.getChannelId());
          timerIntent.putExtra(TimerDetails.EXTRA_START, timer.getStart().getTime());
          timerIntent.putExtra(TimerDetails.EXTRA_END, timer.getEnd().getTime());
          timerIntent.putExtra(TimerDetails.EXTRA_ACTION, timer.getTimerAction());
          timerIntent.putExtra(TimerDetails.EXTRA_ACTIVE, !timer.isFlagSet(Timer.FLAG_DISABLED));
          startActivity(timerIntent);
        }
        return true;
      case R.id.menuStream:
        if (UIUtils.isTablet(getActivity())) {
          StreamConfig cfg = StreamConfig.newInstance();
          Bundle arguments = new Bundle();
          arguments.putInt(StreamConfig.EXTRA_FILE_ID, chan.getPosition());
          arguments.putInt(StreamConfig.EXTRA_FILE_TYPE, StreamConfig.FILE_TYPE_LIVE);
          arguments.putInt(StreamConfig.EXTRA_DIALOG_TITLE_RES, R.string.streamConfig);
          cfg.setArguments(arguments);
          cfg.show(getSherlockActivity().getSupportFragmentManager(), StreamConfig.class.getName());
        } else {
          Intent streamConfig = new Intent(getActivity(), StreamConfigActivity.class);
          streamConfig.putExtra(StreamConfig.EXTRA_FILE_ID, chan.getPosition());
          streamConfig.putExtra(StreamConfig.EXTRA_FILE_TYPE, StreamConfig.FILE_TYPE_LIVE);
          streamConfig.putExtra(StreamConfig.EXTRA_DIALOG_TITLE_RES, R.string.streamConfig);
          startActivity(streamConfig);
        }
        return true;
      case R.id.menuSwitch:
        String switchRequest = ServerConsts.URL_SWITCH_COMMAND + chan.getPosition();
        DVBViewerCommand command = new DVBViewerCommand(switchRequest);
        Thread exexuterTHread = new Thread(command);
        exexuterTHread.start();
        return true;
      case R.id.menuRecord:
        timer = cursorToTimer(c);
        String url =
            timer.getId() < 0l ? ServerConsts.URL_TIMER_CREATE : ServerConsts.URL_TIMER_EDIT;
        String title = timer.getTitle();
        String days = String.valueOf(DateUtils.getDaysSinceDelphiNull(timer.getStart()));
        String start = String.valueOf(DateUtils.getMinutesOfDay(timer.getStart()));
        String stop = String.valueOf(DateUtils.getMinutesOfDay(timer.getEnd()));
        String endAction = String.valueOf(timer.getTimerAction());
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("ch", String.valueOf(timer.getChannelId())));
        params.add(new BasicNameValuePair("dor", days));
        params.add(new BasicNameValuePair("encoding", "255"));
        params.add(new BasicNameValuePair("enable", "1"));
        params.add(new BasicNameValuePair("start", start));
        params.add(new BasicNameValuePair("stop", stop));
        params.add(new BasicNameValuePair("title", title));
        params.add(new BasicNameValuePair("endact", endAction));
        if (timer.getId() >= 0) {
          params.add(new BasicNameValuePair("id", String.valueOf(timer.getId())));
        }

        String query = URLEncodedUtils.format(params, "utf-8");
        String request = url + query;
        RecordingServiceGet rsGet = new RecordingServiceGet(request);
        Thread executionThread = new Thread(rsGet);
        executionThread.start();
        return true;

      default:
        break;
    }
    return false;
  }