summaryrefslogtreecommitdiff
path: root/logcat
diff options
context:
space:
mode:
authorAlon Albert <aalbert@google.com>2022-08-01 11:56:59 -0700
committerAlon Albert <aalbert@google.com>2022-08-01 19:51:09 +0000
commitb8fd0e996248220ce5ea33d2d216631c0bad3084 (patch)
tree1aad02b777cbcb6ac74a7d73ad2cc5a613d9f55c /logcat
parentbba0b9fd7e8cb7e1c46c8dcf0716936a8ce38bd9 (diff)
downloadidea-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')
-rw-r--r--logcat/resources/messages/LogcatBundle.properties1
-rw-r--r--logcat/src/com/android/tools/idea/logcat/filters/FilterTextField.kt11
-rw-r--r--logcat/src/com/android/tools/idea/logcat/filters/LogcatFilter.kt13
-rw-r--r--logcat/testSrc/com/android/tools/idea/logcat/FakePackageNamesProvider.kt2
-rw-r--r--logcat/testSrc/com/android/tools/idea/logcat/filters/LogcatFilterTest.kt14
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/>\\&nbsp;\\&nbsp;{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/>&nbsp;&nbsp;"))
+ }
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/>&nbsp;&nbsp;app1<br/>&nbsp;&nbsp;app2<html>")
}
@Test