import Commanding import SwiftUI import WidgetKit /// The Lock Screen banner of the recording Live Activity: a centered stack of the timer of the elapsed recording time, the label /// naming the current state, and the control buttons. struct RecordingLiveActivityView: View { // MARK: Properties /// The dynamic content of the Live Activity to render. let state: RecordingActivityAttributes.ContentState // MARK: Body var body: some View { VStack( alignment: .center, spacing: Constant.Spacing.stack ) { RecordingStateLabel(state: state) RecordingTimerText(state: state) .font(.largeTitle) .fontWeight(.bold) RecordingControls(state: state) } } } // MARK: - Constants /// The constant values used across the recording Live Activity. private enum Constant { /// The spacing constants. enum Spacing { /// The spacing between the elements of a stack. static let stack: CGFloat = 8 } } // MARK: - Previews #Preview( "Recording Live Activity view", as: .content, using: RecordingActivityAttributes() ) { RecordingLiveActivity() } contentStates: { RecordingActivityAttributes.ContentState( state: .recording, anchor: .now, elapsed: 0 ) RecordingActivityAttributes.ContentState( state: .paused, anchor: nil, elapsed: 42 ) RecordingActivityAttributes.ContentState( state: .processing, anchor: nil, elapsed: 42 ) }