diff options
author | Alon Albert <aalbert@google.com> | 2022-08-01 11:56:59 -0700 |
---|---|---|
committer | Alon Albert <aalbert@google.com> | 2022-08-01 19:51:09 +0000 |
commit | b8fd0e996248220ce5ea33d2d216631c0bad3084 (patch) | |
tree | 1aad02b777cbcb6ac74a7d73ad2cc5a613d9f55c /logcat | |
parent | bba0b9fd7e8cb7e1c46c8dcf0716936a8ce38bd9 (diff) | |
download | idea-b8fd0e996248220ce5ea33d2d216631c0bad3084.tar.gz |
Add Tooltip to FilterTextField
The text component in FilterTextField extends EditorTextField which hosts an EditorComponentImpl.
This component seems to hijack the `getToolTipText(MouseEvent)` so I had to add
a MouseMotionListener in order to implement the tooltip.
Fixes: 240713976
Test: Manually
Change-Id: If8094b1cdaaca8a7ec12c52738d225a81564a781
Diffstat (limited to 'logcat')
5 files changed, 29 insertions, 12 deletions
diff --git a/logcat/resources/messages/LogcatBundle.properties b/logcat/resources/messages/LogcatBundle.properties index f284cc26ac3..3d2dff61af6 100644 --- a/logcat/resources/messages/LogcatBundle.properties +++ b/logcat/resources/messages/LogcatBundle.properties @@ -98,6 +98,7 @@ logcat.filter.completion.hint.age.day=day logcat.filter.completion.hint.age=Filter by max age logcat.filter.completion.hint.age.value=Filter logs from past {0} {1} logcat.filter.completion.hint.package.mine=Filter logs from current project id(s) +logcat.filter.completion.hint.package.mine.items=<html>Filter logs from current project id(s):<br/>\\ \\ {0}<\html> logcat.filter.completion.hint.package.mine.empty=No project ids detected. Is the project synced? logcat.filter.completion.hint.name=Specify a name for this filter logcat.filter.completion.hint.name.value=This filter''s name is ''{0}'' diff --git a/logcat/src/com/android/tools/idea/logcat/filters/FilterTextField.kt b/logcat/src/com/android/tools/idea/logcat/filters/FilterTextField.kt index 0afd039f900..7271a8c57fe 100644 --- a/logcat/src/com/android/tools/idea/logcat/filters/FilterTextField.kt +++ b/logcat/src/com/android/tools/idea/logcat/filters/FilterTextField.kt @@ -147,6 +147,7 @@ internal class FilterTextField( private val historyButton = InlineButton(FILTER_HISTORY) private val clearButton = JLabel(AllIcons.Actions.Close) private val favoriteButton = JLabel(FAVORITE_OUTLINE) + private var filter: LogcatFilter? = filterParser.parse(initialText) private var isFavorite: Boolean = false set(value) { @@ -193,6 +194,7 @@ internal class FilterTextField( textField.apply { addDocumentListener(object : DocumentListener { override fun documentChanged(event: DocumentEvent) { + filter = filterParser.parse(text) isFavorite = false filterHistory.mostRecentlyUsed = textField.text notifyFilterChangedTask.reschedule(APPLY_FILTER_DELAY_MS) { @@ -327,6 +329,15 @@ internal class FilterTextField( } } }) + contentComponent.addMouseMotionListener(object : MouseAdapter() { + override fun mouseMoved(e: MouseEvent) { + contentComponent.toolTipText = editor?.let {editor -> + val position = editor.xyToLogicalPosition(e.point) + // The editor is in a single line so we don't have to convert to an offset + filter?.findFilterForOffset(position.column)?.displayText + } + } + }) } } diff --git a/logcat/src/com/android/tools/idea/logcat/filters/LogcatFilter.kt b/logcat/src/com/android/tools/idea/logcat/filters/LogcatFilter.kt index 06a79acbdfc..7b85091f9f0 100644 --- a/logcat/src/com/android/tools/idea/logcat/filters/LogcatFilter.kt +++ b/logcat/src/com/android/tools/idea/logcat/filters/LogcatFilter.kt @@ -227,7 +227,7 @@ internal data class AgeFilter( throw LogcatFilterParseException(PsiErrorElementImpl("Invalid duration: $text")) } - fun pluralize(word: String, count: Long) : String = if (count == 1L) word else Strings.pluralize(word) + fun pluralize(word: String, count: Long): String = if (count == 1L) word else Strings.pluralize(word) val (seconds, display) = when (text.last()) { 's' -> Pair(count, pluralize(message("logcat.filter.completion.hint.age.second"), count)) @@ -254,10 +254,13 @@ internal class ProjectAppFilter( private var packageNames: Set<String> = emptySet() private var packageNamesRegex: Regex? = null - override val displayText: String = when (packageNamesProvider.getPackageNames().size) { - 0 -> message("logcat.filter.completion.hint.package.mine.empty") - else -> "${message("logcat.filter.completion.hint.package.mine")}:\n ${packageNamesProvider.getPackageNames().joinToString("\n ")}" - } + override val displayText: String + get() = when (packageNamesProvider.getPackageNames().size) { + 0 -> message("logcat.filter.completion.hint.package.mine.empty") + else -> message( + "logcat.filter.completion.hint.package.mine.items", + packageNamesProvider.getPackageNames().joinToString("<br/> ")) + } override fun prepare() { packageNames = packageNamesProvider.getPackageNames() diff --git a/logcat/testSrc/com/android/tools/idea/logcat/FakePackageNamesProvider.kt b/logcat/testSrc/com/android/tools/idea/logcat/FakePackageNamesProvider.kt index e4b8a57e49a..1275562364a 100644 --- a/logcat/testSrc/com/android/tools/idea/logcat/FakePackageNamesProvider.kt +++ b/logcat/testSrc/com/android/tools/idea/logcat/FakePackageNamesProvider.kt @@ -21,5 +21,5 @@ package com.android.tools.idea.logcat class FakePackageNamesProvider(vararg packageNames: String) : PackageNamesProvider { private val _packageNames = packageNames.toMutableSet() - override fun getPackageNames(): Set<String> = _packageNames + override fun getPackageNames(): MutableSet<String> = _packageNames }
\ No newline at end of file diff --git a/logcat/testSrc/com/android/tools/idea/logcat/filters/LogcatFilterTest.kt b/logcat/testSrc/com/android/tools/idea/logcat/filters/LogcatFilterTest.kt index be1493811ee..5ca79852857 100644 --- a/logcat/testSrc/com/android/tools/idea/logcat/filters/LogcatFilterTest.kt +++ b/logcat/testSrc/com/android/tools/idea/logcat/filters/LogcatFilterTest.kt @@ -422,13 +422,15 @@ class LogcatFilterTest { @Test fun displayText_projectAppFilter() { - assertThat(ProjectAppFilter(FakePackageNamesProvider("app1", "app2"), EMPTY_RANGE).displayText).isEqualTo(""" - Filter logs from current project id(s): - app1 - app2 - """.trimIndent()) - assertThat(ProjectAppFilter(FakePackageNamesProvider(), EMPTY_RANGE).displayText) + val packageNamesProvider = FakePackageNamesProvider() + val projectAppFilter = ProjectAppFilter(packageNamesProvider, EMPTY_RANGE) + assertThat(projectAppFilter.displayText) .isEqualTo("No project ids detected. Is the project synced?") + + packageNamesProvider.getPackageNames().add("app1") + packageNamesProvider.getPackageNames().add("app2") + assertThat(projectAppFilter.displayText).isEqualTo( + "<html>Filter logs from current project id(s):<br/> app1<br/> app2<html>") } @Test |