Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
c341fb5
Phase 1 commit
Jignesh-dimagi Feb 4, 2026
685c9bb
Merge branch 'jignesh/feat/ccct-2053' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 4, 2026
2e480b6
Merge branch 'jignesh/feat/ccct-2053' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 5, 2026
340f286
Made changes to default all models to UUIDs once available
Jignesh-dimagi Feb 6, 2026
e39af9a
Merge branch 'jignesh/feat/ccct-2053' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 6, 2026
719398c
Payment Unit and push notification changes remaining
Jignesh-dimagi Feb 6, 2026
4fcf561
Merge branch 'jignesh/feat/ccct-2053' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 10, 2026
625a9c4
Made the changes, tested by installing old APK
Jignesh-dimagi Feb 11, 2026
3ad73f4
Merge branch 'master' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 11, 2026
f242dff
Merged master and few changes as per comment
Jignesh-dimagi Feb 11, 2026
931fb05
ktlint changed
Jignesh-dimagi Feb 11, 2026
aab5a62
removed the function for DB migration
Jignesh-dimagi Feb 11, 2026
5b4a9f9
Changes as per comment - I
Jignesh-dimagi Feb 17, 2026
3a539d6
Merge branch 'master' into jignesh/feat/ccct-2054
Jignesh-dimagi Feb 17, 2026
1381089
Partial work done
Jignesh-dimagi Feb 17, 2026
6ad7d68
Added job UUID migrations before Pruning old jobs
Jignesh-dimagi Feb 17, 2026
4f8698d
Migration of other modals done before prune, insert and update done
Jignesh-dimagi Feb 18, 2026
48cbf47
Added handle general connect push notification
Jignesh-dimagi Feb 18, 2026
1a51a7a
Merge branch 'jignesh/feat/ccct-2054' into ccct-2070-generic-oppor-pn-2
Jignesh-dimagi Feb 18, 2026
a07aa9c
Merge branch 'ccct-2070-generic-oppor-pn' into ccct-2070-generic-oppo…
Jignesh-dimagi Feb 18, 2026
eb6815a
Almost changes done, final testing remaining
Jignesh-dimagi Feb 20, 2026
6d79a73
Github action failure correction
Jignesh-dimagi Feb 20, 2026
9fe2c03
reverting upload-artifact version to v3
Jignesh-dimagi Feb 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/src/org/commcare/activities/DispatchActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import static org.commcare.connect.ConnectConstants.NOTIFICATION_ID;
import static org.commcare.connect.ConnectConstants.PERSONALID_MANAGED_LOGIN;
import static org.commcare.connect.ConnectConstants.REDIRECT_ACTION;
import static org.commcare.utils.FirebaseMessagingUtil.getActionFromIntent;

import android.content.Intent;
import android.os.Bundle;
Expand Down Expand Up @@ -172,7 +173,7 @@ private void dispatch() {
FirebaseAnalyticsUtil.reportNotificationEvent(
AnalyticsParamValue.NOTIFICATION_EVENT_TYPE_CLICK,
AnalyticsParamValue.REPORT_NOTIFICATION_CLICK_NOTIFICATION_TRAY,
actionType,
getActionFromIntent(pnIntent),
pnIntent.getStringExtra(NOTIFICATION_ID)
);
startActivity(pnIntent);
Expand Down
3 changes: 2 additions & 1 deletion app/src/org/commcare/activities/PushNotificationActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModelProvider
import org.commcare.activities.connect.viewmodel.PushNotificationViewModel
import org.commcare.adapters.PushNotificationAdapter
import org.commcare.android.database.connect.models.PushNotificationRecord
import org.commcare.android.database.connect.models.PushNotificationRecord.Companion.getActionFromRecord
import org.commcare.dalvik.R
import org.commcare.dalvik.databinding.ActivityPushNotificationBinding
import org.commcare.google.services.analytics.AnalyticsParamValue
Expand Down Expand Up @@ -82,7 +83,7 @@ class PushNotificationActivity : CommCareActivity<PushNotificationActivity>() {
FirebaseAnalyticsUtil.reportNotificationEvent(
AnalyticsParamValue.NOTIFICATION_EVENT_TYPE_CLICK,
AnalyticsParamValue.REPORT_NOTIFICATION_CLICK_NOTIFICATION_HISTORY,
notificationRecord.action,
getActionFromRecord(notificationRecord),
notificationRecord.notificationId,
)
val activityIntent = getIntentForPNClick(application, notificationRecord)
Expand Down
32 changes: 22 additions & 10 deletions app/src/org/commcare/activities/connect/ConnectActivity.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package org.commcare.activities.connect;

import static org.commcare.connect.ConnectConstants.CCC_DEST_DELIVERY_PROGRESS;
import static org.commcare.connect.ConnectConstants.CCC_DEST_LEARN_PROGRESS;
import static org.commcare.connect.ConnectConstants.CCC_DEST_PAYMENTS;
import static org.commcare.connect.ConnectConstants.CCC_GENERIC_OPPORTUNITY;
import static org.commcare.connect.ConnectConstants.GO_TO_JOB_STATUS;
import static org.commcare.connect.ConnectConstants.NOTIFICATION_ID;
import static org.commcare.connect.ConnectConstants.OPPORTUNITY_UUID;
import static org.commcare.connect.ConnectConstants.PAYMENT_UUID;
import static org.commcare.connect.ConnectConstants.REDIRECT_ACTION;
import static org.commcare.connect.ConnectConstants.SHOW_LAUNCH_BUTTON;
import static org.commcare.personalId.PersonalIdFeatureFlagChecker.FeatureFlag.NOTIFICATIONS;
import static org.commcare.utils.FirebaseMessagingUtil.getActionFromIntent;
import static org.commcare.utils.NotificationUtil.getNotificationIcon;

import android.content.BroadcastReceiver;
Expand Down Expand Up @@ -123,15 +130,9 @@ private int getStartDestinationId(Bundle startArgs) {

private void initStateFromExtras() {
redirectionAction = getIntent().getStringExtra(REDIRECT_ACTION);
int opportunityId = getIntent().getIntExtra(ConnectConstants.OPPORTUNITY_ID, -1);
if (opportunityId == -1) {
String opportunityIdStr = getIntent().getStringExtra(ConnectConstants.OPPORTUNITY_ID);
if (!StringUtils.isEmpty(opportunityIdStr)) {
opportunityId = Integer.parseInt(opportunityIdStr);
}
}
if(opportunityId != -1) {
job = ConnectJobUtils.getCompositeJob(this, opportunityId);
String opportunityUuid = getIntent().getStringExtra(OPPORTUNITY_UUID);
if (!TextUtils.isEmpty(opportunityUuid)) {
job = ConnectJobUtils.getCompositeJob(this, opportunityUuid);
}
}

Expand All @@ -154,10 +155,21 @@ private int handleSecureRedirect(Bundle startArgs) {
FirebaseAnalyticsUtil.reportNotificationEvent(
AnalyticsParamValue.NOTIFICATION_EVENT_TYPE_CLICK,
AnalyticsParamValue.REPORT_NOTIFICATION_CLICK_NOTIFICATION_TRAY,
redirectionAction,
getActionFromIntent(getIntent()),
notificationId
);
}

if(CCC_GENERIC_OPPORTUNITY.equals(redirectionAction)) {
String paymentId = getIntent().getStringExtra(PAYMENT_UUID);
if (!TextUtils.isEmpty(paymentId) && job!=null && job.getStatus() == ConnectJobRecord.STATUS_DELIVERING) {
redirectionAction = CCC_DEST_PAYMENTS; // Generic push notification for payment related
}else if(job!=null && job.getStatus() == ConnectJobRecord.STATUS_DELIVERING){
redirectionAction = CCC_DEST_DELIVERY_PROGRESS; // Generic push notification for delivery progress related
}else if(job!=null && job.getStatus() == ConnectJobRecord.STATUS_LEARNING){
redirectionAction = CCC_DEST_LEARN_PROGRESS; // Generic push notification for learning progress related
}
}
startArgs.putString(REDIRECT_ACTION, redirectionAction);
startArgs.putBoolean(SHOW_LAUNCH_BUTTON, getIntent().getBooleanExtra(SHOW_LAUNCH_BUTTON, true));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import static org.commcare.connect.ConnectConstants.CCC_MESSAGE;
import static org.commcare.connect.ConnectConstants.NOTIFICATION_ID;
import static org.commcare.connect.ConnectConstants.REDIRECT_ACTION;
import static org.commcare.utils.FirebaseMessagingUtil.getActionFromIntent;

public class ConnectMessagingActivity extends NavigationHostCommCareActivity<ConnectMessagingActivity> {
public static final String CHANNEL_ID = "channel_id";
Expand Down Expand Up @@ -84,7 +85,7 @@ private void handleRedirectIfAny() {
FirebaseAnalyticsUtil.reportNotificationEvent(
AnalyticsParamValue.NOTIFICATION_EVENT_TYPE_CLICK,
AnalyticsParamValue.REPORT_NOTIFICATION_CLICK_NOTIFICATION_TRAY,
action,
getActionFromIntent(getIntent()),
getIntent().getStringExtra(NOTIFICATION_ID)
);
PersonalIdManager.getInstance().unlockConnect(this, success -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public void bind(

// We need the composite job because it has the correct number of deliveries.
ConnectJobRecord compositeJob = ConnectJobUtils
.getCompositeJob(mContext, connectLoginJobListModel.getJob().getJobId());
.getCompositeJob(mContext, connectLoginJobListModel.getJob().getJobUUID());
boolean deliveryComplete = compositeJob != null && compositeJob.deliveryComplete();

int dateRes = deliveryComplete
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,12 @@ public void setName(String name) {
public int getPassingScore() {
return passingScore;
}

public String getJobUUID() {
return jobUUID;
}

public void setJobUUID(String jobUUID) {
this.jobUUID = jobUUID;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ public class ConnectDeliveryDetails {
private long remainingDays;
private String totalAmount;
private double approvedPercentage;
private int unitId;
private String unitUUID;

// Constructor
public ConnectDeliveryDetails(int unitId, String deliveryName, int approvedCount, int pendingCount, String totalAmount,
public ConnectDeliveryDetails(String unitUUID, String deliveryName, int approvedCount, int pendingCount, String totalAmount,
long remainingDays, double approvedPercentage) {
this.unitId = unitId;
this.unitUUID = unitUUID;
this.deliveryName = deliveryName;
this.approvedCount = approvedCount;
this.pendingCount = pendingCount;
Expand Down Expand Up @@ -68,12 +68,4 @@ public double getApprovedPercentage() {
public void setApprovedPercentage(double approvedPercentage) {
this.approvedPercentage = approvedPercentage;
}

public int getUnitId() {
return unitId;
}

public void setUnitId(int unitId) {
this.unitId = unitId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,8 @@ public int getPassingScore() {
public void setLastUpdate(Date date) {
lastUpdate = date;
}

public void setJobUUID(String jobUUID) {
this.jobUUID = jobUUID;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class ConnectJobDeliveryRecord extends Persisted implements Serializable
public static final String META_DATE = "visit_date";
public static final String META_UNIT_NAME = "deliver_unit_name";
public static final String META_SLUG = "deliver_unit_slug";
public static final String META_SLUG_UUID = "deliver_unit_slug_id";
public static final String META_ENTITY_ID = "entity_id";
public static final String META_ENTITY_NAME = "entity_name";
public static final String META_FLAGS = "flags";
Expand All @@ -56,7 +57,7 @@ public class ConnectJobDeliveryRecord extends Persisted implements Serializable
private String unitName;
@Persisting(6)
@MetaField(META_SLUG)
private String slug;
private String slug; // This is payment unit id
@Persisting(7)
@MetaField(META_ENTITY_ID)
private String entityId;
Expand All @@ -73,6 +74,10 @@ public class ConnectJobDeliveryRecord extends Persisted implements Serializable
@MetaField(META_JOB_UUID)
private String jobUUID;

@Persisting(12)
@MetaField(META_SLUG_UUID) // This is payment unit uuid
private String slugUUID;

private List<ConnectJobDeliveryFlagRecord> flags;

public ConnectJobDeliveryRecord() {
Expand All @@ -97,6 +102,7 @@ public static ConnectJobDeliveryRecord fromJson(JSONObject json, ConnectJobRecor
delivery.entityName = json.getString(META_ENTITY_NAME);
delivery.reason = json.getString(META_REASON);
delivery.reason = JsonExtensions.optStringSafe(json, META_REASON,"");
delivery.slugUUID = json.getString(META_SLUG_UUID);

return delivery;
}
Expand Down Expand Up @@ -170,7 +176,7 @@ public static ConnectJobDeliveryRecord fromV2(ConnectJobDeliveryRecordV2 oldReco
return newRecord;
}

public static ConnectJobDeliveryRecord fromV21(ConnectJobDeliveryRecordV21 oldRecord) {
public static ConnectJobDeliveryRecord fromV22(ConnectJobDeliveryRecordV22 oldRecord) {
ConnectJobDeliveryRecord newRecord = new ConnectJobDeliveryRecord();

newRecord.jobId = oldRecord.getJobId();
Expand All @@ -183,7 +189,8 @@ public static ConnectJobDeliveryRecord fromV21(ConnectJobDeliveryRecordV21 oldRe
newRecord.entityName = oldRecord.getEntityName();
newRecord.lastUpdate = oldRecord.getLastUpdate();
newRecord.reason = oldRecord.getReason();
newRecord.jobUUID = String.valueOf(oldRecord.getJobId());
newRecord.jobUUID = oldRecord.getJobUUID();
newRecord.slugUUID = oldRecord.getSlug();

return newRecord;
}
Expand Down Expand Up @@ -232,4 +239,8 @@ public void setFlags(List<ConnectJobDeliveryFlagRecord> flags) {
public void setJobUUID(String jobUUID) {
this.jobUUID = jobUUID;
}

public String getSlugUUID() {
return slugUUID;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package org.commcare.android.database.connect.models

import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_DATE
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_ENTITY_ID
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_ENTITY_NAME
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_ID
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_JOB_ID
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_JOB_UUID
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_REASON
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_SLUG
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_STATUS
import org.commcare.android.database.connect.models.ConnectJobDeliveryRecord.META_UNIT_NAME
import org.commcare.android.storage.framework.Persisted
import org.commcare.models.framework.Persisting
import org.commcare.modern.database.Table
import org.commcare.modern.models.MetaField
import java.io.Serializable
import java.util.Date

@Table(ConnectJobDeliveryRecordV22.STORAGE_KEY)
class ConnectJobDeliveryRecordV22 :
Persisted(),
Serializable {
@Persisting(1)
@MetaField(META_JOB_ID)
var jobId = 0

@Persisting(2)
@MetaField(META_ID)
var deliveryId = 0

@Persisting(3)
@MetaField(META_DATE)
var date: Date? = null

@Persisting(4)
@MetaField(META_STATUS)
var status: String? = null

@Persisting(5)
@MetaField(META_UNIT_NAME)
var unitName: String? = ""

@Persisting(6)
@MetaField(META_SLUG)
var slug: String? = null

@Persisting(7)
@MetaField(META_ENTITY_ID)
var entityId: String? = null

@Persisting(8)
@MetaField(META_ENTITY_NAME)
var entityName: String? = null

@Persisting(9)
var lastUpdate: Date? = null

@Persisting(10)
@MetaField(META_REASON)
var reason: String? = null

@Persisting(11)
@MetaField(META_JOB_UUID)
var jobUUID: String? = null

companion object {
const val STORAGE_KEY = ConnectJobDeliveryRecord.STORAGE_KEY

fun fromV21(oldRecord: ConnectJobDeliveryRecordV21): ConnectJobDeliveryRecordV22 {
val newRecord = ConnectJobDeliveryRecordV22()
newRecord.jobId = oldRecord.jobId
newRecord.deliveryId = oldRecord.deliveryId
newRecord.date = oldRecord.date
newRecord.status = oldRecord.status
newRecord.unitName = oldRecord.unitName
newRecord.slug = oldRecord.slug
newRecord.entityId = oldRecord.entityId
newRecord.entityName = oldRecord.entityName
newRecord.lastUpdate = oldRecord.lastUpdate
newRecord.reason = oldRecord.reason
newRecord.jobUUID = "${oldRecord.jobId}"
return newRecord
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,8 @@ public Date getDate() {
public void setLastUpdate(Date date) {
lastUpdate = date;
}

public void setJobUUID(String jobUUID) {
this.jobUUID = jobUUID;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,6 @@ public static ConnectJobPaymentRecord fromJson(JSONObject json, ConnectJobRecord
return payment;
}

public String getPaymentId() {
return paymentId;
}

public Date getDate() {
return date;
}
Expand Down Expand Up @@ -160,4 +156,12 @@ public boolean allowConfirmUndo() {
long days = TimeUnit.DAYS.convert(millis, TimeUnit.MILLISECONDS);
return days < UNDO_WINDOW_DAYS;
}

public void setJobUUID(String jobUUID) {
this.jobUUID = jobUUID;
}

public String getPaymentUUID() {
return paymentUUID;
}
}
Loading