Files
openchamber/packages/mobile/ios/App/OpenChamberWidget/OpenChamberControl.swift
T

39 lines
1.7 KiB
Swift
Raw Normal View History

import AppIntents
import SwiftUI
import WidgetKit
// Control Center control (iOS 18+): tap the OpenChamber logo to start a new session.
//
// IMPORTANT: this file is a member of BOTH the app target and the widget extension target.
// iOS requires the control's AppIntent to exist in the app target too, otherwise tapping the
// control can't open the app (the tap does nothing). It's kept self-contained (inline URL, no
// dependency on the widget's shared code) so it compiles cleanly in the app target.
@available(iOS 18.0, *)
struct OpenChamberNewSessionControl: ControlWidget {
var body: some ControlWidgetConfiguration {
StaticControlConfiguration(kind: "OpenChamberNewSessionControl") {
ControlWidgetButton(action: OpenNewSessionIntent()) {
// Custom symbol is referenced via `image:` (the asset-catalog symbol path;
// `systemImage:` only finds Apple's system SF Symbols → shows a "?"). The glyph
// uses bold strokes so it stays visible at the control's small, tinted size —
// thin strokes rendered blank.
Label("New Session", image: "OCLogoSymbol")
}
}
.displayName("New Session")
.description("Start a new OpenChamber session.")
}
}
@available(iOS 18.0, *)
struct OpenNewSessionIntent: AppIntent {
static let title: LocalizedStringResource = "New OpenChamber Session"
static let openAppWhenRun: Bool = true
static let isDiscoverable: Bool = true
@MainActor
func perform() async throws -> some IntentResult & OpensIntent {
return .result(opensIntent: OpenURLIntent(URL(string: "openchamber://new")!))
}
}