Example #1
0
        public void OpenAlarmSetting(int alarmId)
        {
            this.mainPivot.SelectedItem = this.piAlarm;

            // WARNING
            // MV initialization is done when page is loaded
            // so we cannot be sure that it is done when we
            // set the page this way.
            // We should initialize all MV immediatelly and not when page
            // is loaded???

            var setting = BaseAlarmSettings.Instance.Alarms.Single(s => s.Id == alarmId);

            var alarm = new AlarmSettingVM();

            alarm.Initialize(setting);
            alarm.State = AlarmSettingState.Edit;

            Frame.Navigate(typeof(AlarmSettingPage), alarm);
        }
        public AlarmMainPage()
        {
            this.InitializeComponent();

            //if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
            //{
            //    return;
            //}

            // initialize VM
            AlarmSettingsVM.Instance.Alarms.Clear(); // occurs whenever we naviage to this page so we need to clear singleton
            foreach (var setting in BaseAlarmSettings.Instance.Alarms)
            {
                var alarmVM = new AlarmSettingVM();
                alarmVM.Initialize(setting);
                AlarmSettingsVM.Instance.Alarms.Add(alarmVM);
            }

            _sensor = SimpleOrientationSensor.GetDefault();
            if (_sensor != null) // for example PC does not have to have sensor
            {
                _sensor.OrientationChanged += Sensor_OrientationChanged;
            }
        }
Example #3
0
        private async void btnSave_Click(object sender, RoutedEventArgs e)
        {
            #region Validation
            var settingVM = DataContext as AlarmSettingVM;
            if (string.IsNullOrWhiteSpace(settingVM.AudioFilename))
            {
                await new MessageDialog("You have to select audio file.").ShowAsync();
                return;
            }

            // no day selected
            if (settingVM.Repeatedly &&
                (!chbMonday.IsChecked.Value) && (!chbTuesday.IsChecked.Value) && (!chbWednesday.IsChecked.Value) &&
                (!chbThursday.IsChecked.Value) && (!chbFriday.IsChecked.Value) && (!chbSaturday.IsChecked.Value) &&
                (!chbSunday.IsChecked.Value))
            {
                await new MessageDialog("You have to select at least one day").ShowAsync();
                return;
            }
            #endregion

            // synchronize VM to Model
            var setting = (settingVM.State == AlarmSettingState.New ? new BaseAlarmSetting() : BaseAlarmSettings.Instance.Alarms.Single(s => s.Id == settingVM.Id));

            setting.Time          = settingVM.Time;
            setting.Enabled       = settingVM.Enabled;
            setting.AudioFilename = settingVM.AudioFilename;
            setting.ImageFilename = settingVM.ImageFilename;

            if (rbOnlyOnce.IsChecked.Value)
            {
                setting.Occurrence = OccurrenceType.OnlyOnce;
            }
            if (rbRepeatedly.IsChecked.Value)
            {
                setting.Occurrence = OccurrenceType.Repeatedly;
            }

            setting.DateTimeOffset = settingVM.DateTimeOffset;
            setting.IgnoreHolidays = settingVM.IgnoreHolidays;

            setting.DaysOfWeek = DayOfWeekType.None;
            if (chbMonday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Monday;
            }
            if (chbTuesday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Tuesday;
            }
            if (chbWednesday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Wednesday;
            }
            if (chbThursday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Thursday;
            }
            if (chbFriday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Friday;
            }
            if (chbSaturday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Saturday;
            }
            if (chbSunday.IsChecked.Value)
            {
                setting.DaysOfWeek = setting.DaysOfWeek | DayOfWeekType.Sunday;
            }

            if (settingVM.State == AlarmSettingState.New)
            {
                setting.Id = settingVM.Id;
                BaseAlarmSettings.Instance.Alarms.Add(setting);

                var alarmVM = new AlarmSettingVM();
                alarmVM.Initialize(setting);
                AlarmSettingsVM.Instance.Alarms.Add(alarmVM); // add VM for alarm
            }
            else
            {
                var alarmVM = AlarmSettingsVM.Instance.Alarms.Single(a => a.Id == setting.Id);
                alarmVM.Initialize(setting);
            }

            // TODO: similar code as in ExecuteDeleteCommand method. Use one method for both!
            #region Refresh Toasts
            // if alarm was enabled then remove previous alarm toasts and plan it again (maybe time/date or other condition was changed)
            // so previous toasts can be invalid
            AlarmManager.Instance.DisableAlarm(setting);
            if (setting.Enabled)
            {
                AlarmManager.Instance.EnableAlarm(setting);                  // anable it if it should be (toasts will be updated = created again)
            }
            // check all alarms and if there is at least one enabled
            // then show badge
            var numberOfActiveAlarms = BaseAlarmSettings.Instance.Alarms.Count(a => a.Enabled);
            if (numberOfActiveAlarms > 0)
            {
                BadgeManager.ShowBadge((uint)numberOfActiveAlarms);
            }
            else
            {
                BadgeManager.HideBadge();
            }
            #endregion

            Frame.GoBack();
        }