@NonNull
    public static List<LogTemplate> getTemplatesWithoutSignature() {
        final List<LogTemplate> templates = new ArrayList<>();
        templates.add(new LogTemplate("DATE", R.string.init_signature_template_date) {

            @Override
            public String getValue(final LogContext context) {
                if (null != context.logEntry) {
                    return Formatter.formatFullDate(context.logEntry.date);
                } else {
                    return Formatter.formatFullDate(System.currentTimeMillis());
                }
            }
        });
        templates.add(new LogTemplate("TIME", R.string.init_signature_template_time) {

            @Override
            public String getValue(final LogContext context) {
                if (null != context.logEntry) {
                    return Formatter.formatTime(context.logEntry.date);
                } else {
                    return Formatter.formatTime(System.currentTimeMillis());
                }
            }
        });
        templates.add(new LogTemplate("DATETIME", R.string.init_signature_template_datetime) {

            @Override
            public String getValue(final LogContext context) {
                final long currentTime;
                if (null != context.logEntry) {
                    currentTime = context.logEntry.date;
                } else {
                    currentTime = System.currentTimeMillis();
                }
                return Formatter.formatFullDate(currentTime) + " " + Formatter.formatTime(currentTime);
            }
        });
        templates.add(new LogTemplate("DAYOFWEEK", R.string.init_signature_template_day_of_week) {

            @Override
            public String getValue(final LogContext context) {
                if (null != context.logEntry) {
                    return Formatter.formatDayOfWeek(context.logEntry.date);
                } else {
                    return Formatter.formatDayOfWeek(System.currentTimeMillis());
                }
            }
        });
        templates.add(new LogTemplate("USER", R.string.init_signature_template_user) {

            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    final IConnector connector = ConnectorFactory.getConnector(cache);
                    if (connector instanceof ILogin) {
                        return ((ILogin) connector).getUserName();
                    }
                }
                return Settings.getUserName();
            }
        });
        templates.add(new LogTemplate("NUMBER", R.string.init_signature_template_number) {

            @Override
            public String getValue(final LogContext context) {

                final boolean increment;
                increment = null == context.logEntry || context.logEntry.logType == LogType.FOUND_IT || context.logEntry.logType == LogType.ATTENDED || context.logEntry.logType == LogType.WEBCAM_PHOTO_TAKEN;

                final Geocache cache = context.getCache();
                if (cache == null || !(ConnectorFactory.getConnector(cache) instanceof ILogin)) {
                    return StringUtils.EMPTY;
                }
                final ILogin connector = (ILogin) ConnectorFactory.getConnector(cache);

                int counter;
                final String onlineNum = getCounter(context, false); // we increment the counter later on our self in this method.

                if (!onlineNum.equals(StringUtils.EMPTY)) {
                    counter = Integer.parseInt(onlineNum);
                } else {
                    counter = FoundNumCounter.getAndUpdateFoundNum(connector);
                }

                if (counter == -1) {
                    return StringUtils.EMPTY;
                }

                counter += DataStore.getFoundsOffline(connector);

                if (increment) {
                    counter += 1;
                }
                return String.valueOf(counter);
            }
        });
        templates.add(new LogTemplate("ONLINENUM", R.string.init_signature_template_number_legacy) {

            @Override
            public String getValue(final LogContext context) {

                if (null == context.logEntry || context.logEntry.logType == LogType.FOUND_IT || context.logEntry.logType == LogType.ATTENDED || context.logEntry.logType == LogType.WEBCAM_PHOTO_TAKEN) {
                    return getCounter(context, true);
                } else {
                    return getCounter(context, false);
                }
            }
        });
        templates.add(new LogTemplate("OWNER", R.string.init_signature_template_owner) {

            @Override
            public String getValue(final LogContext context) {
                final Trackable trackable = context.getTrackable();
                if (trackable != null) {
                    return trackable.getOwner();
                }
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return cache.getOwnerDisplayName();
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("NAME", R.string.init_signature_template_name) {
            @Override
            public String getValue(final LogContext context) {
                final Trackable trackable = context.getTrackable();
                if (trackable != null) {
                    return trackable.getName();
                }
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return cache.getName();
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("DIFFICULTY", R.string.init_signature_template_difficulty) {
            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return String.valueOf(cache.getDifficulty());
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("TERRAIN", R.string.init_signature_template_terrain) {
            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return String.valueOf(cache.getTerrain());
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("SIZE", R.string.init_signature_template_size) {
            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return cache.getSize().getL10n();
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("URL", R.string.init_signature_template_url) {

            @Override
            public String getValue(final LogContext context) {
                final Trackable trackable = context.getTrackable();
                if (trackable != null) {
                    return trackable.getUrl();
                }
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return StringUtils.defaultString(cache.getUrl());
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("TYPE", R.string.init_signature_template_type) {
            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    final CacheType cacheType = cache.getType();
                    return cacheType.getL10n();
                }
                return StringUtils.EMPTY;
            }
        });
        templates.add(new LogTemplate("GEOCODE", R.string.init_signature_template_geocode) {
            @Override
            public String getValue(final LogContext context) {
                final Geocache cache = context.getCache();
                if (cache != null) {
                    return cache.getGeocode();
                }
                return StringUtils.EMPTY;
            }
        });
        return templates;
    }
@return all user-facing templates, but not the signature template itself
main/src/main/java/cgeo/geocaching/log/LogTemplateProvider.java