From 8e2d9c99b6029fb671488884223a03f501a7326c Mon Sep 17 00:00:00 2001 From: "sachin.sp" Date: Fri, 5 Dec 2025 23:10:13 +0530 Subject: [PATCH 1/5] RCF-1275: added registration packet deletion and packet status job Signed-off-by: sachin.sp --- .../api_services/MasterDataSyncApi.java | 33 ++++++++++ .../constant/RegistrationConstants.java | 1 + .../clientmanager/dao/RegistrationDao.java | 7 +- .../jobs/RegistrationDeletionJob.java | 52 +++++++++++++++ .../repository/RegistrationRepository.java | 11 ++++ .../service/JobManagerServiceImpl.java | 4 +- .../service/PacketServiceImpl.java | 64 ++++++++++++++++++- .../clientmanager/spi/PacketService.java | 2 + .../sync_response_service_impl.dart | 28 ++++++++ lib/platform_spi/sync_response_service.dart | 2 + .../widgets/scheduled_jobs_settings.dart | 8 ++- pigeon/master_data_sync.dart | 4 ++ 12 files changed, 211 insertions(+), 5 deletions(-) create mode 100644 android/clientmanager/src/main/java/io/mosip/registration/clientmanager/jobs/RegistrationDeletionJob.java diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java index 1f6f1a4c5..15d60a01e 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java @@ -377,6 +377,33 @@ public void deletePreRegRecords(@NonNull String jobId, @NonNull MasterDataSyncPi } } + @Override + public void deleteRegistrationPackets(@NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { + try { + packetService.deleteRegistrationPackets(); + masterDataService.logLastSyncCompletionDateTime(jobId); + Toast.makeText(context, "Deleted Registration packets", Toast.LENGTH_LONG).show(); + result.success(true); + } catch (Exception e) { + Log.e(TAG, "Failed to delete registration packets", e); + result.error(e); + Toast.makeText(context, "Failed to delete Registration packets", Toast.LENGTH_LONG).show(); + } + } + + @Override + public void syncPacketStatus(@NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { + try { + packetService.syncAllPacketStatus(); + masterDataService.logLastSyncCompletionDateTime(jobId); + Log.i(TAG, "Packet status sync job completed"); + result.success(true); + } catch (Exception e) { + Log.e(TAG, "Failed to sync packet status", e); + result.error(e); + } + } + @Override public void getLastSyncTimeByJobId(@NonNull String jobId, @NonNull MasterDataSyncPigeon.Result result) { int syncJobId = jobManagerService.generateJobServiceId(jobId); @@ -473,6 +500,12 @@ public void executeJobByApiName(String jobApiName, Context context) { preRegistrationDataSyncService.fetchAndDeleteRecords(); masterDataService.logLastSyncCompletionDateTime(jobId); break; + + case "registrationPacketDeletionJob": + packetService.deleteRegistrationPackets(); + masterDataService.logLastSyncCompletionDateTime(jobId); + Log.i(TAG, "Registration packet deletion job completed"); + break; default: Log.w(getClass().getSimpleName(), "Unknown job: " + jobApiName); } 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..1d379e64b 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 @@ -112,6 +112,7 @@ public class RegistrationConstants { public static final String RIGHT = "Right"; public static final String LEFT = "Left"; public static final String PRE_REG_DELETION_CONFIGURED_DAYS = "mosip.registration.pre_reg_deletion_configured_days"; + public static final String REG_DELETION_CONFIGURED_DAYS = "mosip.registration.deletion.configured.days"; public static final String PRE_REG_DELETE_SUCCESS = "PRE_REG_DELETE_SUCCESS"; public static final String PRE_REG_DELETE_FAILURE = "PRE_REG_DELETE_FAILURE"; public static final String JOB_TRIGGER_POINT_USER = "User"; diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dao/RegistrationDao.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dao/RegistrationDao.java index 24e129abf..52de6ba0c 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dao/RegistrationDao.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dao/RegistrationDao.java @@ -57,11 +57,16 @@ public interface RegistrationDao { @Query("SELECT COUNT(*) FROM registration where client_status in (:syncedStatus, :approvedStatus)") int findRegistrationCountBySyncedStatusAndApprovedStatus(String syncedStatus, String approvedStatus); - @Query("SELECT COUNT(*) FROM registration where client_status in (:syncedStatus)") int findRegistrationCountBySyncedStatus(String syncedStatus); @Query("SELECT COUNT(*) FROM registration where cr_dtimes < CURRENT_DATE") int getAllCreatedPacketStatus(); + @Query("SELECT * FROM registration where server_status IN (:serverStatuses) AND cr_dtimes < :timestamp") + List findByServerStatusAndCrDtimeBefore(List serverStatuses, long timestamp); + + // Update server status with timestamp (for status sync) + @Query("UPDATE registration SET server_status = :serverStatus, server_status_dtimes = :timestamp WHERE packet_id = :packetId") + void updateServerStatusWithTimestamp(String packetId, String serverStatus, long timestamp); } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/jobs/RegistrationDeletionJob.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/jobs/RegistrationDeletionJob.java new file mode 100644 index 000000000..a0c81d1d2 --- /dev/null +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/jobs/RegistrationDeletionJob.java @@ -0,0 +1,52 @@ +package io.mosip.registration.clientmanager.jobs; + +import android.annotation.SuppressLint; +import android.util.Log; + +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; + +import dagger.android.AndroidInjection; +import io.mosip.registration.clientmanager.spi.PacketService; + +/** + * Job for deleting old processed registration packets + * Runs periodically to clean up packets that have been successfully processed + * by the server and are older than the configured number of days. + * + * @since 1.0.0 + */ +@SuppressLint("SpecifyJobSchedulerIdRange") +public class RegistrationDeletionJob extends SyncJobServiceBase { + + private static final String TAG = RegistrationDeletionJob.class.getSimpleName(); + + @Inject + PacketService packetService; + + public RegistrationDeletionJob() { + configureBuilder(); + } + + @Override + public void onCreate() { + super.onCreate(); + AndroidInjection.inject(this); + } + + @Override + public boolean triggerJob(int jobId) { + Log.d(TAG, TAG + " Started"); + try { + packetService.deleteRegistrationPackets(); + long timeStampInSeconds = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()); + logJobTransaction(jobId, timeStampInSeconds); + Log.d(TAG, TAG + " Completed successfully"); + return true; + } catch (Exception e) { + Log.e(TAG, TAG + " failed", e); + } + return false; + } +} diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/RegistrationRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/RegistrationRepository.java index 56e445ee2..20446f2fe 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/RegistrationRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/RegistrationRepository.java @@ -92,4 +92,15 @@ public void deleteRegistration(String packetId) { public void updateSupervisorReview(String packetId, String supervisorStatus, String supervisorComment) { this.registrationDao.updateSupervisorReview(packetId, supervisorStatus, supervisorComment); } + + public List findByServerStatusAndCrDtimeBefore(List serverStatuses, long timestamp) { + return this.registrationDao.findByServerStatusAndCrDtimeBefore(serverStatuses, timestamp); + } + + /** + * Update server status with timestamp + */ + public void updateServerStatusWithTimestamp(String packetId, String serverStatus, long timestamp) { + this.registrationDao.updateServerStatusWithTimestamp(packetId, serverStatus, timestamp); + } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java index 3c90c3182..3a1b5e4a1 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java @@ -21,6 +21,7 @@ import io.mosip.registration.clientmanager.jobs.ConfigDataSyncJob; import io.mosip.registration.clientmanager.jobs.DeleteAuditLogsJob; import io.mosip.registration.clientmanager.jobs.PacketStatusSyncJob; +import io.mosip.registration.clientmanager.jobs.RegistrationDeletionJob; import io.mosip.registration.clientmanager.repository.SyncJobDefRepository; import io.mosip.registration.clientmanager.spi.JobManagerService; import io.mosip.registration.clientmanager.spi.JobTransactionService; @@ -195,7 +196,6 @@ public int generateJobServiceId(String syncJobDefId) { } } - private Class getJobServiceImplClass(String jobAPIName) { switch (jobAPIName) { case "packetSyncStatusJob": @@ -204,6 +204,8 @@ private Class getJobServiceImplClass(String jobAPIName) { return ConfigDataSyncJob.class; case "deleteAuditLogsJob": return DeleteAuditLogsJob.class; + case "registrationPacketDeletionJob": + return RegistrationDeletionJob.class; default: return null; } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index 8d31c65b7..e2980db34 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -14,6 +14,7 @@ import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.List; import javax.inject.Inject; @@ -305,6 +306,7 @@ public void syncAllPacketStatus() { } else { packet.setPacketId(reg.getPacketId()); } + packets.add(packet); } packetStatusRequest.setRequest(packets); @@ -317,10 +319,11 @@ public void onResponse(Call call, Response 0) { + long currentTimestamp = System.currentTimeMillis(); for (PacketStatusDto packetStatus : packetStatusList) { PacketStatusUpdateDto updateDto = new PacketStatusUpdateDto(packetStatus.getRegistrationId() != null ? packetStatus.getRegistrationId() : packetStatus.getPacketId(), packetStatus.getStatusCode()); - registrationRepository.updateStatus(updateDto.getRegistrationId(), updateDto.getStatusCode(), - PacketClientStatus.UPLOADED.name()); + // Update server status with timestamp + registrationRepository.updateServerStatusWithTimestamp(updateDto.getRegistrationId(), updateDto.getStatusCode(), currentTimestamp); packetSyncSuccess++; } } @@ -345,4 +348,61 @@ public String getPacketStatus(String packetId) { String packetStatus = registration.getServerStatus() == null ? registration.getClientStatus() : registration.getServerStatus(); return packetStatus; } + + @Override + public void deleteRegistrationPackets() { + Log.i(TAG, "Starting registration packet deletion job"); + try { + String configuredDays = globalParamRepository + .getCachedStringGlobalParam(RegistrationConstants.REG_DELETION_CONFIGURED_DAYS); + if (configuredDays == null) { + configuredDays = "10"; // Default to 10 days if not configured + } + int days = Integer.parseInt(configuredDays); + + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -days); + long cutoffTime = cal.getTimeInMillis(); + + List serverStatuses = Arrays.asList( + PacketServerStatus.PROCESSED.name(), + PacketServerStatus.ACCEPTED.name()); + + List registrations = registrationRepository.findByServerStatusAndCrDtimeBefore(serverStatuses, + cutoffTime); + + if (registrations != null && !registrations.isEmpty()) { + for (Registration registration : registrations) { + delete(registration); + } + } else { + Log.i(TAG, "No registrations found to delete"); + } + } catch (Exception e) { + Log.e(TAG, "Error during registration packet deletion", e); + } + } + + private void delete(Registration registration) { + try { + String filePath = registration.getFilePath(); + if (filePath != null) { + File zipFile = new File(filePath); + + // Delete ZIP packet file + if (zipFile.exists()) { + if (zipFile.delete()) { + Log.i(TAG, "Deleted zip file: " + filePath); + } else { + Log.e(TAG, "Failed to delete zip file: " + filePath); + } + } + } + + // Delete database record + registrationRepository.deleteRegistration(registration.getPacketId()); + } catch (Exception e) { + Log.e(TAG, "Error deleting registration: " + registration.getPacketId(), e); + } + } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/PacketService.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/PacketService.java index 523e85835..fe7f67817 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/PacketService.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/spi/PacketService.java @@ -73,4 +73,6 @@ public interface PacketService { * @return Packet Status */ String getPacketStatus(String packetId); + + void deleteRegistrationPackets(); } diff --git a/lib/platform_android/sync_response_service_impl.dart b/lib/platform_android/sync_response_service_impl.dart index 7bd0631ae..ea83a38c9 100644 --- a/lib/platform_android/sync_response_service_impl.dart +++ b/lib/platform_android/sync_response_service_impl.dart @@ -216,6 +216,34 @@ class SyncResponseServiceImpl implements SyncResponseService { } } + @override + Future deleteRegistrationPackets(String jobId) async { + try { + final deleteResponse = await SyncApi().deleteRegistrationPackets(jobId); + return deleteResponse; + } on PlatformException catch (e) { + debugPrint('deleteRegistrationPackets PlatformException: ${e.message}'); + return false; + } catch (e) { + debugPrint('deleteRegistrationPackets failed: $e'); + return false; + } + } + + @override + Future syncPacketStatus(String jobId) async { + try { + final syncResponse = await SyncApi().syncPacketStatus(jobId); + return syncResponse; + } on PlatformException catch (e) { + debugPrint('syncPacketStatus PlatformException: ${e.message}'); + return false; + } catch (e) { + debugPrint('syncPacketStatus failed: $e'); + return false; + } + } + @override Future getLastSyncTimeByJobId(String jobId) async{ try { diff --git a/lib/platform_spi/sync_response_service.dart b/lib/platform_spi/sync_response_service.dart index 4251e9376..01efd7bc4 100644 --- a/lib/platform_spi/sync_response_service.dart +++ b/lib/platform_spi/sync_response_service.dart @@ -25,6 +25,8 @@ abstract class SyncResponseService { Future getSyncAndUploadInProgressStatus(); Future deleteAuditLogs(String jobId); Future deletePreRegRecords(String jobId); + Future deleteRegistrationPackets(String jobId); + Future syncPacketStatus(String jobId); Future> getActiveSyncJobs(); Future getLastSyncTimeByJobId(String jobId); diff --git a/lib/ui/settings/widgets/scheduled_jobs_settings.dart b/lib/ui/settings/widgets/scheduled_jobs_settings.dart index e253d2707..b8041bb39 100644 --- a/lib/ui/settings/widgets/scheduled_jobs_settings.dart +++ b/lib/ui/settings/widgets/scheduled_jobs_settings.dart @@ -9,7 +9,7 @@ import 'package:registration_client/utils/sync_job_def.dart'; import '../../../provider/sync_provider.dart'; // Dart equivalent of the Java PACKET_JOBS constant -const List PACKET_JOBS = ['RPS_J00006', 'RSJ_J00014', 'PUJ_J00017', 'PVS_J00015']; +const List PACKET_JOBS = ['RPS_J00006', 'RSJ_J00014', 'PUJ_J00017']; class ScheduledJobsSettings extends StatelessWidget { const ScheduledJobsSettings({ @@ -167,6 +167,12 @@ class _JobCardState extends State<_JobCard> { case 'preRegistrationPacketDeletionJob': await service.deletePreRegRecords(jobId ?? ''); break; + case 'registrationDeletionJob': + await service.deleteRegistrationPackets(jobId ?? ''); + break; + case 'packetSyncStatusJob': + await service.syncPacketStatus(jobId ?? ''); + break; default: debugPrint('No handler for sync job: $apiName'); return; diff --git a/pigeon/master_data_sync.dart b/pigeon/master_data_sync.dart index 1ed9e9830..41cb9d275 100644 --- a/pigeon/master_data_sync.dart +++ b/pigeon/master_data_sync.dart @@ -54,6 +54,10 @@ abstract class SyncApi { @async bool deletePreRegRecords(String jobId); @async + bool deleteRegistrationPackets(String jobId); + @async + bool syncPacketStatus(String jobId); + @async String getLastSyncTimeByJobId(String jobId); @async String getNextSyncTimeByJobId(String jobId); From d62198c887d02fca3fdc6e1bd0fb092c3d682f3a Mon Sep 17 00:00:00 2001 From: "sachin.sp" Date: Mon, 22 Dec 2025 09:20:04 +0530 Subject: [PATCH 2/5] RCF-1275: correct the api names Signed-off-by: sachin.sp --- .../registration_client/api_services/MasterDataSyncApi.java | 2 +- .../clientmanager/service/JobManagerServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java index 15d60a01e..4504dcfdd 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/MasterDataSyncApi.java @@ -501,7 +501,7 @@ public void executeJobByApiName(String jobApiName, Context context) { masterDataService.logLastSyncCompletionDateTime(jobId); break; - case "registrationPacketDeletionJob": + case "registrationDeletionJob": packetService.deleteRegistrationPackets(); masterDataService.logLastSyncCompletionDateTime(jobId); Log.i(TAG, "Registration packet deletion job completed"); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java index 3a1b5e4a1..bad4880b2 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/JobManagerServiceImpl.java @@ -204,7 +204,7 @@ private Class getJobServiceImplClass(String jobAPIName) { return ConfigDataSyncJob.class; case "deleteAuditLogsJob": return DeleteAuditLogsJob.class; - case "registrationPacketDeletionJob": + case "registrationDeletionJob": return RegistrationDeletionJob.class; default: return null; From 9392f6acbbb1e0910337eb21b406d40bdd22a22e Mon Sep 17 00:00:00 2001 From: "sachin.sp" Date: Tue, 23 Dec 2025 11:01:01 +0530 Subject: [PATCH 3/5] RCF-1275: reverted the changes Signed-off-by: sachin.sp --- .../registration/clientmanager/service/PacketServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index e2980db34..58db0406c 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -355,9 +355,6 @@ public void deleteRegistrationPackets() { try { String configuredDays = globalParamRepository .getCachedStringGlobalParam(RegistrationConstants.REG_DELETION_CONFIGURED_DAYS); - if (configuredDays == null) { - configuredDays = "10"; // Default to 10 days if not configured - } int days = Integer.parseInt(configuredDays); Calendar cal = Calendar.getInstance(); From 165c0293bdf8de8486711ee2b96a2ec5fdc92000 Mon Sep 17 00:00:00 2001 From: "sachin.sp" Date: Tue, 23 Dec 2025 12:47:08 +0530 Subject: [PATCH 4/5] RCF-1275: reverted the changes Signed-off-by: sachin.sp --- .../clientmanager/constant/RegistrationConstants.java | 2 +- 1 file changed, 1 insertion(+), 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 1d800b398..b9009e81d 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 @@ -112,7 +112,7 @@ public class RegistrationConstants { public static final String RIGHT = "Right"; public static final String LEFT = "Left"; public static final String PRE_REG_DELETION_CONFIGURED_DAYS = "mosip.registration.pre_reg_deletion_configured_days"; - public static final String REG_DELETION_CONFIGURED_DAYS = "mosip.registration.deletion.configured.days"; + public static final String REG_DELETION_CONFIGURED_DAYS = "mosip.registration.reg_deletion_configured_days"; public static final String PRE_REG_DELETE_SUCCESS = "PRE_REG_DELETE_SUCCESS"; public static final String PRE_REG_DELETE_FAILURE = "PRE_REG_DELETE_FAILURE"; public static final String JOB_TRIGGER_POINT_USER = "User"; From d889cd66aeba63fb2447631e33b45c3f632fd6cc Mon Sep 17 00:00:00 2001 From: "sachin.sp" Date: Tue, 23 Dec 2025 12:55:11 +0530 Subject: [PATCH 5/5] RCF-1275: reverted the changes Signed-off-by: sachin.sp --- .../registration/clientmanager/service/PacketServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index dbaf096a4..f7c3d5f30 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -474,6 +474,8 @@ public void deleteRegistrationPackets() { } else { Log.i(TAG, "No registrations found to delete"); } + } catch (NumberFormatException | NullPointerException ex) { + Log.e(TAG, "Invalid or missing REG_DELETION_CONFIGURED_DAYS configuration", ex); } catch (Exception e) { Log.e(TAG, "Error during registration packet deletion", e); }