コード例 #1
0
        /// <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;
        }