Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt +21 −30 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.notification.collection.render import android.annotation.MainThread import android.view.View import com.android.systemui.util.kotlin.transform import com.android.systemui.util.traceSection /** Loading @@ -41,7 +40,6 @@ class ShadeViewDiffer( ) { private val rootNode = ShadeNode(rootController) private val nodes = mutableMapOf(rootController to rootNode) private val views = mutableMapOf<View, ShadeNode>() /** * Adds and removes views from the root (and its children) until their structure matches the Loading @@ -66,27 +64,26 @@ class ShadeViewDiffer( * * For debugging purposes. */ fun getViewLabel(view: View): String = views[view]?.label ?: view.toString() fun getViewLabel(view: View): String = nodes.values.firstOrNull { node -> node.view === view }?.label ?: view.toString() private fun detachChildren( parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec> ) { private fun detachChildren(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val views = nodes.values.associateBy { it.view } fun detachRecursively(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val parentSpec = specMap[parentNode.controller] for (i in parentNode.getChildCount() - 1 downTo 0) { val childView = parentNode.getChildAt(i) views[childView]?.let { childNode -> val childSpec = specMap[childNode.controller] maybeDetachChild(parentNode, parentSpec, childNode, childSpec) if (childNode.controller.getChildCount() > 0) { detachChildren(childNode, specMap) detachRecursively(childNode, specMap) } } } } detachRecursively(parentNode, specMap) } private fun maybeDetachChild( parentNode: ShadeNode, Loading @@ -94,14 +91,13 @@ class ShadeViewDiffer( childNode: ShadeNode, childSpec: NodeSpec? ) { val newParentNode = transform(childSpec?.parent) { getNode(it) } val newParentNode = childSpec?.parent?.let { getNode(it) } if (newParentNode != parentNode) { val childCompletelyRemoved = newParentNode == null if (childCompletelyRemoved) { nodes.remove(childNode.controller) views.remove(childNode.controller.view) } logger.logDetachingChild( Loading @@ -115,10 +111,7 @@ class ShadeViewDiffer( } } private fun attachChildren( parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec> ) { private fun attachChildren(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val parentSpec = checkNotNull(specMap[parentNode.controller]) for ((index, childSpec) in parentSpec.children.withIndex()) { Loading Loading @@ -160,7 +153,6 @@ class ShadeViewDiffer( if (node == null) { node = ShadeNode(spec.controller) nodes[node.controller] = node views[node.view] = node } return node } Loading Loading @@ -194,10 +186,9 @@ class ShadeViewDiffer( private class DuplicateNodeException(message: String) : RuntimeException(message) private class ShadeNode( val controller: NodeController ) { val view = controller.view private class ShadeNode(val controller: NodeController) { val view: View get() = controller.view var parent: ShadeNode? = null Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt +21 −30 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.notification.collection.render import android.annotation.MainThread import android.view.View import com.android.systemui.util.kotlin.transform import com.android.systemui.util.traceSection /** Loading @@ -41,7 +40,6 @@ class ShadeViewDiffer( ) { private val rootNode = ShadeNode(rootController) private val nodes = mutableMapOf(rootController to rootNode) private val views = mutableMapOf<View, ShadeNode>() /** * Adds and removes views from the root (and its children) until their structure matches the Loading @@ -66,27 +64,26 @@ class ShadeViewDiffer( * * For debugging purposes. */ fun getViewLabel(view: View): String = views[view]?.label ?: view.toString() fun getViewLabel(view: View): String = nodes.values.firstOrNull { node -> node.view === view }?.label ?: view.toString() private fun detachChildren( parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec> ) { private fun detachChildren(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val views = nodes.values.associateBy { it.view } fun detachRecursively(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val parentSpec = specMap[parentNode.controller] for (i in parentNode.getChildCount() - 1 downTo 0) { val childView = parentNode.getChildAt(i) views[childView]?.let { childNode -> val childSpec = specMap[childNode.controller] maybeDetachChild(parentNode, parentSpec, childNode, childSpec) if (childNode.controller.getChildCount() > 0) { detachChildren(childNode, specMap) detachRecursively(childNode, specMap) } } } } detachRecursively(parentNode, specMap) } private fun maybeDetachChild( parentNode: ShadeNode, Loading @@ -94,14 +91,13 @@ class ShadeViewDiffer( childNode: ShadeNode, childSpec: NodeSpec? ) { val newParentNode = transform(childSpec?.parent) { getNode(it) } val newParentNode = childSpec?.parent?.let { getNode(it) } if (newParentNode != parentNode) { val childCompletelyRemoved = newParentNode == null if (childCompletelyRemoved) { nodes.remove(childNode.controller) views.remove(childNode.controller.view) } logger.logDetachingChild( Loading @@ -115,10 +111,7 @@ class ShadeViewDiffer( } } private fun attachChildren( parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec> ) { private fun attachChildren(parentNode: ShadeNode, specMap: Map<NodeController, NodeSpec>) { val parentSpec = checkNotNull(specMap[parentNode.controller]) for ((index, childSpec) in parentSpec.children.withIndex()) { Loading Loading @@ -160,7 +153,6 @@ class ShadeViewDiffer( if (node == null) { node = ShadeNode(spec.controller) nodes[node.controller] = node views[node.view] = node } return node } Loading Loading @@ -194,10 +186,9 @@ class ShadeViewDiffer( private class DuplicateNodeException(message: String) : RuntimeException(message) private class ShadeNode( val controller: NodeController ) { val view = controller.view private class ShadeNode(val controller: NodeController) { val view: View get() = controller.view var parent: ShadeNode? = null Loading