public static void executeForOneCartridge(final Activity activity, final List<String> wherigoGuids, final Consumer<String> guidAction) {
        if (wherigoGuids.isEmpty()) {
            return;
        }
        if (wherigoGuids.size() == 1) {
            guidAction.accept(wherigoGuids.get(0));
        } else {
            // prepare some data for display
            final int[] pos = {1};
            final Map<String, WherigoCartridgeInfo> cartridgeInfoMap = new HashMap<>();
            for (String guid : wherigoGuids) {
                cartridgeInfoMap.put(guid, null);
            }
            for (WherigoCartridgeInfo info : WherigoCartridgeInfo.getAvailableCartridges(cartridgeInfoMap::containsKey)) {
                cartridgeInfoMap.put(info.getCGuid(), info);
            }

            final List<Pair<String, Integer>> wherigoGuidPosList = wherigoGuids.stream().map(guid -> new Pair<>(guid, pos[0]++)).collect(Collectors.toList());
            final SimpleDialog.ItemSelectModel<Pair<String, Integer>> model = new SimpleDialog.ItemSelectModel<>();
            model
                .setItems(wherigoGuidPosList)
                .setDisplayMapper((l) -> TextParam.text(LocalizationUtils.getString(R.string.cache_wherigo_cartridge_not_downloaded) + " " + l.second))
                .setDisplayViewMapper(R.layout.wherigolist_item, (p, group, view) -> {
                    final WherigolistItemBinding binding = WherigolistItemBinding.bind(view);
                    final WherigoCartridgeInfo info = cartridgeInfoMap.get(p.first);
                    if (info != null) {
                        WherigoViewUtils.fillCartridgeSelectItem(binding, info);
                    } else {
                        //Cartridge not (yet) downloaded
                        binding.name.setText(LocalizationUtils.getString(R.string.cache_wherigo_cartridge_not_downloaded, "" + p.second));
                        binding.description.setText(p.first);
                        ImageParam.id(R.drawable.ic_menu_wherigo).applyTo(binding.icon);
                    }
                }, (p, group) -> {
                    final WherigoCartridgeInfo info = cartridgeInfoMap.get(p.first);
                    return info != null ? info.getName() : LocalizationUtils.getString(R.string.cache_wherigo_cartridge_not_downloaded, "" + p.second);
                })
                .setChoiceMode(SimpleItemListModel.ChoiceMode.SINGLE_PLAIN);
            SimpleDialog.of(activity)
                .setTitle(TextParam.id(R.string.cache_multiple_wherigo_cartridges_title))
                .setMessage(TextParam.id(R.string.cache_multiple_wherigo_cartridges_message))
                .selectSingle(model, s -> guidAction.accept(s.first));
        }
    }
adds badge logic to the given view to display current wherigo information as badges
main/src/main/java/cgeo/geocaching/wherigo/WherigoViewUtils.java