From 4150a141093de3a4ff8708156384f9d7fae1087c Mon Sep 17 00:00:00 2001 From: Daniel Alome Date: Mon, 17 Aug 2026 23:41:13 +0100 Subject: [PATCH] ADFA-4754: Capture n/a tooltips and display a friendly sorry message with link to webhelp --- .../androidide/idetooltips/ToolTipManager.kt | 27 ++++++++++++++++--- resources/src/main/res/values/strings.xml | 1 + 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/idetooltips/src/main/java/com/itsaky/androidide/idetooltips/ToolTipManager.kt b/idetooltips/src/main/java/com/itsaky/androidide/idetooltips/ToolTipManager.kt index 5254603145..92d5221b68 100644 --- a/idetooltips/src/main/java/com/itsaky/androidide/idetooltips/ToolTipManager.kt +++ b/idetooltips/src/main/java/com/itsaky/androidide/idetooltips/ToolTipManager.kt @@ -209,7 +209,17 @@ object TooltipManager { } ) } else { - Log.e(TAG, "Tooltip item $tooltipItem is null") + Log.d(TAG, "No tooltip for category='$category', tag='$tag'; showing documentation fallback") + showTooltipPopup( + context = context, + anchorView = anchorView, + level = 0, + tooltipItem = IDETooltipItem(-1, -1, category, tag, "", "", arrayListOf(), ""), + requestFocus = requestFocus, + onHelpLinkClicked = { context, url, _ -> + HelpActivity.launch(context, url, context.getString(ResR.string.back_to_cogo)) + } + ) } } } @@ -308,12 +318,18 @@ object TooltipManager { else ResR.color.tooltip_link_color_light, ).toCssHex() + val detailContent = tooltipItem.detail.takeUnless { it.isMissingTooltipContent() } ?: "" val tooltipHtmlContent = when (level) { 0 -> { - tooltipItem.summary + // A blank or "n/a" summary is a dead end; route the user to the + // documentation instead (ADFA-4754). + tooltipItem.summary.takeUnless { it.isMissingTooltipContent() } + ?: context.getString( + ResR.string.tooltip_missing_fallback_html, + context.getString(ResR.string.docs_url), + ) } 1 -> { - val detailContent = tooltipItem.detail.ifBlank { "" } if (tooltipItem.buttons.isNotEmpty()) { val buttonsSeparator = context.getString(R.string.tooltip_buttons_separator) val linksHtml = tooltipItem.buttons.joinToString(buttonsSeparator) { (label, url) -> @@ -367,7 +383,7 @@ object TooltipManager { onSeeMoreClicked(popupWindow, nextLevel, tooltipItem) } val shouldShowSeeMore = when { - level == 0 && (tooltipItem.detail.isNotBlank() || tooltipItem.buttons.isNotEmpty()) -> true + level == 0 && (detailContent.isNotBlank() || tooltipItem.buttons.isNotEmpty()) -> true else -> false } seeMore.visibility = if (shouldShowSeeMore) View.VISIBLE else View.GONE @@ -550,6 +566,9 @@ object TooltipManager { """.trimIndent() } + private fun String.isMissingTooltipContent(): Boolean = + isBlank() || trim().equals("n/a", ignoreCase = true) + private fun View.isInOverlayWindow(): Boolean { val params = layoutParams return params is WindowManager.LayoutParams && diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index 97d441fbbb..40c2d871c6 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -1206,6 +1206,7 @@ %3$s]]> + Explore the documentation.]]> Send feedback