1+ import 'package:flutter/material.dart' ;
12import 'package:shock_alarm_app/services/openshock.dart' ;
23import 'package:shared_preferences/shared_preferences.dart' ;
34import 'package:android_alarm_manager_plus/android_alarm_manager_plus.dart' ;
@@ -17,6 +18,8 @@ class AlarmListManager {
1718
1819 Function ? reloadAllMethod;
1920
21+ BuildContext ? context;
22+
2023
2124 Future loadAllFromStorage () async {
2225 final SharedPreferences prefs = await SharedPreferences .getInstance ();
@@ -49,6 +52,30 @@ class AlarmListManager {
4952 }
5053 }
5154
55+ void rescheduleAlarms () async {
56+ for (var alarm in _alarms) {
57+ if (alarm.active) {
58+ await alarm.schedule (this );
59+ }
60+ }
61+ }
62+
63+ int getNewAlarmId () {
64+ int id = 0 ;
65+ bool foundNew = true ;
66+ while (! foundNew) {
67+ foundNew = true ;
68+ for (var alarm in _alarms) {
69+ if (alarm.id == id) {
70+ id++ ;
71+ foundNew = false ;
72+ break ;
73+ }
74+ }
75+ }
76+ return id;
77+ }
78+
5279 saveAlarm (ObservableAlarmBase alarm) async {
5380 final index =
5481 _alarms.indexWhere ((findAlarm) => alarm.id == findAlarm.id);
@@ -58,14 +85,15 @@ class AlarmListManager {
5885 } else {
5986 _alarms[index] = alarm;
6087 }
61- final SharedPreferences prefs = await SharedPreferences .getInstance ();
6288 rebuildAlarmShockers ();
63- prefs.setString ("alarms" , jsonEncode (_alarms));
89+ rescheduleAlarms ();
90+ saveAlarms ();
6491 }
6592
6693 Future updateShockerStore () async {
6794 List <Shocker > shockers = [];
68- for (var token in _tokens) {
95+ List <Token > tokensCopy = this ._tokens.toList (); // create a copy
96+ for (var token in tokensCopy) {
6997 OpenShockClient client = OpenShockClient ();
7098 token.name = await client.getNameForToken (token);
7199 List <Shocker > s = await client.GetShockersForToken (token);
@@ -78,8 +106,8 @@ class AlarmListManager {
78106 }
79107 this .shockers.clear ();
80108 this .shockers.addAll (shockers);
81- final SharedPreferences prefs = await SharedPreferences . getInstance ();
82- prefs. setString ( "shockers" , jsonEncode (shockers) );
109+ saveShockers ();
110+ saveTokens ( );
83111 updateHubList ();
84112 rebuildAlarmShockers ();
85113 reloadAllMethod !();
@@ -92,8 +120,7 @@ class AlarmListManager {
92120 } else {
93121 _tokens[index] = token;
94122 }
95- final SharedPreferences prefs = await SharedPreferences .getInstance ();
96- prefs.setString ("tokens" , jsonEncode (_tokens));
123+ saveTokens ();
97124 updateShockerStore ();
98125 //await _storage.writeList(_tokens.tokens);
99126 }
@@ -125,24 +152,39 @@ class AlarmListManager {
125152 }
126153 }
127154
128- getAlarms () {
155+ List < ObservableAlarmBase > getAlarms () {
129156 return _alarms;
130157 }
131158
132159 getTokens () {
133160 return _tokens;
134161 }
135162
163+ void saveShockers () async {
164+ final SharedPreferences prefs = await SharedPreferences .getInstance ();
165+ prefs.setString ("shockers" , jsonEncode (shockers));
166+ }
167+
168+ void saveAlarms () async {
169+ final SharedPreferences prefs = await SharedPreferences .getInstance ();
170+ prefs.setString ("alarms" , jsonEncode (_alarms));
171+ }
172+
173+ void saveTokens () async {
174+ final SharedPreferences prefs = await SharedPreferences .getInstance ();
175+ prefs.setString ("tokens" , jsonEncode (_tokens));
176+ }
177+
136178 void deleteToken (Token token) {
137179 _tokens.removeWhere ((findToken) => token.id == findToken.id);
138- //await _storage.writeList(_tokens.tokens );
180+ saveTokens ( );
139181 }
140182
141183 Token ? getToken (int id) {
142184 return _tokens.firstWhere ((findToken) => id == findToken.id);
143185 }
144186
145- void sendShock (ControlType type, Shocker shocker, int currentIntensity, int currentDuration) {
187+ void sendShock (ControlType type, Shocker shocker, int currentIntensity, int currentDuration, { String customName = "ShockAlarm" } ) {
146188 Control control = Control ();
147189 control.intensity = currentIntensity;
148190 control.duration = currentDuration;
@@ -154,7 +196,8 @@ class AlarmListManager {
154196 print ("Token not found" );
155197 return ;
156198 }
199+ print ("Sending shock to ${shocker .name } with intensity $currentIntensity and duration $currentDuration " );
157200 OpenShockClient client = OpenShockClient ();
158- client.sendControls (t, [control]);
201+ client.sendControls (t, [control], customName : customName );
159202 }
160203}
0 commit comments