private void onListChanged() {
    Log.traceCall();
    list.clear();
    list.addAll(
        tradeManager
            .getTrades()
            .stream()
            .map(PendingTradesListItem::new)
            .collect(Collectors.toList()));

    // we sort by date, earliest first
    list.sort((o1, o2) -> o2.getTrade().getDate().compareTo(o1.getTrade().getDate()));

    // TODO improve selectedItem handling
    // selectedItem does not get set to null if we dont have the view visible
    // So if the item gets removed form the list, and a new item is added we need to check if the
    // old
    // selectedItem is in the new list, if not we know it is an invalid one
    if (list.size() == 1) onSelectTrade(list.get(0));
    else if (list.size() > 1 && (selectedItem == null || !list.contains(selectedItem)))
      onSelectTrade(list.get(0));
    else if (list.size() == 0) onSelectTrade(null);
  }
 @Override
 protected void deactivate() {
   tradeManager.getTrades().removeListener(tradesListChangeListener);
 }
 @Override
 protected void activate() {
   tradeManager.getTrades().addListener(tradesListChangeListener);
   onListChanged();
 }