diff --git a/android/build.gradle b/android/build.gradle
index 8a97f515..46c8995a 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -66,6 +66,20 @@ allprojects {
jvmTarget = "21"
}
}
+
+ if (project.name == 'nfc_manager') {
+ project.tasks.matching { it.name.startsWith("compile") && it.name.endsWith("Kotlin") }.configureEach {
+ doFirst {
+ def translatorFile = project.file("src/main/kotlin/io/flutter/plugins/nfcmanager/Translator.kt")
+ if (translatorFile.exists()) {
+ def content = translatorFile.text
+ if (content.contains("toLowerCase(Locale.ROOT)")) {
+ translatorFile.text = content.replace("toLowerCase(Locale.ROOT)", "lowercase(Locale.ROOT)")
+ }
+ }
+ }
+ }
+ }
}
}
}
diff --git a/assets/images/all_categories.png b/assets/images/all_categories.png
deleted file mode 100644
index aa6f8959..00000000
Binary files a/assets/images/all_categories.png and /dev/null differ
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 7c569640..1dc6cf76 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 12.0
+ 13.0
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 6aac74dd..03a06b13 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -7,8 +7,8 @@
objects = {
/* Begin PBXBuildFile section */
+ 0AD79F8B1905C17FADC8B42C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F0CC8EAC13AF3E07BEE567 /* Pods_Runner.framework */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
- 1CCF895CFB3C95DEBB84A05F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F0CC8EAC13AF3E07BEE567 /* Pods_Runner.framework */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
76AE113C28E078EA00513112 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 76AE113B28E078EA00513112 /* GoogleService-Info.plist */; };
@@ -57,7 +57,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 1CCF895CFB3C95DEBB84A05F /* Pods_Runner.framework in Frameworks */,
+ 0AD79F8B1905C17FADC8B42C /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -144,7 +144,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
C4CFBC4C5CAC00182015ACD5 /* [CP] Embed Pods Frameworks */,
- EF29CE25BB57F5AA48CE1136 /* [CP] Copy Pods Resources */,
+ 8ED1493DD0011941609D6F99 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -242,7 +242,7 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 6C6E76E4FB19FAF11C24005D /* [CP] Copy Pods Resources */ = {
+ 8ED1493DD0011941609D6F99 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -367,7 +367,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -454,7 +454,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -504,7 +504,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 9c12df59..bb7d20fe 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -3,9 +3,23 @@
LastUpgradeVersion = "1510"
version = "1.3">
+
+
+
+
sms
tel
mailto
+ https
+ http
+ comgooglemaps
+ googlechromes
+ waze
LSRequiresIPhoneOS
@@ -46,19 +51,23 @@
NSCameraUsageDescription
- This app requires camera access to capture & upload picture as profile image.
+ This app requires camera access to capture & upload picture as profile image, and scan QR codes.
NSFaceIDUsageDescription
This app requires Face ID to allow biometric authentication for app login.
+ NSLocalNetworkUsageDescription
+ This app requires access to local network to connect to company Wi-Fi networks for attendance.
NSLocationAlwaysAndWhenInUseUsageDescription
- This App requires access to your location to mark your attendance.
+ This app requires access to your location to mark your attendance and discover nearby offers and merchants.
NSLocationAlwaysUsageDescription
- This App requires access to your location to mark your attendance.
+ This app requires access to your location to mark your attendance and discover nearby offers and merchants.
NSLocationWhenInUseUsageDescription
- This App requires access to your location to mark your attendance.
+ This app requires access to your location to mark your attendance and discover nearby offers and merchants.
NSMicrophoneUsageDescription
- This app requires microphone access to for call.
+ This app requires microphone access for audio calls and recording voice messages.
NSPhotoLibraryUsageDescription
This app requires photo library access to select image as document & upload it.
+ NSPhotoLibraryAddUsageDescription
+ This app requires access to save photos and documents to your photo library.
UIApplicationSupportsIndirectInputEvents
NSSpeechRecognitionUsageDescription
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
index 304aa000..98a55e2d 100644
--- a/ios/Runner/Runner.entitlements
+++ b/ios/Runner/Runner.entitlements
@@ -20,6 +20,7 @@
com.apple.developer.nfc.readersession.formats
+ NDEF
TAG
com.apple.developer.ubiquity-container-identifiers
diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart
index 0a2a3d97..65e5fc64 100644
--- a/lib/api/login_api_client.dart
+++ b/lib/api/login_api_client.dart
@@ -294,9 +294,9 @@ class LoginApiClient {
return await ApiClient().postJsonForObject((json) => GenericResponseModel.fromJson(json).basicMemberInformation, url, postParams);
}
- Future checkActivationCode(bool isDeviceNFC, String? mobileNumber, String activationCode, String? pUserName) async {
+ Future checkActivationCode(bool isDeviceNFC, String? mobileNumber, String activationCode, String? pUserName, String loginType) async {
String url = "${ApiConsts.erpRest}CheckActivationCode";
- Map postParams = {"IsDeviceNFC": isDeviceNFC, "MobileNumber": mobileNumber, "activationCode": activationCode, "P_USER_NAME": pUserName};
+ Map postParams = {"IsDeviceNFC": isDeviceNFC, "MobileNumber": mobileNumber, "activationCode": activationCode, "P_USER_NAME": pUserName, "LoginType":loginType};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart
index 23197a5c..7d58478a 100644
--- a/lib/api/profile_api_client.dart
+++ b/lib/api/profile_api_client.dart
@@ -551,6 +551,7 @@ class ProfileApiClient {
if (personId != null) {
postParams["P_PERSON_ID"] = personId;
}
+ postParams["PatientIdentificationID"] = patientIdentificationId?.replaceAll('-', '').trim();
// Only the Grant call carries these - Revoke's payload stays exactly as it was before
// this feature. P_BIRTH_DATE/P_NHIC_VERIFIED_FLAG are always sent (even as null, if the
// source contact from GET_EMPLOYEE_CONTACTS didn't have a value) once we're granting.
@@ -561,7 +562,7 @@ class ProfileApiClient {
if (patientIdentificationId != null && patientIdentificationId.trim().isNotEmpty) {
// National ID comes formatted with dashes (e.g. "2-5616-1545-7") - the backend wants
// the plain digit string (e.g. "2561615457").
- postParams["PatientIdentificationID"] = patientIdentificationId.replaceAll('-', '').trim();
+
}
}
postParams.addAll(AppState().postParamsJson);
diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart
index d0b5f21d..42fba962 100644
--- a/lib/generated/codegen_loader.g.dart
+++ b/lib/generated/codegen_loader.g.dart
@@ -886,7 +886,7 @@ class CodegenLoader extends AssetLoader{
"offersCount": "{} عروض",
"mazayaExclusive": "حصري لمزايا",
"youAreAllCaughtUp": "لقد شاهدت كل العروض. المزيد قريباً.",
- "selectCity": "اختر المدينة"
+ "selectCity": "اختر المدينة",
};
static const Map _en_US = {
"mohemm": "Mohemm",
@@ -1760,7 +1760,7 @@ static const Map _en_US = {
"offersCount": "{} offers",
"mazayaExclusive": "MAZAYA EXCLUSIVE",
"youAreAllCaughtUp": "You're all caught up. More little extras soon.",
- "selectCity": "Select City"
+ "selectCity": "Select City",
};
static const Map> mapLocales = {"ar_SA": _ar_SA, "en_US": _en_US};
}
diff --git a/lib/ui/login/verify_last_login_screen.dart b/lib/ui/login/verify_last_login_screen.dart
index 6234a951..20bc28f1 100644
--- a/lib/ui/login/verify_last_login_screen.dart
+++ b/lib/ui/login/verify_last_login_screen.dart
@@ -387,7 +387,7 @@ class _VerifyLastLoginScreenState extends State {
Future performDirectApiCall(String _title, String _icon, int _flag, String value, TextEditingController? _pinPutController, {bool isDirectLogin = false}) async {
try {
- GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(true, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName);
+ GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(true, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName,_flag.toString());
String devToken = AppState().getIsHuawei
? AppState().getHuaweiPushToken
: ((mobileLoginInfoListModel?.deviceToken != null && mobileLoginInfoListModel!.deviceToken!.isNotEmpty && mobileLoginInfoListModel!.deviceToken != "null")
diff --git a/lib/ui/login/verify_login_screen.dart b/lib/ui/login/verify_login_screen.dart
index 9fb1c7fb..cc485cb4 100644
--- a/lib/ui/login/verify_login_screen.dart
+++ b/lib/ui/login/verify_login_screen.dart
@@ -652,7 +652,7 @@ class _VerifyLoginScreenState extends State {
(value, TextEditingController _pinPutController) async {
Utils.showLoading(context);
try {
- GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(true, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName);
+ GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(true, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName, _flag.toString());
String devToken = AppState().getIsHuawei
? AppState().getHuaweiPushToken
: ((firebaseToken != null && firebaseToken!.isNotEmpty && firebaseToken != "null")