private void reloadDescription(final Activity activity, final Geocache cache, final boolean restrictLength, final int initialScroll, final HtmlStyle descriptionStyle,
            final Translator translator, final OfflineTranslateUtils.Status status, final Consumer<Exception> errorConsumer) {
            binding.descriptionRenderFully.setVisibility(View.GONE);
            binding.description.setText(TextUtils.setSpan(activity.getString(translator != null ? R.string.cache_description_translating_and_rendering : R.string.cache_description_rendering), new StyleSpan(Typeface.ITALIC)));
            binding.description.setVisibility(View.VISIBLE);
            AndroidRxUtils.computationScheduler.scheduleDirect(() ->
                    createDescriptionContent(activity, cache, restrictLength, binding.description, descriptionStyle, translator, status, p -> {
                        displayDescription(activity, cache, p.first, binding.description);
                        if (translator != null) {
                            binding.descriptionTranslateNote.setText(String.format(getString(R.string.translator_translation_success), status.getSourceLanguage()));
                        }

                        if (status == null || StringUtils.equals(status.getSourceLanguage().getCode(), OfflineTranslateUtils.LANGUAGE_INVALID)) {
                            OfflineTranslateUtils.initializeListingTranslatorInTabbedViewPagerActivity((CacheDetailActivity) getActivity(), binding.descriptionTranslate, binding.description.getText().toString(), this::translateListing);
                        }

                        // we need to use post, so that the textview is layouted before scrolling gets called
                        if (((CacheDetailActivity) activity).lastActionWasEditNote) {
                            ((CacheDetailActivity) activity).scrollToBottom();
                        } else if (initialScroll != 0) {
                            binding.detailScroll.post(() -> binding.detailScroll.setScrollY(initialScroll));
                        }
                        if (p.second) {
                            binding.descriptionRenderFully.setVisibility(View.VISIBLE);
                            binding.descriptionRenderFully.setOnClickListener(v -> reloadDescription(activity, cache, false, binding.detailScroll.getScrollY(), descriptionStyle, translator, status, errorConsumer));
                        } else {
                            ((CacheDetailActivity) activity).lastActionWasEditNote = false;
                        }
                    }, errorConsumer)
            );
        }
re-renders the caches Listing (=description) in background and fills in the result. Includes handling of too long listings
main/src/main/java/cgeo/geocaching/CacheDetailActivity.java