/** {@inheritDoc} */
  @Override
  public void onRequestRefresh(Object o) {
    // Refresh only the item
    SearchResultAdapter adapter = (SearchResultAdapter) this.mSearchListView.getAdapter();
    if (adapter != null) {
      if (o instanceof FileSystemObject) {

        FileSystemObject fso = (FileSystemObject) o;
        int pos = adapter.getPosition(fso);
        if (pos >= 0) {
          SearchResult sr = adapter.getItem(pos);
          sr.setFso(fso);
        }
      } else if (o == null) {
        // Refresh all
        List<SearchResult> results = adapter.getData();
        this.mResultList = new ArrayList<FileSystemObject>(results.size());
        int cc = results.size();
        for (int i = 0; i < cc; i++) {
          this.mResultList.add(results.get(i).getFso());
        }
        drawResults();
      }
    }
  }
        @Override
        public void onItemFlingerEnd(
            OnItemFlingerResponder responder,
            AdapterView<?> parent,
            View view,
            int position,
            long id) {

          try {
            // Response if the item can be removed
            SearchResultAdapter adapter = (SearchResultAdapter) parent.getAdapter();
            SearchResult result = adapter.getItem(position);
            if (result != null && result.getFso() != null) {
              DeleteActionPolicy.removeFileSystemObject(
                  SearchActivity.this, result.getFso(), null, SearchActivity.this, responder);
              return;
            }

            // Cancels the flinger operation
            responder.cancel();

          } catch (Exception e) {
            ExceptionUtil.translateException(SearchActivity.this, e, true, false);
            responder.cancel();
          }
        }
  /** {@inheritDoc} */
  @Override
  public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    // Different actions depending on user preference

    // Get the adapter, the search result and the fso
    SearchResultAdapter adapter = ((SearchResultAdapter) parent.getAdapter());
    SearchResult searchResult = adapter.getItem(position);
    FileSystemObject fso = searchResult.getFso();

    // Open the actions menu
    onRequestMenu(fso);
    return true; // Always consume the event
  }
 @Override
 public boolean onItemFlingerStart(AdapterView<?> parent, View view, int position, long id) {
   try {
     // Response if the item can be removed
     SearchResultAdapter adapter = (SearchResultAdapter) parent.getAdapter();
     SearchResult result = adapter.getItem(position);
     if (result != null && result.getFso() != null) {
       if (result.getFso() instanceof ParentDirectory) {
         // This is not possible ...
         return false;
       }
       return true;
     }
   } catch (Exception e) {
     ExceptionUtil.translateException(SearchActivity.this, e, true, false);
   }
   return false;
 }
 /** {@inheritDoc} */
 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
   try {
     SearchResult result = ((SearchResultAdapter) parent.getAdapter()).getItem(position);
     FileSystemObject fso = result.getFso();
     if (fso instanceof Directory) {
       back(false, fso, false);
     } else if (fso instanceof Symlink) {
       Symlink symlink = (Symlink) fso;
       if (symlink.getLinkRef() != null && symlink.getLinkRef() instanceof Directory) {
         back(false, symlink.getLinkRef(), false);
       }
     } else {
       // Open the file with the preferred registered app
       back(false, fso, false);
     }
   } catch (Throwable ex) {
     ExceptionUtil.translateException(this.mSearchListView.getContext(), ex);
   }
 }