Функциональная декомпозиция, диаграмма "классов" UI всё, что связано с отображением 1. ScreenManager выбор отображаемого экрана 2. MainScreen управление UI'ем главного экрана (видимость, enable, цвета, позиции и т.д.) 3. ConnectivityScreen управление UI'ем экрана уствройств (видимость, enable, цвета, позиции и т.д.) 4. ModesScreen управление UI'ем экрана выбора эффектов (видимость, enable, цвета, позиции и т.д.) 5. FavoritesScreen управление UI'ем экрана избранных эффектов (видимость, enable, цвета, позиции и т.д.) 6. AlarmScreen управление UI'ем экрана будильника (видимость, enable, цвета, позиции и т.д.) 7. TimerScreen управление UI'ем экрана таймера (видимость, enable, цвета, позиции и т.д.) Backend всё, что связано с логикой 8. DeviceManager backend функции, связанных с управлением лампами (состояние, эффекты, подключение и т.д.) 9. DiscoverManager функции обнаружения ламп в локальной WiFi сети 10. PollingManager функции регулярного опроса ламп по таймеру для получения актуальных настроек 11. StringHelper разные вспомогательные функции для работы со строками System все системные объекты и функции 11. System_DB хранилище 12. System_WiFi модуль работы с WiFi Свойства и методы "классов" ScreenManager ShowScreen метод: принимает номер "экрана", устанавливает свойство видимости в true для этого экрана и в false для остальных экранов; вызывает перерисовку "экранов" RebuildAllScreens метод: перерисовывает "экраны", делает их блоки видимыми или видимыми в зависимости от выставленных свойств видимости CloseApplication метод: закрывает приложение MainScreen Visible свойство: "Видимость главного экрана" BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (слайдеров, кнопок и т.д.); нужно, например, чтобы предотвратить slider.setPosition при его enable/disable Initialize метод (событие): действия при инициализации "экрана" (однократно) BackPressed метод (событие): действия при нажатии системной кнопки "Назад" на главном "экране" ConnectivityButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" устройств ModesButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" эффектов FavoritesButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" избранных эффектов AlarmButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" будильника TimerButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" таймера OnOffButtonClick метод (событие): действия при нажатии кнопки Вкл/Выкл BrightnessSliderPositionChanged метод (событие): действия при изменении слайдера яркости SpeedSliderPositionChanged метод (событие): действия при изменении слайдера скокрости ScaleSliderPositionChanged метод (событие): действия при изменении слайдера масштаба BrightnessListPickerAfterPicking метод (событие): действия при выборе точного значения яркости из контекстного списка SpeedListPickerAfterPicking метод (событие): действия при выборе точного значения скорости из контекстного списка ScaleListPickerAfterPicking метод (событие): действия при выборе точного значения масштаба из контекстного списка UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных) PopulateListPickerElements метод: заполнить контекстный список яркости/скорости/масштаба эффектов значениями, близкими к текущей позиции соответствующего слайдера SetDebugText метод: установить отладочный текст основной отладочной текстовой метке ConnectivityScreen Visible свойство: "Видимость экрана устройств" IpAddressInputLostFocus метод (событие): действия при потери фокуса поля ввода IP адреса PortInputLostFocus метод (событие): действия при потери фокуса поля ввода порта SaveConnectionButtonClick метод (событие): действия при нажатии на кнопку "Добавить" RemoveConnectionButtonClick метод (событие): действия при нажатии на кнопку "Удалить" SaveAllConnectionButtonClick метод (событие): действия при нажатии на кнопку "Сканировать и добавить" DeviceSocketListViewAfterPicking метод (событие): действия при выборе устройства из списка сохранённых и его подключение BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" устройств UpdateConnectivityStatus метод: обновить статус устройства "Подключен"/"Отключен" на "экране" устройств UpdateCurrentDeviceSocket метод: отобразить текущее устройство (DeviceManager.CurrentDeviceSocket) в полях ввода IP адреса и порта на "экране" устройств UpdateCurrentDevicesSockets метод: отобразить текущий список сохранённых устройств (DeviceManager.Devices) на "экране" устройств ValidateAndAddDeviceSocketToList метод: валидировать значения полей ввода IP адреса и порта и добавть запись в список сохранённых устройств; перерисовать этот список UpdateScreen метод: обновить все элементы управления на "экране" устройств согласно модели данных ModesScreen Visible свойство: "Видимость экрана эффектов" ModesListViewAfterPicking метод (событие): действия при выборе эффекта из списка эффектов BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" эффектов FavoritesScreen Visible свойство: "Видимость экрана устройств" BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" избранных эффектов AlarmScreen Visible свойство: "Видимость экрана устройств" Initialized свойство: "Экран управления будильниками инициализирован" BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателей, тайм пикеров и т.д.); нужно, например, чтобы предотвратить switch.changed при его enable/disable BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" будильника MonSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника TueSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника WedSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника ThuSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника FriSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника SatSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника SunSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника MonTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника TueTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника FriTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника WedTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника ThuTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника SatTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника SunTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника TimeBeforeAlarmListPickerAfterPicking метод (событие): действия при выборе времени срабатывания будильника перед "рассветом" ResetAlarmState метод: "забыть" состояние будильников в android приложении (перед последующим запросом этого состояния) UpdateScreen метод: обновить все элементы управления на "экране" управления будильниками согласно модели данных UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных) TimerScreen Visible свойство: "Видимость экрана устройств" BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" таймера DeviceManager Connected свойство: подключено ли устройство (лампа)? точнее, был ли получен ответ на последнюю высланную ему команду State свойство: полученное командой GET состояние устройства (CURR...), список (не строка) Devices свойство: список устройств (хранимое свойство) CurrentDeviceSocket свойство: текущее устройство (хранимое свойство) AlarmState свойство: текущее состояние будильников по дням (вкл/выкл, время каждого, время срабатывания перед "рассветом") Modes свойство: список доступных режимов, захардкожен одновременно в лампе и в приложении, должен совпадать Initialize метод: вычитывание хранимых свойств и инициализация соответствующих переменных ConnectDeviceSocket метод: стартовать таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство DisconnectDeviceSocket метод: остановить таймер (polling timer) с регулярной отправкой команд GET/DEB на устройство; очистить свойства Connected и State GetCurrentModeId метод: получить номер текущего эффекта из свойства State GetCurrentModeName метод: получить имя текущего эффекта из свойства State GetCurrentBrightness метод: получить значение текущей яркости из свойства State GetCurrentSpeed метод: получить значение текущей скорости из свойства State GetCurrentScale метод: получить значение текущего масштаба из свойства State GetCurrentOn метод: получить значение текущего состояния Вкл/Выкл из свойства State GetCurrentEspMode метод: получить значение текущего состояния ESP_MODE из свойства State GetCurrentUseNtp метод: получить значение текущего состояния USE_NTP из свойства State GetCurrentUseTime метод: получить значение текущего времени на устройстве из свойства State SaveDeviceSocketSettings метод: сохранить с базу данных приложения хранимые значения (текущее стройство и список устройств) SetDeviceOffline метод: установить свойства Connected и State в начальное состояние (очистить), соответствует состоянию "устройство не подключено" ResetCurrentDevice метод: установить свойство CurrentDeviceSocket в начальное состояние (очистить), соответствует состоянию "устройство не выбрано" ResetCurrentDevices метод: установить свойство Devices в начальное состояние (очистить), соответствует состоянию "профили устройств не заданы" ValidateIpPort метод: валидировать переданное в качестве параметра значение IP адреса или порта SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод) HandleDeviceResponse метод: обработать ответ от подключенного устройства на отправленные команды GetAlarms метод: отправить команду запроса состояния будильников ALM_GET на устройство GetAlarmOnOff метод: получить состояние вкл/выкл будильника для указанного во входном аргументе дня (из свойства AlarmState) GetAlarmTime метод: получить время срабатывания будильника для указанного во входном аргументе дня (из свойства AlarmState) GetTimeBeforeAlarmIndex метод: получить время срабатывания будильника перед "рассветом" SetAlarmOnOff метод: отправить команду вкл/выкл будильника для заданного дня ALM_SET на устройство SetAlarmTime метод: отправить команду установки времени срабатывания будильника для заданного дня ALM_SET на устройство SetTimeBeforeAlarm метод: отправить команду установки времени срабатывания будильника перед "рассветом" DAWN на устройство DiscoverManager TimeoutMs свойство: время ожидания ответа от устройств на multicast команду DISCOVER SendMulticastCommand метод: стартовать UDP сервер (для отправки multicast команды DISCOVER на адрес широковещательных сообщений сети и получения ответа) UdpServerStarted метод (событие): отправить multicast команду DISCOVER на адрес широковещательных сообщений сети; стартовать таймер завершения работы сервера UdpServerDataRecieved метод (событие): получить и обработать ответы от устройств на multicast команду DISCOVER TimerTimerNow метод (событие): завершить работу UDP сервера и таймера (при первом срабатывании события таймера) GetBroacdastIP метод: получить адрес широковещательных сообщений мобильного устройства, используя текущий IP адрес WiFi подключения PollingManager Timeout свойство: время ожидания ответа от устройств на команды управления UdpPort свойство: номер UDP порта TimerIntervalMs свойство: время работы таймера (ограничение используемого компонента), по его истечении таймер постоянно перезапускается для непрерывной работы TimerTickMs свойство: интервал времени, через который будет сгенерировано событие таймера LastResponse свойство: текст последнего полученного ответа от модуля esp LastResponseTime свойство: время последнего полученного ответа от модуля esp TimerTimerNow метод (событие): действия при срабатывании события polling таймера (отправка команд и перезапуск таймера) UdpClientRecieved метод (событие): действия при получении ответа на отправленные команды от подключенного устройства StartPolling метод: старт polling таймера StopPolling метод: стоп polling таймера UpdateDeviceStatus метод: обновить сворйство DeviceManager.Connected, если не установлена (или пропала) связь с устройством; ввиду специфики реализации библиотечного компонента UDP Client приложение постоянно получает его события Recieved с последней строкой-ответом от модуля esp; отсутствие связи с модулем определяется как повторяющийся ответ (он уникален, потому что содержит время) или устаревший ответ (время последнего ответа больше интервала таймера) RequestDeviceState метод: запросить состояние устройства (определить команду и отправить её в udp пакете) SendGetCommandToDevice метод: отправить команду GET на подключенное устройство SendPowerOnOffCommandToDevice метод: отправить команды On/Off (в зависимости от входного параметра) на подключенное устройство SendSetModeCommandToDevice метод: отправить команду смены эффекта на подключенное устройство SendSetBrightnessCommandToDevice метод: отправить команду установки яркости на подключенное устройство SendSetSpeedCommandToDevice метод: отправить команду установки скорости на подключенное устройство SendSetScaleCommandToDevice метод: отправить команду установки масштаба на подключенное устройство StringHelper GetIpPortString метод: получить строку формата IP:PORT из входных параметров IP и PORT GetIpFromIpPortString метод: получить IP из входного параметра формата IP:PORT GetPortFromIpPortString метод: получить PORT из входного параметра формата IP:PORT GetFormattedTimeFromMinutes метод: получить строку с временем в формате hh:mm из входного аргумента (количество минут) GetMinutesFromFormattedTime метод: получить количество минут из форматированной строки (hh:mm), переданной в качестве входного аргумента