static void performMigrationIfNeeded() { performMigrationIfNeededV1ToV2(); }
private static void performMigrationIfNeededV1ToV2() { if (migrated_to_v2) { return; } if (ApptentiveInternal.isApptentiveRegistered()) { SharedPreferences prefs = ApptentiveInternal.getInstance().getGlobalSharedPrefs(); if (prefs != null) { migrated_to_v2 = prefs.getBoolean(Constants.PREF_KEY_VERSION_HISTORY_V2_MIGRATED, false); if (migrated_to_v2) { return; } String versionHistoryStoreOldString = prefs.getString(Constants.PREF_KEY_VERSION_HISTORY, null); VersionHistoryStoreMigrator.migrateV1ToV2(versionHistoryStoreOldString); prefs.edit().putBoolean(Constants.PREF_KEY_VERSION_HISTORY_V2_MIGRATED, true).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); } }
@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); } }