From 00705447ec9b960163ed150465c2b10cfd7bcddd Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Tue, 18 Jun 2019 13:39:01 +0100
Subject: [PATCH] Use feature flag to decide which version to advertise.

---
 .../test/BrambleCoreIntegrationTestModule.java | 18 ++++++++++++++++++
 .../briar/messaging/MessagingModule.java       |  9 ++++++---
 .../briar/headless/HeadlessModule.kt           |  6 ++++++
 .../briar/headless/HeadlessTestModule.kt       |  6 ++++++
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleCoreIntegrationTestModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleCoreIntegrationTestModule.java
index ab30c90a65..8b06bc4169 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleCoreIntegrationTestModule.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleCoreIntegrationTestModule.java
@@ -1,9 +1,11 @@
 package org.briarproject.bramble.test;
 
+import org.briarproject.bramble.api.FeatureFlags;
 import org.briarproject.bramble.battery.DefaultBatteryManagerModule;
 import org.briarproject.bramble.event.DefaultEventExecutorModule;
 
 import dagger.Module;
+import dagger.Provides;
 
 @Module(includes = {
 		DefaultBatteryManagerModule.class,
@@ -13,4 +15,20 @@ import dagger.Module;
 		TestSecureRandomModule.class
 })
 public class BrambleCoreIntegrationTestModule {
+
+	@Provides
+	FeatureFlags provideFeatureFlags() {
+		return new FeatureFlags() {
+
+			@Override
+			public boolean shouldEnableImageAttachments() {
+				return true;
+			}
+
+			@Override
+			public boolean shouldEnableRemoteContacts() {
+				return true;
+			}
+		};
+	}
 }
diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
index c9a55cff8e..17b77ef390 100644
--- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
+++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
@@ -1,5 +1,6 @@
 package org.briarproject.briar.messaging;
 
+import org.briarproject.bramble.api.FeatureFlags;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.data.BdfReaderFactory;
 import org.briarproject.bramble.api.data.MetadataEncoder;
@@ -19,7 +20,6 @@ import dagger.Provides;
 
 import static org.briarproject.briar.api.messaging.MessagingManager.CLIENT_ID;
 import static org.briarproject.briar.api.messaging.MessagingManager.MAJOR_VERSION;
-import static org.briarproject.briar.api.messaging.MessagingManager.MINOR_VERSION;
 
 @Module
 public class MessagingModule {
@@ -57,14 +57,17 @@ public class MessagingModule {
 			ContactManager contactManager, ValidationManager validationManager,
 			ConversationManager conversationManager,
 			ClientVersioningManager clientVersioningManager,
-			MessagingManagerImpl messagingManager) {
+			FeatureFlags featureFlags, MessagingManagerImpl messagingManager) {
 		lifecycleManager.registerOpenDatabaseHook(messagingManager);
 		contactManager.registerContactHook(messagingManager);
 		validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
 				messagingManager);
 		conversationManager.registerConversationClient(messagingManager);
+		// Advertise the current or previous minor version depending on the
+		// feature flag
+		int minorVersion = featureFlags.shouldEnableImageAttachments() ? 1 : 0;
 		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
-				MINOR_VERSION, messagingManager);
+				minorVersion, messagingManager);
 		return messagingManager;
 	}
 
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt
index 1a4c2a4b0c..af765e114e 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt
@@ -3,6 +3,7 @@ package org.briarproject.briar.headless
 import com.fasterxml.jackson.databind.ObjectMapper
 import dagger.Module
 import dagger.Provides
+import org.briarproject.bramble.api.FeatureFlags
 import org.briarproject.bramble.api.battery.BatteryManager
 import org.briarproject.bramble.api.db.DatabaseConfig
 import org.briarproject.bramble.api.event.EventBus
@@ -94,4 +95,9 @@ internal class HeadlessModule(private val appDir: File) {
     @Singleton
     internal fun provideObjectMapper() = ObjectMapper()
 
+    @Provides
+    internal fun provideFeatureFlags() = object : FeatureFlags {
+        override fun shouldEnableImageAttachments() = false
+        override fun shouldEnableRemoteContacts() = true
+    }
 }
diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt
index c8f2b7d21d..160efd8f07 100644
--- a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt
+++ b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt
@@ -3,6 +3,7 @@ package org.briarproject.briar.headless
 import com.fasterxml.jackson.databind.ObjectMapper
 import dagger.Module
 import dagger.Provides
+import org.briarproject.bramble.api.FeatureFlags
 import org.briarproject.bramble.api.db.DatabaseConfig
 import org.briarproject.bramble.api.plugin.PluginConfig
 import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory
@@ -61,4 +62,9 @@ internal class HeadlessTestModule(private val appDir: File) {
     @Singleton
     internal fun provideObjectMapper() = ObjectMapper()
 
+    @Provides
+    internal fun provideFeatureFlags() = object : FeatureFlags {
+        override fun shouldEnableImageAttachments() = false
+        override fun shouldEnableRemoteContacts() = true
+    }
 }
-- 
GitLab