public static void interactiveCreateCache(final Context context, final Geopoint geopoint, final int listId, final boolean askUser) {
        final boolean showStoreInCurrentList = askUser && ((listId == StoredList.STANDARD_LIST_ID || listId >= DataStore.customListIdOffset));

        final Geocache temporaryCache = new Geocache();
        temporaryCache.setType(CacheType.USER_DEFINED);

        final UdcCreateBinding binding = UdcCreateBinding.inflate(LayoutInflater.from(context));
        binding.name.setText("");
        binding.givenList.setVisibility(showStoreInCurrentList ? View.VISIBLE : View.GONE);
        binding.givenList.setChecked(Settings.getCreateUDCuseGivenList());

        final DialogTitleButtonButtonBinding titleViewBinding = DialogTitleButtonButtonBinding.inflate(LayoutInflater.from(context));
        titleViewBinding.dialogTitleTitle.setText(R.string.create_internal_cache);
        final MaterialButton dialogButton = (MaterialButton) titleViewBinding.dialogButtonRight;
        dialogButton.setVisibility(View.VISIBLE);
        // This cross-converting solves a tinting issue described in #11715. Sorry, it is ugly but the only possibility we have found so far.
        dialogButton.setIcon(ViewUtils.bitmapToDrawable(ViewUtils.drawableToBitmap(MapMarkerUtils.getCacheMarker(context.getResources(), temporaryCache, CacheListType.OFFLINE, Settings.getIconScaleEverywhere()).getDrawable())));
        dialogButton.setIconTint(null);
        dialogButton.setHint(R.string.caches_set_cache_icon);
        dialogButton.setOnClickListener(v -> EmojiUtils.selectEmojiPopup(context, temporaryCache.getAssignedEmoji(), temporaryCache, assignedEmoji -> {
            temporaryCache.setAssignedEmoji(assignedEmoji);
            dialogButton.setIcon(MapMarkerUtils.getCacheMarker(context.getResources(), temporaryCache, CacheListType.OFFLINE, Settings.getIconScaleEverywhere()).getDrawable());
        }));

        Dialogs.newBuilder(context)
                .setCustomTitle(titleViewBinding.getRoot())
                .setView(binding.getRoot())
                .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> {
                    final boolean useGivenList = binding.givenList.isChecked();
                    Settings.setCreateUDCuseGivenList(useGivenList);
                    final String geocode = createCache(context, ViewUtils.getEditableText(binding.name.getText()), null, temporaryCache.getAssignedEmoji(), geopoint, showStoreInCurrentList && !useGivenList ? InternalConnector.UDC_LIST : listId);
                    CacheDetailActivity.startActivity(context, geocode);
                    GeocacheChangedBroadcastReceiver.sendBroadcast(context, geocode);
                })
                .setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> dialog.cancel())
                .show();
        Keyboard.show(context, binding.name);
    }
asks user for cache name and creates a new cache if name has been entered

@param geopoint cache's current location (or null if none)
@param listId   cache list's id (either InternalConnector.UDC_LIST or interpreted as offline list id)
@param askUser  false: store in given list / true: ask for list & default list (if offline list given)
                default list is InternalConnector.UDC_LIST
main/src/main/java/cgeo/geocaching/connector/internal/InternalConnector.java