From 3828d16971645e140051f24aa914cfd063d3d4e8 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Tue, 18 Jun 2019 10:52:21 +0100 Subject: [PATCH] Use injection to provide feature flags. --- .../briarproject/bramble/api/FeatureFlags.java | 11 +++++++++++ .../briar/android/AndroidComponent.java | 3 +++ .../briarproject/briar/android/AppModule.java | 18 ++++++++++++++++++ .../briar/android/TestingConstants.java | 11 ----------- .../android/contact/ContactListFragment.java | 6 ++++-- .../conversation/ConversationActivity.java | 6 ++++-- 6 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java b/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java new file mode 100644 index 0000000000..d30da78f29 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/FeatureFlags.java @@ -0,0 +1,11 @@ +package org.briarproject.bramble.api; + +/** + * Interface for specifying which features are enabled in a build. + */ +public interface FeatureFlags { + + boolean shouldEnableImageAttachments(); + + boolean shouldEnableRemoteContacts(); +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java index e2473e8469..f718118262 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.BrambleAndroidModule; import org.briarproject.bramble.BrambleCoreEagerSingletons; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.bramble.account.BriarAccountModule; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.account.AccountManager; import org.briarproject.bramble.api.contact.ContactExchangeManager; import org.briarproject.bramble.api.contact.ContactManager; @@ -161,6 +162,8 @@ public interface AndroidComponent ViewModelProvider.Factory viewModelFactory(); + FeatureFlags featureFlags(); + void inject(SignInReminderReceiver briarService); void inject(BriarService briarService); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index 55e966549f..f544030b16 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -7,6 +7,7 @@ import android.os.StrictMode; import com.vanniktech.emoji.RecentEmoji; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.crypto.PublicKey; @@ -59,6 +60,7 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX; +import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; @Module(includes = {ContactExchangeModule.class, ViewModelModule.class}) public class AppModule { @@ -230,4 +232,20 @@ public class AppModule { lifecycleManager.registerOpenDatabaseHook(recentEmoji); return recentEmoji; } + + @Provides + FeatureFlags provideFeatureFlags() { + return new FeatureFlags() { + + @Override + public boolean shouldEnableImageAttachments() { + return IS_DEBUG_BUILD; + } + + @Override + public boolean shouldEnableRemoteContacts() { + return IS_DEBUG_BUILD; + } + }; + } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java index e84fbe7ed1..e3b970dc9c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java @@ -30,15 +30,4 @@ public interface TestingConstants { long EXPIRY_DATE = IS_DEBUG_BUILD || IS_BETA_BUILD ? BuildConfig.BuildTimestamp + 90 * 24 * 60 * 60 * 1000L : Long.MAX_VALUE; - - /** - * Feature flag for enabling image attachments. - */ - boolean FEATURE_FLAG_IMAGE_ATTACHMENTS = IS_DEBUG_BUILD; - - /** - * Feature flag for enabling adding contacts at a distance. - */ - boolean FEATURE_FLAG_REMOTE_CONTACTS = IS_DEBUG_BUILD; - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 07ed8d8c49..7b5f1b5233 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -14,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactManager; @@ -67,7 +68,6 @@ import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.util.LogUtils.logDuration; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; -import static org.briarproject.briar.android.TestingConstants.FEATURE_FLAG_REMOTE_CONTACTS; import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID; import static org.briarproject.briar.android.util.UiUtils.isSamsung7; @@ -85,6 +85,8 @@ public class ContactListFragment extends BaseFragment implements EventListener, EventBus eventBus; @Inject AndroidNotificationManager notificationManager; + @Inject + FeatureFlags featureFlags; private ContactListAdapter adapter; private BriarRecyclerView list; @@ -124,7 +126,7 @@ public class ContactListFragment extends BaseFragment implements EventListener, container, false); FabSpeedDial speedDial = contentView.findViewById(R.id.speedDial); - if (FEATURE_FLAG_REMOTE_CONTACTS) { + if (featureFlags.shouldEnableRemoteContacts()) { speedDial.addOnMenuItemClickListener(this); } else { speedDial.setMenu(new FabSpeedDialMenu(contentView.getContext())); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java index dfbddcd7ac..e8dac0f320 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java @@ -29,6 +29,7 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactManager; @@ -119,7 +120,6 @@ import static org.briarproject.bramble.util.LogUtils.logDuration; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty; -import static org.briarproject.briar.android.TestingConstants.FEATURE_FLAG_IMAGE_ATTACHMENTS; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_ATTACH_IMAGE; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_INTRODUCTION; import static org.briarproject.briar.android.conversation.ImageActivity.ATTACHMENTS; @@ -156,6 +156,8 @@ public class ConversationActivity extends BriarActivity Executor cryptoExecutor; @Inject ViewModelProvider.Factory viewModelFactory; + @Inject + FeatureFlags featureFlags; // Fields that are accessed from background threads must be volatile @Inject @@ -262,7 +264,7 @@ public class ConversationActivity extends BriarActivity list.getRecyclerView().addOnScrollListener(scrollListener); textInputView = findViewById(R.id.text_input_container); - if (FEATURE_FLAG_IMAGE_ATTACHMENTS) { + if (featureFlags.shouldEnableImageAttachments()) { ImagePreview imagePreview = findViewById(R.id.imagePreview); sendController = new TextAttachmentController(textInputView, imagePreview, this, this, viewModel); -- GitLab