From e11a0082a9e421d5b4338e50dea4244d7fc43549 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 8 Dec 2025 15:54:44 +0530 Subject: [PATCH 1/5] RCF-1283 Added mosip.registration.server_profile and mosip.registration.operator.onboarding.bioattributes propertys Signed-off-by: Madhuravas reddy --- .../api_services/BiometricsDetailsApi.java | 6 ++++++ .../clientmanager/config/AppModule.java | 4 ++-- .../constant/RegistrationConstants.java | 2 ++ .../repository/GlobalParamRepository.java | 4 ++++ .../service/UserOnboardService.java | 21 +++++++++++++++---- .../clientmanager/config/AppModuleTest.java | 2 +- .../service/UserOnboardServiceTest.java | 17 +++++++++------ .../biometrics_service_impl.dart | 13 ++++++++++++ lib/platform_spi/biometrics_service.dart | 2 ++ ...onboarding_biometrics_capture_control.dart | 2 +- pigeon/biometrics.dart | 3 +++ 11 files changed, 62 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java index e7b580b90..ed3314353 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java @@ -686,6 +686,12 @@ public void getListOfDevices(@NonNull String modality, @NonNull BiometricsPigeon } } + @Override + public void getOperatorOnboardingBioattributes(@NonNull BiometricsPigeon.Result result) { + String response = globalParamRepository.getCachedStringOperatorOnboardingBioAttributes(); + result.success(response); + } + public void handleDeviceInfoResponseForList(Bundle bundle) { try { byte[] infoBytes = bundle.getByteArray(RegistrationConstants.SBI_INTENT_RESPONSE_KEY); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java index 9aeaf7c57..a1d30f495 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java @@ -274,9 +274,9 @@ Biometrics095Service provideBiometrics095Service(ObjectMapper objectMapper, Audi @Singleton UserOnboardService provideUserOnboardService(ObjectMapper objectMapper, AuditManagerService auditManagerService, CertificateManagerService certificateManagerService, - SyncRestService syncRestService, CryptoManagerService cryptoManagerService, RegistrationService registrationService, UserBiometricRepository userBiometricRepository, ClientCryptoManagerService clientCryptoManagerService, UserDetailRepository userDetailRepository) { + SyncRestService syncRestService, CryptoManagerService cryptoManagerService, RegistrationService registrationService, UserBiometricRepository userBiometricRepository, ClientCryptoManagerService clientCryptoManagerService, UserDetailRepository userDetailRepository, GlobalParamRepository globalParamRepository) { return new UserOnboardService(appContext, objectMapper, auditManagerService, certificateManagerService, syncRestService, - cryptoManagerService, registrationService, userBiometricRepository, clientCryptoManagerService, userDetailRepository); + cryptoManagerService, registrationService, userBiometricRepository, clientCryptoManagerService, userDetailRepository, globalParamRepository); } @Provides 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 bf441c0e1..637e5d96c 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 @@ -117,5 +117,7 @@ public class RegistrationConstants { public static final String JOB_TRIGGER_POINT_USER = "User"; public static final String GPS_DEVICE_ENABLE_FLAG = "mosip.registration.gps_device_enable_flag"; public static final String DIST_FRM_MACHINE_TO_CENTER = "mosip.registration.distance.from.machine.to.center"; + public static final String OPERATOR_ONBOARDING_BIO_ATTRIBUTES = "mosip.registration.operator.onboarding.bioattributes"; + public static final String SERVER_ACTIVE_PROFILE = "mosip.registration.server_profile"; } 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 12c4d5885..c212ef740 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 @@ -158,6 +158,10 @@ public String getCachedStringMachineToCenterDistance() { return globalParamMap.get(RegistrationConstants.DIST_FRM_MACHINE_TO_CENTER); } + public String getCachedStringOperatorOnboardingBioAttributes() { + return globalParamMap.get(RegistrationConstants.OPERATOR_ONBOARDING_BIO_ATTRIBUTES); + } + /** * Refresh configuration cache by merging global params with local preferences */ diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/UserOnboardService.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/UserOnboardService.java index 61d029795..61392af87 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/UserOnboardService.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/UserOnboardService.java @@ -18,6 +18,7 @@ import io.mosip.registration.clientmanager.dto.registration.BiometricsDto; import io.mosip.registration.clientmanager.exception.ClientCheckedException; import io.mosip.registration.clientmanager.repository.UserBiometricRepository; +import io.mosip.registration.clientmanager.repository.GlobalParamRepository; import io.mosip.registration.clientmanager.repository.UserDetailRepository; import io.mosip.registration.clientmanager.spi.AuditManagerService; import io.mosip.registration.clientmanager.spi.RegistrationService; @@ -81,7 +82,7 @@ public class UserOnboardService { public static final String BIO = "bio"; public static final String REQUEST_AUTH = "requestedAuth"; public static final String PACKET_SYNC_VERSION = "1.0"; - public static final String SERVER_ACTIVE_PROFILE = "Staging"; + private static final String DEFAULT_SERVER_ACTIVE_PROFILE = "Staging"; public static final String TRANSACTION_ID_VALUE = "1234567890"; public static final String USER_ID_CODE = "USERID"; public static final String ON_BOARD_BIO_TYPE = "bioType"; @@ -103,6 +104,7 @@ public class UserOnboardService { private AuditManagerService auditManagerService; private ObjectMapper objectMapper; private ClientCryptoManagerService clientCryptoManagerService; + private GlobalParamRepository globalParamRepository; SharedPreferences sharedPreferences; public static final String USER_ID = "user_id"; public static final String USER_TOKEN = "user_token"; @@ -138,7 +140,7 @@ public void setIdaResponse(boolean idaResponse) { @Inject public UserOnboardService(Context context, ObjectMapper objectMapper, AuditManagerService auditManagerService, CertificateManagerService certificateManagerService, - SyncRestService syncRestService, CryptoManagerService cryptoManagerService, RegistrationService registrationService, UserBiometricRepository userBiometricRepository, ClientCryptoManagerService clientCryptoManagerService, UserDetailRepository userDetailRepository) { + SyncRestService syncRestService, CryptoManagerService cryptoManagerService, RegistrationService registrationService, UserBiometricRepository userBiometricRepository, ClientCryptoManagerService clientCryptoManagerService, UserDetailRepository userDetailRepository, GlobalParamRepository globalParamRepository) { this.context = context; this.userDetailRepository=userDetailRepository; this.certificateManagerService = certificateManagerService; @@ -149,11 +151,22 @@ public UserOnboardService(Context context, ObjectMapper objectMapper, AuditManag this.registrationService = registrationService; this.userBiometricRepository = userBiometricRepository; this.clientCryptoManagerService = clientCryptoManagerService; + this.globalParamRepository = globalParamRepository; sharedPreferences = this.context.getSharedPreferences( this.context.getString(R.string.app_name), Context.MODE_PRIVATE); } + private String getServerActiveProfile() { + if (globalParamRepository != null) { + String value = globalParamRepository.getCachedStringGlobalParam(RegistrationConstants.SERVER_ACTIVE_PROFILE); + if (value != null && !value.trim().isEmpty()) { + return value.trim(); + } + } + return DEFAULT_SERVER_ACTIVE_PROFILE; + } + public void onboardOperator(List biometrics, Runnable onFinish) throws ClientCheckedException { Log.i(TAG, "validateWithIDAuthAndSave invoked "); @@ -184,7 +197,7 @@ public void validateWithIDA(String userId, List biometrics, Runna idaRequestMap.put(VERSION, PACKET_SYNC_VERSION); idaRequestMap.put(REQUEST_TIME, DateUtils.formatToISOString(ZonedDateTime.now(ZoneOffset.UTC).toLocalDateTime())); - idaRequestMap.put(ENV, SERVER_ACTIVE_PROFILE); + idaRequestMap.put(ENV, getServerActiveProfile()); idaRequestMap.put(DOMAIN_URI, BuildConfig.BASE_URL); idaRequestMap.put(TRANSACTION_ID, TRANSACTION_ID_VALUE); idaRequestMap.put(CONSENT_OBTAINED, true); @@ -242,7 +255,7 @@ private LinkedHashMap buildDataBlock(String bioType, String bioS data.put(ON_BOARD_BIO_VALUE, splitEncryptedData.getEncryptedData()); data.put(TRANSACTION_UNIQUE_ID, TRANSACTION_ID_VALUE); data.put(PURPOSE, PURPOSE_AUTH); - data.put(ENV, SERVER_ACTIVE_PROFILE); + data.put(ENV, getServerActiveProfile()); data.put(DOMAIN_URI, BuildConfig.BASE_URL); String dataBlockJsonString = this.objectMapper.writeValueAsString(data); dataBlock.put(ON_BOARD_BIO_DATA, CryptoUtil.encodeToURLSafeBase64(dataBlockJsonString.getBytes())); diff --git a/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/config/AppModuleTest.java b/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/config/AppModuleTest.java index 58ac77e9d..459395726 100644 --- a/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/config/AppModuleTest.java +++ b/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/config/AppModuleTest.java @@ -241,7 +241,7 @@ public void testProvideBiometrics095Service() { public void testProvideUserOnboardService() { UserOnboardService service = appModule.provideUserOnboardService( objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, - mock(RegistrationService.class), userBiometricRepository, clientCryptoManagerService, userDetailRepository + mock(RegistrationService.class), userBiometricRepository, clientCryptoManagerService, userDetailRepository, globalParamRepository ); assertNotNull(service); assertTrue(service instanceof UserOnboardService); diff --git a/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/service/UserOnboardServiceTest.java b/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/service/UserOnboardServiceTest.java index 726eead0d..bab8bcabf 100644 --- a/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/service/UserOnboardServiceTest.java +++ b/android/clientmanager/src/test/java/io/mosip/registration/clientmanager/service/UserOnboardServiceTest.java @@ -24,6 +24,7 @@ import io.mosip.registration.clientmanager.dto.registration.BiometricsDto; import io.mosip.registration.clientmanager.repository.UserBiometricRepository; import io.mosip.registration.clientmanager.repository.UserDetailRepository; +import io.mosip.registration.clientmanager.repository.GlobalParamRepository; import io.mosip.registration.clientmanager.spi.AuditManagerService; import io.mosip.registration.clientmanager.spi.RegistrationService; import io.mosip.registration.clientmanager.spi.SyncRestService; @@ -61,6 +62,8 @@ public class UserOnboardServiceTest { @Mock private RegistrationService registrationService; @Mock + private GlobalParamRepository globalParamRepository; + @Mock private UserBiometricRepository userBiometricRepository; @Mock private ClientCryptoManagerService clientCryptoManagerService; @@ -79,6 +82,7 @@ public void setUp() { when(context.getString(anyInt())).thenReturn("app_name"); when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPreferences); when(sharedPreferences.getString(anyString(), anyString())).thenReturn("testUserToken"); + when(globalParamRepository.getCachedStringGlobalParam(anyString())).thenReturn("Staging"); userOnboardService = new UserOnboardService( context, objectMapper, @@ -89,7 +93,8 @@ public void setUp() { registrationService, userBiometricRepository, clientCryptoManagerService, - userDetailRepository + userDetailRepository, + globalParamRepository ); // Patch for cases where constructor didn't set sharedPreferences ReflectionTestUtils.setField(userOnboardService, "sharedPreferences", sharedPreferences); @@ -354,7 +359,7 @@ public void testBuildDataBlock_ObjectMapperException() throws Exception { UserOnboardService realService = new UserOnboardService( context, objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, - registrationService, userBiometricRepository, clientCryptoManagerService, userDetailRepository + registrationService, userBiometricRepository, clientCryptoManagerService, userDetailRepository, globalParamRepository ); when(objectMapper.writeValueAsString(any())).thenThrow(new RuntimeException("fail")); ReflectionTestUtils.invokeMethod(realService, "buildDataBlock", "FINGER", "LEFT", "abc".getBytes(), "hash"); @@ -421,7 +426,7 @@ public void testGetCertificate_Cached() { userOnboardService = new UserOnboardService( context, objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, registrationService, userBiometricRepository, - clientCryptoManagerService, userDetailRepository + clientCryptoManagerService, userDetailRepository, globalParamRepository ); final boolean[] called = {false}; ReflectionTestUtils.invokeMethod(userOnboardService, "getCertificate", (Runnable) () -> called[0] = true); @@ -455,7 +460,7 @@ public void testGetCertificate_Network() { userOnboardService = new UserOnboardService( context, objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, registrationService, userBiometricRepository, - clientCryptoManagerService, userDetailRepository + clientCryptoManagerService, userDetailRepository, globalParamRepository ); final boolean[] called = {false}; ReflectionTestUtils.invokeMethod(userOnboardService, "getCertificate", (Runnable) () -> called[0] = true); @@ -773,7 +778,7 @@ public void testGetCertificate_Network_ErrorOnResponse() { userOnboardService = new UserOnboardService( context, objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, registrationService, userBiometricRepository, - clientCryptoManagerService, userDetailRepository + clientCryptoManagerService, userDetailRepository, globalParamRepository ); final boolean[] called = {false}; ReflectionTestUtils.invokeMethod(userOnboardService, "getCertificate", (Runnable) () -> called[0] = true); @@ -803,7 +808,7 @@ public void testGetCertificate_Network_OnFailure() { userOnboardService = new UserOnboardService( context, objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService, registrationService, userBiometricRepository, - clientCryptoManagerService, userDetailRepository + clientCryptoManagerService, userDetailRepository, globalParamRepository ); final boolean[] called = {false}; ReflectionTestUtils.invokeMethod(userOnboardService, "getCertificate", (Runnable) () -> called[0] = true); diff --git a/lib/platform_android/biometrics_service_impl.dart b/lib/platform_android/biometrics_service_impl.dart index c7f87bc83..a65d89a38 100644 --- a/lib/platform_android/biometrics_service_impl.dart +++ b/lib/platform_android/biometrics_service_impl.dart @@ -180,6 +180,19 @@ class BiometricsServiceImpl implements BiometricsService { return deviceList; } + @override + Future getOperatorOnboardingBioattributes() async { + String response = ''; + try { + response = await BiometricsApi().getOperatorOnboardingBioattributes(); + } on PlatformException { + debugPrint('Operator Onboarding Bioattributes call failed!'); + } catch (e) { + debugPrint('Fetch List of Operator Onboarding Bioattributes failed: ${e.toString()}'); + } + return response; + } + } BiometricsService getBiometricsServiceImpl() => BiometricsServiceImpl(); diff --git a/lib/platform_spi/biometrics_service.dart b/lib/platform_spi/biometrics_service.dart index 49337280a..5653f3343 100644 --- a/lib/platform_spi/biometrics_service.dart +++ b/lib/platform_spi/biometrics_service.dart @@ -39,5 +39,7 @@ abstract class BiometricsService { Future> getListOfDevices(String modality); + Future getOperatorOnboardingBioattributes(); + factory BiometricsService() => getBiometricsServiceImpl(); } diff --git a/lib/ui/onboard/widgets/operator_onboarding_biometrics_capture_control.dart b/lib/ui/onboard/widgets/operator_onboarding_biometrics_capture_control.dart index abdc6d503..6d4d2c22f 100644 --- a/lib/ui/onboard/widgets/operator_onboarding_biometrics_capture_control.dart +++ b/lib/ui/onboard/widgets/operator_onboarding_biometrics_capture_control.dart @@ -34,7 +34,7 @@ class OperatorOnboardingBiometricsCaptureControlInitialization Widget build(BuildContext context) { _getOperatorOnboardingAttributes() async { await BiometricsApi() - .getMapValue("mosip.registration.operator.onboarding.bioattributes") + .getOperatorOnboardingBioattributes() .then((value) { context.read().operatorOnboardingAttributes = value; }); diff --git a/pigeon/biometrics.dart b/pigeon/biometrics.dart index e844ebbe8..13af3305f 100644 --- a/pigeon/biometrics.dart +++ b/pigeon/biometrics.dart @@ -63,4 +63,7 @@ abstract class BiometricsApi { @async List getListOfDevices(String modality); + + @async + String getOperatorOnboardingBioattributes(); } From 58a73adc9be5c74040da43ee658666ac040a713e Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 8 Dec 2025 18:41:45 +0530 Subject: [PATCH 2/5] Added config properties for helpTopics urls Signed-off-by: Madhuravas reddy --- .../api_services/CommonDetailsApi.java | 66 +++++++ .../constant/RegistrationConstants.java | 8 + .../repository/GlobalParamRepository.java | 24 +++ .../service/MasterDataServiceImpl.java | 36 ++++ .../clientmanager/spi/MasterDataService.java | 12 ++ lib/provider/global_provider.dart | 44 +++++ lib/ui/onboard/onboard_landing_page.dart | 33 ++-- pigeon/common_details.dart | 12 ++ test/login_test.mocks.dart | 162 ++++++++++++++++++ 9 files changed, 378 insertions(+), 19 deletions(-) create mode 100644 test/login_test.mocks.dart diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/CommonDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/CommonDetailsApi.java index 83e6e1849..4e7cd2e00 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/CommonDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/CommonDetailsApi.java @@ -94,4 +94,70 @@ public void saveScreenHeaderToGlobalParam(@NonNull String id, @NonNull String va } result.success(response); } + + @Override + public void getOnboardYourselfUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringOnboardYourselfUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Onboard Yourself URL", e); + } + result.success(response); + } + + @Override + public void getRegisteringIndividualUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringRegisteringIndividualUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Registering Individual URL", e); + } + result.success(response); + } + + @Override + public void getSyncDataUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringSyncDataUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Sync Data URL", e); + } + result.success(response); + } + + @Override + public void getMappingDevicesUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringMappingDevicesUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Mapping Devices URL", e); + } + result.success(response); + } + + @Override + public void getUploadingDataUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringUploadingDataUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Uploading Data URL", e); + } + result.success(response); + } + + @Override + public void getUpdatingBiometricsUrl(@NonNull CommonDetailsPigeon.Result result) { + String response = ""; + try { + response = masterDataService.getCachedStringUpdatingBiometricsUrl(); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Error fetching Updating Biometrics URL", e); + } + result.success(response); + } } 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 637e5d96c..95cb9af65 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 @@ -120,4 +120,12 @@ public class RegistrationConstants { public static final String OPERATOR_ONBOARDING_BIO_ATTRIBUTES = "mosip.registration.operator.onboarding.bioattributes"; public static final String SERVER_ACTIVE_PROFILE = "mosip.registration.server_profile"; + + public static final String ONBOARD_YOURSELF_URL = "mosip.registration.onboard_yourself_url"; + public static final String REGISTERING_INDIVIDUAL_URL = "mosip.registration.registering_individual_url"; + public static final String SYNC_DATA_URL = "mosip.registration.sync_data_url"; + public static final String MAPPING_DEVICES_URL = "mosip.registration.mapping_devices_url"; + public static final String UPLOADING_DATA_URL = "mosip.registration.uploading_data_url"; + public static final String UPDATING_BIOMETRICS_URL = "mosip.registration.updating_biometrics_url"; + } 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 c212ef740..6e918aad7 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 @@ -162,6 +162,30 @@ public String getCachedStringOperatorOnboardingBioAttributes() { return globalParamMap.get(RegistrationConstants.OPERATOR_ONBOARDING_BIO_ATTRIBUTES); } + public String getCachedStringOnboardYourselfUrl() { + return globalParamMap.get(RegistrationConstants.ONBOARD_YOURSELF_URL); + } + + public String getCachedStringRegisteringIndividualUrl() { + return globalParamMap.get(RegistrationConstants.REGISTERING_INDIVIDUAL_URL); + } + + public String getCachedStringSyncDataUrl() { + return globalParamMap.get(RegistrationConstants.SYNC_DATA_URL); + } + + public String getCachedStringMappingDevicesUrl() { + return globalParamMap.get(RegistrationConstants.MAPPING_DEVICES_URL); + } + + public String getCachedStringUploadingDataUrl() { + return globalParamMap.get(RegistrationConstants.UPLOADING_DATA_URL); + } + + public String getCachedStringUpdatingBiometricsUrl() { + return globalParamMap.get(RegistrationConstants.UPDATING_BIOMETRICS_URL); + } + /** * Refresh configuration cache by merging global params with local preferences */ diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/MasterDataServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/MasterDataServiceImpl.java index 73de638fe..d4c89ff20 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/MasterDataServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/MasterDataServiceImpl.java @@ -1082,4 +1082,40 @@ public Map getRegistrationParams() { return globalParamRepository.getGlobalParamsByPattern("mosip.registration%"); } + @Override + public String getCachedStringOnboardYourselfUrl() { + String value = globalParamRepository.getCachedStringOnboardYourselfUrl(); + return value == null ? "" : value; + } + + @Override + public String getCachedStringRegisteringIndividualUrl() { + String value = globalParamRepository.getCachedStringRegisteringIndividualUrl(); + return value == null ? "" : value; + } + + @Override + public String getCachedStringSyncDataUrl() { + String value = globalParamRepository.getCachedStringSyncDataUrl(); + return value == null ? "" : value; + } + + @Override + public String getCachedStringMappingDevicesUrl() { + String value = globalParamRepository.getCachedStringMappingDevicesUrl(); + return value == null ? "" : value; + } + + @Override + public String getCachedStringUploadingDataUrl() { + String value = globalParamRepository.getCachedStringUploadingDataUrl(); + return value == null ? "" : value; + } + + @Override + public String getCachedStringUpdatingBiometricsUrl() { + String value = globalParamRepository.getCachedStringUpdatingBiometricsUrl(); + return value == null ? "" : value; + } + } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/MasterDataService.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/MasterDataService.java index 85dce0d45..d44f4e2be 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/MasterDataService.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/MasterDataService.java @@ -150,4 +150,16 @@ public interface MasterDataService { Map getRegistrationParams(); // void downloadUrlData(Path path, JSONObject jsonObject); + + String getCachedStringOnboardYourselfUrl(); + + String getCachedStringRegisteringIndividualUrl(); + + String getCachedStringSyncDataUrl(); + + String getCachedStringMappingDevicesUrl(); + + String getCachedStringUploadingDataUrl(); + + String getCachedStringUpdatingBiometricsUrl(); } diff --git a/lib/provider/global_provider.dart b/lib/provider/global_provider.dart index deac515f7..391a1ff69 100644 --- a/lib/provider/global_provider.dart +++ b/lib/provider/global_provider.dart @@ -225,6 +225,50 @@ class GlobalProvider with ChangeNotifier { notifyListeners(); } + // Help / guide URLs fetched from global params + String _onboardYourselfUrl = ""; + String _registeringIndividualUrl = ""; + String _syncDataUrl = ""; + String _mappingDevicesUrl = ""; + String _uploadingDataUrl = ""; + String _updatingBiometricsUrl = ""; + + String get onboardYourselfUrl => _onboardYourselfUrl; + set onboardYourselfUrl(String value) { + _onboardYourselfUrl = value; + notifyListeners(); + } + + String get registeringIndividualUrl => _registeringIndividualUrl; + set registeringIndividualUrl(String value) { + _registeringIndividualUrl = value; + notifyListeners(); + } + + String get syncDataUrl => _syncDataUrl; + set syncDataUrl(String value) { + _syncDataUrl = value; + notifyListeners(); + } + + String get mappingDevicesUrl => _mappingDevicesUrl; + set mappingDevicesUrl(String value) { + _mappingDevicesUrl = value; + notifyListeners(); + } + + String get uploadingDataUrl => _uploadingDataUrl; + set uploadingDataUrl(String value) { + _uploadingDataUrl = value; + notifyListeners(); + } + + String get updatingBiometricsUrl => _updatingBiometricsUrl; + set updatingBiometricsUrl(String value) { + _updatingBiometricsUrl = value; + notifyListeners(); + } + saveVersionToGlobalParam(String id, String version) async { await networkService.saveVersionToGlobalParam(id, version); } diff --git a/lib/ui/onboard/onboard_landing_page.dart b/lib/ui/onboard/onboard_landing_page.dart index 995f0062f..e5af7f5b3 100644 --- a/lib/ui/onboard/onboard_landing_page.dart +++ b/lib/ui/onboard/onboard_landing_page.dart @@ -35,13 +35,9 @@ class OnboardLandingPage extends StatelessWidget { } } - _getStringValueGlobalParamAction(BuildContext context, String key) async { - await context - .read() - .getStringValueGlobalParam(key); - String res = - context.read().stringValueGlobalParam; - await goToUrl(res); + Future _openUrlIfPresent(String url) async { + if (url.isEmpty) return; + await goToUrl(url); } @override @@ -53,48 +49,47 @@ class OnboardLandingPage extends StatelessWidget { "icon": "assets/images/Onboarding Yourself.png", "title": "Onboarding Yourself", "onTap": () { - _getStringValueGlobalParamAction( - context, "mosip.registration.onboard_yourself_url"); + _openUrlIfPresent( + context.read().onboardYourselfUrl); }, }, { "icon": "assets/images/Onboarding Yourself.png", "title": "Registering an Individual", "onTap": () async { - _getStringValueGlobalParamAction( - context, "mosip.registration.registering_individual_url"); + _openUrlIfPresent( + context.read().registeringIndividualUrl); }, }, { "icon": "assets/images/Synchronising Data.png", "title": "Synchronising Data", "onTap": () async { - _getStringValueGlobalParamAction( - context, "mosip.registration.sync_data_url"); + _openUrlIfPresent(context.read().syncDataUrl); }, }, { "icon": "assets/images/fingerprint_icon.png", "title": "Mapping Devices to Machine", "onTap": () async { - _getStringValueGlobalParamAction( - context, "mosip.registration.mapping_devices_url"); + _openUrlIfPresent( + context.read().mappingDevicesUrl); }, }, { "icon": "assets/images/Uploading Local - Registration Data.png", "title": "Uploading Local/Registration Data", "onTap": () async { - _getStringValueGlobalParamAction( - context, "mosip.registration.uploading_data_url"); + _openUrlIfPresent( + context.read().uploadingDataUrl); }, }, { "icon": "assets/images/fingerprint_icon.png", "title": "Updating Operator Biometrics", "onTap": () async { - _getStringValueGlobalParamAction( - context, "mosip.registration.updating_biometrics_url"); + _openUrlIfPresent( + context.read().updatingBiometricsUrl); }, }, ]; diff --git a/pigeon/common_details.dart b/pigeon/common_details.dart index e35abe2ae..c7aecdc9c 100644 --- a/pigeon/common_details.dart +++ b/pigeon/common_details.dart @@ -16,4 +16,16 @@ abstract class CommonDetailsApi { String getVersionFromGlobalParam(String id); @async String saveScreenHeaderToGlobalParam(String id, String value); + @async + String getOnboardYourselfUrl(); + @async + String getRegisteringIndividualUrl(); + @async + String getSyncDataUrl(); + @async + String getMappingDevicesUrl(); + @async + String getUploadingDataUrl(); + @async + String getUpdatingBiometricsUrl(); } diff --git a/test/login_test.mocks.dart b/test/login_test.mocks.dart new file mode 100644 index 000000000..9ec7c8662 --- /dev/null +++ b/test/login_test.mocks.dart @@ -0,0 +1,162 @@ +// Mocks generated by Mockito 5.4.2 from annotations +// in registration_client/test/login_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'login.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [Login]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLogin extends _i1.Mock implements _i2.Login { + MockLogin() { + _i1.throwOnMissingStub(this); + } + + @override + String get username => (super.noSuchMethod( + Invocation.getter(#username), + returnValue: '', + ) as String); + + @override + set username(String? _username) => super.noSuchMethod( + Invocation.setter( + #username, + _username, + ), + returnValueForMissingStub: null, + ); + + @override + String get password => (super.noSuchMethod( + Invocation.getter(#password), + returnValue: '', + ) as String); + + @override + set password(String? _password) => super.noSuchMethod( + Invocation.setter( + #password, + _password, + ), + returnValueForMissingStub: null, + ); + + @override + String validateUsername(String? uname) => (super.noSuchMethod( + Invocation.method( + #validateUsername, + [uname], + ), + returnValue: '', + ) as String); + + @override + String validatePassword(String? pword) => (super.noSuchMethod( + Invocation.method( + #validatePassword, + [pword], + ), + returnValue: '', + ) as String); + + @override + String login( + String? username, + String? password, + ) => + (super.noSuchMethod( + Invocation.method( + #login, + [ + username, + password, + ], + ), + returnValue: '', + ) as String); + + @override + String isOnboarded(Map? mockData) => (super.noSuchMethod( + Invocation.method( + #isOnboarded, + [mockData], + ), + returnValue: '', + ) as String); + + @override + String userRoleAuthorised(List? mockData) => (super.noSuchMethod( + Invocation.method( + #userRoleAuthorised, + [mockData], + ), + returnValue: '', + ) as String); + + @override + bool isPasswordPresent( + Map? passwordData, + String? userId, + ) => + (super.noSuchMethod( + Invocation.method( + #isPasswordPresent, + [ + passwordData, + userId, + ], + ), + returnValue: false, + ) as bool); + + @override + bool isPasswordValid( + Map? passwordData, + String? userId, + String? password, + ) => + (super.noSuchMethod( + Invocation.method( + #isPasswordValid, + [ + passwordData, + userId, + password, + ], + ), + returnValue: false, + ) as bool); + + @override + String offlineLogin( + Map? passwordData, + String? userId, + String? password, + ) => + (super.noSuchMethod( + Invocation.method( + #offlineLogin, + [ + passwordData, + userId, + password, + ], + ), + returnValue: '', + ) as String); +} From 1c83ab85981c833440d97a0dbb67e5154764e1e7 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 8 Dec 2025 18:56:14 +0530 Subject: [PATCH 3/5] Removed mock test file Signed-off-by: Madhuravas reddy --- test/login_test.mocks.dart | 162 ------------------------------------- 1 file changed, 162 deletions(-) delete mode 100644 test/login_test.mocks.dart diff --git a/test/login_test.mocks.dart b/test/login_test.mocks.dart deleted file mode 100644 index 9ec7c8662..000000000 --- a/test/login_test.mocks.dart +++ /dev/null @@ -1,162 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in registration_client/test/login_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:mockito/mockito.dart' as _i1; - -import 'login.dart' as _i2; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -/// A class which mocks [Login]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockLogin extends _i1.Mock implements _i2.Login { - MockLogin() { - _i1.throwOnMissingStub(this); - } - - @override - String get username => (super.noSuchMethod( - Invocation.getter(#username), - returnValue: '', - ) as String); - - @override - set username(String? _username) => super.noSuchMethod( - Invocation.setter( - #username, - _username, - ), - returnValueForMissingStub: null, - ); - - @override - String get password => (super.noSuchMethod( - Invocation.getter(#password), - returnValue: '', - ) as String); - - @override - set password(String? _password) => super.noSuchMethod( - Invocation.setter( - #password, - _password, - ), - returnValueForMissingStub: null, - ); - - @override - String validateUsername(String? uname) => (super.noSuchMethod( - Invocation.method( - #validateUsername, - [uname], - ), - returnValue: '', - ) as String); - - @override - String validatePassword(String? pword) => (super.noSuchMethod( - Invocation.method( - #validatePassword, - [pword], - ), - returnValue: '', - ) as String); - - @override - String login( - String? username, - String? password, - ) => - (super.noSuchMethod( - Invocation.method( - #login, - [ - username, - password, - ], - ), - returnValue: '', - ) as String); - - @override - String isOnboarded(Map? mockData) => (super.noSuchMethod( - Invocation.method( - #isOnboarded, - [mockData], - ), - returnValue: '', - ) as String); - - @override - String userRoleAuthorised(List? mockData) => (super.noSuchMethod( - Invocation.method( - #userRoleAuthorised, - [mockData], - ), - returnValue: '', - ) as String); - - @override - bool isPasswordPresent( - Map? passwordData, - String? userId, - ) => - (super.noSuchMethod( - Invocation.method( - #isPasswordPresent, - [ - passwordData, - userId, - ], - ), - returnValue: false, - ) as bool); - - @override - bool isPasswordValid( - Map? passwordData, - String? userId, - String? password, - ) => - (super.noSuchMethod( - Invocation.method( - #isPasswordValid, - [ - passwordData, - userId, - password, - ], - ), - returnValue: false, - ) as bool); - - @override - String offlineLogin( - Map? passwordData, - String? userId, - String? password, - ) => - (super.noSuchMethod( - Invocation.method( - #offlineLogin, - [ - passwordData, - userId, - password, - ], - ), - returnValue: '', - ) as String); -} From 1106f8900b34790142de0e0c25ed0c4580fe9c91 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Tue, 16 Dec 2025 14:49:32 +0530 Subject: [PATCH 4/5] Resolved code rabbit review comments Signed-off-by: Madhuravas reddy --- .../registration_client/api_services/BiometricsDetailsApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java index ed3314353..7d958892d 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/BiometricsDetailsApi.java @@ -689,7 +689,7 @@ public void getListOfDevices(@NonNull String modality, @NonNull BiometricsPigeon @Override public void getOperatorOnboardingBioattributes(@NonNull BiometricsPigeon.Result result) { String response = globalParamRepository.getCachedStringOperatorOnboardingBioAttributes(); - result.success(response); + result.success(response == null ? "" : response); } public void handleDeviceInfoResponseForList(Bundle bundle) { From 4a98475d51e9912ce21d408f09af987d2f28795e Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Wed, 17 Dec 2025 20:48:30 +0530 Subject: [PATCH 5/5] Added config property for biometric env Signed-off-by: Madhuravas reddy --- .../clientmanager/service/Biometrics095Service.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/Biometrics095Service.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/Biometrics095Service.java index b22bc55a9..de8a277d6 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/Biometrics095Service.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/Biometrics095Service.java @@ -54,6 +54,7 @@ public class Biometrics095Service extends BiometricsService { private static final String TAG = Biometrics095Service.class.getSimpleName(); private static final String TRUST_DOMAIN_DEVICE = "DEVICE"; + private static final String DEFAULT_SERVER_ACTIVE_PROFILE = "Staging"; private String rCaptureTrustDomain = TRUST_DOMAIN_DEVICE; private String deviceInfoTrustDomain = TRUST_DOMAIN_DEVICE; @@ -90,7 +91,7 @@ public Biometrics095Service(Context context, ObjectMapper objectMapper, public CaptureRequest getRCaptureRequest(Modality modality, String deviceId, List exceptionAttributes) { CaptureRequest captureRequest = new CaptureRequest(); - captureRequest.setEnv("Developer"); + captureRequest.setEnv(getServerActiveProfile()); captureRequest.setPurpose("Registration"); captureRequest.setTimeout(10000); captureRequest.setSpecVersion("0.9.5"); @@ -313,4 +314,14 @@ public void addBioDevice(Modality modality, String deviceCode, DigitalId digital registeredDevice.put("deviceCode", deviceCode); BIO_DEVICES.put(modality, registeredDevice); } + + private String getServerActiveProfile() { + if (globalParamRepository != null) { + String value = globalParamRepository.getCachedStringGlobalParam(RegistrationConstants.SERVER_ACTIVE_PROFILE); + if (value != null && !value.trim().isEmpty()) { + return value.trim(); + } + } + return DEFAULT_SERVER_ACTIVE_PROFILE; + } }