Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package org.commcare.android.database.connect.models

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 org.javarosa.core.model.utils.DateUtils
import org.javarosa.core.services.Logger
import org.json.JSONException
import org.json.JSONObject
import java.io.Serializable
import java.util.Date

@Table(ConnectReleaseToggleRecord.STORAGE_KEY)
class ConnectReleaseToggleRecord :
Persisted(),
Serializable {
@Persisting(1)
@MetaField(META_SLUG)
var slug: String
private set

@Persisting(2)
@MetaField(META_ACTIVE)
var active: Boolean
private set

@Persisting(3)
@MetaField(META_CREATED_AT)
var createdAt: Date
private set

@Persisting(4)
@MetaField(META_MODIFIED_AT)
var modifiedAt: Date
private set

init {
slug = ""
active = false
createdAt = Date()
modifiedAt = Date()
}

companion object {
// Name of database that stores connect release toggles.
const val STORAGE_KEY = "connect_release_toggles"

const val META_SLUG = "slug"
const val META_ACTIVE = "active"
const val META_CREATED_AT = "created_at"
const val META_MODIFIED_AT = "modified_at"

fun releaseTogglesFromJson(json: JSONObject): List<ConnectReleaseToggleRecord> {
val releaseToggles = mutableListOf<ConnectReleaseToggleRecord>()
val slugKeys = json.keys()

while (slugKeys.hasNext()) {
val slugKey = slugKeys.next()

try {
val releaseToggleJson = json.getJSONObject(slugKey)
releaseToggles.add(releaseToggleFromJson(slugKey, releaseToggleJson))
} catch (e: JSONException) {
Logger.exception("JSONException while retrieving a release toggle", e)
}
}

return releaseToggles
}

@Throws(JSONException::class)
fun releaseToggleFromJson(
slugKey: String,
json: JSONObject,
): ConnectReleaseToggleRecord =
ConnectReleaseToggleRecord().apply {
val createdAtDateString = json.getString(META_CREATED_AT)
val modifiedAtDateString = json.getString(META_MODIFIED_AT)

slug = slugKey
active = json.getBoolean(META_ACTIVE)
createdAt = DateUtils.parseDateTime(createdAtDateString)
modifiedAt = DateUtils.parseDateTime(modifiedAtDateString)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.commcare.android.database.connect.models.ConnectMessagingChannelRecord;
import org.commcare.android.database.connect.models.ConnectMessagingMessageRecord;
import org.commcare.android.database.connect.models.ConnectPaymentUnitRecord;
import org.commcare.android.database.connect.models.ConnectReleaseToggleRecord;
import org.commcare.android.database.connect.models.ConnectUserRecord;
import org.commcare.android.database.connect.models.ConnectUserRecordV13;
import org.commcare.android.database.connect.models.ConnectUserRecordV14;
Expand All @@ -45,7 +46,7 @@ public ConnectDatabaseUpgrader(Context c) {
this.c = c;
}

public void upgrade(IDatabase db, int oldVersion, int newVersion) {
public void upgrade(IDatabase db, int oldVersion) {
if (oldVersion == 1) {
upgradeOneTwo(db);
oldVersion = 2;
Expand Down Expand Up @@ -115,26 +116,35 @@ public void upgrade(IDatabase db, int oldVersion, int newVersion) {
upgradeFourteenFifteen(db);
oldVersion = 15;
}

if (oldVersion == 15) {
upgradeFifteenSixteen(db);
oldVersion = 16;
}

if (oldVersion == 16) {
upgradeSixteenSeventeen(db);
oldVersion = 17;
}

if (oldVersion == 17) {
upgradeSeventeenEighteen(db);
oldVersion = 18;
}

if (oldVersion == 18) {
upgradeEighteenNineteen(db);
oldVersion = 19;
}

if (oldVersion == 19) {
upgradeNineteenTwenty(db);
oldVersion = 20;
}

if (oldVersion == 20) {
upgradeTwentyTwentyOne(db);
}
}

private void upgradeOneTwo(IDatabase db) {
Expand Down Expand Up @@ -671,6 +681,10 @@ private void upgradeNineteenTwenty(IDatabase db) {
}
}

private void upgradeTwentyTwentyOne(IDatabase db) {
addTableForNewModel(db, ConnectReleaseToggleRecord.STORAGE_KEY, new ConnectReleaseToggleRecord());
}

private static void addTableForNewModel(IDatabase db, String storageKey,
Persistable modelToAdd) {
db.beginTransaction();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,16 @@
import org.commcare.android.database.connect.models.ConnectMessagingChannelRecord;
import org.commcare.android.database.connect.models.ConnectMessagingMessageRecord;
import org.commcare.android.database.connect.models.ConnectPaymentUnitRecord;
import org.commcare.android.database.connect.models.ConnectReleaseToggleRecord;
import org.commcare.android.database.connect.models.ConnectUserRecord;
import org.commcare.android.database.connect.models.PersonalIdWorkHistory;
import org.commcare.android.database.connect.models.PushNotificationRecord;
import org.commcare.logging.DataChangeLog;
import org.commcare.logging.DataChangeLogger;
import org.commcare.models.database.IDatabase;
import org.commcare.models.database.DbUtil;
import org.commcare.models.database.EncryptedDatabaseAdapter;
import org.commcare.models.database.user.UserSandboxUtils;
import org.commcare.models.database.IDatabase;
import org.commcare.modern.database.TableBuilder;
import org.commcare.util.Base64;
import org.commcare.util.Base64DecoderException;
import org.commcare.utils.CrashUtil;
import org.javarosa.core.services.Logger;

Expand Down Expand Up @@ -59,12 +57,13 @@ public class DatabaseConnectOpenHelper extends SQLiteOpenHelper {
* V.13 - Added ConnectJobDeliveryFlagRecord table
* V.14 - Added a photo and isDemo field to ConnectUserRecord
* V.16 - Added personal_id_credential table
* V17 - Added a new column has_connect_access to ConnectUserRecord
* V18 - Added new columns to personal_id_credential table (previously the table was unused)
* V.17 - Added a new column has_connect_access to ConnectUserRecord
* V.18 - Added new columns to personal_id_credential table (previously the table was unused)
* V.19 - Added push_notification_history
* V.20 Added acknowledged column in push_notification_history
* V.20 - Added acknowledged column in push_notification_history
* V.21 - Added ConnectReleaseToggleRecord table
*/
private static final int CONNECT_DB_VERSION = 20;
private static final int CONNECT_DB_VERSION = 21;

private static final String CONNECT_DB_LOCATOR = "database_connect";

Expand Down Expand Up @@ -139,6 +138,10 @@ public void onCreate(SQLiteDatabase db) {
builder = new TableBuilder(PushNotificationRecord.class);
database.execSQL(builder.getTableCreateString());

builder = new TableBuilder(ConnectReleaseToggleRecord.class);
builder.setUnique(ConnectReleaseToggleRecord.META_SLUG);
database.execSQL(builder.getTableCreateString());

DbUtil.createNumbersTable(database);

database.setVersion(CONNECT_DB_VERSION);
Expand Down Expand Up @@ -169,7 +172,7 @@ public SQLiteDatabase getWritableDatabase() {
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
DataChangeLogger.log(new DataChangeLog.DbUpgradeStart("Connect", oldVersion, newVersion));
new ConnectDatabaseUpgrader(mContext).upgrade(new EncryptedDatabaseAdapter(db), oldVersion, newVersion);
new ConnectDatabaseUpgrader(mContext).upgrade(new EncryptedDatabaseAdapter(db), oldVersion);
DataChangeLogger.log(new DataChangeLog.DbUpgradeComplete("Connect", oldVersion, newVersion));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,10 @@

import androidx.test.ext.junit.runners.AndroidJUnit4;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.commcare.CommCareTestApplication;
import org.commcare.android.database.user.models.FormRecord;
import org.commcare.android.resource.installers.XFormAndroidInstaller;
import org.commcare.android.util.TestUtils;
import org.commcare.CommCareTestApplication;
import org.commcare.models.AndroidClassHasher;
import org.commcare.models.AndroidPrototypeFactory;
import org.javarosa.core.model.FormDef;
Expand All @@ -29,6 +19,16 @@
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

Expand Down Expand Up @@ -342,67 +342,70 @@ public class FormStorageTest {
// Added in 2.53
"org.javarosa.xpath.expr.XPathDecryptStringFunc",
"org.javarosa.xpath.expr.XPathJsonPropertyFunc",
"org.commcare.suite.model.AndroidPackageDependency"
"org.commcare.suite.model.AndroidPackageDependency",

// Added in 2.54
, "org.commcare.suite.model.QueryPromptCondition"
, "org.commcare.suite.model.MultiSelectEntityDatum"
, "org.commcare.suite.model.ListQueryData"
, "org.commcare.suite.model.ValueQueryData"
, "org.javarosa.core.util.externalizable.ExtWrapMultiMap"
, "org.javarosa.core.model.instance.ExternalDataInstanceSource"
, "org.commcare.suite.model.DetailGroup"
, "org.commcare.services.FCMMessageData"
, "org.commcare.suite.model.EndpointArgument"
, "org.commcare.suite.model.EndpointAction"
, "org.commcare.suite.model.QueryGroup"
"org.commcare.suite.model.QueryPromptCondition",
"org.commcare.suite.model.MultiSelectEntityDatum",
"org.commcare.suite.model.ListQueryData",
"org.commcare.suite.model.ValueQueryData",
"org.javarosa.core.util.externalizable.ExtWrapMultiMap",
"org.javarosa.core.model.instance.ExternalDataInstanceSource",
"org.commcare.suite.model.DetailGroup",
"org.commcare.services.FCMMessageData",
"org.commcare.suite.model.EndpointArgument",
"org.commcare.suite.model.EndpointAction",
"org.commcare.suite.model.QueryGroup",

// Added in 2.55
, "org.javarosa.core.model.FormIndex"
, "org.commcare.models.database.InterruptedFormState"
, "org.commcare.android.database.connect.models.ConnectLinkedAppRecordV3"
, "org.commcare.android.database.connect.models.ConnectLinkedAppRecordV8"
, "org.commcare.android.database.connect.models.ConnectLinkedAppRecordV9"
, "org.commcare.android.database.connect.models.ConnectLinkedAppRecord"
, "org.commcare.android.database.connect.models.ConnectUserRecordV5"
, "org.commcare.android.database.connect.models.ConnectUserRecord"
, "org.commcare.android.database.connect.models.ConnectAppRecord"
, "org.commcare.android.database.connect.models.ConnectJobDeliveryRecordV2"
, "org.commcare.android.database.connect.models.ConnectJobDeliveryRecord"
, "org.commcare.android.database.connect.models.ConnectJobPaymentRecordV3"
, "org.commcare.android.database.connect.models.ConnectJobPaymentRecord"
, "org.commcare.android.database.connect.models.ConnectJobRecordV2"
, "org.commcare.android.database.connect.models.ConnectJobRecordV4"
, "org.commcare.android.database.connect.models.ConnectJobRecordV7"
, "org.commcare.android.database.connect.models.ConnectJobRecordV10"
, "org.commcare.android.database.connect.models.ConnectJobRecord"
, "org.commcare.android.database.connect.models.ConnectLearnModuleSummaryRecord"
, "org.commcare.android.database.connect.models.ConnectJobLearningRecord"
, "org.commcare.android.database.connect.models.ConnectJobAssessmentRecord"
, "org.commcare.android.database.global.models.ConnectKeyRecord"
, "org.commcare.android.database.global.models.ConnectKeyRecordV6"
, "org.commcare.android.database.connect.models.ConnectPaymentUnitRecord"

//Added in 2.56
, "org.commcare.android.database.connect.models.ConnectMessagingChannelRecord"
, "org.commcare.android.database.connect.models.ConnectMessagingMessageRecord"
, "org.commcare.android.database.connect.models.ConnectJobDeliveryFlagRecord"

//Added in 2.57
, "org.javarosa.xpath.expr.XPathClosestPointOnPolygonFunc"
, "org.javarosa.xpath.expr.XPathIsPointInsidePolygonFunc"
, "org.commcare.android.database.connect.models.ConnectUserRecordV13"
, "org.commcare.android.database.global.models.GlobalErrorRecord"

,"org.commcare.android.database.connect.models.ConnectUserRecordV14"

//Added in 2.58
,"org.commcare.android.database.connect.models.PersonalIdWorkHistory"
,"org.commcare.android.database.connect.models.ConnectUserRecordV16"
, "org.commcare.android.database.connect.models.PushNotificationRecord"

//Added in 2.60
,"org.commcare.suite.model.Credential"
"org.javarosa.core.model.FormIndex",
"org.commcare.models.database.InterruptedFormState",
"org.commcare.android.database.connect.models.ConnectLinkedAppRecordV3",
"org.commcare.android.database.connect.models.ConnectLinkedAppRecordV8",
"org.commcare.android.database.connect.models.ConnectLinkedAppRecordV9",
"org.commcare.android.database.connect.models.ConnectLinkedAppRecord",
"org.commcare.android.database.connect.models.ConnectUserRecordV5",
"org.commcare.android.database.connect.models.ConnectUserRecord",
"org.commcare.android.database.connect.models.ConnectAppRecord",
"org.commcare.android.database.connect.models.ConnectJobDeliveryRecordV2",
"org.commcare.android.database.connect.models.ConnectJobDeliveryRecord",
"org.commcare.android.database.connect.models.ConnectJobPaymentRecordV3",
"org.commcare.android.database.connect.models.ConnectJobPaymentRecord",
"org.commcare.android.database.connect.models.ConnectJobRecordV2",
"org.commcare.android.database.connect.models.ConnectJobRecordV4",
"org.commcare.android.database.connect.models.ConnectJobRecordV7",
"org.commcare.android.database.connect.models.ConnectJobRecordV10",
"org.commcare.android.database.connect.models.ConnectJobRecord",
"org.commcare.android.database.connect.models.ConnectLearnModuleSummaryRecord",
"org.commcare.android.database.connect.models.ConnectJobLearningRecord",
"org.commcare.android.database.connect.models.ConnectJobAssessmentRecord",
"org.commcare.android.database.global.models.ConnectKeyRecord",
"org.commcare.android.database.global.models.ConnectKeyRecordV6",
"org.commcare.android.database.connect.models.ConnectPaymentUnitRecord",

// Added in 2.56
"org.commcare.android.database.connect.models.ConnectMessagingChannelRecord",
"org.commcare.android.database.connect.models.ConnectMessagingMessageRecord",
"org.commcare.android.database.connect.models.ConnectJobDeliveryFlagRecord",

// Added in 2.57
"org.javarosa.xpath.expr.XPathClosestPointOnPolygonFunc",
"org.javarosa.xpath.expr.XPathIsPointInsidePolygonFunc",
"org.commcare.android.database.connect.models.ConnectUserRecordV13",
"org.commcare.android.database.global.models.GlobalErrorRecord",

"org.commcare.android.database.connect.models.ConnectUserRecordV14",

// Added in 2.58
"org.commcare.android.database.connect.models.PersonalIdWorkHistory",
"org.commcare.android.database.connect.models.ConnectUserRecordV16",
"org.commcare.android.database.connect.models.PushNotificationRecord",

// Added in 2.60
"org.commcare.suite.model.Credential",

// Added in 2.62
"org.commcare.android.database.connect.models.ConnectReleaseToggleRecord"
);


Expand Down