diff --git a/.idea/libraries/appcompat_v7_19_0_1.xml b/.idea/libraries/appcompat_v7_19_0_1.xml
new file mode 100644
index 0000000..f8043cf
--- /dev/null
+++ b/.idea/libraries/appcompat_v7_19_0_1.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/support_v4_19_0_1.xml b/.idea/libraries/support_v4_19_0_1.xml
new file mode 100644
index 0000000..617c323
--- /dev/null
+++ b/.idea/libraries/support_v4_19_0_1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmAlertActivity.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmAlertActivity.java
index a2be94c..ffcf5dd 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmAlertActivity.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmAlertActivity.java
@@ -6,7 +6,6 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import android.os.PowerManager;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
@@ -24,13 +23,14 @@ import java.util.TimerTask;
// TODO set another alarm for the next half-hour (or grace_period / 2)?
public class AlarmAlertActivity extends Activity {
- // TODO correct life
+ // TODO correct alert lifetime
private static final int ALERT_LIFE = 1000*10;//1000*60*2; // 2 minutes
- private static final Timer timer = new Timer();
- private static PowerManager.WakeLock fullWl;
+ private static final Timer timer = new Timer("AlarmAlertActivity");
+ private static final long[] vPattern = {500, 500};
private static AlarmManager graceManager;
private static PendingIntent gracePendingIntent;
private static Vibrator vibrator;
+ private static Boolean userCancelled;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -38,7 +38,7 @@ public class AlarmAlertActivity extends Activity {
setContentView(R.layout.alarm_alert);
// Disable any current notifications
- this.stopService(new Intent(getApplicationContext(), AlarmNotify.class));
+ stopService(new Intent(getApplicationContext(), AlarmNotify.class));
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
@@ -48,10 +48,13 @@ public class AlarmAlertActivity extends Activity {
// Turn off the alert activity, and switch to a notification
timer.schedule(new TimerTask() {
public void run() {
- // Switch to notification
- startService(new Intent(getApplicationContext(), AlarmNotify.class));
+ // Close the dialogue
finish();
- Log.d("AlarmAlertActivity", "Stopped AlarmAlertActivity");
+ Log.d("AlarmAlertActivity", "Started notification");
+ // Switch to notification if the Activity has not been closed by the user
+ if (!userCancelled) {
+ startService(new Intent(getApplicationContext(), AlarmNotify.class));
+ }
}
}, ALERT_LIFE);
}
@@ -59,15 +62,10 @@ public class AlarmAlertActivity extends Activity {
@Override
public void onStart() {
super.onStart();
+ userCancelled = false;
- PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
- fullWl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
- | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "AlarmAlertActivity");
- fullWl.acquire();
-
- long[] pattern = {0, 1000, 1000};
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
- vibrator.vibrate(pattern, 0);
+ vibrator.vibrate(vPattern, 0);
// TODO change button to slide...
// TODO change slide to circle slide? https://github.com/JesusM/HoloCircleSeekBar
@@ -80,15 +78,16 @@ public class AlarmAlertActivity extends Activity {
gracePendingIntent = PendingIntent.getBroadcast(getApplicationContext(), MainActivity.GRACE_REQUEST, graceIntent, 0);
graceManager.cancel(gracePendingIntent);
Log.d("AlarmAlertActivity", "Cancelled grace alarm.");
+ // Ensure we don't load a notification later on
+ userCancelled = true;
+ // Close the dialogue (stop vibration &c)
finish();
}
});
}
public void onStop() {
- timer.cancel();
vibrator.cancel();
- fullWl.release();
super.onStop();
}
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmNotify.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmNotify.java
index 3f37122..3bcc1ac 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmNotify.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmNotify.java
@@ -17,8 +17,8 @@ import java.util.Timer;
import java.util.TimerTask;
public class AlarmNotify extends Service {
- public final int notifyID = 1;
- private Timer timer = new Timer();
+ private static final Timer timer = new Timer("AlarmNotify");
+ public static final int notifyID = 1;
@Override
public IBinder onBind(Intent intent) {
@@ -27,12 +27,10 @@ public class AlarmNotify extends Service {
@Override
public void onDestroy() {
- // Remember to remove the notification in the notification bar
+ // Remove the notification in the notification bar
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nm.cancel(notifyID);
- if (timer != null) {
- timer.cancel();
- }
+ timer.cancel();
}
@Override
@@ -40,8 +38,8 @@ public class AlarmNotify extends Service {
final int UPDATE_INTERVAL = 10*1000; // Timer is updated six times a minute
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
+ //final String phoneNumber = sharedPref.getString(getString(R.string.PhoneNumberPref), null);
final int gracePeriod = sharedPref.getInt(getString(R.string.GracePeriodPref), 60);
- final String phoneNumber = sharedPref.getString(getString(R.string.PhoneNumberPref), null);
// convert gracePeriod to milliseconds and calculate when it'll fire
final long endTime = System.currentTimeMillis() + (gracePeriod * 60 * 1000);
@@ -67,9 +65,14 @@ public class AlarmNotify extends Service {
// Allow the user to cancel by clicking a "Cancel" button
notification.addAction(android.R.drawable.ic_menu_close_clear_cancel, getString(R.string.notificationCancellation), cancellerPendingIntent);
// Allow the user to cancel by selecting the ContentText or ContentTitle
- // TODO load alert activity (without sound or vibration) on select? This would allow the user to test competence
notification.setContentIntent(cancellerPendingIntent);
+ // TODO load alert activity (without sound or vibration) on select? This would allow the user to test competence
+ Intent alertActivityIntent = new Intent(this, AlarmAlertActivity.class);
+ alertActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
+ Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ //notification.setContentIntent(alertActivityIntent);
+
nm.cancel(notifyID);
nm.notify(notifyID, notification.build());
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmReceiver.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmReceiver.java
index bf803d1..f50ac89 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmReceiver.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/AlarmReceiver.java
@@ -6,20 +6,16 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.util.Log;
import java.util.Calendar;
-// TODO sound audible alarm -- see AlarmKlaxon.java
-// TODO Lower alarm volume if in phone call (and detect phone call!)
-// TODO set another alarm for the next half-hour (or grace_period / 2)?
public class AlarmReceiver extends BroadcastReceiver {
- SharedPreferences sharedPref;
- private AlarmManager alarmManager, graceManager;
- private PendingIntent alarmPendingIntent, gracePendingIntent;
+ private static SharedPreferences sharedPref;
+ private static AlarmManager alarmManager, graceManager;
+ private static PendingIntent alarmPendingIntent, gracePendingIntent;
@Override
public void onReceive(Context context, Intent intent) {
@@ -27,17 +23,8 @@ public class AlarmReceiver extends BroadcastReceiver {
Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
if (alarmActive) {
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock partialWl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AlarmReceiver");
- partialWl.acquire();
-
- // Disable any current notifications
- //context.stopService(new Intent(context, AlarmNotify.class));
-
// Set a grace period alarm to send SMS
int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
- // TODO remove this
- gracePeriod = 1;
Calendar graceCal = Calendar.getInstance();
graceCal.set(Calendar.SECOND, 0);
@@ -66,8 +53,6 @@ public class AlarmReceiver extends BroadcastReceiver {
// TODO use set() for older APIs
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), alarmPendingIntent);
Log.d("AlarmReceiver", "Resetting alarm for " + MainActivity.debugDate(cal));
-
- partialWl.release();
}
}
}
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/BootReceiver.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/BootReceiver.java
index 20fe279..0e983f2 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/BootReceiver.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/BootReceiver.java
@@ -12,9 +12,9 @@ import android.util.Log;
import java.util.Calendar;
public class BootReceiver extends BroadcastReceiver {
- SharedPreferences sharedPref;
- private AlarmManager alarmManager;
- private PendingIntent alarmIntent;
+ private static SharedPreferences sharedPref;
+ private static AlarmManager alarmManager;
+ private static PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/GraceReceiver.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/GraceReceiver.java
index f3c8aeb..4eaf358 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/GraceReceiver.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/GraceReceiver.java
@@ -10,7 +10,7 @@ import android.telephony.SmsManager;
import android.util.Log;
public class GraceReceiver extends BroadcastReceiver {
- SharedPreferences sharedPref;
+ private static SharedPreferences sharedPref;
@Override
public void onReceive(Context context, Intent intent) {
@@ -18,10 +18,6 @@ public class GraceReceiver extends BroadcastReceiver {
Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
if (alarmActive) {
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock partialWl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AlarmReceiver");
- partialWl.acquire();
-
String phoneNumber = sharedPref.getString(context.getString(R.string.PhoneNumberPref), null);
String message = sharedPref.getString(context.getString(R.string.MessagePref), null);
@@ -29,8 +25,6 @@ public class GraceReceiver extends BroadcastReceiver {
// TODO uncomment this:
//sms.sendTextMessage(phoneNumber, null, message, null, null);
Log.d("GraceReceiver", "Sending sms to " + phoneNumber);
-
- partialWl.release();
}
}
}
diff --git a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/MainActivity.java b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/MainActivity.java
index 4ca3ab4..68428b3 100644
--- a/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/MainActivity.java
+++ b/HypoAlarm/src/main/java/za/org/treehouse/hypoalarm/MainActivity.java
@@ -59,14 +59,14 @@ import java.util.regex.Pattern;
// TODO: glowpad dismissal (or circular seekbar)
public class MainActivity extends ActionBarActivity {
- static int ALARM_REQUEST = 1;
- static int GRACE_REQUEST = 2;
- static int CANCEL_GRACE_REQUEST = 3;
- static Switch alarmActiveSwitch;
- static Button alarmTimeButton;
- static Spinner gracePeriodSpinner;
- static EditText phoneNumberButton;
- static EditText messageButton;
+ public static int ALARM_REQUEST = 1;
+ public static int GRACE_REQUEST = 2;
+ public static int CANCEL_GRACE_REQUEST = 3;
+ private static Switch alarmActiveSwitch;
+ private static Button alarmTimeButton;
+ private static Spinner gracePeriodSpinner;
+ private static EditText phoneNumberButton;
+ private static EditText messageButton;
@Override
protected void onCreate(Bundle savedInstanceState) {