From 70980e2e7836cc6b55e222da452a30568665b776 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Thu, 18 Dec 2025 07:56:14 +0530 Subject: [PATCH 01/13] Changed server env to qa-base Signed-off-by: Madhuravas reddy --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 9bdc7ed4a..8f19d58d4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -58,7 +58,7 @@ ext { clientmanagerLibVersionCode = 1 clientmanagerLibVersionName = "\"1.0.0\"" - serverBaseURL = "\"https://api-internal.qa-core.mosip.net\"" + serverBaseURL = "\"https://api-internal.qa-base.mosip.net\"" serverHealthCheckPath = "\"/v1/syncdata/actuator/health\"" serverActuatorInfoPath = "\"/v1/syncdata/actuator/info\"" debugPassword = "\"APTyKejHxACQyKBSRciR\"" From a1407dc2550af8b1aed6755e78ad19b3d4dd4c3f Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Fri, 19 Dec 2025 08:33:12 +0530 Subject: [PATCH 02/13] Changed server env Signed-off-by: Madhuravas reddy --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 8f19d58d4..a363a16dd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -58,7 +58,7 @@ ext { clientmanagerLibVersionCode = 1 clientmanagerLibVersionName = "\"1.0.0\"" - serverBaseURL = "\"https://api-internal.qa-base.mosip.net\"" + serverBaseURL = "\"https://api-internal.sandbox.mosip.net\"" serverHealthCheckPath = "\"/v1/syncdata/actuator/health\"" serverActuatorInfoPath = "\"/v1/syncdata/actuator/info\"" debugPassword = "\"APTyKejHxACQyKBSRciR\"" From 0a5ed7cefb8bc58b4ed1b343990fdae077d6f247 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Sun, 21 Dec 2025 18:09:53 +0530 Subject: [PATCH 03/13] Added config property for disk space check Signed-off-by: Madhuravas reddy --- .../constant/RegistrationConstants.java | 1 + .../repository/GlobalParamRepository.java | 4 ++++ .../service/RegistrationServiceImpl.java | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java index 839b03d42..41ce10741 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java @@ -132,4 +132,5 @@ public class RegistrationConstants { public static final String HTTP_API_WRITE_TIMEOUT = "mosip.registration.HTTP_API_WRITE_TIMEOUT"; public static final String INVALID_LOGIN_COUNT = "mosip.registration.invalid_login_count"; public static final String INVALID_LOGIN_TIME = "mosip.registration.invalid_login_time"; + public static final String DISK_SPACE = "mosip.registration.disk_space_size"; } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java index f46852c3d..cee04c9be 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java @@ -213,6 +213,10 @@ public String getCachedStringInvalidLoginTime() { return globalParamMap.get(RegistrationConstants.INVALID_LOGIN_TIME); } + public String getCachedStringDiskSpaceSize() { + return globalParamMap.get(RegistrationConstants.DISK_SPACE); + } + /** * Refresh configuration cache by merging global params with local preferences */ diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java index 0a3da5c43..a58864ace 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java @@ -96,7 +96,7 @@ public class RegistrationServiceImpl implements RegistrationService { private static final String TAG = RegistrationServiceImpl.class.getSimpleName(); private static final String SOURCE = "REGISTRATION_CLIENT"; - private static final int MIN_SPACE_REQUIRED_MB = 50; + private static final int DEFAULT_MIN_SPACE_REQUIRED_MB = 50; private Context context; private RegistrationDto registrationDto; @@ -629,8 +629,19 @@ public List> getAudits() { private void doPreChecksBeforeRegistration(CenterMachineDto centerMachineDto) throws Exception { //free space validation + String diskSpaceSizeConfig = globalParamRepository.getCachedStringDiskSpaceSize(); + int minSpaceRequiredMB = DEFAULT_MIN_SPACE_REQUIRED_MB; + + if (diskSpaceSizeConfig != null && !diskSpaceSizeConfig.trim().isEmpty()) { + try { + minSpaceRequiredMB = Integer.parseInt(diskSpaceSizeConfig.trim()); + } catch (NumberFormatException e) { + Log.w(TAG, "Invalid disk space size configuration: " + diskSpaceSizeConfig + ", using default: " + DEFAULT_MIN_SPACE_REQUIRED_MB + " MB", e); + } + } + long externalSpace = context.getExternalCacheDir().getUsableSpace(); - if ((externalSpace / (1024 * 1024)) < MIN_SPACE_REQUIRED_MB) + if ((externalSpace / (1024 * 1024)) < minSpaceRequiredMB) throw new ClientCheckedException(context, R.string.err_006); //is machine and center active From 22134b342e2b90f8c32985a17b659f8f4443c9cf Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 22 Dec 2025 11:19:16 +0530 Subject: [PATCH 04/13] Added config property for PRID input field length validation Signed-off-by: Madhuravas reddy --- .../api_services/GlobalConfigSettingsApi.java | 11 +++ .../constant/RegistrationConstants.java | 1 + .../repository/GlobalParamRepository.java | 4 + assets/l10n/app_ar.arb | 8 ++ assets/l10n/app_en.arb | 8 ++ assets/l10n/app_fr.arb | 8 ++ assets/l10n/app_hi.arb | 8 ++ assets/l10n/app_kn.arb | 8 ++ assets/l10n/app_ta.arb | 8 ++ .../global_config_service_impl.dart | 13 +++ lib/platform_spi/global_config_service.dart | 2 + lib/provider/global_provider.dart | 14 +++ .../widgets/pre_reg_data_control.dart | 94 ++++++++++++++----- pigeon/global_config_settings.dart | 2 + 14 files changed, 166 insertions(+), 23 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java index 37cca3aac..a5ddc92b0 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java @@ -85,4 +85,15 @@ public void getGpsEnableFlag(@NonNull GlobalConfigSettingsPigeon.Result } result.success(gpsFlag); } + + @Override + public void getPRIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + String pridLength = ""; + try { + pridLength = globalParamRepository.getCachedStringPRIDLength(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching PRID length", e); + } + result.success(pridLength); + } } \ No newline at end of file diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java index 41ce10741..36a7b8406 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java @@ -133,4 +133,5 @@ public class RegistrationConstants { public static final String INVALID_LOGIN_COUNT = "mosip.registration.invalid_login_count"; public static final String INVALID_LOGIN_TIME = "mosip.registration.invalid_login_time"; public static final String DISK_SPACE = "mosip.registration.disk_space_size"; + public static final String PRID_LENGTH = "mosip.kernel.prid.length"; } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java index cee04c9be..5e969071a 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java @@ -217,6 +217,10 @@ public String getCachedStringDiskSpaceSize() { return globalParamMap.get(RegistrationConstants.DISK_SPACE); } + public String getCachedStringPRIDLength(){ + return globalParamMap.get(RegistrationConstants.PRID_LENGTH); + } + /** * Refresh configuration cache by merging global params with local preferences */ diff --git a/assets/l10n/app_ar.arb b/assets/l10n/app_ar.arb index 580e48bc2..d20ca8ee0 100644 --- a/assets/l10n/app_ar.arb +++ b/assets/l10n/app_ar.arb @@ -315,6 +315,14 @@ "application_id_not_exist": "معرف التطبيق غير موجود!", "correct_application_id": "يرجى التحقق من معرف التطبيق الذي تم إدخاله أو إدخال معرف صحيح ومحاولة جلبه مرة أخرى.", "enter_application_id": "الرجاء إدخال معرف التطبيق", + "prid_length_greater": "يجب أن يتكون معرف التطبيق من أرقام {length} بالضبط", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "تمام", "no_internet_connection": "لا يوجد اتصال بالإنترنت!", "connect_and_retry": "يرجى الاتصال بالإنترنت وإعادة المحاولة.", diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index e6d76230f..ed3d69938 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -315,6 +315,14 @@ "application_id_not_exist": "Application ID does not exist!", "correct_application_id": "Please check the entered Application ID or enter a correct ID and try to fetch it again.", "enter_application_id": "Please Enter Application ID", + "prid_length_greater": "Application ID must be exactly {length} digits.", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "OKAY", "no_internet_connection": "No Internet Connection!", "connect_and_retry": "Please connect with internet and retry.", diff --git a/assets/l10n/app_fr.arb b/assets/l10n/app_fr.arb index 60aa5b135..7e2404fa4 100644 --- a/assets/l10n/app_fr.arb +++ b/assets/l10n/app_fr.arb @@ -315,6 +315,14 @@ "application_id_not_exist": "L'ID de l'application n'existe pas!", "correct_application_id": "Veuillez vérifier l'ID d'application saisi ou saisir un ID correct et essayer de le récupérer à nouveau.", "enter_application_id": "Veuillez saisir l'ID de la demande", + "prid_length_greater": "L'ID de l'application doit contenir exactement {length} chiffres", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "D'ACCORD", "no_internet_connection": "Pas de connexion Internet!", "connect_and_retry": "Veuillez vous connecter à Internet et réessayer.", diff --git a/assets/l10n/app_hi.arb b/assets/l10n/app_hi.arb index eab926ea5..862e07f10 100644 --- a/assets/l10n/app_hi.arb +++ b/assets/l10n/app_hi.arb @@ -315,6 +315,14 @@ "application_id_not_exist": "एप्लिकेशन आईडी मौजूद नहीं है!", "correct_application_id": "कृपया दर्ज की गई एप्लिकेशन आईडी की जांच करें या सही आईडी दर्ज करें और इसे दोबारा लाने का प्रयास करें।", "enter_application_id": "कृपया आवेदन आईडी दर्ज करें", + "prid_length_greater": "एप्लिकेशन आईडी बिल्कुल {length} अंकों की होनी चाहिए।", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "ठीक है", "no_internet_connection": "कोई इंटरनेट कनेक्शन नहीं!", "connect_and_retry": "कृपया इंटरनेट से जुड़ें और पुनः प्रयास करें।", diff --git a/assets/l10n/app_kn.arb b/assets/l10n/app_kn.arb index 154e8758a..75eadbcef 100644 --- a/assets/l10n/app_kn.arb +++ b/assets/l10n/app_kn.arb @@ -315,6 +315,14 @@ "application_id_not_exist": "ಅಪ್ಲಿಕೇಶನ್ ಐಡಿ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ!", "correct_application_id": "ದಯವಿಟ್ಟು ನಮೂದಿಸಿದ ಅಪ್ಲಿಕೇಶನ್ ಐಡಿಯನ್ನು ಪರಿಶೀಲಿಸಿ ಅಥವಾ ಸರಿಯಾದ ಐಡಿಯನ್ನು ನಮೂದಿಸಿ ಮತ್ತು ಅದನ್ನು ಮತ್ತೆ ಪಡೆಯಲು ಪ್ರಯತ್ನಿಸಿ.", "enter_application_id": "ದಯವಿಟ್ಟು ಅಪ್ಲಿಕೇಶನ್ ಐಡಿಯನ್ನು ನಮೂದಿಸಿ", + "prid_length_greater": "ಅಪ್ಲಿಕೇಶನ್ ID ನಿಖರವಾಗಿ {length} ಅಂಕೆಗಳಾಗಿರಬೇಕು.", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "ಸರಿ", "no_internet_connection": "ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿಲ್ಲ!", "connect_and_retry": "ದಯವಿಟ್ಟು ಇಂಟರ್ನೆಟ್\u200Cನೊಂದಿಗೆ ಸಂಪರ್ಕಿಸಿ ಮತ್ತು ಮರುಪ್ರಯತ್ನಿಸಿ.", diff --git a/assets/l10n/app_ta.arb b/assets/l10n/app_ta.arb index ac1e96ed9..f515be2d7 100644 --- a/assets/l10n/app_ta.arb +++ b/assets/l10n/app_ta.arb @@ -324,6 +324,14 @@ "application_id_not_exist": "விண்ணப்ப ஐடி இல்லை", "correct_application_id": "உள்ளிட்ட விண்ணப்ப ஐடியைச் சரிபார்க்கவும் அல்லது சரியான ஐடியை உள்ளிட்டு, அதை மீண்டும் பெற முயற்சிக்கவும்.", "enter_application_id": "விண்ணப்ப ஐடியை உள்ளிடவும்", + "prid_length_greater": "விண்ணப்ப ஐடி சரியாக {length} இலக்கங்களாக இருக்க வேண்டும்.", + "@prid_length_greater": { + "placeholders": { + "length": { + "type": "int" + } + } + }, "okay": "சரி", "no_internet_connection": "இணைய இணைப்பு இல்லை!", "connect_and_retry": "இணையத்துடன் இணைத்து மீண்டும் முயற்சிக்கவும்.", diff --git a/lib/platform_android/global_config_service_impl.dart b/lib/platform_android/global_config_service_impl.dart index b8d472285..f4c643600 100644 --- a/lib/platform_android/global_config_service_impl.dart +++ b/lib/platform_android/global_config_service_impl.dart @@ -71,6 +71,19 @@ class GlobalConfigServiceImpl implements GlobalConfigService { return gpsEnableFlag; } + @override + Future getPRIDLength() async { + String pridLength = ""; + try { + pridLength = await GlobalConfigSettingsApi().getPRIDLength(); + } on PlatformException { + debugPrint("PRID Length Api failed!"); + } catch (e) { + debugPrint("PRID Length fetch error: $e"); + } + return pridLength; + } + } GlobalConfigService getGlobalConfigServiceImpl() => GlobalConfigServiceImpl(); \ No newline at end of file diff --git a/lib/platform_spi/global_config_service.dart b/lib/platform_spi/global_config_service.dart index eb481ff4f..d90801a8d 100644 --- a/lib/platform_spi/global_config_service.dart +++ b/lib/platform_spi/global_config_service.dart @@ -11,5 +11,7 @@ abstract class GlobalConfigService { Future getGpsEnableFlag(); + Future getPRIDLength(); + factory GlobalConfigService() => getGlobalConfigServiceImpl(); } \ No newline at end of file diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 391a1ff69..3957ba10a 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -122,6 +122,8 @@ class GlobalProvider with ChangeNotifier { _checkAgeGroupChange = value; } + int? _pridLength; + //GettersSetters setScannedPages(String field, List value) { _scannedPages[field] = value; @@ -146,6 +148,8 @@ class GlobalProvider with ChangeNotifier { String get ageGroup => _ageGroup; + int? get pridLength => _pridLength; + set scannedPages(Map> value) { _scannedPages = value; notifyListeners(); @@ -500,6 +504,16 @@ class GlobalProvider with ChangeNotifier { } } + getPRIDLength() async { + String lengthStr = await globalConfigService.getPRIDLength(); + if (lengthStr.isNotEmpty) { + _pridLength = int.tryParse(lengthStr); + } else { + _pridLength = 14; + } + notifyListeners(); + } + chooseLanguage(Map label) { String x = ''; for (var i in chosenLang) { diff --git a/lib/ui/process_ui/widgets/pre_reg_data_control.dart b/lib/ui/process_ui/widgets/pre_reg_data_control.dart index 466e72c87..756235519 100644 --- a/lib/ui/process_ui/widgets/pre_reg_data_control.dart +++ b/lib/ui/process_ui/widgets/pre_reg_data_control.dart @@ -37,6 +37,7 @@ class _PreRegDataControlState extends State { if(globalProvider.preRegId!=""){ preRegIdController.text = globalProvider.preRegId; } + globalProvider.getPRIDLength(); super.initState(); } @@ -199,6 +200,7 @@ class _PreRegDataControlState extends State { Widget build(BuildContext context) { bool isPortrait = MediaQuery.of(context).orientation == Orientation.portrait; + GlobalProvider globalProvider = Provider.of(context); return Card( elevation: 5, color: pureWhite, @@ -233,6 +235,19 @@ class _PreRegDataControlState extends State { //preRegIdController.text = value; globalProvider.setPreRegistrationId(value); }, + validator: (value) { + if (value == null || value.isEmpty) { + return null; // Empty validation handled by button click + } + if (globalProvider.pridLength != null) { + // Check if length matches configured value + if (value.length > globalProvider.pridLength!) { + return AppLocalizations.of(context)! + .prid_length_greater(globalProvider.pridLength!); + } + } + return null; + }, textAlign: TextAlign.left, decoration: InputDecoration( border: OutlineInputBorder( @@ -259,6 +274,10 @@ class _PreRegDataControlState extends State { ), onPressed: () async { widget.onFetched(); + // Validate form field first + if (!_formFieldKey.currentState!.validate()) { + return; + } if(preRegIdController.text.isEmpty){ globalProvider.preRegControllerRefresh = true; showDialog( @@ -266,21 +285,34 @@ class _PreRegDataControlState extends State { builder: (BuildContext context) => ValidatorAlert(errorMessage: AppLocalizations.of(context)!.enter_application_id), ); globalProvider.preRegControllerRefresh = false; - } else if(!RegExp(r'^\d{14}$').hasMatch(preRegIdController.text)){ - globalProvider.preRegControllerRefresh = true; - showDialog( - context: context, - builder: (BuildContext context) => ValidatorAlert(errorMessage: AppLocalizations.of(context)!.application_id_not_exist,subError: AppLocalizations.of(context)!.correct_application_id), - ); - await context.read< - RegistrationTaskProvider>() - .fetchPreRegistrationDetail( - preRegIdController.text); - - globalProvider.clearMap(); - globalProvider.clearScannedPages(); - globalProvider.preRegControllerRefresh = false; } else { + // Validate length using config value + bool isValidLength = true; + if (globalProvider.pridLength != null) { + String input = preRegIdController.text; + if (input.length != globalProvider.pridLength! || !RegExp(r'^\d+$').hasMatch(input)) { + isValidLength = false; + } + } + + if (!isValidLength) { + globalProvider.preRegControllerRefresh = true; + showDialog( + context: context, + builder: (BuildContext context) => ValidatorAlert( + errorMessage: AppLocalizations.of(context)!.application_id_not_exist, + subError: AppLocalizations.of(context)!.correct_application_id + ), + ); + await context.read< + RegistrationTaskProvider>() + .fetchPreRegistrationDetail( + preRegIdController.text); + + globalProvider.clearMap(); + globalProvider.clearScannedPages(); + globalProvider.preRegControllerRefresh = false; + } else { globalProvider.preRegControllerRefresh = true; Map value = await context.read< RegistrationTaskProvider>() @@ -296,6 +328,7 @@ class _PreRegDataControlState extends State { globalProvider.clearScannedPages(); globalProvider.preRegControllerRefresh = false; } + } } }, child: Text( @@ -322,14 +355,29 @@ class _PreRegDataControlState extends State { builder: (context) => QRCodeScannerApp()), ); - if(data!=null && !RegExp(r'^\d{14}$').hasMatch(data)){ - globalProvider.preRegControllerRefresh = true; - showDialog( - context: context, - builder: (BuildContext context) => ValidatorAlert(errorMessage: AppLocalizations.of(context)!.application_id_not_exist,subError: AppLocalizations.of(context)!.correct_application_id), - ); - globalProvider.preRegControllerRefresh = false; - } else if(data!=null) { + if(data!=null) { + // Validate scanned data length + bool isValidLength = true; + if (globalProvider.pridLength != null) { + String scannedData = data.toString(); + if (scannedData.length != globalProvider.pridLength! || !RegExp(r'^\d+$').hasMatch(scannedData)) { + isValidLength = false; + } + } else { + // Fallback to default validation if config not loaded + if (!RegExp(r'^\d{14}$').hasMatch(data)) { + isValidLength = false; + } + } + + if (!isValidLength) { + globalProvider.preRegControllerRefresh = true; + showDialog( + context: context, + builder: (BuildContext context) => ValidatorAlert(errorMessage: AppLocalizations.of(context)!.application_id_not_exist,subError: AppLocalizations.of(context)!.correct_application_id), + ); + globalProvider.preRegControllerRefresh = false; + } else { globalProvider.preRegControllerRefresh = true; setState(() { preRegIdController.text = data.toString(); @@ -349,11 +397,11 @@ class _PreRegDataControlState extends State { globalProvider.clearScannedPages(); globalProvider.preRegControllerRefresh = false; } + } } }, child: Icon(Icons.crop_free,size: 32.6,color: solidPrimary), ), - //const Spacer(), ], ) diff --git a/pigeon/global_config_settings.dart b/pigeon/global_config_settings.dart index 0c2e8f379..3598bb909 100644 --- a/pigeon/global_config_settings.dart +++ b/pigeon/global_config_settings.dart @@ -12,4 +12,6 @@ abstract class GlobalConfigSettingsApi { void modifyConfigurations(Map localPreferences); @async String getGpsEnableFlag(); + @async + String getPRIDLength(); } \ No newline at end of file From a104f115940431dd9827de7218a64a65a0440482 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 22 Dec 2025 19:35:34 +0530 Subject: [PATCH 05/13] Added input length validation for UIN and VID field Signed-off-by: Madhuravas reddy --- .../api_services/GlobalConfigSettingsApi.java | 24 ++++++++++++ .../constant/RegistrationConstants.java | 3 ++ .../repository/GlobalParamRepository.java | 8 ++++ .../global_config_service_impl.dart | 26 +++++++++++++ lib/platform_spi/global_config_service.dart | 4 ++ lib/provider/global_provider.dart | 24 ++++++++++++ .../widgets/update_field_selector.dart | 37 +++++++++++++++++-- pigeon/global_config_settings.dart | 4 ++ 8 files changed, 127 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java index a5ddc92b0..a9117ddfe 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java @@ -96,4 +96,28 @@ public void getPRIDLength(@NonNull GlobalConfigSettingsPigeon.Result res } result.success(pridLength); } + + @Override + public void getUINLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + String uinLength = ""; + try { + uinLength = globalParamRepository.getCachedStringUINLength(); + Log.i(getClass().getSimpleName(), "Fetched UIN length: " + uinLength); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching UIN length", e); + } + result.success(uinLength); + } + + @Override + public void getVIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + String vidLength = ""; + try { + vidLength = globalParamRepository.getCachedStringVIDLength(); + Log.i(getClass().getSimpleName(), "Fetched VID length: " + vidLength); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching VID length", e); + } + result.success(vidLength); + } } \ No newline at end of file diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java index 36a7b8406..c33ea3fd6 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java @@ -134,4 +134,7 @@ public class RegistrationConstants { public static final String INVALID_LOGIN_TIME = "mosip.registration.invalid_login_time"; public static final String DISK_SPACE = "mosip.registration.disk_space_size"; public static final String PRID_LENGTH = "mosip.kernel.prid.length"; + public static final String UIN_LENGTH = "mosip.kernel.uin.length"; + public static final String VID_LENGTH = "mosip.kernel.vid.length"; + } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java index 5e969071a..509886963 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java @@ -221,6 +221,14 @@ public String getCachedStringPRIDLength(){ return globalParamMap.get(RegistrationConstants.PRID_LENGTH); } + public String getCachedStringUINLength(){ + return globalParamMap.get(RegistrationConstants.UIN_LENGTH); + } + + public String getCachedStringVIDLength(){ + return globalParamMap.get(RegistrationConstants.VID_LENGTH); + } + /** * Refresh configuration cache by merging global params with local preferences */ diff --git a/lib/platform_android/global_config_service_impl.dart b/lib/platform_android/global_config_service_impl.dart index f4c643600..65c846708 100644 --- a/lib/platform_android/global_config_service_impl.dart +++ b/lib/platform_android/global_config_service_impl.dart @@ -84,6 +84,32 @@ class GlobalConfigServiceImpl implements GlobalConfigService { return pridLength; } + @override + Future getUINLength() async { + String uinLength = ""; + try { + uinLength = await GlobalConfigSettingsApi().getUINLength(); + } on PlatformException { + debugPrint("UIN Length Api failed!"); + } catch (e) { + debugPrint("UIN Length fetch error: $e"); + } + return uinLength; + } + + @override + Future getVIDLength() async { + String vidLength = ""; + try { + vidLength = await GlobalConfigSettingsApi().getVIDLength(); + } on PlatformException { + debugPrint("VID Length Api failed!"); + } catch (e) { + debugPrint("VID Length fetch error: $e"); + } + return vidLength; + } + } GlobalConfigService getGlobalConfigServiceImpl() => GlobalConfigServiceImpl(); \ No newline at end of file diff --git a/lib/platform_spi/global_config_service.dart b/lib/platform_spi/global_config_service.dart index d90801a8d..1756e4291 100644 --- a/lib/platform_spi/global_config_service.dart +++ b/lib/platform_spi/global_config_service.dart @@ -13,5 +13,9 @@ abstract class GlobalConfigService { Future getPRIDLength(); + Future getUINLength(); + + Future getVIDLength(); + factory GlobalConfigService() => getGlobalConfigServiceImpl(); } \ No newline at end of file diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 3957ba10a..2e59b201e 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -123,6 +123,8 @@ class GlobalProvider with ChangeNotifier { } int? _pridLength; + int? _uinLength; + int? _vidLength; //GettersSetters setScannedPages(String field, List value) { @@ -149,6 +151,8 @@ class GlobalProvider with ChangeNotifier { String get ageGroup => _ageGroup; int? get pridLength => _pridLength; + int? get uinLength => _uinLength; + int? get vidLength => _vidLength; set scannedPages(Map> value) { _scannedPages = value; @@ -514,6 +518,26 @@ class GlobalProvider with ChangeNotifier { notifyListeners(); } + getUINLength() async { + String lengthStr = await globalConfigService.getUINLength(); + if (lengthStr.isNotEmpty) { + _uinLength = int.tryParse(lengthStr); + } else { + _uinLength = 12; + } + notifyListeners(); + } + + getVIDLength() async { + String lengthStr = await globalConfigService.getVIDLength(); + if (lengthStr.isNotEmpty) { + _vidLength = int.tryParse(lengthStr); + } else { + _vidLength = 16; + } + notifyListeners(); + } + chooseLanguage(Map label) { String x = ''; for (var i in chosenLang) { diff --git a/lib/ui/process_ui/widgets/update_field_selector.dart b/lib/ui/process_ui/widgets/update_field_selector.dart index d1c122ab5..7b4dcfd56 100644 --- a/lib/ui/process_ui/widgets/update_field_selector.dart +++ b/lib/ui/process_ui/widgets/update_field_selector.dart @@ -36,9 +36,11 @@ class _UpdateFieldSelectorState extends State late GlobalProvider globalProvider; late RegistrationTaskProvider registrationTaskProvider; Map> fieldsMap = {}; - final RegExp validation = RegExp(r'^([0-9]{10})$'); + final RegExp validation = RegExp(r'^[0-9]+$'); TextEditingController controller = TextEditingController(); late AppLocalizations appLocalizations = AppLocalizations.of(context)!; + int? uinLength; + int? vidLength; @override void initState() { @@ -46,6 +48,10 @@ class _UpdateFieldSelectorState extends State registrationTaskProvider = Provider.of(context, listen: false); controller = TextEditingController(text: globalProvider.updateUINNumber); + + // Fetch UIN and VID lengths from backend + _initializeLengths(); + for (var screen in widget.process.screens!) { for (var field in screen!.fields!) { if (field!.group != null) { @@ -75,6 +81,20 @@ class _UpdateFieldSelectorState extends State )); } + Future _initializeLengths() async { + await globalProvider.getUINLength(); + await globalProvider.getVIDLength(); + + // Update local variables after fetching from backend + // Use default values if null: UIN = 10, VID = 16 + if (mounted) { + setState(() { + uinLength = globalProvider.uinLength ?? 10; + vidLength = globalProvider.vidLength ?? 16; + }); + } + } + _getFieldTitle(Field field) { String title = ""; if (field.groupLabel == null) { @@ -180,11 +200,22 @@ class _UpdateFieldSelectorState extends State globalProvider.updateUINNumber = value; }, validator: (value) { - if (value == null) { + if (value == null || value.isEmpty) { return appLocalizations.valid_uin; - } else if (!validation.hasMatch(value)) { + } + + // Check if length matches either UIN or VID length + if (uinLength != null && vidLength != null) { + if (value.length != uinLength && value.length != vidLength) { + return appLocalizations.valid_uin; + } + } + + // Check if value contains only digits + if (!validation.hasMatch(value)) { return appLocalizations.valid_uin; } + return null; }, decoration: InputDecoration( diff --git a/pigeon/global_config_settings.dart b/pigeon/global_config_settings.dart index 3598bb909..8fee7c309 100644 --- a/pigeon/global_config_settings.dart +++ b/pigeon/global_config_settings.dart @@ -14,4 +14,8 @@ abstract class GlobalConfigSettingsApi { String getGpsEnableFlag(); @async String getPRIDLength(); + @async + String getUINLength(); + @async + String getVIDLength(); } \ No newline at end of file From 0fb9eac5483c235059a506c8e343f43241a131a3 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 22 Dec 2025 19:45:05 +0530 Subject: [PATCH 06/13] Removed Unused logs Signed-off-by: Madhuravas reddy --- .../api_services/GlobalConfigSettingsApi.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java index a9117ddfe..1c49137ea 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java @@ -102,7 +102,6 @@ public void getUINLength(@NonNull GlobalConfigSettingsPigeon.Result resu String uinLength = ""; try { uinLength = globalParamRepository.getCachedStringUINLength(); - Log.i(getClass().getSimpleName(), "Fetched UIN length: " + uinLength); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error fetching UIN length", e); } @@ -114,7 +113,6 @@ public void getVIDLength(@NonNull GlobalConfigSettingsPigeon.Result resu String vidLength = ""; try { vidLength = globalParamRepository.getCachedStringVIDLength(); - Log.i(getClass().getSimpleName(), "Fetched VID length: " + vidLength); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error fetching VID length", e); } From bd4eac93bb1d9538b5f42b345fd0ea921debd659 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 22 Dec 2025 19:49:37 +0530 Subject: [PATCH 07/13] Added default value for _uinLength Signed-off-by: Madhuravas reddy --- lib/provider/global_provider.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 2e59b201e..8b067301c 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -523,7 +523,7 @@ class GlobalProvider with ChangeNotifier { if (lengthStr.isNotEmpty) { _uinLength = int.tryParse(lengthStr); } else { - _uinLength = 12; + _uinLength = 10; } notifyListeners(); } From 2e8f60fbc660eae8649985a0339807f63acc54a3 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 22 Dec 2025 21:20:21 +0530 Subject: [PATCH 08/13] Resolved coderabbit review comments Signed-off-by: Madhuravas reddy --- lib/provider/global_provider.dart | 18 +++--------------- .../widgets/update_field_selector.dart | 5 +++-- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 8b067301c..4b881abe9 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -510,31 +510,19 @@ class GlobalProvider with ChangeNotifier { getPRIDLength() async { String lengthStr = await globalConfigService.getPRIDLength(); - if (lengthStr.isNotEmpty) { - _pridLength = int.tryParse(lengthStr); - } else { - _pridLength = 14; - } + _pridLength = int.tryParse(lengthStr) ?? 14; notifyListeners(); } getUINLength() async { String lengthStr = await globalConfigService.getUINLength(); - if (lengthStr.isNotEmpty) { - _uinLength = int.tryParse(lengthStr); - } else { - _uinLength = 10; - } + _uinLength = int.tryParse(lengthStr) ?? 10; notifyListeners(); } getVIDLength() async { String lengthStr = await globalConfigService.getVIDLength(); - if (lengthStr.isNotEmpty) { - _vidLength = int.tryParse(lengthStr); - } else { - _vidLength = 16; - } + _vidLength = int.tryParse(lengthStr) ?? 16; notifyListeners(); } diff --git a/lib/ui/process_ui/widgets/update_field_selector.dart b/lib/ui/process_ui/widgets/update_field_selector.dart index 7b4dcfd56..4a3170ded 100644 --- a/lib/ui/process_ui/widgets/update_field_selector.dart +++ b/lib/ui/process_ui/widgets/update_field_selector.dart @@ -50,7 +50,8 @@ class _UpdateFieldSelectorState extends State controller = TextEditingController(text: globalProvider.updateUINNumber); // Fetch UIN and VID lengths from backend - _initializeLengths(); + // Fetch UIN and VID lengths from backend + _initializeUINVIDLength(); for (var screen in widget.process.screens!) { for (var field in screen!.fields!) { @@ -81,7 +82,7 @@ class _UpdateFieldSelectorState extends State )); } - Future _initializeLengths() async { + Future _initializeUINVIDLength() async { await globalProvider.getUINLength(); await globalProvider.getVIDLength(); From 6f1423415e4e7692f9792dc34b5a8a95c4c31f8c Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Tue, 23 Dec 2025 12:08:06 +0530 Subject: [PATCH 09/13] Added supervisor_approval_config_flag validation Signed-off-by: Madhuravas reddy --- .../clientmanager/constant/RegistrationConstants.java | 2 +- .../clientmanager/service/RegistrationServiceImpl.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java index f9bcd85b4..46c3512b8 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java @@ -139,5 +139,5 @@ public class RegistrationConstants { public static final String PRID_LENGTH = "mosip.kernel.prid.length"; public static final String UIN_LENGTH = "mosip.kernel.uin.length"; public static final String VID_LENGTH = "mosip.kernel.vid.length"; - + public static final String SUPERVISOR_APPROVAL_CONFIG_FLAG = "mosip.registration.supervisor_approval_config_flag"; } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java index 1b768b33f..ee084b37f 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java @@ -47,6 +47,7 @@ import io.mosip.registration.clientmanager.R; import io.mosip.registration.clientmanager.config.SessionManager; import io.mosip.registration.clientmanager.constant.Modality; +import io.mosip.registration.clientmanager.constant.PacketClientStatus; import io.mosip.registration.clientmanager.constant.RegistrationConstants; import io.mosip.registration.clientmanager.dto.CenterMachineDto; import io.mosip.registration.clientmanager.dto.ResponseDto; @@ -319,6 +320,14 @@ public void submitRegistrationDto(String makerName) throws Exception { registrationRepository.insertRegistration(this.registrationDto.getPacketId(), containerPath, centerMachineDto.getCenterId(), this.registrationDto.getProcess(), additionalInfo, this.registrationDto.getAdditionalInfoRequestId(), this.registrationDto.getRId(), this.registrationDto.getApplicationId()); + // Auto-approve when supervisor approval is disabled (flag not "Y") + String supervisorApprovalFlag = globalParamRepository.getCachedStringGlobalParam( + RegistrationConstants.SUPERVISOR_APPROVAL_CONFIG_FLAG); + if (supervisorApprovalFlag == null || !RegistrationConstants.ENABLE.equalsIgnoreCase(supervisorApprovalFlag.trim())) { + registrationRepository.updateStatus(this.registrationDto.getPacketId(), null, + PacketClientStatus.APPROVED.name()); + } + // Delete pre-registration record after successful packet creation if (this.registrationDto.getPreRegistrationId() != null && !this.registrationDto.getPreRegistrationId().trim().isEmpty()) { From 878af6ea70bde74b23a0b377b56338ed158848af Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Wed, 24 Dec 2025 16:53:27 +0530 Subject: [PATCH 10/13] addeding input field length validation depends on the UI spec Signed-off-by: Madhuravas reddy --- .../widgets/update_field_selector.dart | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/ui/process_ui/widgets/update_field_selector.dart b/lib/ui/process_ui/widgets/update_field_selector.dart index 4a3170ded..774b50bbb 100644 --- a/lib/ui/process_ui/widgets/update_field_selector.dart +++ b/lib/ui/process_ui/widgets/update_field_selector.dart @@ -41,6 +41,7 @@ class _UpdateFieldSelectorState extends State late AppLocalizations appLocalizations = AppLocalizations.of(context)!; int? uinLength; int? vidLength; + String? idSubType; @override void initState() { @@ -61,6 +62,14 @@ class _UpdateFieldSelectorState extends State } fieldsMap[field.group]!.add(field); } + + // Determine ID subType from available fields + if (field.subType != null && idSubType == null) { + String subType = field.subType!.toLowerCase(); + if (subType == "uin" || subType == "vid") { + idSubType = subType; + } + } } } super.initState(); @@ -82,10 +91,11 @@ class _UpdateFieldSelectorState extends State )); } + Future _initializeUINVIDLength() async { await globalProvider.getUINLength(); await globalProvider.getVIDLength(); - + // Update local variables after fetching from backend // Use default values if null: UIN = 10, VID = 16 if (mounted) { @@ -204,19 +214,29 @@ class _UpdateFieldSelectorState extends State if (value == null || value.isEmpty) { return appLocalizations.valid_uin; } - - // Check if length matches either UIN or VID length - if (uinLength != null && vidLength != null) { - if (value.length != uinLength && value.length != vidLength) { - return appLocalizations.valid_uin; - } + + // Determine validation length based on available field subType in UI spec + int? expectedLength; + + if (idSubType == "uin") { + expectedLength = uinLength; + } else if (idSubType == "vid") { + expectedLength = vidLength; + } else { + // Default to UIN length if no specific ID subType found + expectedLength = uinLength; + } + + // Check if length matches the expected length + if (expectedLength != null && value.length != expectedLength) { + return appLocalizations.valid_uin; } - + // Check if value contains only digits if (!validation.hasMatch(value)) { return appLocalizations.valid_uin; } - + return null; }, decoration: InputDecoration( From 2e32a4f4c97866c9d0df9f8f7ae603017b53ccb8 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Wed, 24 Dec 2025 17:14:05 +0530 Subject: [PATCH 11/13] removed invalid comment Signed-off-by: Madhuravas reddy --- lib/ui/process_ui/widgets/update_field_selector.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/ui/process_ui/widgets/update_field_selector.dart b/lib/ui/process_ui/widgets/update_field_selector.dart index 774b50bbb..7dab571f3 100644 --- a/lib/ui/process_ui/widgets/update_field_selector.dart +++ b/lib/ui/process_ui/widgets/update_field_selector.dart @@ -50,7 +50,6 @@ class _UpdateFieldSelectorState extends State Provider.of(context, listen: false); controller = TextEditingController(text: globalProvider.updateUINNumber); - // Fetch UIN and VID lengths from backend // Fetch UIN and VID lengths from backend _initializeUINVIDLength(); From 31f0b0c2e230e52a7b5c07132edf7847ea115f06 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Thu, 8 Jan 2026 19:48:25 +0530 Subject: [PATCH 12/13] returning int value Signed-off-by: Madhuravas reddy --- .../api_services/GlobalConfigSettingsApi.java | 30 +++++++++++-------- .../repository/GlobalParamRepository.java | 16 +++++----- .../service/RegistrationServiceImpl.java | 14 +++------ .../global_config_service_impl.dart | 12 ++++---- lib/platform_spi/global_config_service.dart | 6 ++-- lib/provider/global_provider.dart | 12 ++++---- pigeon/global_config_settings.dart | 6 ++-- 7 files changed, 48 insertions(+), 48 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java index 1c49137ea..60c43f08d 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/GlobalConfigSettingsApi.java @@ -87,35 +87,41 @@ public void getGpsEnableFlag(@NonNull GlobalConfigSettingsPigeon.Result } @Override - public void getPRIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { - String pridLength = ""; + public void getPRIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + int pridLength = 0; try { - pridLength = globalParamRepository.getCachedStringPRIDLength(); + pridLength = globalParamRepository.getCachedIntegerPRIDLength(); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error fetching PRID length", e); + result.error(e); } - result.success(pridLength); + result.success((long) pridLength); } @Override - public void getUINLength(@NonNull GlobalConfigSettingsPigeon.Result result) { - String uinLength = ""; + public void getUINLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + int uinLength = 0; try { - uinLength = globalParamRepository.getCachedStringUINLength(); + uinLength = globalParamRepository.getCachedIntegerUINLength(); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error fetching UIN length", e); + result.error(e); } - result.success(uinLength); + result.success((long) uinLength); } @Override - public void getVIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { - String vidLength = ""; + public void getVIDLength(@NonNull GlobalConfigSettingsPigeon.Result result) { + int vidLength = 0; try { - vidLength = globalParamRepository.getCachedStringVIDLength(); + vidLength = globalParamRepository.getCachedIntegerVIDLength(); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error fetching VID length", e); + result.error(e); } - result.success(vidLength); + result.success((long) vidLength); + } + + } \ No newline at end of file diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java index 509886963..23d7488fd 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java @@ -213,20 +213,20 @@ public String getCachedStringInvalidLoginTime() { return globalParamMap.get(RegistrationConstants.INVALID_LOGIN_TIME); } - public String getCachedStringDiskSpaceSize() { - return globalParamMap.get(RegistrationConstants.DISK_SPACE); + public int getCachedIntegerDiskSpaceSize() { + return getCachedIntegerGlobalParam(RegistrationConstants.DISK_SPACE); } - public String getCachedStringPRIDLength(){ - return globalParamMap.get(RegistrationConstants.PRID_LENGTH); + public int getCachedIntegerPRIDLength(){ + return getCachedIntegerGlobalParam(RegistrationConstants.PRID_LENGTH); } - public String getCachedStringUINLength(){ - return globalParamMap.get(RegistrationConstants.UIN_LENGTH); + public int getCachedIntegerUINLength(){ + return getCachedIntegerGlobalParam(RegistrationConstants.UIN_LENGTH); } - public String getCachedStringVIDLength(){ - return globalParamMap.get(RegistrationConstants.VID_LENGTH); + public int getCachedIntegerVIDLength(){ + return getCachedIntegerGlobalParam(RegistrationConstants.VID_LENGTH); } /** diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java index ee084b37f..8054ccbe8 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java @@ -323,7 +323,7 @@ public void submitRegistrationDto(String makerName) throws Exception { // Auto-approve when supervisor approval is disabled (flag not "Y") String supervisorApprovalFlag = globalParamRepository.getCachedStringGlobalParam( RegistrationConstants.SUPERVISOR_APPROVAL_CONFIG_FLAG); - if (supervisorApprovalFlag == null || !RegistrationConstants.ENABLE.equalsIgnoreCase(supervisorApprovalFlag.trim())) { + if (supervisorApprovalFlag != null && !RegistrationConstants.ENABLE.equalsIgnoreCase(supervisorApprovalFlag.trim())) { registrationRepository.updateStatus(this.registrationDto.getPacketId(), null, PacketClientStatus.APPROVED.name()); } @@ -642,15 +642,9 @@ public List> getAudits() { private void doPreChecksBeforeRegistration(CenterMachineDto centerMachineDto) throws Exception { //free space validation - String diskSpaceSizeConfig = globalParamRepository.getCachedStringDiskSpaceSize(); - int minSpaceRequiredMB = DEFAULT_MIN_SPACE_REQUIRED_MB; - - if (diskSpaceSizeConfig != null && !diskSpaceSizeConfig.trim().isEmpty()) { - try { - minSpaceRequiredMB = Integer.parseInt(diskSpaceSizeConfig.trim()); - } catch (NumberFormatException e) { - Log.w(TAG, "Invalid disk space size configuration: " + diskSpaceSizeConfig + ", using default: " + DEFAULT_MIN_SPACE_REQUIRED_MB + " MB", e); - } + int minSpaceRequiredMB = globalParamRepository.getCachedIntegerDiskSpaceSize(); + if (minSpaceRequiredMB == 0) { + minSpaceRequiredMB = DEFAULT_MIN_SPACE_REQUIRED_MB; } long externalSpace = context.getExternalCacheDir().getUsableSpace(); diff --git a/lib/platform_android/global_config_service_impl.dart b/lib/platform_android/global_config_service_impl.dart index 65c846708..ac39b5ada 100644 --- a/lib/platform_android/global_config_service_impl.dart +++ b/lib/platform_android/global_config_service_impl.dart @@ -72,8 +72,8 @@ class GlobalConfigServiceImpl implements GlobalConfigService { } @override - Future getPRIDLength() async { - String pridLength = ""; + Future getPRIDLength() async { + int pridLength = 0; try { pridLength = await GlobalConfigSettingsApi().getPRIDLength(); } on PlatformException { @@ -85,8 +85,8 @@ class GlobalConfigServiceImpl implements GlobalConfigService { } @override - Future getUINLength() async { - String uinLength = ""; + Future getUINLength() async { + int uinLength = 0; try { uinLength = await GlobalConfigSettingsApi().getUINLength(); } on PlatformException { @@ -98,8 +98,8 @@ class GlobalConfigServiceImpl implements GlobalConfigService { } @override - Future getVIDLength() async { - String vidLength = ""; + Future getVIDLength() async { + int vidLength = 0; try { vidLength = await GlobalConfigSettingsApi().getVIDLength(); } on PlatformException { diff --git a/lib/platform_spi/global_config_service.dart b/lib/platform_spi/global_config_service.dart index 1756e4291..029fcf1c6 100644 --- a/lib/platform_spi/global_config_service.dart +++ b/lib/platform_spi/global_config_service.dart @@ -11,11 +11,11 @@ abstract class GlobalConfigService { Future getGpsEnableFlag(); - Future getPRIDLength(); + Future getPRIDLength(); - Future getUINLength(); + Future getUINLength(); - Future getVIDLength(); + Future getVIDLength(); factory GlobalConfigService() => getGlobalConfigServiceImpl(); } \ No newline at end of file diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index 4b881abe9..16914d4f2 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -509,20 +509,20 @@ class GlobalProvider with ChangeNotifier { } getPRIDLength() async { - String lengthStr = await globalConfigService.getPRIDLength(); - _pridLength = int.tryParse(lengthStr) ?? 14; + int length = await globalConfigService.getPRIDLength(); + _pridLength = length == 0 ? 14 : length; notifyListeners(); } getUINLength() async { - String lengthStr = await globalConfigService.getUINLength(); - _uinLength = int.tryParse(lengthStr) ?? 10; + int length = await globalConfigService.getUINLength(); + _uinLength = length == 0 ? 10 : length; notifyListeners(); } getVIDLength() async { - String lengthStr = await globalConfigService.getVIDLength(); - _vidLength = int.tryParse(lengthStr) ?? 16; + int length = await globalConfigService.getVIDLength(); + _vidLength = length == 0 ? 16 : length; notifyListeners(); } diff --git a/pigeon/global_config_settings.dart b/pigeon/global_config_settings.dart index 8fee7c309..6bbb06d5e 100644 --- a/pigeon/global_config_settings.dart +++ b/pigeon/global_config_settings.dart @@ -13,9 +13,9 @@ abstract class GlobalConfigSettingsApi { @async String getGpsEnableFlag(); @async - String getPRIDLength(); + int getPRIDLength(); @async - String getUINLength(); + int getUINLength(); @async - String getVIDLength(); + int getVIDLength(); } \ No newline at end of file From 48297e681d1cc46cd98e524a1c2ce7b43f3e1cab Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Fri, 9 Jan 2026 17:34:20 +0530 Subject: [PATCH 13/13] Resolved review comments Signed-off-by: Madhuravas reddy --- .../widgets/update_field_selector.dart | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/lib/ui/process_ui/widgets/update_field_selector.dart b/lib/ui/process_ui/widgets/update_field_selector.dart index 7dab571f3..a56c84ea6 100644 --- a/lib/ui/process_ui/widgets/update_field_selector.dart +++ b/lib/ui/process_ui/widgets/update_field_selector.dart @@ -36,7 +36,7 @@ class _UpdateFieldSelectorState extends State late GlobalProvider globalProvider; late RegistrationTaskProvider registrationTaskProvider; Map> fieldsMap = {}; - final RegExp validation = RegExp(r'^[0-9]+$'); + final RegExp inputValidation = RegExp(r'^[0-9]+$'); TextEditingController controller = TextEditingController(); late AppLocalizations appLocalizations = AppLocalizations.of(context)!; int? uinLength; @@ -215,24 +215,14 @@ class _UpdateFieldSelectorState extends State } // Determine validation length based on available field subType in UI spec - int? expectedLength; - - if (idSubType == "uin") { - expectedLength = uinLength; - } else if (idSubType == "vid") { - expectedLength = vidLength; - } else { - // Default to UIN length if no specific ID subType found - expectedLength = uinLength; - } - + int? expectedLength = idSubType == "vid" ? vidLength : uinLength; // Check if length matches the expected length if (expectedLength != null && value.length != expectedLength) { return appLocalizations.valid_uin; } // Check if value contains only digits - if (!validation.hasMatch(value)) { + if (!inputValidation.hasMatch(value)) { return appLocalizations.valid_uin; }