Add WiZ provisioning wizard
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user