Skip to content

Commit 2f707f9

Browse files
PollyBot13steipete
andauthored
fix: prevent Voice Wake crash after Talk audio capture (#99137)
* fix: prevent Voice Wake audio restart race * fix: handle in-flight Voice Wake suspension * test(ios): harden Voice Wake lifecycle proof * fix(ios): remove Voice Wake tap after failed start --------- Co-authored-by: Peter Steinberger <[email protected]>
1 parent cb6611d commit 2f707f9

6 files changed

Lines changed: 289 additions & 55 deletions

File tree

apps/.i18n/native-source.json

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8203,167 +8203,167 @@
82038203
},
82048204
{
82058205
"kind": "conditional-branch",
8206-
"line": 610,
8206+
"line": 613,
82078207
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82088208
"source": "Configured",
82098209
"surface": "apple",
82108210
"id": "native.apple.fbf8fb158f556a76"
82118211
},
82128212
{
82138213
"kind": "conditional-branch",
8214-
"line": 610,
8214+
"line": 613,
82158215
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82168216
"source": "Not configured",
82178217
"surface": "apple",
82188218
"id": "native.apple.ad28c6e82fda63b0"
82198219
},
82208220
{
82218221
"kind": "conditional-branch",
8222-
"line": 675,
8222+
"line": 678,
82238223
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82248224
"source": "Connect to the gateway.",
82258225
"surface": "apple",
82268226
"id": "native.apple.0e6f25ab4a59543a"
82278227
},
82288228
{
82298229
"kind": "conditional-branch",
8230-
"line": 675,
8230+
"line": 678,
82318231
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82328232
"source": "Gateway requests will appear here.",
82338233
"surface": "apple",
82348234
"id": "native.apple.0b7a54926d06b7d8"
82358235
},
82368236
{
82378237
"kind": "conditional-branch",
8238-
"line": 730,
8238+
"line": 733,
82398239
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82408240
"source": "High",
82418241
"surface": "apple",
82428242
"id": "native.apple.0194fd3744125fd1"
82438243
},
82448244
{
82458245
"kind": "conditional-branch",
8246-
"line": 730,
8246+
"line": 733,
82478247
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82488248
"source": "Resolving",
82498249
"surface": "apple",
82508250
"id": "native.apple.cf64badb547e25c3"
82518251
},
82528252
{
82538253
"kind": "conditional-branch",
8254-
"line": 735,
8254+
"line": 738,
82558255
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82568256
"source": "One-time approval",
82578257
"surface": "apple",
82588258
"id": "native.apple.c84829a753b01fe6"
82598259
},
82608260
{
82618261
"kind": "conditional-branch",
8262-
"line": 735,
8262+
"line": 738,
82638263
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82648264
"source": "Permission can be saved",
82658265
"surface": "apple",
82668266
"id": "native.apple.b02830c5966591df"
82678267
},
82688268
{
82698269
"kind": "conditional-branch",
8270-
"line": 737,
8270+
"line": 740,
82718271
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82728272
"source": "Medium",
82738273
"surface": "apple",
82748274
"id": "native.apple.3ce9dc6fee455ee5"
82758275
},
82768276
{
82778277
"kind": "conditional-branch",
8278-
"line": 737,
8278+
"line": 740,
82798279
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82808280
"source": "Review",
82818281
"surface": "apple",
82828282
"id": "native.apple.7d5aa3128fb859da"
82838283
},
82848284
{
82858285
"kind": "conditional-branch",
8286-
"line": 762,
8286+
"line": 765,
82878287
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82888288
"source": "\\(diagnosticsIssueCount)",
82898289
"surface": "apple",
82908290
"id": "native.apple.8ae57748b0b13d62"
82918291
},
82928292
{
82938293
"kind": "conditional-branch",
8294-
"line": 772,
8294+
"line": 775,
82958295
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
82968296
"source": "Location \\(self.locationLabel)",
82978297
"surface": "apple",
82988298
"id": "native.apple.f93745d2550799de"
82998299
},
83008300
{
83018301
"kind": "conditional-branch",
8302-
"line": 772,
8302+
"line": 775,
83038303
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83048304
"source": "Location off",
83058305
"surface": "apple",
83068306
"id": "native.apple.acbedcae9f022c29"
83078307
},
83088308
{
83098309
"kind": "conditional-branch",
8310-
"line": 777,
8310+
"line": 780,
83118311
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83128312
"source": "Off",
83138313
"surface": "apple",
83148314
"id": "native.apple.539d9f2b9cde9cb3"
83158315
},
83168316
{
83178317
"kind": "conditional-branch",
8318-
"line": 778,
8318+
"line": 781,
83198319
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83208320
"source": "While Using",
83218321
"surface": "apple",
83228322
"id": "native.apple.86a934ca21b05d9c"
83238323
},
83248324
{
83258325
"kind": "conditional-branch",
8326-
"line": 779,
8326+
"line": 782,
83278327
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83288328
"source": "Always",
83298329
"surface": "apple",
83308330
"id": "native.apple.7774b67d295ea77d"
83318331
},
83328332
{
83338333
"kind": "conditional-branch",
8334-
"line": 793,
8334+
"line": 796,
83358335
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83368336
"source": "Checking iOS notification permission.",
83378337
"surface": "apple",
83388338
"id": "native.apple.2829150c12160b55"
83398339
},
83408340
{
83418341
"kind": "conditional-branch",
8342-
"line": 795,
8342+
"line": 798,
83438343
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83448344
"source": "OpenClaw can show approval prompts and event alerts when the app is not active.",
83458345
"surface": "apple",
83468346
"id": "native.apple.ea2016fd75ff79c9"
83478347
},
83488348
{
83498349
"kind": "conditional-branch",
8350-
"line": 797,
8350+
"line": 800,
83518351
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83528352
"source": "Notifications have been denied. Enable them in iOS Settings.",
83538353
"surface": "apple",
83548354
"id": "native.apple.408e00d224b5a5ac"
83558355
},
83568356
{
83578357
"kind": "conditional-branch",
8358-
"line": 799,
8358+
"line": 802,
83598359
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83608360
"source": "Enable notifications to receive approval prompts and event alerts outside the app.",
83618361
"surface": "apple",
83628362
"id": "native.apple.33add8a7917bad7e"
83638363
},
83648364
{
83658365
"kind": "conditional-branch",
8366-
"line": 801,
8366+
"line": 804,
83678367
"path": "apps/ios/Sources/Design/SettingsProTabActions.swift",
83688368
"source": "OpenClaw cannot determine the current notification permission state.",
83698369
"surface": "apple",
@@ -11489,6 +11489,22 @@
1148911489
"surface": "apple",
1149011490
"id": "native.apple.d2db26b3bb266491"
1149111491
},
11492+
{
11493+
"kind": "conditional-branch",
11494+
"line": 260,
11495+
"path": "apps/ios/Sources/Voice/VoiceWakeManager.swift",
11496+
"source": "Off",
11497+
"surface": "apple",
11498+
"id": "native.apple.b6bc54876f20104f"
11499+
},
11500+
{
11501+
"kind": "conditional-branch",
11502+
"line": 260,
11503+
"path": "apps/ios/Sources/Voice/VoiceWakeManager.swift",
11504+
"source": "Paused",
11505+
"surface": "apple",
11506+
"id": "native.apple.5590d661cdc81fbf"
11507+
},
1149211508
{
1149311509
"kind": "ui-named-argument",
1149411510
"line": 96,

apps/ios/Sources/Design/SettingsProTabActions.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ extension SettingsProTab {
8080
detail: self.appModel.voiceWake.statusText,
8181
value: self.voiceWakeEnabled ? "on" : "off",
8282
color: self.voiceWakeEnabled ? OpenClawBrand.ok : .secondary)
83+
.accessibilityElement(children: .combine)
84+
.accessibilityIdentifier("diagnostics-voice-wake-status")
85+
.accessibilityValue(self.appModel.voiceWake.statusText)
8386
}
8487
}
8588
.padding(.horizontal, OpenClawProMetric.pagePadding)

0 commit comments

Comments
 (0)