From df90c681b1ec0e3c62527776c2c23fd7d29899fc Mon Sep 17 00:00:00 2001 From: Jeff DeCew Date: Fri, 25 Sep 2020 11:00:44 -0400 Subject: [PATCH] Add some logging to help diagnose a crash with duplicate section headers Test: manual Change-Id: I81ba7561dcb509ca6881cce0b61a5fdd5f5ea661 --- .../notification/collection/render/ShadeViewDiffer.kt | 11 +++++++++-- .../collection/render/ShadeViewDifferLogger.kt | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt index 22ca4961320c8..7babbb40b6c18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt @@ -172,14 +172,19 @@ class ShadeViewDiffer( private fun treeToMap(tree: NodeSpec): Map { val map = mutableMapOf() - registerNodes(tree, map) + try { + registerNodes(tree, map) + } catch (ex: DuplicateNodeException) { + logger.logDuplicateNodeInTree(tree, ex) + throw ex + } return map } private fun registerNodes(node: NodeSpec, map: MutableMap) { if (map.containsKey(node.controller)) { - throw RuntimeException("Node ${node.controller.nodeLabel} appears more than once") + throw DuplicateNodeException("Node ${node.controller.nodeLabel} appears more than once") } map[node.controller] = node @@ -191,6 +196,8 @@ class ShadeViewDiffer( } } +private class DuplicateNodeException(message: String) : RuntimeException(message) + private class ShadeNode( val controller: NodeController ) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt index 19e156f572d44..d27455004c018 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification.collection.render import com.android.systemui.log.LogBuffer import com.android.systemui.log.LogLevel import com.android.systemui.log.dagger.NotificationLog +import java.lang.RuntimeException import javax.inject.Inject class ShadeViewDifferLogger @Inject constructor( @@ -67,6 +68,15 @@ class ShadeViewDifferLogger @Inject constructor( "Moving child view $str1 in $str2 to index $int1" }) } + + fun logDuplicateNodeInTree(node: NodeSpec, ex: RuntimeException) { + buffer.log(TAG, LogLevel.ERROR, { + str1 = ex.toString() + str2 = treeSpecToStr(node) + }, { + "$str1 when mapping tree: $str2" + }) + } } private const val TAG = "NotifViewManager" \ No newline at end of file