135 lines
4.6 KiB
Dart
135 lines
4.6 KiB
Dart
enum WizProvisioningPermissionStatus { granted, requestable, settingsRequired }
|
|
|
|
class WizProvisioningEnvironment {
|
|
final String platform;
|
|
final int? androidApiLevel;
|
|
final bool smartPairingSupported;
|
|
final bool wifiSettingsSupported;
|
|
final bool appSettingsSupported;
|
|
final WizProvisioningPermissionStatus permissionStatus;
|
|
final bool locationServicesEnabled;
|
|
final bool connectedToWifi;
|
|
final String? ssid;
|
|
final String? bssid;
|
|
final int? frequencyMhz;
|
|
|
|
const WizProvisioningEnvironment({
|
|
required this.platform,
|
|
required this.androidApiLevel,
|
|
required this.smartPairingSupported,
|
|
required this.wifiSettingsSupported,
|
|
required this.appSettingsSupported,
|
|
required this.permissionStatus,
|
|
required this.locationServicesEnabled,
|
|
required this.connectedToWifi,
|
|
required this.ssid,
|
|
required this.bssid,
|
|
required this.frequencyMhz,
|
|
});
|
|
|
|
factory WizProvisioningEnvironment.unsupported() =>
|
|
const WizProvisioningEnvironment(
|
|
platform: 'unknown',
|
|
androidApiLevel: null,
|
|
smartPairingSupported: false,
|
|
wifiSettingsSupported: false,
|
|
appSettingsSupported: false,
|
|
permissionStatus: WizProvisioningPermissionStatus.granted,
|
|
locationServicesEnabled: true,
|
|
connectedToWifi: false,
|
|
ssid: null,
|
|
bssid: null,
|
|
frequencyMhz: null,
|
|
);
|
|
|
|
factory WizProvisioningEnvironment.fromMap(Map<String, dynamic> raw) {
|
|
return WizProvisioningEnvironment(
|
|
platform: raw['platform'] as String? ?? 'unknown',
|
|
androidApiLevel: (raw['androidApiLevel'] as num?)?.toInt(),
|
|
smartPairingSupported: raw['smartPairingSupported'] == true,
|
|
wifiSettingsSupported: raw['wifiSettingsSupported'] == true,
|
|
appSettingsSupported: raw['appSettingsSupported'] == true,
|
|
permissionStatus: _permissionStatusFromPlatformValue(
|
|
raw['permissionStatus'] as String?,
|
|
),
|
|
locationServicesEnabled: raw['locationServicesEnabled'] != false,
|
|
connectedToWifi: raw['connectedToWifi'] == true,
|
|
ssid: _normalizeText(raw['ssid']),
|
|
bssid: _normalizeText(raw['bssid']),
|
|
frequencyMhz: (raw['frequencyMhz'] as num?)?.toInt(),
|
|
);
|
|
}
|
|
|
|
bool get permissionsGranted =>
|
|
permissionStatus == WizProvisioningPermissionStatus.granted;
|
|
|
|
bool get permissionRequestable =>
|
|
permissionStatus == WizProvisioningPermissionStatus.requestable;
|
|
|
|
bool get requiresAppSettings =>
|
|
permissionStatus == WizProvisioningPermissionStatus.settingsRequired;
|
|
|
|
bool get isAndroid => platform == 'android';
|
|
|
|
bool get isOn24Ghz =>
|
|
frequencyMhz != null && frequencyMhz! >= 2400 && frequencyMhz! < 2500;
|
|
|
|
bool get isLikelyOn5Ghz =>
|
|
frequencyMhz != null && frequencyMhz! >= 4900 && frequencyMhz! < 6000;
|
|
|
|
WizProvisioningEnvironment copyWith({
|
|
String? platform,
|
|
int? androidApiLevel,
|
|
bool? smartPairingSupported,
|
|
bool? wifiSettingsSupported,
|
|
bool? appSettingsSupported,
|
|
WizProvisioningPermissionStatus? permissionStatus,
|
|
bool? locationServicesEnabled,
|
|
bool? connectedToWifi,
|
|
String? ssid,
|
|
String? bssid,
|
|
int? frequencyMhz,
|
|
bool clearWifiInfo = false,
|
|
}) {
|
|
return WizProvisioningEnvironment(
|
|
platform: platform ?? this.platform,
|
|
androidApiLevel: androidApiLevel ?? this.androidApiLevel,
|
|
smartPairingSupported:
|
|
smartPairingSupported ?? this.smartPairingSupported,
|
|
wifiSettingsSupported:
|
|
wifiSettingsSupported ?? this.wifiSettingsSupported,
|
|
appSettingsSupported: appSettingsSupported ?? this.appSettingsSupported,
|
|
permissionStatus: permissionStatus ?? this.permissionStatus,
|
|
locationServicesEnabled:
|
|
locationServicesEnabled ?? this.locationServicesEnabled,
|
|
connectedToWifi: connectedToWifi ?? this.connectedToWifi,
|
|
ssid: clearWifiInfo ? null : (ssid ?? this.ssid),
|
|
bssid: clearWifiInfo ? null : (bssid ?? this.bssid),
|
|
frequencyMhz: clearWifiInfo ? null : (frequencyMhz ?? this.frequencyMhz),
|
|
);
|
|
}
|
|
|
|
static WizProvisioningPermissionStatus _permissionStatusFromPlatformValue(
|
|
String? value,
|
|
) {
|
|
switch (value) {
|
|
case 'granted':
|
|
return WizProvisioningPermissionStatus.granted;
|
|
case 'settings_required':
|
|
return WizProvisioningPermissionStatus.settingsRequired;
|
|
case 'requestable':
|
|
default:
|
|
return WizProvisioningPermissionStatus.requestable;
|
|
}
|
|
}
|
|
|
|
static String? _normalizeText(Object? raw) {
|
|
final text = raw as String?;
|
|
if (text == null) {
|
|
return null;
|
|
}
|
|
final trimmed = text.trim();
|
|
return trimmed.isEmpty ? null : trimmed;
|
|
}
|
|
}
|