@@ -9,98 +9,56 @@ import SwiftUI
9
9
import WatchKit
10
10
11
11
struct ContentView : View {
12
- @ObservedObject var sessionManager = WatchSessionManager . shared
13
- @State private var timer : Timer ? = nil // 타이머 관리
14
- @State private var showHearoadDefault = true // Hearoad 기본 화면 표시 여부
15
-
16
- var body : some View {
17
- ZStack {
18
- // 배경색 설정: 알림 상태, 기본 상태, etc 상태에 따라 변경
19
- backgroundColor ( )
20
- . edgesIgnoringSafeArea ( . all)
21
-
22
- VStack {
23
- if showHearoadDefault {
24
- // Hearoad 기본 화면
25
- Image ( " HearoadLetters " ) // Hearoad 이미지 이름 (녹색 화면)
26
- . resizable ( )
27
- . scaledToFit ( )
28
- . frame ( width: 100 , height: 100 )
29
- . frame ( maxWidth: . infinity, maxHeight: . infinity)
30
- } else if sessionManager. isAlerting {
31
- // 특정 소리 감지 화면
32
- Image ( sessionManager. alertImageName ( ) ) // Siren, Car, Bicycle 이미지 표시
33
- . resizable ( )
34
- . scaledToFit ( )
35
- . frame ( width: 150 , height: 150 )
36
- Text ( sessionManager. alertMessage) // 텍스트: 감지된 소리 이름
37
- . font ( . title2)
38
- . foregroundColor ( . white)
39
- . padding ( . top, 10 )
40
- } else {
41
- // ETC 정보 상태 (소리 수집중)
42
- Image ( " MainCircle " ) // MainCircle 이미지
43
- . resizable ( )
44
- . scaledToFit ( )
45
- . frame ( width: 150 , height: 150 )
46
- Text ( " 소리 수집중 " ) // 텍스트
47
- . font ( . title2)
48
- . foregroundColor ( . gray)
49
- . padding ( . top, 10 )
50
- }
51
- }
52
- }
53
- . onAppear {
54
- startResetTimer ( ) // 초기화 타이머 시작
55
- sessionManager. resetAlert ( ) // 초기 상태 설정
56
- }
57
- . onChange ( of: sessionManager. isAlerting) { newValue in
58
- if newValue {
59
- // Alert 상태가 들어오면 Hearoad 기본 화면 끔
60
- showHearoadDefault = false
61
- cancelResetTimer ( ) // 기존 타이머 취소
62
- startAlertResetTimer ( ) // 알림 상태에서 3초 뒤 복구
63
- }
64
- }
65
- . onChange ( of: sessionManager. alertMessage) { newMessage in
66
- if newMessage == " etc " {
67
- // etc 정보가 들어오면 기본 상태 유지
68
- showHearoadDefault = false
69
- cancelResetTimer ( )
70
- startResetTimer ( ) // etc 상태를 유지하는 5초 타이머
71
- }
72
- }
73
- }
74
-
75
- // 배경색 결정
76
- private func backgroundColor( ) -> Color {
77
- if showHearoadDefault {
78
- return Color ( " HPrimaryColor " ) // 기본 Hearoad 화면
79
- } else if sessionManager. isAlerting {
80
- return Color . red // Alert 상태
81
- } else {
82
- return Color . white // ETC 정보 상태
12
+ @ObservedObject var sessionManager = WatchSessionManager . shared
13
+ @State private var alertTimer : Timer ? = nil // 타이머 관리
14
+ @State private var currentView : String = " working " // 현재 표시중인 뷰
15
+ // @State private var showHearoadDefault = true // Hearoad 기본 화면 표시 여부
16
+
17
+ var body : some View {
18
+ ZStack {
19
+ if currentView == " alert " {
20
+ // 알림 화면
21
+ VStack {
22
+ Image ( sessionManager. alertImageName ( ) )
23
+ . resizable ( )
24
+ . scaledToFit ( )
25
+ . frame ( width: 150 , height: 150 )
26
+ Text ( sessionManager. alertMessage)
27
+ . font ( . title2)
28
+ . foregroundStyle ( Color . red)
29
+ . padding ( . top, 10 )
83
30
}
31
+ } else if sessionManager. currentScreen == " working " {
32
+ WatchWorkingView ( )
33
+ } else {
34
+ WatchHomeView ( )
35
+ }
84
36
}
85
-
86
- // 알림 상태에서 3초 뒤 ETC 상태로 복구
87
- private func startAlertResetTimer( ) {
88
- timer? . invalidate ( ) // 기존 타이머 취소
89
- timer = Timer . scheduledTimer ( withTimeInterval: 3.0 , repeats: false ) { _ in
90
- sessionManager. resetAlert ( ) // 알림 상태 복구
91
- }
37
+ . onChange ( of: sessionManager. isAlerting) { newValue in
38
+ if newValue {
39
+ // 알림 상태로 전환
40
+ currentView = " alert "
41
+ startAlertTimer ( )
42
+ }
92
43
}
93
-
94
- // ETC 상태에서 5초 뒤 기본 Hearoad 화면으로 전환
95
- private func startResetTimer( ) {
96
- timer? . invalidate ( ) // 기존 타이머 취소
97
- timer = Timer . scheduledTimer ( withTimeInterval: 5.0 , repeats: false ) { _ in
98
- showHearoadDefault = true // Hearoad 기본 화면 표시
99
- }
44
+ . onAppear {
45
+ // 기본 화면 설정
46
+ currentView = sessionManager. currentScreen == " working " ? " working " : " home "
100
47
}
101
-
102
- private func cancelResetTimer( ) {
103
- timer? . invalidate ( )
104
- timer = nil
48
+ }
49
+
50
+ private func startAlertTimer( ) {
51
+ alertTimer? . invalidate ( ) // 기존 타이머 취소
52
+ alertTimer = Timer . scheduledTimer ( withTimeInterval: 3.0 , repeats: false ) { _ in
53
+ // 3초 후 원래 화면으로 복구
54
+ currentView = sessionManager. currentScreen == " working " ? " working " : " home "
55
+ sessionManager. resetAlert ( ) // 알림 상태 초기화
105
56
}
57
+ }
58
+
59
+
60
+
61
+ }
62
+ #Preview {
63
+ ContentView ( )
106
64
}
0 commit comments