private static void save() { SharedPreferences prefs = ApptentiveInternal.getInstance().getGlobalSharedPrefs(); JSONArray baseArray = getBaseArray(); if (baseArray != null) { prefs.edit().putString(Constants.PREF_KEY_VERSION_HISTORY_V2, baseArray.toString()).apply(); } }
public static void migrateV1ToV2(String oldFormat) { ApptentiveLog.i(CONVERSATION, "Migrating VersionHistoryStore V1 to V2."); ApptentiveLog.i(CONVERSATION, "V1: %s", oldFormat); try { String[] entriesOld = oldFormat.split(OLD_ENTRY_SEP); for (String entryOld : entriesOld) { String[] entryPartsOld = entryOld.split(OLD_FIELD_SEP); try { VersionHistoryStore.updateVersionHistory( Integer.parseInt(entryPartsOld[OLD_POSITION_VERSION_CODE]), entryPartsOld[OLD_POSITION_VERSION_NAME], Double.parseDouble(entryPartsOld[OLD_POSITION_TIMESTAMP]) ); } catch (Exception e) { ApptentiveLog.w(CONVERSATION, "Error migrating old version history entry: %s", entryOld); logException(e); } } ApptentiveLog.i(CONVERSATION, "V2: %s", VersionHistoryStore.getBaseArray().toString()); } catch (Exception e) { ApptentiveLog.w(CONVERSATION, "Error migrating old version history entries: %s", oldFormat); logException(e); } }
private void migrateVersionHistory() { // An existing static initializer will trigger the V1 to V2 migration of VersionHistory when VersionHistoryStore is loaded below. // Then migrate to V3, which is stored in the Conversation object. JSONArray versionHistoryOld = VersionHistoryStore.getBaseArray(); try { if (versionHistoryOld != null && versionHistoryOld.length() > 0) { VersionHistory versionHistory = conversation.getVersionHistory(); for (int i = 0; i < versionHistoryOld.length(); i++) { VersionHistoryEntry versionHistoryEntryOld = new VersionHistoryEntry((JSONObject) versionHistoryOld.get(i)); versionHistory.updateVersionHistory(versionHistoryEntryOld.getTimestamp(), versionHistoryEntryOld.getVersionCode(), versionHistoryEntryOld.getVersionName()); } } } catch (Exception e) { ApptentiveLog.w(CONVERSATION, e, "Error migrating VersionHistory entries V2 to V3."); logException(e); } }
@Test public void testVersionHistoryStoreOrdering() { try { JSONArray expected = new JSONArray(loadTextAssetAsString("model/versionHistoryStore.json")); VersionHistoryStore.updateVersionHistory(1, "3.3.0", 1.472853954087E9d); VersionHistoryStore.updateVersionHistory(2, "3.3.1", 1.472854098019E9d); JSONArray result = VersionHistoryStore.getBaseArray(); boolean equal = JsonDiffer.areObjectsEqual(result, expected); if (!equal) { ApptentiveLog.e("Expected:\n%s", expected); ApptentiveLog.e("Result:\n%s", result); } assertTrue("VersionHistoryStore failed to maintain version history order.", equal); } catch (JSONException e) { assertNull(e); throw new RuntimeException("Error processing JSON in test.", e); } }
@Test public void testVersionHistoryStoreMigration() { String oldFormat = loadTextAssetAsString("model/versionHistoryStoreOld.txt"); VersionHistoryStoreMigrator.migrateV1ToV2(oldFormat); try { JSONArray expected = new JSONArray(loadTextAssetAsString("model/versionHistoryStore.json")); JSONArray result = VersionHistoryStore.getBaseArray(); boolean equal = JsonDiffer.areObjectsEqual(result, expected); if (!equal) { ApptentiveLog.e("Expected:\n%s", expected); ApptentiveLog.e("Result:\n%s", result); } assertTrue("VersionHistoryStoreMigrator migrated incorrectly.", equal); } catch (JSONException e) { assertNull(e); throw new RuntimeException("Error processing JSON in test.", e); } }