-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHeartModel.java
More file actions
100 lines (82 loc) · 2.25 KB
/
HeartModel.java
File metadata and controls
100 lines (82 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package MVCPattern.DJExample;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
public class HeartModel {
ArrayList<BeatObserver> beatObservers = new ArrayList<>();
ArrayList<BPMObserver> bpmObservers = new ArrayList<>();
private int heartRate = 72;
private Timer timer;
private boolean isRunning = false;
public int getHeartRate() {
return heartRate;
}
public void setHeartRate(int heartRate) {
this.heartRate = heartRate;
notifyBPMObservers();
// If running, restart timer with new heart rate
if (isRunning) {
stopTimer();
startTimer();
}
}
public void increaseHeartRate() {
setHeartRate(heartRate + 1);
}
public void decreaseHeartRate() {
setHeartRate(heartRate - 1);
}
public void on() {
isRunning = true;
startTimer();
notifyBPMObservers();
}
public void off() {
isRunning = false;
stopTimer();
notifyBPMObservers();
}
public void initialize() {
heartRate = 72;
isRunning = false;
}
public void registerObserver(BeatObserver o) {
beatObservers.add(o);
}
public void removeObserver(BeatObserver o) {
beatObservers.remove(o);
}
public void registerObserver(BPMObserver o) {
bpmObservers.add(o);
}
public void removeObserver(BPMObserver o) {
bpmObservers.remove(o);
}
private void startTimer() {
if (heartRate <= 0) return;
timer = new Timer();
long interval = 60000 / heartRate; // Convert BPM to milliseconds per beat
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
notifyBeatObservers();
}
}, 0, interval);
}
private void stopTimer() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
private void notifyBeatObservers() {
for (BeatObserver observer : beatObservers) {
observer.updateBeat();
}
}
private void notifyBPMObservers() {
for (BPMObserver observer : bpmObservers) {
observer.updateBPM();
}
}
}