diff --git a/apps/ios/Sources/Design/TalkProTab.swift b/apps/ios/Sources/Design/TalkProTab.swift index 2e1614155e15..2424edbbfbbf 100644 --- a/apps/ios/Sources/Design/TalkProTab.swift +++ b/apps/ios/Sources/Design/TalkProTab.swift @@ -10,6 +10,10 @@ struct TalkProTab: View { @State private var showPermissionPrompt = false var openSettings: () -> Void + private enum Layout { + static let bottomScrollInset: CGFloat = OpenClawProMetric.bottomScrollInset + 160 + } + private var state: TalkProState { TalkProState( gatewayConnected: self.gatewayConnected, @@ -37,7 +41,7 @@ struct TalkProTab: View { .padding(.top, 16) .padding(.bottom, 18) } - .safeAreaPadding(.bottom, OpenClawProMetric.bottomScrollInset) + .safeAreaPadding(.bottom, Layout.bottomScrollInset) } .navigationBarHidden(true) } @@ -192,13 +196,9 @@ struct TalkProTab: View { .padding(.horizontal, 12) .padding(.top, 11) .padding(.bottom, 3) - Toggle("Speakerphone", isOn: self.$talkSpeakerphoneEnabled) - .padding(.horizontal, 14) - .padding(.vertical, 10) + self.controlToggleRow("Speakerphone", isOn: self.talkSpeakerphoneBinding) Divider().padding(.leading, 14) - Toggle("Background listening", isOn: self.$talkBackgroundEnabled) - .padding(.horizontal, 14) - .padding(.vertical, 10) + self.controlToggleRow("Background listening", isOn: self.$talkBackgroundEnabled) Divider().padding(.leading, 14) Button(action: self.openSettings) { HStack { @@ -218,6 +218,25 @@ struct TalkProTab: View { .padding(.horizontal, OpenClawProMetric.pagePadding) } + private func controlToggleRow(_ title: String, isOn: Binding) -> some View { + Toggle(title, isOn: isOn) + .contentShape(Rectangle()) + .padding(.horizontal, 14) + .padding(.vertical, 10) + .overlay { + // Keep Toggle semantics for accessibility while making the full visual row tappable. + Button { + isOn.wrappedValue.toggle() + } label: { + Rectangle() + .fill(.clear) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .accessibilityHidden(true) + } + } + private func cardHeader( title: String, value: String?, @@ -322,6 +341,15 @@ struct TalkProTab: View { } } + private var talkSpeakerphoneBinding: Binding { + Binding( + get: { self.talkSpeakerphoneEnabled }, + set: { enabled in + self.talkSpeakerphoneEnabled = enabled + self.appModel.setTalkSpeakerphoneEnabled(enabled) + }) + } + private func handlePrimaryAction() { switch self.state.primaryAction { case .start: