Clover Coverage Report - AnCal Coverage Report
Coverage timestamp: gio dic 18 2014 12:18:42 EST
../../../../../img/srcFileCovDistChart9.png 40% of files have more coverage
134   327   58   6,7
72   256   0,43   20
20     2,9  
1    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  AlarmsManager       Line # 12 134 58 84,5% 0.84513277
 
No Tests
 
1   
2    package pl.magot.vetch.ancal.reminder;
3   
4   
5    import java.util.ArrayList;
6    import android.database.Cursor;
7    import pl.magot.vetch.ancal.Prefs;
8    import pl.magot.vetch.ancal.database.*;
9    import java.util.*;
10   
11   
 
12    public class AlarmsManager
13    {
14    //types
15    public static final int iAction_NONE = 0;
16    public static final int iAction_CLEAR = 1;
17    public static final int iAction_SNOOZE = 2;
18    public static final int iAction_RESET = 3;
19   
20    //fields
21    private Calendar calNow = Calendar.getInstance();
22    private Calendar calActionClear = Calendar.getInstance();
23    private Calendar calActionSnooze = Calendar.getInstance();
24   
25    //fields
26    private Database db = null;
27    private Prefs prefs = null;
28    private DataRowAlarm rowAlarm = null;
29    private DataTable tblAlarms = null;
30   
31    //fields
32    private ArrayList<AlarmDialogDataItem> vecAlarms = new ArrayList<AlarmDialogDataItem>();
33   
34    //methods
 
35  7 toggle public AlarmsManager(Database db, Prefs prefs)
36    {
37  7 this.db = db;
38  7 this.prefs = prefs;
39  7 rowAlarm = new DataRowAlarm(db);
40  7 tblAlarms = new DataTable(rowAlarm);
41    }
42   
 
43  3 toggle public void clear()
44    {
45  3 vecAlarms.clear();
46    }
47   
 
48  2 toggle public void putAlarmToProcess(AlarmDialogDataItem alarm, int iAction)
49    {
50  2 alarm.setAction(iAction);
51  2 vecAlarms.add(alarm);
52    }
53   
 
54  3 toggle public void processAll()
55    {
56  5 for (int i = 0; i < vecAlarms.size(); i++)
57    {
58  2 final Database.Result result = processAlarm(vecAlarms.get(i));
59  2 if (result != Database.Result.Success)
60    {
61    //utils.MsgResStr(Database.GetErrDesc(result), Utils.MsgType.Error);
62    //break;
63    }
64    }
65    }
66   
 
67  2 toggle private Database.Result processAlarm(AlarmDialogDataItem alarm)
68    {
69  2 final int iType = alarm.getOrderFilter();
70  2 final long lRefID = alarm.getID();
71  2 final int iAction = alarm.getAction();
72   
73    //update alarms table
74  2 final Database.Result result = UpdateAlarmDataRow(iType, lRefID, iAction);
75  2 return result;
76    }
77   
 
78  3 toggle private void SetAlarmAction(int iType, long lRefID, int iAction)
79    {
80  3 long lCurrTimeNow = System.currentTimeMillis();
81   
82  3 rowAlarm.lType = iType;
83  3 rowAlarm.lRefID = lRefID;
84   
85  3 rowAlarm.lActionClear = 0;
86  3 rowAlarm.lActionSnooze = 0;
87   
88  3 if (iAction == iAction_CLEAR)
89    {
90  1 rowAlarm.lActionClear = lCurrTimeNow;
91  1 rowAlarm.lSnoozeCount = 0;
92    }
93   
94  3 if (iAction == iAction_SNOOZE)
95    {
96  1 rowAlarm.lActionSnooze = lCurrTimeNow;
97  1 rowAlarm.lSnoozeCount = rowAlarm.lSnoozeCount + 1;
98   
99    //clear alarm if snooze count has max value
100  1 if (rowAlarm.lSnoozeCount > prefs.iSnoozeCount)
101  0 SetAlarmAction(iType, lRefID, iAction_CLEAR);
102    }
103   
104  3 if (iAction == iAction_RESET)
105    {
106  1 rowAlarm.lActionClear = 0;
107  1 rowAlarm.lActionSnooze = 0;
108  1 rowAlarm.lSnoozeCount = 0;
109    }
110    }
111   
 
112  3 toggle private Database.Result UpdateAlarmDataRow(int iType, long lRefID, int iAction)
113    {
114  3 Database.Result result = Database.Result.errUnknown;
115  3 final Cursor cr = tblAlarms.LocateAlarmDataRow(iType, lRefID);
116  3 if (cr == null)
117    {
118  0 result = Database.Result.errCantGetData;
119    } else {
120    //update table
121  3 if (cr.getCount() > 0)
122    {
123    //update existing row
124  1 if (rowAlarm.GetValuesFromCursor(cr))
125    {
126  1 try
127    {
128  1 rowAlarm.GetValuesFromDataRow();
129  1 SetAlarmAction(iType, lRefID, iAction);
130  1 cr.close();
131  1 result = DataRow_update(iType, lRefID);
132    } catch (Exception e) {
133  0 return Database.Result.errCantGetValuesFromDataRow;
134    }
135    } else {
136  0 result = Database.Result.errCantGetDataFromTable;
137    }
138    } else {
139    //insert new row
140  2 rowAlarm.lSnoozeCount = 1;
141  2 SetAlarmAction(iType, lRefID, iAction);
142  2 result = DataRow_insert();
143    }
144    }
145  3 return result;
146    }
147   
 
148  2 toggle private Database.Result DataRow_insert()
149    {
150  2 Database.Result result = Database.Result.errUnknown;
151    //get data to ContentValues
152  2 rowAlarm.SetValuesForDataRow();
153    //insert data row
154  2 long lRowId = db.GetSQLiteDb().insert(tblAlarms.GetTableName(), null, rowAlarm.GetContentValues());
155  2 if (lRowId != -1)
156  2 result = Database.Result.Success;
157  2 return result;
158    }
159   
 
160  1 toggle private Database.Result DataRow_update(int iType, long lRefID)
161    {
162  1 Database.Result result = Database.Result.errUnknown;
163    //get data to ContentValues
164  1 rowAlarm.SetValuesForDataRow();
165    //update data row
166  1 final String sWhere = String.format("Type = %d and RefID = %d", iType, lRefID);
167  1 long lRowsUpdated = db.GetSQLiteDb().update(tblAlarms.GetTableName(), rowAlarm.GetContentValues(), sWhere, null);
168  1 if (lRowsUpdated == 1)
169  1 result = Database.Result.Success;
170  1 return result;
171    }
172   
 
173  3 toggle public static boolean DeleteAlarm(Database db, Prefs prefs, DataTable tblSource, long lRefID)
174    {
175  3 if (AlarmsManager.AlarmToProcess(tblSource))
176    {
177  2 AlarmsManager am = new AlarmsManager(db, prefs);
178  2 return (am.DataRow_delete(tblSource, lRefID) == Database.Result.Success);
179    }
180  1 return false;
181    }
182   
 
183  1 toggle public static boolean ResetAlarm(Database db, Prefs prefs, DataTable tblSource, long lRefID)
184    {
185  1 if (AlarmsManager.AlarmToProcess(tblSource))
186    {
187  1 AlarmsManager am = new AlarmsManager(db, prefs);
188  1 return (am.DataRow_reset(tblSource, lRefID) == Database.Result.Success);
189    }
190  0 return false;
191    }
192   
 
193  4 toggle private static boolean AlarmToProcess(DataTable tblSource)
194    {
195    //get source data/table type
196  4 int iType = -1;
197  4 if (tblSource.GetTableName().equals(Database.sTableNameAppointments))
198  2 iType = AlarmDataViewItem.iOrderAppts;
199  4 if (tblSource.GetTableName().equals(Database.sTableNameTasks))
200  1 iType = AlarmDataViewItem.iOrderTasks;
201    //process alarm
202  4 if (iType != -1)
203  3 return true;
204  1 return false;
205    }
206   
 
207  1 toggle public Database.Result DataRow_reset(DataTable tblSource, long lRefID)
208    {
209    //get source data/table type
210  1 int iType = -1;
211  1 if (tblSource.GetTableName().equals(Database.sTableNameAppointments))
212  1 iType = AlarmDataViewItem.iOrderAppts;
213  1 if (tblSource.GetTableName().equals(Database.sTableNameTasks))
214  0 iType = AlarmDataViewItem.iOrderTasks;
215    //delete alarm
216  1 Database.Result result = Database.Result.errUnknown;
217  1 if (iType != -1)
218    {
219    //delete data row
220  1 result = UpdateAlarmDataRow(iType, lRefID, iAction_RESET);
221    }
222  1 return result;
223    }
224   
 
225  2 toggle public Database.Result DataRow_delete(DataTable tblSource, long lRefID)
226    {
227    //get source data/table type
228  2 int iType = -1;
229  2 if (tblSource.GetTableName().equals(Database.sTableNameAppointments))
230  1 iType = AlarmDataViewItem.iOrderAppts;
231  2 if (tblSource.GetTableName().equals(Database.sTableNameTasks))
232  1 iType = AlarmDataViewItem.iOrderTasks;
233    //delete alarm
234  2 Database.Result result = Database.Result.errUnknown;
235  2 if (iType != -1)
236    {
237    //delete data row
238  2 result = DataRow_delete(iType, lRefID);
239    }
240  2 return result;
241    }
242   
 
243  2 toggle private Database.Result DataRow_delete(int iType, long lRefID)
244    {
245  2 Database.Result result = Database.Result.errUnknown;
246    //delete data row
247  2 final String sWhere = String.format("Type = %d and RefID = %d", iType, lRefID);
248  2 long lRowsUpdated = db.GetSQLiteDb().delete(tblAlarms.GetTableName(), sWhere, null);
249  2 if (lRowsUpdated == 1)
250  0 result = Database.Result.Success;
251  2 return result;
252    }
253   
 
254  6 toggle private boolean IsAlarmTodayCleared()
255    {
256  6 if (rowAlarm.lActionClear > 0)
257    {
258  3 calNow.setTimeInMillis(System.currentTimeMillis());
259  3 calActionClear.setTimeInMillis(rowAlarm.lActionClear);
260   
261  3 if (calActionClear.get(Calendar.YEAR) == calNow.get(Calendar.YEAR))
262  3 if (calActionClear.get(Calendar.MONTH) == calNow.get(Calendar.MONTH))
263  3 if (calActionClear.get(Calendar.DAY_OF_MONTH) == calNow.get(Calendar.DAY_OF_MONTH))
264  3 return true;
265    }
266  3 return false;
267    }
268   
 
269  0 toggle private boolean IsAlarmCleared()
270    {
271  0 return (rowAlarm.lActionClear > 0);
272    }
273   
 
274  3 toggle private boolean IsAlarmSnoozed()
275    {
276  3 return (rowAlarm.lActionSnooze > 0);
277    }
278   
 
279  3 toggle private boolean IsAlarmSnoozeOverdue()
280    {
281  3 if (rowAlarm.lActionSnooze > 0)
282    {
283  3 calNow.setTimeInMillis(System.currentTimeMillis());
284  3 calActionSnooze.setTimeInMillis(rowAlarm.lActionSnooze);
285   
286    //minus one, because we test AFTER
287  3 final int iSnoozeMinutes = prefs.iSnoozeMinutesOverdue - 1;
288   
289  3 calActionSnooze.add(Calendar.MINUTE, iSnoozeMinutes);
290  3 if (calNow.after(calActionSnooze))
291  0 return true;
292    }
293  3 return false;
294    }
295   
296    //input: iType: appt/task, lRefID of appointment/task to check
 
297  21 toggle public boolean CanShowAlarmToday(int iType, long lRefID, final boolean bIsRepeat)
298    {
299  21 final Cursor cr = tblAlarms.LocateAlarmDataRow(iType, lRefID);
300  21 if ((cr != null) && (cr.getCount() > 0))
301    {
302  6 if (rowAlarm.GetValuesFromCursor(cr))
303    {
304  6 rowAlarm.GetValuesFromDataRow();
305  6 cr.close();
306   
307    //check alarm show condition
308  6 if (bIsRepeat)
309    {
310  6 if (IsAlarmTodayCleared())
311  3 return false;
312    } else {
313  0 if (IsAlarmCleared())
314  0 return false;
315    }
316   
317    //check alarm snooze condition
318  3 if (IsAlarmSnoozed())
319  3 if (!IsAlarmSnoozeOverdue())
320  3 return false;
321   
322    }
323    }
324  15 return true;
325    }
326   
327    }