From e59734ce43bfbd91f8145cbef154860fbbabc0da Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 5 Oct 2023 14:26:17 +0300 Subject: [PATCH] VT CheckMe O2 integrated --- ios/Runner/AppDelegate.swift | 29 +++++--- ios/Runner/Controllers/MainFlutterVC.swift | 16 ++--- ios/Runner/Helper/FlutterConstants.swift | 1 + ios/Runner/Helper/HMGPlatformBridge.swift | 6 +- ios/Runner/Helper/OpenTokPlatformBridge.swift | 1 + ios/Runner/Runner-Bridging-Header.h | 2 + lib/config/config.dart | 4 +- .../viatom_devices/oxymeter_ble.dart | 71 ++++++++++++------- 8 files changed, 81 insertions(+), 49 deletions(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index d8e5e0f6..61b6c0af 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -15,11 +15,16 @@ var userNotificationCenterDelegate:UNUserNotificationCenterDelegate? = nil GeneratedPluginRegistrant.register(with: self) initializePlatformChannels() - + if let _ = launchOptions?[.location] { HMG_Geofence.initGeofencing() } + // // Prepare channel + // FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController; + // self->channel = [FlutterEventChannel eventChannelWithName:@"events" binaryMessenger:controller]; + // [self->channel setStreamHandler:[EventHandler new]]; + UNUserNotificationCenter.current().delegate = self return super.application(application, didFinishLaunchingWithOptions: launchOptions) } @@ -29,11 +34,13 @@ var userNotificationCenterDelegate:UNUserNotificationCenterDelegate? = nil if let mainViewController = window.rootViewController as? MainFlutterVC{ // platform initialization suppose to be in foreground flutterViewController = mainViewController HMGPlatformBridge.initialize(flutterViewController: flutterViewController) + BLEPlatformBridge.initialize(flutterViewController: flutterViewController) OpenTokPlatformBridge.initialize(flutterViewController: flutterViewController, registrar: self.registrar(forPlugin: "open-tok")) }else if let mainViewController = initialViewController(){ // platform initialization suppose to be in background flutterViewController = mainViewController HMGPlatformBridge.initialize(flutterViewController: flutterViewController) + BLEPlatformBridge.initialize(flutterViewController: flutterViewController) OpenTokPlatformBridge.initialize(flutterViewController: flutterViewController, registrar: self.registrar(forPlugin: "open-tok")) } } @@ -57,14 +64,14 @@ extension AppDelegate{ /* let dart = FlutterDartProject(precompiledDartBundle: .main) - let engine = FlutterEngine(name: "com.hmg.cs", project: dart, allowHeadlessExecution: true) - if engine.run(){ - flutterMethodChannel = FlutterMethodChannel(name: "HMG-Platform-Bridge", binaryMessenger: engine.binaryMessenger) - - Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { (timer) in - FlutterText.with(key: "alreadyConnectedHmgNetwork"){ localized in - print(localized) - } - } - } + let engine = FlutterEngine(name: "com.hmg.cs", project: dart, allowHeadlessExecution: true) + if engine.run(){ + flutterMethodChannel = FlutterMethodChannel(name: "HMG-Platform-Bridge", binaryMessenger: engine.binaryMessenger) + + Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { (timer) in + FlutterText.with(key: "alreadyConnectedHmgNetwork"){ localized in + print(localized) + } + } + } */ diff --git a/ios/Runner/Controllers/MainFlutterVC.swift b/ios/Runner/Controllers/MainFlutterVC.swift index 4f91d052..50ddaaf4 100644 --- a/ios/Runner/Controllers/MainFlutterVC.swift +++ b/ios/Runner/Controllers/MainFlutterVC.swift @@ -105,14 +105,14 @@ class MainFlutterVC: FlutterViewController { // Register Geofence func registerHmgGeofences(result: @escaping FlutterResult){ - flutterMethodChannel?.invokeMethod("getGeofencePreferenceKey", arguments: nil){ geoFencesJsonString in - if let jsonString = geoFencesJsonString as? String{ - let allZones = GeoZoneModel.list(from: jsonString) - HMG_Geofence().register(geoZones: allZones) - - }else{ - } - } +// flutterMethodChannel?.invokeMethod("getGeofencePreferenceKey", arguments: nil){ geoFencesJsonString in +// if let jsonString = geoFencesJsonString as? String{ +// let allZones = GeoZoneModel.list(from: jsonString) +// HMG_Geofence().register(geoZones: allZones) +// +// }else{ +// } +// } } } diff --git a/ios/Runner/Helper/FlutterConstants.swift b/ios/Runner/Helper/FlutterConstants.swift index f1b3f098..122f2c8f 100644 --- a/ios/Runner/Helper/FlutterConstants.swift +++ b/ios/Runner/Helper/FlutterConstants.swift @@ -6,6 +6,7 @@ // import UIKit +import Flutter class FlutterConstants{ static var LOG_GEOFENCE_URL:String? diff --git a/ios/Runner/Helper/HMGPlatformBridge.swift b/ios/Runner/Helper/HMGPlatformBridge.swift index fd9fb401..fb235980 100644 --- a/ios/Runner/Helper/HMGPlatformBridge.swift +++ b/ios/Runner/Helper/HMGPlatformBridge.swift @@ -8,11 +8,13 @@ import UIKit import NetworkExtension import SystemConfiguration.CaptiveNetwork +import Flutter var flutterMethodChannel:FlutterMethodChannel? = nil fileprivate var mainViewController:MainFlutterVC! class HMGPlatformBridge{ + private let channelName = "HMG-Platform-Bridge" private static var shared_:HMGPlatformBridge? @@ -60,7 +62,7 @@ class HMGPlatformBridge{ func connectHMGInternetWifi(methodCall:FlutterMethodCall ,result: @escaping FlutterResult){ guard let pateintId = (methodCall.arguments as? [Any])?.first as? String - else { return assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'") } + else { return assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'") } HMG_Internet.shared.connect(patientId: pateintId) { (status, message) in @@ -136,5 +138,5 @@ class HMGPlatformBridge{ HMG_Geofence.shared().unRegisterAll() result(true) } - + } diff --git a/ios/Runner/Helper/OpenTokPlatformBridge.swift b/ios/Runner/Helper/OpenTokPlatformBridge.swift index 4da39dc4..efc3b291 100644 --- a/ios/Runner/Helper/OpenTokPlatformBridge.swift +++ b/ios/Runner/Helper/OpenTokPlatformBridge.swift @@ -8,6 +8,7 @@ import UIKit import NetworkExtension import SystemConfiguration.CaptiveNetwork +import Flutter fileprivate var openTok:OpenTok? diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h index 308a2a56..bd07f4f6 100644 --- a/ios/Runner/Runner-Bridging-Header.h +++ b/ios/Runner/Runner-Bridging-Header.h @@ -1 +1,3 @@ #import "GeneratedPluginRegistrant.h" +#import "VTBLEUtils.h" +#import "VTDevice.h" diff --git a/lib/config/config.dart b/lib/config/config.dart index 1b4c69b3..0b601e01 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -20,8 +20,8 @@ var PACKAGES_ORDERS = '/api/orders'; var PACKAGES_ORDER_HISTORY = '/api/orders/items'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; // var BASE_URL = 'http://10.50.100.198:2018/'; -var BASE_URL = 'https://uat.hmgwebservices.com/'; -// var BASE_URL = 'https://hmgwebservices.com/'; +// var BASE_URL = 'https://uat.hmgwebservices.com/'; +var BASE_URL = 'https://hmgwebservices.com/'; // var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; diff --git a/lib/pages/medical/my_trackers/viatom_devices/oxymeter_ble.dart b/lib/pages/medical/my_trackers/viatom_devices/oxymeter_ble.dart index 421cf91b..33bb7cc7 100644 --- a/lib/pages/medical/my_trackers/viatom_devices/oxymeter_ble.dart +++ b/lib/pages/medical/my_trackers/viatom_devices/oxymeter_ble.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:diplomaticquarterapp/viatom_ble/ble_connect.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; @@ -26,13 +28,6 @@ class _Oxymeter_BLEState extends State { void initState() { // TODO: implement initState super.initState(); - eventChannel.receiveBroadcastStream().listen((event) { - print('Received event---: $event'); - oxymeterValueNotifier.value = event; - - // O2M response: RtParam{spo2=0, pr=0, steps=0, battery=72, batteryState=0, vector=0, pi=0.0, state=0, countDown=0, invalidIvState=0, spo2IvState=0, hrIvState=0, vectorIvState=0} - // POD-1W response: RtParam{spo2=98, pr=104, pi=5.8, isProbeOff=false, isPulseSearching=false} - }); } @override @@ -65,25 +60,32 @@ class _Oxymeter_BLEState extends State { valueListenable: oxymeterValueNotifier, builder: (context, value, _) { return value != "start" - ? Column( - children: [ - Text( - getSPO2( - value.toString().replaceAll("RtParam", ""), - ), - ), - Text( - getPR( - value.toString().replaceAll("RtParam", ""), - ), - ), - // Text( - // getPI( - // value.toString().replaceAll("RtParam", ""), - // ), - // ), - ], - ) + ? Platform.isAndroid + ? Column( + children: [ + Text( + getSPO2( + value.toString().replaceAll("RtParam", ""), + ), + ), + Text( + getPR( + value.toString().replaceAll("RtParam", ""), + ), + ), + // Text( + // getPI( + // value.toString().replaceAll("RtParam", ""), + // ), + // ), + ], + ) + : Column( + children: [ + Text(getSPO2iOS(value.toString())), + Text(getPRiOS(value.toString())), + ], + ) : Text(value); }, ), @@ -96,6 +98,15 @@ class _Oxymeter_BLEState extends State { void checkBLEPermissions() async { [Permission.location, Permission.storage, Permission.bluetooth, Permission.bluetoothConnect, Permission.bluetoothScan].request().then((status) async { // startBLEConnection(); + + eventChannel.receiveBroadcastStream().listen((event) { + print('Received event---: $event'); + oxymeterValueNotifier.value = event; + + // O2M response: RtParam{spo2=0, pr=0, steps=0, battery=72, batteryState=0, vector=0, pi=0.0, state=0, countDown=0, invalidIvState=0, spo2IvState=0, hrIvState=0, vectorIvState=0} + // POD-1W response: RtParam{spo2=98, pr=104, pi=5.8, isProbeOff=false, isPulseSearching=false} + }); + await BleChannel.getScanningResult("oximeter"); }); } @@ -112,6 +123,14 @@ class _Oxymeter_BLEState extends State { return "Perfusion Index: " + value.split(",")[2].replaceAll("pi=", "") + "%"; } + String getSPO2iOS(String value) { + return "SpO2: " + value.split(",")[0]; + } + + String getPRiOS(String value) { + return "Pulse Rate: " + value.split(",")[1]; + } + // List setResult(String value) { // List values = value.split(","); //