diff options
Diffstat (limited to 'src/com/android/deskclock/alarms/PhoneStateReceiver.java')
-rw-r--r-- | src/com/android/deskclock/alarms/PhoneStateReceiver.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/com/android/deskclock/alarms/PhoneStateReceiver.java b/src/com/android/deskclock/alarms/PhoneStateReceiver.java new file mode 100644 index 000000000..2ddcfd3a4 --- /dev/null +++ b/src/com/android/deskclock/alarms/PhoneStateReceiver.java @@ -0,0 +1,69 @@ +package com.android.deskclock.alarms; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.preference.PreferenceManager; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import com.android.deskclock.LogUtils; +import com.android.deskclock.provider.AlarmInstance; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * Watch the phone state to clear any alarms that are waiting for a call to end + */ +public class PhoneStateReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + LogUtils.v("PhoneStateReceiver received intent " + intent); + + if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) { + TelephonyManager mTelephonyManager = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + if (mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE) { + // New call state is idle, update state for any pending alarms + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); + Set<String> alarms = sp.getStringSet(AlarmStateManager.ALARM_PENDING_ALARM_KEY, + new HashSet<String>()); + if (alarms.size() <= 0) { + return; // no alarms to fire + } + + Iterator<String> iterator = alarms.iterator(); + + while (iterator.hasNext()) { + String flatAlarm = iterator.next(); + if (TextUtils.isEmpty(flatAlarm)) { + LogUtils.e("Unable to un-flatten alarm for restore"); + return; + } + + String [] items = flatAlarm.split("\\|"); + if (items.length < 2) { + LogUtils.e("Unable to un-flatten alarm for restore"); + return; + } + + Uri uri = Uri.parse(items[0]); + AlarmInstance instance = AlarmInstance.getInstance( + context.getContentResolver(), AlarmInstance.getId(uri)); + int alarmState = Integer.parseInt(items[1]); + + AlarmStateManager.setChangeAlarmState(context, instance, alarmState); + iterator.remove(); + } + + // Clear out the pending alarms + sp.edit().remove(AlarmStateManager.ALARM_PENDING_ALARM_KEY).commit(); + } + } + } +}
\ No newline at end of file |