-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCustomVisibilityInspector.kt
More file actions
67 lines (54 loc) · 2.12 KB
/
CustomVisibilityInspector.kt
File metadata and controls
67 lines (54 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.awesomeproject
import android.graphics.Rect
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.*
import com.facebook.react.uimanager.ReactShadowNode
import com.facebook.react.uimanager.ViewManager
import com.facebook.react.uimanager.util.ReactFindViewUtil
class CustomVisibilityInspectorModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) {
private var view: View? = null
init {
ReactFindViewUtil.addViewListener(object: ReactFindViewUtil.OnViewFoundListener {
override fun getNativeId() = "visibilityInspect"
override fun onViewFound(view: View?) {
this@CustomVisibilityInspectorModule.view = view
}
})
}
override fun getName() = "CustomVisibilityInspector"
@ReactMethod
fun inspect(promise: Promise) {
var description = "Not found"
this.view?.let {
description = describeVisibility()
}
promise.resolve(description)
}
private fun describeVisibility(): String {
val sb = StringBuilder(1024)
describeVisibility(this.view!!, sb)
return sb.toString()
}
private fun describeVisibility(view: View, sb: StringBuilder) {
if (view !is ViewGroup) {
if (isVisible(view)) {
sb.append(describeView(view)).append(", ")
}
} else {
for (i in 1..view.childCount) {
describeVisibility(view.getChildAt(i - 1), sb)
}
}
}
private fun isVisible(view: View) = view.getGlobalVisibleRect(Rect())
private fun describeView(view: View) = if (view is TextView) view.text else view.javaClass.simpleName
}
class CustomVisibilityInspectorPackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext)
= listOf(CustomVisibilityInspectorModule(reactContext))
override fun createViewManagers(reactContext: ReactApplicationContext)
= emptyList<ViewManager<View, ReactShadowNode<*>>>()
}