Refined the Recording Live Activity presentation in the Attendi widget target.
This commit is contained in:
@@ -37,8 +37,8 @@ struct ActionButtonStyle: PrimitiveButtonStyle {
|
||||
width: Constant.Size.icon.width,
|
||||
height: Constant.Size.icon.height
|
||||
)
|
||||
.foregroundStyle(.primary)
|
||||
.padding(Constant.Padding.icon)
|
||||
.foregroundStyle(.windowBackground)
|
||||
.background {
|
||||
Circle()
|
||||
.foregroundStyle(backgroundColor)
|
||||
|
||||
@@ -18,13 +18,12 @@ struct RecordingLiveActivityView: View {
|
||||
alignment: .center,
|
||||
spacing: Constant.Spacing.stack
|
||||
) {
|
||||
RecordingStateLabel(state: state)
|
||||
|
||||
RecordingTimerText(state: state)
|
||||
.font(.largeTitle)
|
||||
.fontWeight(.bold)
|
||||
.monospacedDigit()
|
||||
|
||||
RecordingStateLabel(state: state)
|
||||
|
||||
|
||||
RecordingControls(state: state)
|
||||
}
|
||||
}
|
||||
@@ -35,35 +34,11 @@ struct RecordingLiveActivityView: View {
|
||||
|
||||
/// The constant values used across the recording Live Activity.
|
||||
private enum Constant {
|
||||
/// The size constants.
|
||||
enum Size {
|
||||
/// The maximum width of the timer in the compact trailing presentation of the Dynamic Island.
|
||||
static let compactTimer: CGFloat = 44
|
||||
}
|
||||
|
||||
/// The spacing constants.
|
||||
enum Spacing {
|
||||
/// The spacing between the elements of a stack.
|
||||
static let stack: CGFloat = 8
|
||||
}
|
||||
|
||||
/// The system symbol constants.
|
||||
enum Symbol {
|
||||
/// The symbol of the discard button.
|
||||
static let discard = "trash"
|
||||
/// The symbol marking the recording flow.
|
||||
static let microphone = "mic.fill"
|
||||
/// The symbol of the main button while recording.
|
||||
static let pause = "pause.fill"
|
||||
/// The symbol of the main button while paused.
|
||||
static let record = "record.circle"
|
||||
}
|
||||
|
||||
/// The time constants.
|
||||
enum Time {
|
||||
/// The span of the running timer, comfortably beyond the maximum lifetime of a Live Activity.
|
||||
static let span: TimeInterval = 24 * 60 * 60
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
@@ -22,27 +22,49 @@ struct RecordingLiveActivity: Widget {
|
||||
} dynamicIsland: { context in
|
||||
DynamicIsland {
|
||||
DynamicIslandExpandedRegion(.leading) {
|
||||
RecordingStateLabel(state: context.state)
|
||||
RecordingStateLabel(
|
||||
state: context.state
|
||||
)
|
||||
}
|
||||
DynamicIslandExpandedRegion(.trailing) {
|
||||
RecordingTimerText(state: context.state)
|
||||
.font(.title2)
|
||||
.fontWeight(.bold)
|
||||
.monospacedDigit()
|
||||
RecordingTimerText(
|
||||
state: context.state
|
||||
)
|
||||
}
|
||||
DynamicIslandExpandedRegion(.bottom) {
|
||||
RecordingControls(state: context.state)
|
||||
RecordingControls(
|
||||
state: context.state
|
||||
)
|
||||
}
|
||||
} compactLeading: {
|
||||
Image(systemName: Constant.Symbol.microphone)
|
||||
.foregroundStyle(.red)
|
||||
switch context.state.state {
|
||||
case .paused:
|
||||
Image.Symbol.pause
|
||||
.foregroundStyle(.yellow)
|
||||
case .processing:
|
||||
Image.Symbol.send
|
||||
.foregroundStyle(.green)
|
||||
case .recording:
|
||||
Image.Symbol.microphone
|
||||
.foregroundStyle(.yellow)
|
||||
}
|
||||
} compactTrailing: {
|
||||
RecordingTimerText(state: context.state)
|
||||
.monospacedDigit()
|
||||
.frame(maxWidth: Constant.Size.compactTimer)
|
||||
RecordingTimerText(
|
||||
state: context.state
|
||||
)
|
||||
.frame(maxWidth: Constant.Size.compactTimer)
|
||||
} minimal: {
|
||||
Image(systemName: Constant.Symbol.microphone)
|
||||
.foregroundStyle(.red)
|
||||
switch context.state.state {
|
||||
case .paused:
|
||||
Image.Symbol.pause
|
||||
.foregroundStyle(.yellow)
|
||||
case .processing:
|
||||
Image.Symbol.send
|
||||
.foregroundStyle(.green)
|
||||
case .recording:
|
||||
Image.Symbol.microphone
|
||||
.foregroundStyle(.yellow)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user