/**
   * Called by the task when no more data is available. We store the list of items into the cache
   * and stop the spinner.
   *
   * @param stask the source task
   * @param items all the itmes published
   * @param ok set if everything went smoothly
   */
  private void done(Task stask, List<Item> allItems, boolean ok) {
    if (ok) citems = allItems;

    if (stask == task) {
      task = null;
      itemf.noMoreData(this, ok);
      itemf.selectOtherFilter(this, false);
    }
  }
  /**
   * Requests information, according to the {@link Filter} pattern. If data is already available, it
   * is pushed immediately to the fragment. If a task is alreay running, we wait for it to complete,
   * republishing the data collected so far. Otherwise a new task is created, and data will be
   * published as soon as possible.
   *
   * @param conn a WKLib Connection
   */
  @Override
  public void select(Connection.Meter meter, Connection conn, int level) {
    itemf.enableSorting(false, true, false, false);
    if (citems != null) {
      itemf.setData(this, citems, true);
      itemf.selectOtherFilter(this, false);
    } else if (task != null) {
      itemf.clearData(this);
      itemf.selectOtherFilter(this, true);
      task.reissue();
    } else {
      itemf.clearData(this);
      itemf.selectOtherFilter(this, true);

      task = new Task(meter, conn);
      task.execute();
    }
  }
 /**
  * Called by the task when some new data becomes available.
  *
  * @param stask the source task
  * @param items the new items
  */
 private void update(Task stask, List<Item> items) {
   if (stask == task) itemf.addData(this, items);
 }