/// <summary>
 /// Creates a system alarm of AlarmRecord
 /// </summary>
 /// <param name="binableAlarmRecord">AlarmRecord object to create a system alarm based on</param>
 /// <seealso cref="AlarmRecord">
 /// <returns> Returns native alarm object </returns>
 public static int CreateAlarm(AlarmRecord record)
 {
     Native.AppControl appControl = new Native.AppControl()
     {
         ApplicationId = Native.Application.Current.ApplicationInfo.ApplicationId
     };
     appControl.ExtraData.Add("AlarmRecord.UniqueIdentifier", record.GetUniqueIdentifier());
     //temporary set AllDays , After implement select day of week. additional implementation should be add.
     Native.Alarm nativeAlarm = Native.AlarmManager.CreateAlarm(record.ScheduledDateTime, Native.AlarmWeekFlag.AllDays, appControl);
     Console.WriteLine("@@ [Alarm.CreateAlarm] UID : " + record.GetUniqueIdentifier()
                       + ", ScheduledDateTime : " + record.ScheduledDateTime + " NativeAlarmID : " + nativeAlarm.AlarmId);
     return(nativeAlarm.AlarmId);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates a system alarm of AlarmRecord
        /// </summary>
        /// <param name="binableAlarmRecord">AlarmRecord object to create a system alarm based on</param>
        /// <seealso cref="AlarmRecord">
        /// <returns> Returns native alarm object </returns>
        public int CreateAlarm(AlarmRecord record)
        {
            Native.AppControl appControl = new Native.AppControl()
            {
                ApplicationId = Native.Application.Current.ApplicationInfo.ApplicationId
            };
            appControl.ExtraData.Add("AlarmRecord.UniqueIdentifier", record.GetUniqueIdentifier());
            appControl.ExtraData.Add("RingType", RingType.RING_TYPE_ALARM.ToString());
            Native.AlarmWeekFlag nativeFlag  = Convert(record.WeekFlag);
            Native.Alarm         nativeAlarm = Native.AlarmManager.CreateAlarm(record.ScheduledDateTime, nativeFlag, appControl);
#if ALARM_DEBUG
            System.Diagnostics.Debug.WriteLine("@@ [Alarm.CreateAlarm] UID : " + record.GetUniqueIdentifier()
                                               + ", ScheduledDateTime : " + record.ScheduledDateTime + " nativeFlag : " + nativeFlag);
            System.Diagnostics.Debug.WriteLine(" --> Done       Native UID : " + nativeAlarm.AlarmId
                                               + ", ScheduledDate : " + nativeAlarm.ScheduledDate + " nativeFlag : " + nativeAlarm.WeekFlag);
#endif
            return(nativeAlarm.AlarmId);
        }
        /// <summary>
        /// Request to save alarm event.
        /// </summary>
        /// <param name="sender">object</param>
        /// <param name="args">EventArgs</param>
        async void OnSaveButtonClicked(object sender, EventArgs args)
        {
            Console.WriteLine("OnSaveButtonClicked");
            if (_alarmSaving)
            {
                return;
            }

            _alarmSaving = true;
            //substract second from selectedTime.
            SelectedDateTime = SelectedDateTime.AddSeconds(-SelectedDateTime.Second);
            Console.WriteLine($"SelectedDateTime :{SelectedDateTime}");
            AlarmModel.BindableAlarmRecord.ScheduledDateTime = SelectedDateTime;

            AlarmRecord duplicate      = new AlarmRecord();
            bool        existSameAlarm = AlarmModel.CheckAlarmExist(ref duplicate);

            if (existSameAlarm)
            {
                // Use alarm created date for unique identifier for an alarm record
                string alarmUID = AlarmModel.BindableAlarmRecord.GetUniqueIdentifier();
                if (!AlarmModel.BindableAlarmRecord.IsSerialized)
                {
                    // in case that AlarmEditPage is shown by clicking at add alarm
                    // when trying to create a system alarm and save it, find the same alarm
                    // expected behavior : update the previous one and do not create a new alarm
                    AlarmModel.BindableAlarmRecord.IsSerialized = true;
                    duplicate.DeepCopy(AlarmModel.BindableAlarmRecord, false);
                    // Update the existing alarm(duplicate)
                    Console.WriteLine("exist same alarm! update previous alarm, not create new alarm:" + AlarmModel.BindableAlarmRecord.ToString());
                    AlarmModel.UpdateAlarm(duplicate);
                }
                else if (alarmUID.Equals(duplicate.GetUniqueIdentifier()))
                {
                    // in case that AlarmEditPage is shown by selecting an item of ListView in AlarmListPage
                    // At saving time, just update itself. (It doesn't affect other alarms)
                    Console.WriteLine("exist same alarm! update current alarm:" + AlarmModel.BindableAlarmRecord.ToString());
                    AlarmModel.UpdateAlarm(AlarmModel.BindableAlarmRecord);
                }
                else
                {
                    // in case that AlarmEditPage is shown by selecting an item of ListView in AlarmListPage
                    // At saving time, the same alarm is found.
                    // In case that this alarm is not new, the existing alarm(duplicate) will be deleted and it will be updated.
                    // 1. delete duplicate alarm
                    Console.WriteLine("exist same alarm! delete duplicate alarm and update current alarm:" + AlarmModel.BindableAlarmRecord.ToString());
                    AlarmModel.DeleteAlarm(duplicate);
                    // 2. update bindableAlarmRecord
                    AlarmModel.UpdateAlarm(AlarmModel.BindableAlarmRecord);
                }
            }
            else
            {
                if (!AlarmModel.BindableAlarmRecord.IsSerialized)
                {
                    // In case that AlarmEditPage is shown by clicking FloatingButton
                    // There's no same alarm. So, just create a new alarm and add to list and dictionary.
                    AlarmModel.BindableAlarmRecord.IsSerialized = true;
                    Console.WriteLine("new Alarm create:" + AlarmModel.BindableAlarmRecord.ToString());
                    AlarmModel.CreateAlarm();
                }
                else
                {
                    // in case that AlarmEditPage is shown by selecting an item of ListView in AlarmListPage
                    // There's no same alarm. So, just update itself.
                    Console.WriteLine("update current alarm:" + AlarmModel.BindableAlarmRecord.ToString());
                    AlarmModel.UpdateAlarm(AlarmModel.BindableAlarmRecord);
                }
            }

            //Create SavePopupPage, and then close current EditPage.
            Navigation.InsertPageBefore(new SavePopupPage(AlarmModel.BindableAlarmRecord), this);
            await Navigation.PopAsync();

            _alarmSaving = false;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Cancel a system alarm of AlarmReco
        /// </summary>
        /// <param name="binableAlarmRecord">AlarmRecord object relevant to a system alarm to cancel</param>
        /// <seealso cref="AlarmRecord">
        public void DeleteAlarm(AlarmRecord record)
        {
            var allAlarms = Native.AlarmManager.GetAllScheduledAlarms();

            foreach (Native.Alarm item in allAlarms)
            {
                if (item.AlarmId == record.NativeAlarmID)
                {
#if ALARM_DEBUG
                    System.Diagnostics.Debug.WriteLine("@@ [Alarm.DeleteAlarm] Cancel NativeUID:" + record.NativeAlarmID + ", UID:" + record.GetUniqueIdentifier());
#endif
                    item.Cancel();
                    break;
                }
            }
#if ALARM_DEBUG
            Toast.DisplayText("@@ [Alarm.DeleteAlarm] Native Alarm is not found. NativeUID:" + record.NativeAlarmID + ", UID:" + record.GetUniqueIdentifier());
            System.Diagnostics.Debug.WriteLine("@@ [Alarm.DeleteAlarm] Native Alarm is not found. NativeUID:" + record.NativeAlarmID + ", UID:" + record.GetUniqueIdentifier());
#endif
        }
        /// <summary>
        /// Cancel a system alarm of AlarmRecord
        /// </summary>
        /// <param name="binableAlarmRecord">AlarmRecord object relevant to a system alarm to cancel</param>
        /// <seealso cref="AlarmRecord">
        public static void DeleteAlarm(AlarmRecord record)
        {
            var allAlarms = Native.AlarmManager.GetAllScheduledAlarms();

            foreach (Native.Alarm item in allAlarms)
            {
                if (item.AlarmId == record.NativeAlarmID)
                {
                    Console.WriteLine("@@ [Alarm.DeleteAlarm] Cancel NativeAlarmID:" + record.NativeAlarmID + ", UID:" + record.GetUniqueIdentifier());
                    item.Cancel();
                    record.NativeAlarmID = 0;
                    break;
                }
            }
        }