Skip to content

Commit f8730c1

Browse files
committed
Bugfix: Fixed crash while app tries to get matter device param value.
1 parent 21753df commit f8730c1

File tree

2 files changed

+57
-46
lines changed

2 files changed

+57
-46
lines changed

app/src/main/java/com/espressif/local_control/mDNSManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void onServiceFound(NsdServiceInfo serviceInfo) {
127127
// If the resolver is free, resolve the service to get all the details
128128
if (resolveListenerBusy.compareAndSet(false, true)) {
129129

130-
if (mNsdManager != null) {
130+
if (resolveListener != null) {
131131
mNsdManager.resolveService(serviceInfo, resolveListener);
132132
}
133133

app/src/main/java/com/espressif/matter/ChipClientHelper.kt

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import kotlinx.coroutines.GlobalScope
2828
import kotlinx.coroutines.future.future
2929
import org.greenrobot.eventbus.EventBus
3030
import java.math.BigInteger
31+
import java.util.concurrent.ExecutionException
3132

3233
class ChipClientHelper constructor(private val espApp: EspApplication) {
3334

@@ -48,63 +49,73 @@ class ChipClientHelper constructor(private val espApp: EspApplication) {
4849
return;
4950
}
5051

51-
for ((_, g) in espApp.groupMap.entries) {
52-
if (g.isMatter) {
53-
val nodeDetails = g.nodeDetails
54-
if (nodeDetails != null) {
55-
for ((nodeId, mNodeId) in nodeDetails.entries) {
56-
var fabricId = ""
57-
var ipk = ""
58-
var rootCa = ""
59-
var groupCatIdOperate = ""
60-
if (matterNodeId != mNodeId) {
61-
continue
62-
}
63-
Log.d(
64-
TAG,
65-
"Node detail, node id : $nodeId and matter node id : $matterNodeId"
66-
)
67-
if (g.fabricDetails != null) {
68-
fabricId = g.fabricDetails.fabricId
69-
rootCa = g.fabricDetails.rootCa
70-
ipk = g.fabricDetails.ipk
71-
groupCatIdOperate = g.fabricDetails.groupCatIdOperate
72-
if (!espApp.chipClientMap.containsKey(matterNodeId)) {
73-
if (!TextUtils.isEmpty(fabricId) && !TextUtils.isEmpty(rootCa)
74-
&& !TextUtils.isEmpty(ipk) && !TextUtils.isEmpty(matterNodeId)
75-
&& !TextUtils.isEmpty(matterNodeId)
76-
) {
77-
val chipClient = ChipClient(
78-
espApp, g.groupId, fabricId, rootCa, ipk, groupCatIdOperate
79-
)
80-
espApp.chipClientMap.put(matterNodeId, chipClient)
81-
}
52+
try {
53+
54+
for ((_, g) in espApp.groupMap.entries) {
55+
if (g.isMatter) {
56+
val nodeDetails = g.nodeDetails
57+
if (nodeDetails != null) {
58+
for ((nodeId, mNodeId) in nodeDetails.entries) {
59+
var fabricId = ""
60+
var ipk = ""
61+
var rootCa = ""
62+
var groupCatIdOperate = ""
63+
if (matterNodeId != mNodeId) {
64+
continue
8265
}
83-
espApp.fetchDeviceMatterInfo(matterNodeId, nodeId)
84-
val node: EspNode? = espApp.nodeMap.get(nodeId)
85-
if (node != null) {
86-
getCurrentValues(nodeId, matterNodeId, node)
87-
// val nodeType = node.newNodeType
88-
// if (!TextUtils.isEmpty(nodeType) && nodeType == AppConstants.NODE_TYPE_PURE_MATTER) {
89-
// espApp.addParamsForMatterOnlyDevice(nodeId, matterNodeId, node)
90-
// }
66+
Log.d(
67+
TAG,
68+
"Node detail, node id : $nodeId and matter node id : $matterNodeId"
69+
)
70+
if (g.fabricDetails != null) {
71+
fabricId = g.fabricDetails.fabricId
72+
rootCa = g.fabricDetails.rootCa
73+
ipk = g.fabricDetails.ipk
74+
groupCatIdOperate = g.fabricDetails.groupCatIdOperate
75+
if (!espApp.chipClientMap.containsKey(matterNodeId)) {
76+
if (!TextUtils.isEmpty(fabricId) && !TextUtils.isEmpty(rootCa)
77+
&& !TextUtils.isEmpty(ipk) && !TextUtils.isEmpty(
78+
matterNodeId
79+
)
80+
&& !TextUtils.isEmpty(matterNodeId)
81+
) {
82+
val chipClient = ChipClient(
83+
espApp,
84+
g.groupId,
85+
fabricId,
86+
rootCa,
87+
ipk,
88+
groupCatIdOperate
89+
)
90+
espApp.chipClientMap.put(matterNodeId, chipClient)
91+
}
92+
}
93+
espApp.fetchDeviceMatterInfo(matterNodeId, nodeId)
94+
val node: EspNode? = espApp.nodeMap.get(nodeId)
95+
if (node != null) {
96+
getCurrentValues(nodeId, matterNodeId, node)
97+
}
98+
Log.d(TAG, "Init and fetch cluster info done for the device")
9199
}
92-
Log.d(TAG, "Init and fetch cluster info done for the device")
93100
}
94101
}
95102
}
96103
}
104+
} catch (e: Exception) {
105+
e.printStackTrace()
106+
} finally {
107+
var updateEvent = UpdateEvent(UpdateEventType.EVENT_MATTER_DEVICE_CONNECTIVITY)
108+
var data = Bundle()
109+
data.putString(AppConstants.KEY_MATTER_NODE_ID, matterNodeId)
110+
updateEvent.data = data
111+
EventBus.getDefault().post(updateEvent)
97112
}
98-
var updateEvent = UpdateEvent(UpdateEventType.EVENT_MATTER_DEVICE_CONNECTIVITY)
99-
var data = Bundle()
100-
data.putString(AppConstants.KEY_MATTER_NODE_ID, matterNodeId)
101-
updateEvent.data = data
102-
EventBus.getDefault().post(updateEvent)
103113
}
104114

105115
fun initChipClientInBackground(matterNodeId: String) =
106116
GlobalScope.future { initChipClient(matterNodeId) }
107117

118+
@Throws(ExecutionException::class)
108119
fun getCurrentValues(nodeId: String?, matterNodeId: String?, node: EspNode) {
109120

110121
val id = BigInteger(matterNodeId, 16)

0 commit comments

Comments
 (0)