public void setBadge(@Nullable final View view, final boolean isHighPrio, final int count) {
        if (view == null) {
            return;
        }

        final int badgeColor = isHighPrio ? COLOR_PRIO_HIGH : COLOR_PRIO_LOW;
        final int badgeCount = Math.max(0, count);

        //start mutex here because we check for existing badge
        synchronized (mutex) {

            //check if a badge with same props already exist
            final BadgeDrawable existingBadge = badgeMap.get(view);
            if (existingBadge != null && existingBadge.getBackgroundColor() == badgeColor && existingBadge.getNumber() == badgeCount) {
                return;
            }

            final BadgeDrawable badge = BadgeDrawable.create(view.getContext());
            if (badgeCount > 0) {
                badge.setNumber(badgeCount);
            } else {
                badge.clearNumber();
            }
            badge.setBackgroundColor(badgeColor);
            badge.setBadgeGravity(BadgeDrawable.TOP_END);
            badge.setVisible(true);

            //Viewtype-specific settings
            if (view.getClass().getSimpleName().equals("BottomNavigationItemView")) { // navigation bar items
                badge.setHorizontalOffset(ViewUtils.dpToPixel(25));
                badge.setVerticalOffset(ViewUtils.dpToPixel(8));
            } else { //everything else: Buttons, text views, icons, ...
                badge.setHorizontalOffset(ViewUtils.dpToPixel(10));
                badge.setVerticalOffset(ViewUtils.dpToPixel(10));
            }

            setBadge(view, badge);

        }
    }
sets a badge on a view. isHighPrio and count will influence the badge's design
main/src/main/java/cgeo/geocaching/ui/BadgeManager.java