Files
gunner47-GyverLamp/android/Декомпозиция.txt

138 lines
17 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Функциональная декомпозиция, диаграмма "классов"
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 метод (событие): действия при изменении слайдера масштаба
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
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 свойство: "Видимость экрана устройств"
BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" будильника
TimerScreen
Visible свойство: "Видимость экрана устройств"
BaсkButtonClick метод (событие): действия при UI кнопки "Назад" на "экране" таймера
DeviceManager
Connected свойство: подключено ли устройство (лампа)? точнее, был ли получен ответ на последнюю высланную ему команду
State свойство: полученное командой GET состояние устройства (CURR...), список (не строка)
Devices свойство: список устройств (хранимое свойство)
CurrentDeviceSocket свойство: текущее устройство (хранимое свойство)
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 адреса или порта
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 метод: отправить команду установки масштаба на подключенное устройство
HandleDeviceResponse метод: обработка ответа от подключенного устройства на отправленные команды
SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод)
StringHelper
GetIpPortString метод: получить строку формата IP:PORT из входных параметров IP и PORT
GetIpFromIpPortString метод: получить IP из входного параметра формата IP:PORT
GetPortFromIpPortString метод: получить PORT из входного параметра формата IP:PORT