From 60df77efadc8d96c68d88547eefd2cf87503150a Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Apr 2025 09:32:20 +0300 Subject: [PATCH 1/5] add OneGang product type to routine --- .../device_manager_bloc.dart | 3 +- .../one_gang_functions.dart | 78 ++++ .../helper/scene_operations_data_helper.dart | 394 ++++++++++++------ .../scene/model/scene_details_model.dart | 4 + 4 files changed, 343 insertions(+), 136 deletions(-) create mode 100644 lib/features/scene/helper/functions_per_device/one_gang_functions.dart diff --git a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart index 5817bad..3357ba8 100644 --- a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart +++ b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart @@ -177,7 +177,8 @@ class DeviceManagerBloc extends Bloc { devices[i].productType == DeviceType.Gateway || devices[i].productType == DeviceType.WallSensor || devices[i].productType == DeviceType.CeilingSensor || - devices[i].productType == DeviceType.ThreeGang) { + devices[i].productType == DeviceType.ThreeGang || + devices[i].productType == DeviceType.OneGang) { implementedDevices.add(devices[i]); } } diff --git a/lib/features/scene/helper/functions_per_device/one_gang_functions.dart b/lib/features/scene/helper/functions_per_device/one_gang_functions.dart new file mode 100644 index 0000000..a8a8b4f --- /dev/null +++ b/lib/features/scene/helper/functions_per_device/one_gang_functions.dart @@ -0,0 +1,78 @@ +import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart'; +import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; +import 'package:syncrow_app/generated/assets.dart'; + +class OneGangHelperFunctions { + static List oneGangHelperFunctions( + String deviceId, String deviceName, functionValue) { + return [ + SceneStaticFunction( + deviceId: deviceId, + deviceName: deviceName, + icon: Assets.assetsAcPower, + operationName: 'Light Switch', + code: 'switch_1', + functionValue: functionValue, + operationDialogType: OperationDialogType.onOff, + operationalValues: [ + SceneOperationalValue( + icon: Assets.assetsAcPower, description: "ON", value: true), + SceneOperationalValue( + icon: Assets.assetsAcPowerOFF, description: "OFF", value: false), + ], + ), + SceneStaticFunction( + deviceId: deviceId, + deviceName: deviceName, + icon: Assets.assetsLightCountdown, + operationName: 'Light CountDown', + code: 'countdown_1', + functionValue: functionValue, + operationDialogType: OperationDialogType.countdown, + operationalValues: [ + SceneOperationalValue(icon: '', value: 0), + ], + ), + ]; + } + + static List oneGangAutomationFunctions( + String deviceId, String deviceName, functionValue) { + return [ + SceneStaticFunction( + deviceId: deviceId, + deviceName: deviceName, + icon: Assets.assetsAcPower, + operationName: 'Light Switch', + code: 'switch_1', + functionValue: functionValue, + operationDialogType: OperationDialogType.onOff, + operationalValues: [ + SceneOperationalValue( + icon: Assets.assetsAcPower, description: "ON", value: true), + SceneOperationalValue( + icon: Assets.assetsAcPowerOFF, description: "OFF", value: false), + ], + ), + SceneStaticFunction( + deviceId: deviceId, + deviceName: deviceName, + icon: Assets.assetsLightCountdown, + operationName: 'Light CountDown', + code: 'countdown_1', + functionValue: functionValue, + operationDialogType: OperationDialogType.integerSteps, + operationalValues: [ + SceneOperationalValue( + icon: '', + description: "sec", + value: 0.0, + minValue: 0, + maxValue: 43200, + stepValue: 1, + ), + ], + ), + ]; + } +} diff --git a/lib/features/scene/helper/scene_operations_data_helper.dart b/lib/features/scene/helper/scene_operations_data_helper.dart index 53f760e..b8218a3 100644 --- a/lib/features/scene/helper/scene_operations_data_helper.dart +++ b/lib/features/scene/helper/scene_operations_data_helper.dart @@ -6,6 +6,7 @@ import 'package:syncrow_app/features/scene/helper/functions_per_device/ac_functi import 'package:syncrow_app/features/scene/helper/functions_per_device/door_lock_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/gateway_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/human_presence_functions.dart'; +import 'package:syncrow_app/features/scene/helper/functions_per_device/one_gang_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/presence_sensor.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/three_gang_functions.dart'; import 'package:syncrow_app/features/scene/model/scene_details_model.dart'; @@ -14,8 +15,9 @@ import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/resource_manager/constants.dart'; mixin SceneOperationsDataHelper { - final Map, String, String, dynamic, bool)> _functionMap = - { + final Map, String, String, dynamic, bool)> + _functionMap = { DeviceType.LightBulb: lightBulbFunctions, DeviceType.CeilingSensor: ceilingSensorFunctions, DeviceType.WallSensor: wallSensorFunctions, @@ -24,6 +26,7 @@ mixin SceneOperationsDataHelper { DeviceType.Curtain: curtainFunctions, DeviceType.ThreeGang: threeGangFunctions, DeviceType.Gateway: gatewayFunctions, + DeviceType.OneGang: oneGangFunctions, }; final Map _titleMap = { @@ -35,7 +38,24 @@ mixin SceneOperationsDataHelper { DeviceType.Curtain: 'Curtain Functions', DeviceType.ThreeGang: '3G Light Switch Functions', DeviceType.Gateway: 'Gateway Functions', + DeviceType.OneGang: '1G Light Switch Conditions', }; + static String _productTypeCache = ''; + + //one gang functions + static List oneGangFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { + if (isAutomation) { + return OneGangHelperFunctions.oneGangAutomationFunctions( + deviceId, deviceName, functionValue); + } + return OneGangHelperFunctions.oneGangHelperFunctions( + deviceId, deviceName, functionValue); + } List getFunctionsWithIcons({ DeviceType? type, @@ -45,16 +65,22 @@ mixin SceneOperationsDataHelper { required bool isAutomation, }) { final functionValue = null; - return _functionMap[type]?.call(functions, deviceId, deviceName, functionValue, isAutomation) ?? - lightBulbFunctions(functions, deviceId, deviceName, functionValue, isAutomation); + return _functionMap[type]?.call( + functions, deviceId, deviceName, functionValue, isAutomation) ?? + lightBulbFunctions( + functions, deviceId, deviceName, functionValue, isAutomation); } String getTitle({DeviceType? type}) { return _titleMap[type] ?? ''; } - static List ceilingSensorFunctions(List functions, - String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { + static List ceilingSensorFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { if (isAutomation) { return PresenceSensorHelperFunctions.automationPresenceSensorFunctions( deviceId, deviceName, functionValue); @@ -63,22 +89,35 @@ mixin SceneOperationsDataHelper { deviceId, deviceName, functionValue); } - static List curtainFunctions(List functions, String deviceId, - String deviceName, dynamic functionValue, bool isAutomation) { + static List curtainFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { return []; } - static List doorLockFunctions(List functions, String deviceId, - String deviceName, dynamic functionValue, bool isAutomation) { + static List doorLockFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { if (isAutomation) { return DoorLockHelperFunctions.doorLockAutomationFunctions( deviceId, deviceName, functionValue); } - return DoorLockHelperFunctions.doorLockTapToRunFunctions(deviceId, deviceName, functionValue); + return DoorLockHelperFunctions.doorLockTapToRunFunctions( + deviceId, deviceName, functionValue); } - static List wallSensorFunctions(List functions, - String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { + static List wallSensorFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { if (isAutomation) { return HumanPresenceHelperFunctions.automationHumanPresenceFunctions( deviceId, deviceName, functionValue); @@ -87,31 +126,51 @@ mixin SceneOperationsDataHelper { deviceId, deviceName, functionValue); } - static List lightBulbFunctions(List functions, - String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { + static List lightBulbFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { return []; } - static List gatewayFunctions(List functions, String deviceId, - String deviceName, dynamic functionValue, bool isAutomation) { - return GatewayHelperFunctions.tabToRunGatewayFunctions(deviceId, deviceName, functionValue); + static List gatewayFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { + return GatewayHelperFunctions.tabToRunGatewayFunctions( + deviceId, deviceName, functionValue); } - static List threeGangFunctions(List functions, - String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { + static List threeGangFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { if (isAutomation) { return ThreeGangHelperFunctions.threeGangAutomationFunctions( deviceId, deviceName, functionValue); } - return ThreeGangHelperFunctions.threeGangHelperFunctions(deviceId, deviceName, functionValue); + return ThreeGangHelperFunctions.threeGangHelperFunctions( + deviceId, deviceName, functionValue); } - static List acFunctions(List functions, String deviceId, - String deviceName, dynamic functionValue, bool isAutomation) { + static List acFunctions( + List functions, + String deviceId, + String deviceName, + dynamic functionValue, + bool isAutomation) { if (isAutomation) { - return ACFunctionsHelper.automationAcFunctions(deviceId, deviceName, functionValue); + return ACFunctionsHelper.automationAcFunctions( + deviceId, deviceName, functionValue); } - return ACFunctionsHelper.tabToRunAcFunctions(deviceId, deviceName, functionValue); + return ACFunctionsHelper.tabToRunAcFunctions( + deviceId, deviceName, functionValue); } List getTaskListFunctionsFromApi({ @@ -149,8 +208,12 @@ mixin SceneOperationsDataHelper { SceneStaticFunction( deviceId: action.entityId, deviceName: action.name.toString(), - deviceIcon: action.type == 'automation' ? Assets.player : Assets.handClickIcon, - icon: action.type == 'automation' ? Assets.player : Assets.handClickIcon, + deviceIcon: action.type == 'automation' + ? Assets.player + : Assets.handClickIcon, + icon: action.type == 'automation' + ? Assets.player + : Assets.handClickIcon, operationName: action.type.toString(), operationDialogType: OperationDialogType.onOff, functionValue: action.actionExecutor, @@ -170,7 +233,8 @@ mixin SceneOperationsDataHelper { ), ); } else { - functions.add(_mapExecutorPropertyToSceneFunction(action, isAutomation)); + functions + .add(_mapExecutorPropertyToSceneFunction(action, isAutomation)); } } @@ -206,7 +270,9 @@ mixin SceneOperationsDataHelper { }) { final executorProperty = action.executorProperty; - final Map functionMap = { + final Map + functionMap = { 'sensitivity': _createSensitivityFunction, 'normal_open_switch': _createNormalOpenSwitchFunction, 'unlock_fingerprint': _createUnlockFingerprintFunction, @@ -282,14 +348,16 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createSensitivityFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createSensitivityFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Presence Sensor', Assets.assetsIconsSensors, 'Sensitivity', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.listOfOptions, + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.listOfOptions, isAutomation ? _createIntegerStepsOptions() : _createSensitivityOptions(), isAutomation, comparator, @@ -297,8 +365,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createNormalOpenSwitchFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createNormalOpenSwitchFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -351,8 +419,8 @@ mixin SceneOperationsDataHelper { ]; } - SceneStaticFunction _createUnlockFingerprintFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockFingerprintFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -366,8 +434,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createUnlockPasswordFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockPasswordFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -381,8 +449,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createUnlockCardFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockCardFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -396,8 +464,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createAlarmLockFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createAlarmLockFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -411,8 +479,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createUnlockRequestFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockRequestFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -426,8 +494,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createResidualElectricityFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createResidualElectricityFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -441,8 +509,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createReverseLockFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createReverseLockFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -456,8 +524,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createUnlockAppFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockAppFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -471,8 +539,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createHijackFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createHijackFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -486,8 +554,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createDoorbellFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createDoorbellFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -501,8 +569,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createUnlockTemporaryFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createUnlockTemporaryFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'WIFI LOCK PRO', @@ -516,8 +584,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createFarDetectionFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createFarDetectionFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -531,8 +599,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createMotionSensitivityFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createMotionSensitivityFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -546,8 +614,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createMotionlessSensitivityFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createMotionlessSensitivityFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -561,8 +629,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createIndicatorFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createIndicatorFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -576,8 +644,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createPresenceTimeFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createPresenceTimeFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -591,8 +659,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createPresenceStateFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createPresenceStateFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -606,14 +674,16 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createDisCurrentFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createDisCurrentFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', Assets.assetsIconsSensors, 'Current Distance', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.countdown, _createCurrentDistanceOptions(), isAutomation, comparator, @@ -621,8 +691,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createIlluminanceValueFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createIlluminanceValueFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -636,8 +706,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createCheckingResultFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createCheckingResultFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Human Presence Sensor', @@ -651,8 +721,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createSwitchFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createSwitchFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', @@ -666,23 +736,27 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createTempSetFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createTempSetFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', Assets.assetsIconsAC, 'Set Temperature', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.temperature, - isAutomation ? _createAutomationTemperatureOptions() : _createTemperatureOptions(), + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.temperature, + isAutomation + ? _createAutomationTemperatureOptions() + : _createTemperatureOptions(), isAutomation, comparator, uniqueCustomId, ); } - SceneStaticFunction _createTempCurrentFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createTempCurrentFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', @@ -696,8 +770,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createModeFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createModeFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', @@ -711,8 +785,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createLevelFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createLevelFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', @@ -726,8 +800,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createChildLockFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createChildLockFunction(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Smart AC Thermostat - Grey - Model A', @@ -741,23 +815,38 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createSwitch1Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { - return _createSceneFunction( - action, - '3 Gang Button Switch L-L', - Assets.assetsIcons3GangSwitch, - 'Light 1 Switch', - OperationDialogType.onOff, - _createOnOffOptions(), - isAutomation, - comparator, - uniqueCustomId, - ); + SceneStaticFunction _createSwitch1Function(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { + switch (action.productType) { + case "3G": + return _createSceneFunction( + action, + '3 Gang Button Switch L-L', + Assets.assetsIcons3GangSwitch, + 'Light 1 Switch', + OperationDialogType.onOff, + _createOnOffOptions(), + isAutomation, + comparator, + uniqueCustomId, + ); + default: + return _createSceneFunction( + action, + '1 Gang Button Switch L-L', + Assets.assetsIcons3GangSwitch, + 'Light Switch', + OperationDialogType.onOff, + _createOnOffOptions(), + isAutomation, + comparator, + uniqueCustomId, + ); + } } - SceneStaticFunction _createSwitch2Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createSwitch2Function(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, '3 Gang Button Switch L-L', @@ -771,8 +860,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createSwitch3Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createSwitch3Function(Action action, bool isAutomation, + String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, '3 Gang Button Switch L-L', @@ -786,53 +875,84 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createCountdown1Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { - return _createSceneFunction( - action, - '3 Gang Button Switch L-L', - Assets.assetsIcons3GangSwitch, - 'Light 1 CountDown', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, - isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), - isAutomation, - comparator, - uniqueCustomId, - ); + SceneStaticFunction _createCountdown1Function(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { + switch (action.productType) { + case "3G": + return _createSceneFunction( + action, + '3 Gang Button Switch L-L', + Assets.assetsIcons3GangSwitch, + 'Light 1 CountDown', + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.countdown, + isAutomation + ? _createAutomationCountDownOptions() + : _createCountdownOptions(), + isAutomation, + comparator, + uniqueCustomId, + ); + default: + return _createSceneFunction( + action, + '1 Gang Button Switch L-L', + Assets.oneGang, + 'Light CountDown', + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.countdown, + isAutomation + ? _createAutomationCountDownOptions() + : _createCountdownOptions(), + isAutomation, + comparator, + uniqueCustomId, + ); + } } - SceneStaticFunction _createCountdown2Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createCountdown2Function(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, '3 Gang Button Switch L-L', Assets.assetsIcons3GangSwitch, 'Light 2 CountDown', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, - isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.countdown, + isAutomation + ? _createAutomationCountDownOptions() + : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } - SceneStaticFunction _createCountdown3Function( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createCountdown3Function(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, '3 Gang Button Switch L-L', Assets.assetsIcons3GangSwitch, 'Light 3 CountDown', - isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, - isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), + isAutomation + ? OperationDialogType.integerSteps + : OperationDialogType.countdown, + isAutomation + ? _createAutomationCountDownOptions() + : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } - SceneStaticFunction _createSwitchAlarmSoundFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createSwitchAlarmSoundFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Gateway', @@ -846,8 +966,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createMasterStateFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createMasterStateFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Gateway', @@ -861,8 +981,8 @@ mixin SceneOperationsDataHelper { ); } - SceneStaticFunction _createFactoryResetFunction( - Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { + SceneStaticFunction _createFactoryResetFunction(Action action, + bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, 'Gateway', @@ -1180,8 +1300,12 @@ mixin SceneOperationsDataHelper { uniqueCustomId: taskItem.uniqueCustomId, deviceId: taskItem.deviceId, deviceName: taskItem.deviceName.toString(), - deviceIcon: taskItem.operationName == 'automation' ? Assets.player : Assets.handClickIcon, - icon: taskItem.operationName == 'automation' ? Assets.player : Assets.handClickIcon, + deviceIcon: taskItem.operationName == 'automation' + ? Assets.player + : Assets.handClickIcon, + icon: taskItem.operationName == 'automation' + ? Assets.player + : Assets.handClickIcon, operationName: taskItem.operationName, operationDialogType: OperationDialogType.onOff, functionValue: taskItem.functionValue == 'rule_enable' ? true : false, diff --git a/lib/features/scene/model/scene_details_model.dart b/lib/features/scene/model/scene_details_model.dart index d356d43..d7d9758 100644 --- a/lib/features/scene/model/scene_details_model.dart +++ b/lib/features/scene/model/scene_details_model.dart @@ -74,6 +74,7 @@ class Action { ExecutorProperty? executorProperty; String? name; String? type; + String? productType; Action({ required this.actionExecutor, @@ -81,6 +82,7 @@ class Action { this.executorProperty, this.name, this.type, + this.productType, }); String toRawJson() => json.encode(toJson()); @@ -92,6 +94,7 @@ class Action { entityId: json["entityId"], name: json['name'], type: json['type'], + productType: json['productType'], ); } if (json["executorProperty"] == null) { @@ -102,6 +105,7 @@ class Action { actionExecutor: json["actionExecutor"], entityId: json["entityId"], executorProperty: ExecutorProperty.fromJson(json["executorProperty"]), + productType: json['productType'], ); } From 1cff69d496d2f87daae6f7037a35aaf6048d76aa Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Apr 2025 09:39:58 +0300 Subject: [PATCH 2/5] change icon --- lib/features/scene/helper/scene_operations_data_helper.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/features/scene/helper/scene_operations_data_helper.dart b/lib/features/scene/helper/scene_operations_data_helper.dart index b8218a3..db59fe8 100644 --- a/lib/features/scene/helper/scene_operations_data_helper.dart +++ b/lib/features/scene/helper/scene_operations_data_helper.dart @@ -834,7 +834,7 @@ mixin SceneOperationsDataHelper { return _createSceneFunction( action, '1 Gang Button Switch L-L', - Assets.assetsIcons3GangSwitch, + Assets.oneGang, 'Light Switch', OperationDialogType.onOff, _createOnOffOptions(), From 7005d8ba83a4d5284e4078dd1c0201612d511e32 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Apr 2025 10:16:10 +0300 Subject: [PATCH 3/5] Refactor device filtering logic and improve code readability - Extracted the logic for filtering implemented devices into a separate method `_getOnlyImplementedDevices` - Created a set `allowedDevices` to store the allowed device types - Updated the filtering logic to use the `allowedDevices` set for checking device types - Removed unnecessary conditions for filtering devices Fix nullability issues in `Action` model - Added null checks for `actionExecutor`, `entityId`, `name`, `type`, and `productType` properties in the `fromJson` method of the `Action` model - Set default values for `actionExecutor` and `entityId` if they are null - Updated the type casting for `name`, `type`, and `productType` properties to avoid potential nullability issues --- .../device_manager_bloc.dart | 28 ++++++++++++------- .../scene/model/scene_details_model.dart | 16 +++++------ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart index 3357ba8..818c872 100644 --- a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart +++ b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart @@ -169,18 +169,26 @@ class DeviceManagerBloc extends Bloc { } } - _getOnlyImplementedDevices(List devices) { + List _getOnlyImplementedDevices(List devices) { List implementedDevices = []; - for (int i = 0; i < devices.length; i++) { - if (devices[i].productType == DeviceType.AC || - devices[i].productType == DeviceType.DoorLock || - devices[i].productType == DeviceType.Gateway || - devices[i].productType == DeviceType.WallSensor || - devices[i].productType == DeviceType.CeilingSensor || - devices[i].productType == DeviceType.ThreeGang || - devices[i].productType == DeviceType.OneGang) { - implementedDevices.add(devices[i]); + + const allowedDevices = { + DeviceType.OneGang, + DeviceType.TwoGang, + DeviceType.ThreeGang, + DeviceType.AC, + DeviceType.DoorLock, + DeviceType.Gateway, + DeviceType.WallSensor, + DeviceType.CeilingSensor + }; + + for (final device in devices) { + final isDeviceAllowed = allowedDevices.contains(device.productType); + if (isDeviceAllowed) { + implementedDevices.add(device); } + return implementedDevices; } return implementedDevices; } diff --git a/lib/features/scene/model/scene_details_model.dart b/lib/features/scene/model/scene_details_model.dart index d7d9758..51024d7 100644 --- a/lib/features/scene/model/scene_details_model.dart +++ b/lib/features/scene/model/scene_details_model.dart @@ -90,11 +90,11 @@ class Action { static Action? fromJson(Map json) { if (json['name'] != null && json['type'] != null) { return Action( - actionExecutor: json["actionExecutor"], - entityId: json["entityId"], - name: json['name'], - type: json['type'], - productType: json['productType'], + actionExecutor: json["actionExecutor"] ?? '', + entityId: json["entityId"] ?? '', + name: json['name'] as String?, + type: json['type'] as String?, + productType: json['productType'] as String?, ); } if (json["executorProperty"] == null) { @@ -102,10 +102,10 @@ class Action { } return Action( - actionExecutor: json["actionExecutor"], - entityId: json["entityId"], + actionExecutor: json["actionExecutor"] ?? '', + entityId: json["entityId"] ?? '', executorProperty: ExecutorProperty.fromJson(json["executorProperty"]), - productType: json['productType'], + productType: json['productType'] as String?, ); } From 5493ca6fb052b3ee2a52bc843037a17c6b899e75 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Apr 2025 10:38:25 +0300 Subject: [PATCH 4/5] Refactor device filtering logic to improve code readability --- .../device_manager_bloc.dart | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart index 818c872..4ee8f81 100644 --- a/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart +++ b/lib/features/devices/bloc/device_manager_bloc/device_manager_bloc.dart @@ -170,26 +170,18 @@ class DeviceManagerBloc extends Bloc { } List _getOnlyImplementedDevices(List devices) { - List implementedDevices = []; - - const allowedDevices = { - DeviceType.OneGang, - DeviceType.TwoGang, - DeviceType.ThreeGang, + const allowedDeviceTypes = { DeviceType.AC, DeviceType.DoorLock, DeviceType.Gateway, DeviceType.WallSensor, - DeviceType.CeilingSensor + DeviceType.CeilingSensor, + DeviceType.ThreeGang, + DeviceType.OneGang, }; - for (final device in devices) { - final isDeviceAllowed = allowedDevices.contains(device.productType); - if (isDeviceAllowed) { - implementedDevices.add(device); - } - return implementedDevices; - } - return implementedDevices; + return devices + .where((device) => allowedDeviceTypes.contains(device.productType)) + .toList(); } } From 73d28a1800e7e91ab24fa084735d1e6688fcb631 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Apr 2025 10:41:01 +0300 Subject: [PATCH 5/5] Refactor Action class to use type annotations for actionExecutor and entityId --- lib/features/scene/model/scene_details_model.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/features/scene/model/scene_details_model.dart b/lib/features/scene/model/scene_details_model.dart index 51024d7..5d392fb 100644 --- a/lib/features/scene/model/scene_details_model.dart +++ b/lib/features/scene/model/scene_details_model.dart @@ -90,8 +90,8 @@ class Action { static Action? fromJson(Map json) { if (json['name'] != null && json['type'] != null) { return Action( - actionExecutor: json["actionExecutor"] ?? '', - entityId: json["entityId"] ?? '', + actionExecutor: json["actionExecutor"] as String, + entityId: json["entityId"] as String, name: json['name'] as String?, type: json['type'] as String?, productType: json['productType'] as String?, @@ -102,8 +102,8 @@ class Action { } return Action( - actionExecutor: json["actionExecutor"] ?? '', - entityId: json["entityId"] ?? '', + actionExecutor: json["actionExecutor"] as String, + entityId: json["entityId"] as String, executorProperty: ExecutorProperty.fromJson(json["executorProperty"]), productType: json['productType'] as String?, );