diff --git a/sift/src/main/java/siftscience/android/Sift.java b/sift/src/main/java/siftscience/android/Sift.java index 758ec88..7c3eaca 100644 --- a/sift/src/main/java/siftscience/android/Sift.java +++ b/sift/src/main/java/siftscience/android/Sift.java @@ -70,12 +70,15 @@ public static void open(@NonNull Context context, appStateCollector = new AppStateCollector(instance, c); unboundUserId = null; hasUnboundUserId = false; + } else { + if (config != null) { + instance.setConfig(config); + } } } appStateCollector.setActivityName(activityName == null ? context.getClass().getSimpleName() : activityName); - } public static void open(@NonNull Context context, String activityName) { diff --git a/sift/src/main/java/siftscience/android/SiftImpl.java b/sift/src/main/java/siftscience/android/SiftImpl.java index 8fa37c1..59c8bde 100644 --- a/sift/src/main/java/siftscience/android/SiftImpl.java +++ b/sift/src/main/java/siftscience/android/SiftImpl.java @@ -271,10 +271,12 @@ public UnarchiveTask(boolean hasUnboundUserId) { public void run() { String archive; - // Unarchive Sift config - archive = archives.getString(ArchiveKey.CONFIG.key, null); - config = unarchiveConfig(archive); - Log.d(TAG, String.format("Unarchived Sift.Config: %s", archive)); + // Unarchive Sift config if we don't have one + if (config == null) { + archive = archives.getString(ArchiveKey.CONFIG.key, null); + config = unarchiveConfig(archive); + Log.d(TAG, String.format("Unarchived Sift.Config: %s", archive)); + } // Unarchive User ID if we didn't have an unbound one from the Sift class if (!this.hasUnboundUserId) { @@ -282,8 +284,6 @@ public void run() { Log.d(TAG, String.format("Unarchived User ID: %s", userId)); } - - // Unarchive Queues for (Map.Entry entry : archives.getAll().entrySet()) { String identifier = ArchiveKey.getQueueIdentifier(entry.getKey()); diff --git a/sift/src/test/java/siftscience/android/SiftTest.java b/sift/src/test/java/siftscience/android/SiftTest.java index 4997d5c..1862f90 100644 --- a/sift/src/test/java/siftscience/android/SiftTest.java +++ b/sift/src/test/java/siftscience/android/SiftTest.java @@ -209,6 +209,43 @@ public void testSift() throws Exception { assertTrue(preferences.fields.isEmpty()); } + @Test + public void testConfigPrecedence() { + MemorySharedPreferences preferences = new MemorySharedPreferences(); + + Sift.Config c1 = new Sift.Config.Builder().withAccountId("sandbox").build(); + Sift.Config c2 = new Sift.Config.Builder().withAccountId("prod").build(); + + MemorySharedPreferences.Editor editor = preferences.edit(); + editor.putString("config", Sift.GSON.toJson(c1)); + editor.apply(); + + SiftImpl sift = new SiftImpl( + mockContext(preferences), c2, "", false, mockTaskManager()); + + assertEquals(c2.accountId, sift.getConfig().accountId); + + sift.setConfig(c1); + + assertEquals(c1.accountId, sift.getConfig().accountId); + } + + @Test + public void testConfigFallback() { + MemorySharedPreferences preferences = new MemorySharedPreferences(); + + Sift.Config c1 = new Sift.Config.Builder().withAccountId("sandbox").build(); + + MemorySharedPreferences.Editor editor = preferences.edit(); + editor.putString("config", Sift.GSON.toJson(c1)); + editor.apply(); + + SiftImpl sift = new SiftImpl( + mockContext(preferences), null, "", false, mockTaskManager()); + + assertEquals(c1.accountId, sift.getConfig().accountId); + } + @Test public void testUnarchiveUnknownProperty() throws IOException { String jsonAsString =