- Delay the alarm if in a phone call
This commit is contained in:
parent
c36a1ab907
commit
4c1e6a5a1a
@ -9,9 +9,12 @@ import android.content.SharedPreferences;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.telephony.PhoneStateListener;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
|
||||||
@ -26,6 +29,7 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
private static AlarmManager alarmManager, graceManager;
|
private static AlarmManager alarmManager, graceManager;
|
||||||
private static PendingIntent alarmPendingIntent, gracePendingIntent;
|
private static PendingIntent alarmPendingIntent, gracePendingIntent;
|
||||||
private static Intent alertActivityIntent, notifyIntent;
|
private static Intent alertActivityIntent, notifyIntent;
|
||||||
|
private static TelephonyManager telephonyManager;
|
||||||
public static volatile String alarmStatus; // Register ALARM_DISMISSED and its brethren here
|
public static volatile String alarmStatus; // Register ALARM_DISMISSED and its brethren here
|
||||||
public static final String ALARM_RUNNING = "ALARM_RUNNING";
|
public static final String ALARM_RUNNING = "ALARM_RUNNING";
|
||||||
public static final String ALARM_DISMISSED = "ALARM_DISMISSED";
|
public static final String ALARM_DISMISSED = "ALARM_DISMISSED";
|
||||||
@ -35,16 +39,11 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
public static long graceEndTime;
|
public static long graceEndTime;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(final Context context, Intent intent) {
|
public void onReceive(final Context context, final Intent intent) {
|
||||||
sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
|
final Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
|
||||||
int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
|
final int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
|
||||||
String alarmTimeStr = sharedPref.getString(context.getString(R.string.AlarmTimePref), null);
|
final String alarmTimeStr = sharedPref.getString(context.getString(R.string.AlarmTimePref), null);
|
||||||
|
|
||||||
// TODO remove
|
|
||||||
if (MainActivity.HYPOALARM_DEBUG) {
|
|
||||||
gracePeriod = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (alarmActive) {
|
if (alarmActive) {
|
||||||
// if nothing else happens, assume the alert was ignored.
|
// if nothing else happens, assume the alert was ignored.
|
||||||
@ -53,6 +52,17 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
// Cancel the pre-alarm notification, if it exists
|
// Cancel the pre-alarm notification, if it exists
|
||||||
context.stopService(new Intent(context, PreAlarmNotify.class));
|
context.stopService(new Intent(context, PreAlarmNotify.class));
|
||||||
|
|
||||||
|
// TODO: delay the alarm if user is in a phone call, until the phone call ends
|
||||||
|
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
|
// If in a phone call, delay the alarm until the call ends
|
||||||
|
while (telephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Log.e("AlarmReceiver", "Error sleeping: " + e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set a grace period alarm to send SMS
|
// Set a grace period alarm to send SMS
|
||||||
Calendar graceCal = Calendar.getInstance();
|
Calendar graceCal = Calendar.getInstance();
|
||||||
graceCal.set(Calendar.SECOND, 0);
|
graceCal.set(Calendar.SECOND, 0);
|
||||||
@ -68,7 +78,7 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
Log.d("AlarmReceiver", "Setting grace alarm for " + MainActivity.debugDate(graceCal));
|
Log.d("AlarmReceiver", "Setting grace alarm for " + MainActivity.debugDate(graceCal));
|
||||||
|
|
||||||
// Calculate when the grace period ends
|
// Calculate when the grace period (converted from minutes to milliseconds) ends
|
||||||
graceEndTime = System.currentTimeMillis() + (gracePeriod * 60 * 1000);
|
graceEndTime = System.currentTimeMillis() + (gracePeriod * 60 * 1000);
|
||||||
|
|
||||||
// Set up intents for later use
|
// Set up intents for later use
|
||||||
@ -124,6 +134,7 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
}, ALERT_LIFE);
|
}, ALERT_LIFE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void stopAlert(final Context context) {
|
public static void stopAlert(final Context context) {
|
||||||
Log.d("AlarmReceiver", "Stopping alarm; status is " + alarmStatus);
|
Log.d("AlarmReceiver", "Stopping alarm; status is " + alarmStatus);
|
||||||
AlarmKlaxon.stop(context);
|
AlarmKlaxon.stop(context);
|
||||||
@ -147,7 +158,6 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
graceManager.cancel(gracePendingIntent);
|
graceManager.cancel(gracePendingIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO should the snooze reset the time at which the grace period alarm fires?
|
|
||||||
public static void snoozeAlarm(final Context context) {
|
public static void snoozeAlarm(final Context context) {
|
||||||
Log.d("AlarmReceiver", "Snoozing alarm");
|
Log.d("AlarmReceiver", "Snoozing alarm");
|
||||||
stopAlert(context);
|
stopAlert(context);
|
||||||
|
Loading…
Reference in New Issue
Block a user