@UiThread
    public void performManualLogin(@NonNull final Context activity, final Runnable callback) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.cgeo_fullScreenDialog);
        final GcManualLoginBinding binding = GcManualLoginBinding.inflate(LayoutInflater.from(activity));
        final AlertDialog dialog = builder.create();
        dialog.setView(binding.getRoot());
        initializeWebview(binding.webview);
        CookieManager.getInstance().removeAllCookies(b -> {
            final String url = "https://www.geocaching.com";
            binding.webview.loadUrl(url + "/account/signin");
            binding.okButton.setOnClickListener(bo -> {

                //try to extract GC auth cookie from WebView
                final String webViewCookies = CookieManager.getInstance().getCookie(url);
                final List<Cookie> gcAuthCookies = cgeo.geocaching.network.Cookies.extractCookies(url, webViewCookies, c -> c.name().equals("gspkauth"));
                if (gcAuthCookies.isEmpty()) {
                    SimpleDialog.ofContext(activity).setTitle(TextParam.id(R.string.init_login_manual)).setMessage(TextParam.id(R.string.init_login_manual_error_nocookie)).show();
                    return;
                }

                //insert cookie
                resetLoginStatus();
                cgeo.geocaching.network.Cookies.cookieJar.saveFromResponse(HttpUrl.get(url), gcAuthCookies);

                dialog.dismiss();
                //set to state "logging in..."
                setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_working));
                callback.run();

                //perform the log-in and set state afterwards
                AndroidRxUtils.andThenOnUi(AndroidRxUtils.networkScheduler, () -> {
                    try {
                        if (getLoginStatus(getLoginPage())) {
                            completeLoginProcess();
                            return;
                        }
                    } catch (final Exception ex) {
                        logLastLoginError(CgeoApplication.getInstance().getString(R.string.err_auth_gc_manual_error, ex.getMessage()), true);
                        Log.w("GCLogin: Exception on manual login", ex);
                    }
                    setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_failed));
                }, callback);
            });
            binding.cancelButton.setOnClickListener(bo -> dialog.dismiss());
            dialog.show();
        });
    }
Unfortunately the cache details page contains user generated whitespace in the personal note, therefore we cannot
remove the white space from cache details pages.
main/src/main/java/cgeo/geocaching/connector/gc/GCLogin.java