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

242 lines
36 KiB
Plaintext
Raw Permalink 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, цвета, позиции и т.д.)
8. SettingsScreen управление UI'ем экрана настроек (OTA)
Backend всё, что связано с логикой
9. DeviceManager backend функции, связанных с управлением лампами (состояние, эффекты, подключение и т.д.)
10. DiscoverManager функции обнаружения ламп в локальной WiFi сети
11. PollingManager функции регулярного опроса ламп по таймеру для получения актуальных настроек
12. StringHelper разные вспомогательные функции для работы со строками
System все системные объекты и функции
13. System_DB хранилище
14. System_WiFi модуль работы с WiFi
Свойства и методы "классов"
ScreenManager
CurrentScreenId свойство: "Текущий отображаемый 'экран'"
ShowScreen метод: принимает номер "экрана", устанавливает свойство видимости в true для этого экрана и в false для остальных экранов; вызывает перерисовку "экранов"
RebuildAllScreens метод: перерисовывает "экраны", делает их блоки видимыми или видимыми в зависимости от выставленных свойств видимости
CloseApplication метод: закрывает приложение
Color_DarkGrey свойство (константа): код цвета "тёмно-серый"
Color_LightGrey свойство (константа): код цвета "светло-серый"
Color_LightLightGrey свойство (константа): код цвета "светло-светло-серый"
Color_LightGreyBackground свойство (константа): код цвета "светло-серый" для фона
Color_Red свойство (константа): код цвета "красный"
MainScreen
Visible свойство: "Видимость главного экрана"
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (слайдеров, кнопок и т.д.); нужно, например, чтобы предотвратить slider.setPosition при его enable/disable
HideSyncIcon свойство: "Скрыть/показать иконку обновления статуса"
Initialize метод (событие): действия при инициализации "экрана" (однократно)
BackPressed метод (событие): действия при нажатии системной кнопки "Назад" на главном "экране"
ConnectivityButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" устройств
ModesButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" эффектов
FavoritesButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" избранных эффектов
AlarmButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" будильника
TimerButtonClick метод (событие): действия при нажатии кнопки перехода на "экран" таймера
OnOffButtonClick метод (событие): действия при нажатии кнопки Вкл/Выкл
BrightnessSliderPositionChanged метод (событие): действия при изменении слайдера яркости
SpeedSliderPositionChanged метод (событие): действия при изменении слайдера скокрости
ScaleSliderPositionChanged метод (событие): действия при изменении слайдера масштаба
BrightnessListPickerAfterPicking метод (событие): действия при выборе точного значения яркости из контекстного списка
SpeedListPickerAfterPicking метод (событие): действия при выборе точного значения скорости из контекстного списка
ScaleListPickerAfterPicking метод (событие): действия при выборе точного значения масштаба из контекстного списка
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
PopulateListPickerElements метод: заполнить контекстный список яркости/скорости/масштаба эффектов значениями, близкими к текущей позиции соответствующего слайдера
SetDebugText метод: установить отладочный текст основной отладочной текстовой метке
ConnectivityScreen
Visible свойство: "Видимость экрана устройств"
HideSyncIcon свойство: "Скрыть/показать иконку обновления статуса"
IpAddressInputLostFocus метод (событие): действия при потери фокуса поля ввода IP адреса
PortInputLostFocus метод (событие): действия при потери фокуса поля ввода порта
SaveConnectionButtonClick метод (событие): действия при нажатии на кнопку "Добавить"
RemoveConnectionButtonClick метод (событие): действия при нажатии на кнопку "Удалить"
SaveAllConnectionButtonClick метод (событие): действия при нажатии на кнопку "Сканировать и добавить"
DeviceSocketListViewAfterPicking метод (событие): действия при выборе устройства из списка сохранённых и его подключение
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" устройств
SettingsButtonClick метод: отобразить экран настроек
UpdateConnectivityStatus метод: обновить статус устройства "Подключен"/"Отключен" на "экране" устройств
UpdateCurrentDeviceSocket метод: отобразить текущее устройство (DeviceManager.CurrentDeviceSocket) в полях ввода IP адреса и порта на "экране" устройств
UpdateCurrentDevicesSockets метод: отобразить текущий список сохранённых устройств (DeviceManager.Devices) на "экране" устройств
ValidateAndAddDeviceSocketToList метод: валидировать значения полей ввода IP адреса и порта и добавть запись в список сохранённых устройств; перерисовать этот список
UpdateScreen метод: обновить все элементы управления на "экране" устройств согласно модели данных
ModesScreen
Visible свойство: "Видимость экрана эффектов"
ModesListViewAfterPicking метод (событие): действия при выборе эффекта из списка эффектов
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" эффектов
FavoritesScreen
Visible свойство: "Видимость экрана устройств"
Initialized свойство: "Экран автоматического переключения избранных эффектов инициализирован"
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателей, лист пикеров и т.д.)
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" избранных эффектов
OnOffSwitchChanged метод (событие): действия при установке/снятии переключателя включения режима избранных эффектов
IntervalListPickerAfterPicking метод (событие): действия при выборе интервала времени (статической состявляющей) между автоматическими переключениями избранных эффектов
DispersionListPickerAfterPicking метод (событие): действия при выборе разброса времени (случайной состявляющей) между автоматическими переключениями избранных эффектов
UseSavedOnOffSwitchChanged метод (событие): действия при сохранении/удалении сохранённого состояния переключателя включения режима избранных эффектов
ListViewIconClick метод (событие): действия при добавлении/удалении эффекта в/из список избранных
ListViewelementTouchUp метод (событие): служебный метод, необходимый для корректной отрисовки фона элемента в списке избранных эффектов
Initialize метод: настраивает и заполняющий специфический (кастомный) компонент ListViewer
MarkListItemAsFavorite метод: устанавливает признак включения/исключения эффекта в избранные в свойстве "состояние режима избранных эффектов"
UpdateScreen метод: обновить все элементы управления на "экране" избранных эффектов согласно модели данных
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
SetFavoriteSettings метод: меняет состояние "экрана" избранных эффектов (устанавливает недоступность элементов управления и отображает анимацию) и вызывает DeviceManager.SetFavoriteSettings
SetIntervalListPicker метод: иниицализирует значение поля выбора интервала времени автоматической смены избранных эффектов согласно модели данных
SetDispersionListPicker метод: иниицализирует значение поля выбора разброса времени автоматической смены избранных эффектов согласно модели данных
AlarmScreen
Visible свойство: "Видимость экрана устройств"
Initialized свойство: "Экран управления будильниками инициализирован"
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателей, тайм пикеров и т.д.); нужно, например, чтобы предотвратить switch.changed при его enable/disable
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" будильника
MonSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
TueSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
WedSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
ThuSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
FriSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
SatSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
SunSwitchChanged метод (событие): действия при установке/снятии переключателя включения будильника
MonTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
TueTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
FriTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
WedTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
ThuTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
SatTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
SunTimePickerAfterTimeSet метод (событие): действия при выборе времени будильника
TimeBeforeAlarmListPickerAfterPicking метод (событие): действия при выборе времени срабатывания будильника перед "рассветом"
UpdateScreen метод: обновить все элементы управления на "экране" управления будильниками согласно модели данных
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
TimerScreen
Visible свойство: "Видимость экрана устройств"
Initialized свойство: "Экран управления таймером инициализирован"
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (лист пикера); нужно, например, чтобы предотвратить listpicker.afterpicking при его enable/disable
AnimationTimerOn свойство: "таймер, управляющий анимацией функции таймера лампы, включен"
RemainingSeconds свойство: "время до срабатывания таймера лампы" и одновремнно "время до окончания работы таймера, управляющего анимацией функции таймера лампы"
TimerTickMs свойство: "шаг таймера, управляющего анимацией функции таймера лампы"
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" таймера
TimeListPickerAfterPicking метод (событие): действия при выборе пользователем времени до срабатывания таймера лампы (отправка команды модулю)
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
UpdateScreen метод: обновить все элементы управления на "экране" управления таймером согласно модели данных
GetRemainingLabelText метод: получить текст для вывода на метке оставшегося до срабатывания таймера времени
GetTimerSecondsToFire метод: получить количество секунд до срабатывания таймера из полученного в качестве аргумента значения TimeListPicker (выбранной пользователем опции)
HandleAnimation метод: обработать таймер, управляющий анимацией функции таймера лампы (запуск, если не запущен, принудительная остановка, если нужно)
AnimationTimerTimerNow метод: действия при срабатывании события таймера, управляющий анимацией функции таймера лампы (показать/скрыть иконку, обновить текст оставшегося времени)
StopAnimationTimer метод: остановить таймер, управляющий анимацией функции таймера лампы, сбросить его сохранённое состояние в исходное (модель данных)
SettingsScreen
Visible свойство: "Видимость экрана настроек"
Initialized свойство: "Экран настроек инициализирован"
BlockControlEventsEmitting свойство: "Не генерировать события от элементов управления" (переключателя); нужно, например, чтобы предотвратить switch.changed при его enable/disable
BaсkButtonClick метод (событие): действия при нажатии кнопки "Назад" на "экране" настроек
OtaButtonClick метод (событие): действия при нажатии кнопки "Режим обновления" на "экране" настроек
ButtonEnabledSwitchChanged метод (событие): действия при установке/снятии переключателя разблокировки аппаратной кнопки на лампе
UpdateScreen метод: обновить все элементы управления на "экране" настроек согласно модели данных
UpdateControls метод: обновить отображение элементов управления (статусы enabled/disabled) в зависимости от сохранённых свойств (модели данных)
DeviceManager
Connected свойство: подключено ли устройство (лампа) точнее, был ли получен ответ на последнюю высланную ему команду
State свойство: полученное командой GET состояние устройства (CURR...), список (не строка)
Devices свойство: список устройств (хранимое свойство)
CurrentDeviceSocket свойство: текущее устройство (хранимое свойство)
FavoritesState свойство: текущее состояние избранных эффектов (вкл/выкл, интервал, разброс, список эффектов)
AlarmState свойство: текущее состояние будильников по дням (вкл/выкл, время каждого, время срабатывания перед "рассветом")
TimerState свойство: текущее состояние таймера (ответ команды TMR_GET)
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 9из свойства State)
GetTimerOnOffFromState метод: получить значение текущего состояния таймера (из свойства State)
GetButtonEnabled метод: получить значение текущего состояния (заблокирована/разблокирована) аппаратной кнопки на лампе
GetCurrentTime метод: получить значение текущего времени на устройстве (из свойства State)
SaveDeviceSocketSettings метод: сохранить с базу данных приложения хранимые значения (текущее стройство и список устройств)
SetDeviceOffline метод: установить свойства Connected и State в начальное состояние (очистить), соответствует состоянию "устройство не подключено"
ResetCurrentDevice метод: установить свойство CurrentDeviceSocket в начальное состояние (очистить), соответствует состоянию "устройство не выбрано"
ResetCurrentDevices метод: установить свойство Devices в начальное состояние (очистить), соответствует состоянию "профили устройств не заданы"
ValidateIpPort метод: валидировать переданное в качестве параметра значение IP адреса или порта
SendUdpCommand метод: отправить команду, приянтую в качестве входного аргумента, на подключенное устройствоС (обобщённый метод)
HandleDeviceResponse метод: обработать ответ от подключенного устройства на отправленные команды
ResetAlarmState метод: "забыть" состояние будильников в android приложении (перед последующим запросом этого состояния)
GetAlarmsSettings метод: отправить команду запроса состояния будильников ALM_GET на устройство
GetAlarmOnOff метод: получить состояние вкл/выкл будильника для указанного во входном аргументе дня (из свойства AlarmState)
GetAlarmTime метод: получить время срабатывания будильника для указанного во входном аргументе дня (из свойства AlarmState)
GetTimeBeforeAlarmIndex метод: получить время срабатывания будильника перед "рассветом"
SetAlarmOnOff метод: отправить команду вкл/выкл будильника для заданного дня ALM_SET на устройство
SetAlarmTime метод: отправить команду установки времени срабатывания будильника для заданного дня ALM_SET на устройство
SetTimeBeforeAlarm метод: отправить команду установки времени срабатывания будильника перед "рассветом" DAWN на устройство
ResetTimerState метод: "забыть" состояние таймера в android приложении (перед последующим запросом этого состояния)
GetTimerSettings метод: отправить команду запроса состояния таймера TMR_GET на устройство
GetTimerOnOff метод: получить значение текущего состояния таймера (из свойства TimerState)
GetTimerTimeOption метод: получить выбранное пользователем значение предуст ановки времени таймера (из свойства TimerState)
GetTimerRemainingSeconds метод: получить оставшееся до срабатывания таймера время (из свойства TimerState)
SetTimerSettings метод: отправить команду установки таймера TMR_SET
GetFavoriteSettings метод: отправить команду запроса состояния избранных эффектов FAV_GET на устройство
SetFavoriteSettings метод: отправить команду установки состояния избранных эффектов FAV_SET
GeFavoritesModeOnOff метод: получить состояние (включен/исключён в избранные) для заданного эффекта (из свойства FavoritesState)
SeFavoritesModeOnOff метод: установить состояние (включен/исключён в избранные) для заданного эффекта (из свойства FavoritesState)
GeFavoritesOnOff метод: получить состояние вкл/выкл режима избранных эффектов (из свойства FavoritesState)
GeFavoritesInterval метод: получить интервал времени смены избранных эффектов (из свойства FavoritesState)
GeFavoritesDispersion метод: получить разброс времени смены избранных эффектов (из свойства FavoritesState)
GetFavoritesUseSavedOnOff метод: получить сохранённое состояние переключателя включения режима избранных эффектов
GeFavoritesModesList метод: получить список эффектов с указанным состояние (включен/исключён в избранные) для каждого из них
RequestOtaUpdate метод: перевести лампу в состояние ожидания прошивки по воздуху
SendEnableHardwareButtonCommand метод: установить состояние (заблокирована/разблокирована) аппаратной кнопки на лампе
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), переданной в качестве входного аргумента