Rename FeatureFlags -> RemoteConfig.

This commit is contained in:
Greyson Parrelli
2024-06-12 14:58:39 -04:00
parent ecbea9fd95
commit d698f74d0b
136 changed files with 460 additions and 478 deletions

View File

@@ -98,7 +98,7 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper;
import org.thoughtcrime.securesms.util.AppForegroundObserver;
import org.thoughtcrime.securesms.util.AppStartup;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.SignalLocalMetrics;
import org.thoughtcrime.securesms.util.SignalUncaughtExceptionHandler;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -144,7 +144,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
long startTime = System.currentTimeMillis();
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
Tracer.getInstance().setMaxBufferSize(35_000);
}
@@ -179,7 +179,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
}
})
.addBlocking("blob-provider", this::initializeBlobProvider)
.addBlocking("feature-flags", FeatureFlags::init)
.addBlocking("remote-config", RemoteConfig::init)
.addBlocking("ring-rtc", this::initializeRingRtc)
.addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents()))
.addNonBlocking(() -> RegistrationUtil.maybeMarkRegistrationComplete())
@@ -207,7 +207,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
.addPostRender(RefreshSvrCredentialsJob::enqueueIfNecessary)
.addPostRender(() -> DownloadLatestEmojiDataJob.scheduleIfNecessary(this))
.addPostRender(EmojiSearchIndexDownloadJob::scheduleIfNecessary)
.addPostRender(() -> SignalDatabase.messageLog().trimOldMessages(System.currentTimeMillis(), FeatureFlags.retryRespondMaxAge()))
.addPostRender(() -> SignalDatabase.messageLog().trimOldMessages(System.currentTimeMillis(), RemoteConfig.retryRespondMaxAge()))
.addPostRender(() -> JumboEmoji.updateCurrentVersion(this))
.addPostRender(RetrieveRemoteAnnouncementsJob::enqueue)
.addPostRender(() -> AndroidTelecomUtil.registerPhoneAccount())
@@ -243,7 +243,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
startAnrDetector();
SignalExecutors.BOUNDED.execute(() -> {
FeatureFlags.refreshIfNecessary();
RemoteConfig.refreshIfNecessary();
RetrieveProfileJob.enqueueRoutineFetchIfNecessary();
executePendingContactSync();
KeyCachingService.onAppForegrounded(this);
@@ -289,7 +289,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
* This is so we can capture ANR's that happen on boot before the foreground event.
*/
private void startAnrDetector() {
AnrDetector.start(TimeUnit.SECONDS.toMillis(5), FeatureFlags::internalUser, (dumps) -> {
AnrDetector.start(TimeUnit.SECONDS.toMillis(5), RemoteConfig::internalUser, (dumps) -> {
LogDatabase.getInstance(this).anrs().save(System.currentTimeMillis(), dumps);
return Unit.INSTANCE;
});
@@ -314,7 +314,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
@VisibleForTesting
protected void initializeLogging() {
Log.initialize(FeatureFlags::internalUser, new AndroidLogger(), new PersistentLogger(this));
Log.initialize(RemoteConfig::internalUser, new AndroidLogger(), new PersistentLogger(this));
SignalProtocolLoggerProvider.setProvider(new CustomSignalProtocolLogger());
@@ -437,7 +437,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
private void initializeRingRtc() {
try {
Map<String, String> fieldTrials = new HashMap<>();
if (FeatureFlags.callingFieldTrialAnyAddressPortsKillSwitch()) {
if (RemoteConfig.callingFieldTrialAnyAddressPortsKillSwitch()) {
fieldTrials.put("RingRTC-AnyAddressPortsKillSwitch", "Enabled");
}
if (!SignalStore.internalValues().callingDisableLBRed()) {

View File

@@ -29,14 +29,10 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.components.ContactFilterView;
import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode;
import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.DisplayMetricsUtil;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.Util;
import java.io.IOException;
import java.lang.ref.WeakReference;

View File

@@ -33,7 +33,7 @@ import org.thoughtcrime.securesms.registration.v2.ui.RegistrationV2Activity;
import org.thoughtcrime.securesms.restore.RestoreActivity;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.util.AppStartup;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.Locale;
@@ -189,7 +189,7 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
}
private boolean userCanTransferOrRestore() {
return !SignalStore.registrationValues().isRegistrationComplete() && FeatureFlags.restoreAfterRegistration() && !SignalStore.registrationValues().hasSkippedTransferOrRestore();
return !SignalStore.registrationValues().isRegistrationComplete() && RemoteConfig.restoreAfterRegistration() && !SignalStore.registrationValues().hasSkippedTransferOrRestore();
}
private boolean userMustCreateSignalPin() {
@@ -222,7 +222,7 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
}
private Intent getPushRegistrationIntent() {
if (FeatureFlags.registrationV2()) {
if (RemoteConfig.registrationV2()) {
return RegistrationV2Activity.newIntentForNewRegistration(this, getIntent());
} else {
return RegistrationNavigationActivity.newIntentForNewRegistration(this, getIntent());
@@ -269,7 +269,7 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
}
private Intent getChangeNumberLockIntent() {
if (FeatureFlags.registrationV2()) {
if (RemoteConfig.registrationV2()) {
return ChangeNumberLockV2Activity.createIntent(this);
} else {
return ChangeNumberLockActivity.createIntent(this);

View File

@@ -94,7 +94,7 @@ import org.thoughtcrime.securesms.service.webrtc.SignalCallManager;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.EllapsedTimeFormatter;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.FullscreenHelper;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ThrottledDebouncer;
@@ -415,7 +415,7 @@ public class WebRtcCallActivity extends BaseActivity implements SafetyNumberChan
}
private void initializePendingParticipantFragmentListener() {
if (!FeatureFlags.adHocCalling()) {
if (!RemoteConfig.adHocCalling()) {
return;
}
@@ -822,7 +822,7 @@ public class WebRtcCallActivity extends BaseActivity implements SafetyNumberChan
}
public void handleGroupMemberCountChange(int count) {
boolean canRing = count <= FeatureFlags.maxGroupCallRingSize();
boolean canRing = count <= RemoteConfig.maxGroupCallRingSize();
callScreen.enableRingGroup(canRing);
AppDependencies.getSignalCallManager().setRingGroup(canRing);
}

View File

@@ -14,13 +14,13 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.lock.v2.PinKeyboardType
import org.thoughtcrime.securesms.lock.v2.SvrConstants
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.kbs.PinHashUtil.verifyLocalPinHash
class MessageBackupsFlowViewModel : ViewModel() {
private val internalState = mutableStateOf(
MessageBackupsFlowState(
availableBackupTiers = if (!FeatureFlags.messageBackups) {
availableBackupTiers = if (!RemoteConfig.messageBackups) {
emptyList()
} else {
listOf(MessageBackupTier.FREE, MessageBackupTier.PAID)

View File

@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.database.DatabaseObserver
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import java.net.URLDecoder
/**
@@ -54,7 +54,7 @@ object CallLinks {
@JvmStatic
fun isCallLink(url: String): Boolean {
if (!FeatureFlags.adHocCalling) {
if (!RemoteConfig.adHocCalling) {
return false
}
@@ -67,7 +67,7 @@ object CallLinks {
@JvmStatic
fun parseUrl(url: String): CallLinkRootKey? {
if (!FeatureFlags.adHocCalling) {
if (!RemoteConfig.adHocCalling) {
return null
}

View File

@@ -62,7 +62,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.stories.tabs.ConversationListTab
import org.thoughtcrime.securesms.stories.tabs.ConversationListTabsViewModel
import org.thoughtcrime.securesms.util.CommunicationActions
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.doAfterNextLayout
import org.thoughtcrime.securesms.util.fragments.requireListener
@@ -253,7 +253,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
MaterialAlertDialogBuilder(requireContext())
.setTitle(resources.getQuantityString(R.plurals.CallLogFragment__delete_d_calls, count, count))
.setMessage(
if (FeatureFlags.adHocCalling) {
if (RemoteConfig.adHocCalling) {
getString(R.string.CallLogFragment__call_links_youve_created)
} else {
null
@@ -403,7 +403,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
MaterialAlertDialogBuilder(requireContext())
.setTitle(resources.getQuantityString(R.plurals.CallLogFragment__delete_d_calls, 1, 1))
.setMessage(
if (FeatureFlags.adHocCalling) {
if (RemoteConfig.adHocCalling) {
getString(R.string.CallLogFragment__call_links_youve_created)
} else {
null

View File

@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.calls.log
import org.signal.paging.PagedDataSource
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
class CallLogPagedDataSource(
private val query: String?,
@@ -10,7 +10,7 @@ class CallLogPagedDataSource(
) : PagedDataSource<CallLogRow.Id, CallLogRow> {
private val hasFilter = filter == CallLogFilter.MISSED
private val hasCallLinkRow = FeatureFlags.adHocCalling && filter == CallLogFilter.ALL && query.isNullOrEmpty()
private val hasCallLinkRow = RemoteConfig.adHocCalling && filter == CallLogFilter.ALL && query.isNullOrEmpty()
private var callEventsCount = 0
private var callLinksCount = 0

View File

@@ -16,7 +16,7 @@ import org.signal.paging.PagedData
import org.signal.paging.PagingConfig
import org.signal.paging.ProxyPagingController
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.rx.RxStore
import java.util.concurrent.TimeUnit
@@ -82,7 +82,7 @@ class CallLogViewModel(
controller.onDataInvalidated()
}
if (FeatureFlags.adHocCalling) {
if (RemoteConfig.adHocCalling) {
disposables += Observable
.interval(30, TimeUnit.SECONDS, Schedulers.computation())
.flatMapCompletable { callLogRepository.peekCallLinks() }

View File

@@ -32,7 +32,7 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
/**
@@ -48,7 +48,7 @@ class DeleteSyncEducationDialog : ComposeBottomSheetDialogFragment() {
fun shouldShow(): Boolean {
return TextSecurePreferences.isMultiDevice(AppDependencies.application) &&
!SignalStore.uiHints().hasSeenDeleteSyncEducationSheet &&
FeatureFlags.deleteSyncEnabled
RemoteConfig.deleteSyncEnabled
}
@JvmStatic

View File

@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.service.KeyCachingService
import org.thoughtcrime.securesms.util.CachedInflater
import org.thoughtcrime.securesms.util.DynamicTheme
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.navigation.safeNavigate
private const val START_LOCATION = "app.settings.start.location"
@@ -40,7 +40,7 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent {
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
if (intent?.hasExtra(ARG_NAV_GRAPH) != true) {
val navGraphResId = if (FeatureFlags.registrationV2) R.navigation.app_settings_with_change_number_v2 else R.navigation.app_settings
val navGraphResId = if (RemoteConfig.registrationV2) R.navigation.app_settings_with_change_number_v2 else R.navigation.app_settings
intent?.putExtra(ARG_NAV_GRAPH, navGraphResId)
}
@@ -197,7 +197,7 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent {
fun usernameRecovery(context: Context): Intent = getIntentForStartLocation(context, StartLocation.RECOVER_USERNAME)
private fun getIntentForStartLocation(context: Context, startLocation: StartLocation): Intent {
val navGraphResId = if (FeatureFlags.registrationV2) R.navigation.app_settings_with_change_number_v2 else R.navigation.app_settings
val navGraphResId = if (RemoteConfig.registrationV2) R.navigation.app_settings_with_change_number_v2 else R.navigation.app_settings
return Intent(context, AppSettingsActivity::class.java)
.putExtra(ARG_NAV_GRAPH, navGraphResId)
.putExtra(START_LOCATION, startLocation.code)

View File

@@ -35,8 +35,8 @@ import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity
import org.thoughtcrime.securesms.util.Environment
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.PlayStoreUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.Util
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
@@ -160,7 +160,7 @@ class AppSettingsFragment : DSLSettingsFragment(
title = DSLSettingsText.from(R.string.preferences__linked_devices),
icon = DSLSettingsIcon.from(R.drawable.symbol_devices_24),
onClick = {
if (FeatureFlags.internalUser) {
if (RemoteConfig.internalUser) {
findNavController().safeNavigate(R.id.action_appSettingsFragment_to_linkDeviceFragment)
} else {
findNavController().safeNavigate(R.id.action_appSettingsFragment_to_deviceActivity)
@@ -281,7 +281,7 @@ class AppSettingsFragment : DSLSettingsFragment(
}
)
if (FeatureFlags.internalUser) {
if (RemoteConfig.internalUser) {
dividerPref()
clickPref(

View File

@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.components.settings.DSLConfiguration
import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
import org.thoughtcrime.securesms.components.settings.configure
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.navigation.safeNavigate
@@ -84,7 +84,7 @@ class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__ch
sectionHeaderPref(R.string.preferences_chats__backups)
if (FeatureFlags.messageBackups || state.remoteBackupsEnabled) {
if (RemoteConfig.messageBackups || state.remoteBackupsEnabled) {
clickPref(
title = DSLSettingsText.from("Signal Backups"), // TODO [message-backups] -- Finalized copy
summary = DSLSettingsText.from(if (state.remoteBackupsEnabled) R.string.arrays__enabled else R.string.arrays__disabled),

View File

@@ -66,7 +66,7 @@ import org.thoughtcrime.securesms.database.MediaTable
import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration
import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity
import org.thoughtcrime.securesms.preferences.widgets.StorageGraphView
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.Util
import org.thoughtcrime.securesms.util.viewModel
@@ -138,7 +138,7 @@ class ManageStorageSettingsFragment : ComposeFragment() {
dialog("confirm-delete-chat-history") {
Dialogs.SimpleAlertDialog(
title = stringResource(id = R.string.preferences_storage__delete_message_history),
body = if (TextSecurePreferences.isMultiDevice(LocalContext.current) && FeatureFlags.deleteSyncEnabled) {
body = if (TextSecurePreferences.isMultiDevice(LocalContext.current) && RemoteConfig.deleteSyncEnabled) {
stringResource(id = R.string.preferences_storage__this_will_delete_all_message_history_and_media_from_your_device_linked_device)
} else {
stringResource(id = R.string.preferences_storage__this_will_delete_all_message_history_and_media_from_your_device)
@@ -154,7 +154,7 @@ class ManageStorageSettingsFragment : ComposeFragment() {
dialog("double-confirm-delete-chat-history", dialogProperties = DialogProperties(dismissOnBackPress = true, dismissOnClickOutside = true)) {
Dialogs.SimpleAlertDialog(
title = stringResource(id = R.string.preferences_storage__are_you_sure_you_want_to_delete_all_message_history),
body = if (TextSecurePreferences.isMultiDevice(LocalContext.current) && FeatureFlags.deleteSyncEnabled) {
body = if (TextSecurePreferences.isMultiDevice(LocalContext.current) && RemoteConfig.deleteSyncEnabled) {
stringResource(id = R.string.preferences_storage__all_message_history_will_be_permanently_removed_this_action_cannot_be_undone_linked_device)
} else {
stringResource(id = R.string.preferences_storage__all_message_history_will_be_permanently_removed_this_action_cannot_be_undone)

View File

@@ -4,8 +4,8 @@ import org.signal.donations.PaymentSourceType
import org.thoughtcrime.securesms.database.InAppPaymentTable
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.Environment
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.LocaleFeatureFlags
import org.thoughtcrime.securesms.util.LocaleRemoteConfig
import org.thoughtcrime.securesms.util.RemoteConfig
/**
* Helper object to determine in-app donations availability.
@@ -38,45 +38,45 @@ object InAppDonations {
private fun isPayPalAvailableForDonateToSignalType(inAppPaymentType: InAppPaymentTable.Type): Boolean {
return when (inAppPaymentType) {
InAppPaymentTable.Type.UNKNOWN -> error("Unsupported type UNKNOWN")
InAppPaymentTable.Type.ONE_TIME_DONATION, InAppPaymentTable.Type.ONE_TIME_GIFT -> FeatureFlags.paypalOneTimeDonations
InAppPaymentTable.Type.RECURRING_DONATION -> FeatureFlags.paypalRecurringDonations
InAppPaymentTable.Type.RECURRING_BACKUP -> FeatureFlags.messageBackups && FeatureFlags.paypalRecurringDonations
} && !LocaleFeatureFlags.isPayPalDisabled()
InAppPaymentTable.Type.ONE_TIME_DONATION, InAppPaymentTable.Type.ONE_TIME_GIFT -> RemoteConfig.paypalOneTimeDonations
InAppPaymentTable.Type.RECURRING_DONATION -> RemoteConfig.paypalRecurringDonations
InAppPaymentTable.Type.RECURRING_BACKUP -> RemoteConfig.messageBackups && RemoteConfig.paypalRecurringDonations
} && !LocaleRemoteConfig.isPayPalDisabled()
}
/**
* Whether the user is in a region that supports credit cards, based off local phone number.
*/
fun isCreditCardAvailable(): Boolean {
return !LocaleFeatureFlags.isCreditCardDisabled()
return !LocaleRemoteConfig.isCreditCardDisabled()
}
/**
* Whether the user is in a region that supports PayPal, based off local phone number.
*/
fun isPayPalAvailable(): Boolean {
return (FeatureFlags.paypalOneTimeDonations || FeatureFlags.paypalRecurringDonations) && !LocaleFeatureFlags.isPayPalDisabled()
return (RemoteConfig.paypalOneTimeDonations || RemoteConfig.paypalRecurringDonations) && !LocaleRemoteConfig.isPayPalDisabled()
}
/**
* Whether the user is using a device that supports GooglePay, based off Wallet API and phone number.
*/
fun isGooglePayAvailable(): Boolean {
return SignalStore.donationsValues().isGooglePayReady && !LocaleFeatureFlags.isGooglePayDisabled()
return SignalStore.donationsValues().isGooglePayReady && !LocaleRemoteConfig.isGooglePayDisabled()
}
/**
* Whether the user is in a region which supports SEPA Debit transfers, based off local phone number.
*/
fun isSEPADebitAvailable(): Boolean {
return Environment.IS_STAGING || (FeatureFlags.sepaDebitDonations && LocaleFeatureFlags.isSepaEnabled())
return Environment.IS_STAGING || (RemoteConfig.sepaDebitDonations && LocaleRemoteConfig.isSepaEnabled())
}
/**
* Whether the user is in a region which supports IDEAL transfers, based off local phone number.
*/
fun isIDEALAvailable(): Boolean {
return Environment.IS_STAGING || (FeatureFlags.idealDonations && LocaleFeatureFlags.isIdealEnabled())
return Environment.IS_STAGING || (RemoteConfig.idealDonations && LocaleRemoteConfig.isIdealEnabled())
}
/**

View File

@@ -31,7 +31,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.donate.Do
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData
import org.thoughtcrime.securesms.databinding.DonationWebviewFragmentBinding
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.visible
/**
@@ -84,7 +84,7 @@ class Stripe3DSDialogFragment : DialogFragment(R.layout.donation_webview_fragmen
)
)
if (FeatureFlags.internalUser && args.inAppPayment.data.paymentMethodType == InAppPaymentData.PaymentMethodType.IDEAL) {
if (RemoteConfig.internalUser && args.inAppPayment.data.paymentMethodType == InAppPaymentData.PaymentMethodType.IDEAL) {
val openApp = MaterialButton(requireContext()).apply {
text = "Open App"
layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply {

View File

@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.recipients.RecipientUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import java.io.IOException
private val TAG = Log.tag(ConversationSettingsRepository::class.java)
@@ -159,9 +159,9 @@ class ConversationSettingsRepository(
members.addAll(groupRecord.members)
members.addAll(pendingMembers)
GroupCapacityResult(Recipient.self().id, members, FeatureFlags.groupLimits, groupRecord.isAnnouncementGroup)
GroupCapacityResult(Recipient.self().id, members, RemoteConfig.groupLimits, groupRecord.isAnnouncementGroup)
} else {
GroupCapacityResult(Recipient.self().id, groupRecord.members, FeatureFlags.groupLimits, false)
GroupCapacityResult(Recipient.self().id, groupRecord.members, RemoteConfig.groupLimits, false)
}
)
}

View File

@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidTokenException
import org.whispersystems.signalservice.api.push.exceptions.CdsiResourceExhaustedException
import org.whispersystems.signalservice.api.services.CdsiV2Service
@@ -98,7 +98,7 @@ object ContactDiscoveryRefreshV2 {
Optional.empty(),
BuildConfig.CDSI_MRENCLAVE,
10_000,
if (FeatureFlags.useLibsignalNetForCdsiLookup) AppDependencies.libsignalNetwork else null
if (RemoteConfig.useLibsignalNetForCdsiLookup) AppDependencies.libsignalNetwork else null
) {
Log.i(TAG, "Ignoring token for one-off lookup.")
}
@@ -145,8 +145,8 @@ object ContactDiscoveryRefreshV2 {
return ContactDiscovery.RefreshResult(emptySet(), emptyMap())
}
if (newE164s.size > FeatureFlags.cdsHardLimit) {
Log.w(TAG, "[$tag] Number of new contacts (${newE164s.size.roundedString()} > hard limit (${FeatureFlags.cdsHardLimit}! Failing and marking ourselves as permanently blocked.")
if (newE164s.size > RemoteConfig.cdsHardLimit) {
Log.w(TAG, "[$tag] Number of new contacts (${newE164s.size.roundedString()} > hard limit (${RemoteConfig.cdsHardLimit}! Failing and marking ourselves as permanently blocked.")
SignalStore.misc().markCdsPermanentlyBlocked()
throw IOException("New contacts over the CDS hard limit!")
}
@@ -163,7 +163,7 @@ object ContactDiscoveryRefreshV2 {
Optional.ofNullable(token),
BuildConfig.CDSI_MRENCLAVE,
timeoutMs,
if (FeatureFlags.useLibsignalNetForCdsiLookup) AppDependencies.libsignalNetwork else null
if (RemoteConfig.useLibsignalNetForCdsiLookup) AppDependencies.libsignalNetwork else null
) { tokenToSave ->
stopwatch.split("network-pre-token")
if (!isPartialRefresh) {

View File

@@ -74,7 +74,6 @@ import org.signal.ringrtc.CallLinkRootKey;
import org.thoughtcrime.securesms.BindableConversationItem;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.AttachmentId;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.badges.BadgeImageView;
import org.thoughtcrime.securesms.badges.gifts.GiftMessageView;
@@ -115,9 +114,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.events.PartProgressEvent;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicy;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer;
import org.thoughtcrime.securesms.jobmanager.JobManager;
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
import org.thoughtcrime.securesms.jobs.RestoreAttachmentJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory;
@@ -138,7 +135,7 @@ import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.revealable.ViewOnceMessageView;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.InterceptableLongClickCopyLinkSpan;
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
import org.thoughtcrime.securesms.util.MediaUtil;
@@ -1165,7 +1162,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
//noinspection ConstantConditions
LinkPreview linkPreview = ((MmsMessageRecord) messageRecord).getLinkPreviews().get(0);
if (FeatureFlags.adHocCalling()) {
if (RemoteConfig.adHocCalling()) {
CallLinkRootKey callLinkRootKey = CallLinks.parseUrl(linkPreview.getUrl());
if (callLinkRootKey != null) {
joinCallLinkStub.setVisibility(View.VISIBLE);

View File

@@ -57,8 +57,8 @@ import org.thoughtcrime.securesms.stories.settings.create.CreateStoryFlowDialogF
import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment
import org.thoughtcrime.securesms.stories.settings.privacy.ChooseInitialMyStoryMembershipBottomSheetDialogFragment
import org.thoughtcrime.securesms.util.BottomSheetUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.FullscreenHelper
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.fragments.findListener
import org.thoughtcrime.securesms.util.fragments.requireListener
@@ -124,7 +124,7 @@ class MultiselectForwardFragment :
contactSearchMediator = ContactSearchMediator(
this,
emptySet(),
FeatureFlags.shareSelectionLimit,
RemoteConfig.shareSelectionLimit,
ContactSearchAdapter.DisplayOptions(
displayCheckBox = !args.selectSingleRecipient,
displaySecondaryInformation = ContactSearchAdapter.DisplaySecondaryInformation.NEVER,

View File

@@ -296,13 +296,13 @@ import org.thoughtcrime.securesms.util.DeleteDialog
import org.thoughtcrime.securesms.util.Dialogs
import org.thoughtcrime.securesms.util.DoubleClickDebouncer
import org.thoughtcrime.securesms.util.DrawableUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.FullscreenHelper
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.MessageConstraintsUtil
import org.thoughtcrime.securesms.util.MessageConstraintsUtil.getEditMessageThresholdHours
import org.thoughtcrime.securesms.util.MessageConstraintsUtil.isValidEditMessageSend
import org.thoughtcrime.securesms.util.PlayStoreUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SaveAttachmentUtil
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import org.thoughtcrime.securesms.util.StorageUtil
@@ -1687,7 +1687,7 @@ class ConversationFragment :
val keyboardPage = when (keyboardMode) {
TextSecurePreferences.MediaKeyboardMode.EMOJI -> if (isSystemEmojiPreferred) KeyboardPage.STICKER else KeyboardPage.EMOJI
TextSecurePreferences.MediaKeyboardMode.STICKER -> KeyboardPage.STICKER
TextSecurePreferences.MediaKeyboardMode.GIF -> if (FeatureFlags.gifSearchAvailable) KeyboardPage.GIF else KeyboardPage.STICKER
TextSecurePreferences.MediaKeyboardMode.GIF -> if (RemoteConfig.gifSearchAvailable) KeyboardPage.GIF else KeyboardPage.STICKER
}
inputPanel.setMediaKeyboardToggleMode(keyboardPage)
@@ -2408,7 +2408,7 @@ class ConversationFragment :
disposables += DeleteDialog.show(
context = requireContext(),
messageRecords = records,
message = if (TextSecurePreferences.isMultiDevice(requireContext()) && FeatureFlags.deleteSyncEnabled) {
message = if (TextSecurePreferences.isMultiDevice(requireContext()) && RemoteConfig.deleteSyncEnabled) {
resources.getQuantityString(R.plurals.ConversationFragment_delete_on_linked_warning, records.size)
} else {
null

View File

@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.messagerequests.MessageRequestRepository
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
private typealias ConversationElement = MappingModel<*>
@@ -125,7 +125,7 @@ class ConversationDataSource(
records = MessageDataFetcher.updateModelsWithData(records, extraData).toMutableList()
stopwatch.split("models")
if (FeatureFlags.messageBackups && SignalStore.backup().restoreState.inProgress) {
if (RemoteConfig.messageBackups && SignalStore.backup().restoreState.inProgress) {
BackupRestoreManager.prioritizeAttachmentsIfNeeded(records)
stopwatch.split("restore")
}

View File

@@ -169,7 +169,7 @@ import org.thoughtcrime.securesms.util.AppForegroundObserver;
import org.thoughtcrime.securesms.util.AppStartup;
import org.thoughtcrime.securesms.util.CachedInflater;
import org.thoughtcrime.securesms.util.ConversationUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.PlayStoreUtil;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.SignalLocalMetrics;
@@ -1202,7 +1202,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
alert.setTitle(context.getResources().getQuantityString(R.plurals.ConversationListFragment_delete_selected_conversations,
conversationsCount, conversationsCount));
if (TextSecurePreferences.isMultiDevice(context) && FeatureFlags.deleteSyncEnabled()) {
if (TextSecurePreferences.isMultiDevice(context) && RemoteConfig.deleteSyncEnabled()) {
alert.setMessage(context.getResources().getQuantityString(R.plurals.ConversationListFragment_this_will_permanently_delete_all_n_selected_conversations_linked_device,
conversationsCount, conversationsCount));
} else {

View File

@@ -10,8 +10,8 @@ import com.fasterxml.jackson.annotation.JsonProperty
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.BucketingUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.push.ServiceId
import java.io.IOException
@@ -28,7 +28,7 @@ object CrashConfig {
fun computePatterns(): List<CrashPattern> {
val aci: ServiceId.ACI = SignalStore.account().aci ?: return emptyList()
val serialized = FeatureFlags.crashPromptConfig
val serialized = RemoteConfig.crashPromptConfig
if (serialized.isNullOrBlank()) {
return emptyList()
}
@@ -113,7 +113,7 @@ object CrashConfig {
}
val partsPerMillion = (1_000_000 * percent).toInt()
val bucket = BucketingUtil.bucket(FeatureFlags.CRASH_PROMPT_CONFIG, aci.rawUuid, 1_000_000)
val bucket = BucketingUtil.bucket(RemoteConfig.CRASH_PROMPT_CONFIG, aci.rawUuid, 1_000_000)
return partsPerMillion > bucket
}
}

View File

@@ -9,9 +9,9 @@ import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.MediaUtil.SlideType
import org.thoughtcrime.securesms.util.RemoteConfig
@SuppressLint("RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage") // Not a real table, just a view
class MediaTable internal constructor(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper) {
@@ -164,7 +164,7 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
@JvmOverloads
fun getGalleryMediaForThread(threadId: Long, sorting: Sorting, limit: Int = 0): Cursor {
var query = if (FeatureFlags.messageBackups) {
var query = if (RemoteConfig.messageBackups) {
sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY_INCLUDING_TEMP_VIDEOS_AND_THUMBNAILS))
} else {
sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY_INCLUDING_TEMP_VIDEOS))

View File

@@ -15,8 +15,8 @@ import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.database.model.MessageLogEntry
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RecipientAccessList
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.crypto.ContentHint
import org.whispersystems.signalservice.api.messages.SendMessageResult
import org.whispersystems.signalservice.internal.push.Content
@@ -153,7 +153,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
/** @return The ID of the inserted entry, or -1 if none was inserted. Can be used with [addRecipientToExistingEntryIfPossible] */
fun insertIfPossible(recipientId: RecipientId, sentTimestamp: Long, sendMessageResult: SendMessageResult, contentHint: ContentHint, messageId: MessageId, urgent: Boolean): Long {
if (!FeatureFlags.retryReceipts) return -1
if (!RemoteConfig.retryReceipts) return -1
if (sendMessageResult.isSuccess && sendMessageResult.success.content.isPresent) {
val recipientDevice = listOf(RecipientDevice(recipientId, sendMessageResult.success.devices))
@@ -165,7 +165,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
/** @return The ID of the inserted entry, or -1 if none was inserted. Can be used with [addRecipientToExistingEntryIfPossible] */
fun insertIfPossible(recipientId: RecipientId, sentTimestamp: Long, sendMessageResult: SendMessageResult, contentHint: ContentHint, messageIds: List<MessageId>, urgent: Boolean): Long {
if (!FeatureFlags.retryReceipts) return -1
if (!RemoteConfig.retryReceipts) return -1
if (sendMessageResult.isSuccess && sendMessageResult.success.content.isPresent) {
val recipientDevice = listOf(RecipientDevice(recipientId, sendMessageResult.success.devices))
@@ -177,7 +177,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
/** @return The ID of the inserted entry, or -1 if none was inserted. Can be used with [addRecipientToExistingEntryIfPossible] */
fun insertIfPossible(sentTimestamp: Long, possibleRecipients: List<Recipient>, results: List<SendMessageResult>, contentHint: ContentHint, messageId: MessageId, urgent: Boolean): Long {
if (!FeatureFlags.retryReceipts) return -1
if (!RemoteConfig.retryReceipts) return -1
val accessList = RecipientAccessList(possibleRecipients)
@@ -198,7 +198,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
}
fun addRecipientToExistingEntryIfPossible(payloadId: Long, recipientId: RecipientId, sentTimestamp: Long, sendMessageResult: SendMessageResult, contentHint: ContentHint, messageId: MessageId, urgent: Boolean): Long {
if (!FeatureFlags.retryReceipts) return payloadId
if (!RemoteConfig.retryReceipts) return payloadId
if (sendMessageResult.isSuccess && sendMessageResult.success.content.isPresent) {
val db = databaseHelper.signalWritableDatabase
@@ -274,9 +274,9 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
}
fun getLogEntry(recipientId: RecipientId, device: Int, dateSent: Long): MessageLogEntry? {
if (!FeatureFlags.retryReceipts) return null
if (!RemoteConfig.retryReceipts) return null
trimOldMessages(System.currentTimeMillis(), FeatureFlags.retryRespondMaxAge)
trimOldMessages(System.currentTimeMillis(), RemoteConfig.retryRespondMaxAge)
val db = databaseHelper.signalReadableDatabase
val table = "${MslPayloadTable.TABLE_NAME} LEFT JOIN ${MslRecipientTable.TABLE_NAME} ON ${MslPayloadTable.TABLE_NAME}.${MslPayloadTable.ID} = ${MslRecipientTable.TABLE_NAME}.${MslRecipientTable.PAYLOAD_ID}"
@@ -356,7 +356,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal
}
fun deleteAllForRecipient(recipientId: RecipientId) {
if (!FeatureFlags.retryReceipts) return
if (!RemoteConfig.retryReceipts) return
writableDatabase
.delete(MslRecipientTable.TABLE_NAME)

View File

@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.database
import androidx.annotation.VisibleForTesting
import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
/**
* A write-through cache for [PendingRetryReceiptTable].
@@ -21,7 +21,7 @@ class PendingRetryReceiptCache @VisibleForTesting constructor(
private var populated: Boolean = false
fun insert(author: RecipientId, authorDevice: Int, sentTimestamp: Long, receivedTimestamp: Long, threadId: Long) {
if (!FeatureFlags.retryReceipts) return
if (!RemoteConfig.retryReceipts) return
ensurePopulated()
val model: PendingRetryReceiptModel = database.insert(author, authorDevice, sentTimestamp, receivedTimestamp, threadId)
synchronized(pendingRetries) {
@@ -36,7 +36,7 @@ class PendingRetryReceiptCache @VisibleForTesting constructor(
}
fun get(author: RecipientId, sentTimestamp: Long): PendingRetryReceiptModel? {
if (!FeatureFlags.retryReceipts) return null
if (!RemoteConfig.retryReceipts) return null
ensurePopulated()
synchronized(pendingRetries) {
@@ -45,7 +45,7 @@ class PendingRetryReceiptCache @VisibleForTesting constructor(
}
fun getOldest(): PendingRetryReceiptModel? {
if (!FeatureFlags.retryReceipts) return null
if (!RemoteConfig.retryReceipts) return null
ensurePopulated()
synchronized(pendingRetries) {
@@ -54,7 +54,7 @@ class PendingRetryReceiptCache @VisibleForTesting constructor(
}
fun delete(model: PendingRetryReceiptModel) {
if (!FeatureFlags.retryReceipts) return
if (!RemoteConfig.retryReceipts) return
ensurePopulated()
synchronized(pendingRetries) {
@@ -64,7 +64,7 @@ class PendingRetryReceiptCache @VisibleForTesting constructor(
}
fun clear() {
if (!FeatureFlags.retryReceipts) return
if (!RemoteConfig.retryReceipts) return
synchronized(pendingRetries) {
pendingRetries.clear()

View File

@@ -92,9 +92,9 @@ import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId
import org.thoughtcrime.securesms.storage.StorageRecordUpdate
import org.thoughtcrime.securesms.storage.StorageSyncHelper
import org.thoughtcrime.securesms.storage.StorageSyncModels
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.IdentityUtil
import org.thoughtcrime.securesms.util.ProfileUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.Util
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
import org.thoughtcrime.securesms.wallpaper.WallpaperStorage
@@ -4152,7 +4152,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
* get them back through CDS).
*/
fun debugClearServiceIds(recipientId: RecipientId? = null) {
check(FeatureFlags.internalUser)
check(RemoteConfig.internalUser)
writableDatabase
.update(TABLE_NAME)
@@ -4177,7 +4177,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
* Should only be used for debugging! A very destructive action that clears all known profile keys and credentials.
*/
fun debugClearProfileData(recipientId: RecipientId? = null) {
check(FeatureFlags.internalUser)
check(RemoteConfig.internalUser)
writableDatabase
.update(TABLE_NAME)
@@ -4208,7 +4208,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
* Should only be used for debugging! Clears the E164 and PNI from a recipient.
*/
fun debugClearE164AndPni(recipientId: RecipientId) {
check(FeatureFlags.internalUser)
check(RemoteConfig.internalUser)
writableDatabase
.update(TABLE_NAME)
@@ -4228,7 +4228,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
* Only works if the recipient has a PNI.
*/
fun debugRemoveAci(recipientId: RecipientId) {
check(FeatureFlags.internalUser)
check(RemoteConfig.internalUser)
writableDatabase.execSQL(
"""

View File

@@ -62,10 +62,10 @@ import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.recipients.RecipientUtil
import org.thoughtcrime.securesms.storage.StorageSyncHelper
import org.thoughtcrime.securesms.util.ConversationUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.JsonUtils.SaneJSONObject
import org.thoughtcrime.securesms.util.LRUCache
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.isScheduled
import org.whispersystems.signalservice.api.storage.SignalAccountRecord
@@ -326,7 +326,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
return
}
val syncThreadTrimDeletes = SignalStore.settings().shouldSyncThreadTrimDeletes() && FeatureFlags.deleteSyncEnabled
val syncThreadTrimDeletes = SignalStore.settings().shouldSyncThreadTrimDeletes() && RemoteConfig.deleteSyncEnabled
val threadTrimsToSync = mutableListOf<Pair<Long, Set<MessageRecord>>>()
readableDatabase
@@ -1131,7 +1131,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
var addressableMessages: Set<MessageRecord> = emptySet()
writableDatabase.withinTransaction { db ->
if (syncThreadDeletes && FeatureFlags.deleteSyncEnabled) {
if (syncThreadDeletes && RemoteConfig.deleteSyncEnabled) {
addressableMessages = messages.getMostRecentAddressableMessages(threadId)
}
@@ -1164,7 +1164,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
db.deactivateThread(query)
}
if (FeatureFlags.deleteSyncEnabled) {
if (RemoteConfig.deleteSyncEnabled) {
for (threadId in selectedConversations) {
addressableMessages += threadId to messages.getMostRecentAddressableMessages(threadId)
}

View File

@@ -69,7 +69,7 @@ import org.thoughtcrime.securesms.util.AlarmSleepTimer;
import org.thoughtcrime.securesms.util.AppForegroundObserver;
import org.thoughtcrime.securesms.util.ByteUnit;
import org.thoughtcrime.securesms.util.EarlyMessageCache;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.FrameRateTracker;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.video.exo.GiphyMp4Cache;
@@ -120,7 +120,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
@Override
public @NonNull GroupsV2Operations provideGroupsV2Operations(@NonNull SignalServiceConfiguration signalServiceConfiguration) {
return new GroupsV2Operations(provideClientZkOperations(signalServiceConfiguration), FeatureFlags.groupLimits().getHardLimit());
return new GroupsV2Operations(provideClientZkOperations(signalServiceConfiguration), RemoteConfig.groupLimits().getHardLimit());
}
@Override
@@ -129,7 +129,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
FeatureFlags.okHttpAutomaticRetry());
RemoteConfig.okHttpAutomaticRetry());
}
@Override
@@ -144,8 +144,8 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
provideGroupsV2Operations(signalServiceConfiguration).getProfileOperations(),
SignalExecutors.newCachedBoundedExecutor("signal-messages", ThreadUtil.PRIORITY_IMPORTANT_BACKGROUND_THREAD, 1, 16, 30),
ByteUnit.KILOBYTES.toBytes(256),
FeatureFlags.okHttpAutomaticRetry(),
FeatureFlags.useRxMessageSending());
RemoteConfig.okHttpAutomaticRetry(),
RemoteConfig.useRxMessageSending());
}
@Override
@@ -154,7 +154,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
provideGroupsV2Operations(signalServiceConfiguration).getProfileOperations(),
FeatureFlags.okHttpAutomaticRetry());
RemoteConfig.okHttpAutomaticRetry());
}
@Override
@@ -375,7 +375,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
FeatureFlags.okHttpAutomaticRetry());
RemoteConfig.okHttpAutomaticRetry());
}
@Override
@@ -384,7 +384,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
FeatureFlags.okHttpAutomaticRetry());
RemoteConfig.okHttpAutomaticRetry());
}
@Override
@@ -425,7 +425,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
@Override
public WebSocketConnection createUnidentifiedWebSocket() {
int shadowPercentage = FeatureFlags.libSignalWebSocketShadowingPercentage();
int shadowPercentage = RemoteConfig.libSignalWebSocketShadowingPercentage();
if (shadowPercentage > 0) {
return new ShadowingWebSocketConnection(
"unauth-shadow",
@@ -439,7 +439,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
bridge
);
}
if (FeatureFlags.libSignalWebSocketEnabled()) {
if (RemoteConfig.libSignalWebSocketEnabled()) {
Network network = libSignalNetworkSupplier.get();
return new LibSignalChatConnection(
"libsignal-unauth",

View File

@@ -12,7 +12,7 @@ import org.signal.core.util.concurrent.LifecycleDisposable;
import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.databinding.FragmentTransferRestoreBinding;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.SpanUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
@@ -41,7 +41,7 @@ public final class TransferOrRestoreFragment extends LoggingFragment {
binding.transferOrRestoreFragmentNext.setOnClickListener(v -> launchSelection(viewModel.getStateSnapshot()));
binding.transferOrRestoreFragmentMoreOptions.setOnClickListener(v -> SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), R.id.action_transferOrRestore_to_moreOptions));
int visibility = FeatureFlags.messageBackups() ? View.VISIBLE : View.GONE;
int visibility = RemoteConfig.messageBackups() ? View.VISIBLE : View.GONE;
binding.transferOrRestoreFragmentRestoreRemoteCard.setVisibility(visibility);
binding.transferOrRestoreFragmentMoreOptions.setVisibility(visibility);

View File

@@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.jobs.MessageFetchJob
import org.thoughtcrime.securesms.messages.WebSocketDrainer
import org.thoughtcrime.securesms.notifications.NotificationChannels
import org.thoughtcrime.securesms.notifications.NotificationIds
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor
import kotlin.time.Duration.Companion.minutes
@@ -71,7 +71,7 @@ object FcmFetchManager {
}
private fun postMayHaveMessagesNotification(context: Context) {
if (FeatureFlags.fcmMayHaveMessagesNotificationKillSwitch) {
if (RemoteConfig.fcmMayHaveMessagesNotificationKillSwitch) {
Log.w(TAG, "May have messages notification kill switch")
return
}

View File

@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
@@ -60,7 +60,7 @@ public class GiphyActivity extends PassphraseRequiredActivity implements Keyboar
@SuppressLint("MissingInflatedId")
@Override
public void onCreate(Bundle bundle, boolean ready) {
if (!FeatureFlags.gifSearchAvailable()) {
if (!RemoteConfig.gifSearchAvailable()) {
finish();
}
setContentView(R.layout.giphy_activity);

View File

@@ -6,7 +6,7 @@ import org.signal.core.util.ThreadUtil;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.crypto.ReentrantSessionLock;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import java.io.Closeable;
import java.util.concurrent.TimeUnit;
@@ -23,7 +23,7 @@ public final class GroupsV2ProcessingLock {
@WorkerThread
public static Closeable acquireGroupProcessingLock() throws GroupChangeBusyException {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
if (!lock.isHeldByCurrentThread()) {
if (SignalDatabase.inTransaction()) {
throw new AssertionError("Tried to acquire the group lock inside of a database transaction!");

View File

@@ -7,14 +7,14 @@ import androidx.annotation.NonNull;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
public final class GroupLimitDialog {
public static void showHardLimitMessage(@NonNull Context context) {
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.ContactSelectionListFragment_maximum_group_size_reached)
.setMessage(context.getString(R.string.ContactSelectionListFragment_signal_groups_can_have_a_maximum_of_d_members, FeatureFlags.groupLimits().getHardLimit()))
.setMessage(context.getString(R.string.ContactSelectionListFragment_signal_groups_can_have_a_maximum_of_d_members, RemoteConfig.groupLimits().getHardLimit()))
.setPositiveButton(android.R.string.ok, null)
.show();
}
@@ -22,7 +22,7 @@ public final class GroupLimitDialog {
public static void showRecommendedLimitMessage(@NonNull Context context) {
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.ContactSelectionListFragment_recommended_member_limit_reached)
.setMessage(context.getString(R.string.ContactSelectionListFragment_signal_groups_perform_best_with_d_members_or_fewer, FeatureFlags.groupLimits().getRecommendedLimit()))
.setMessage(context.getString(R.string.ContactSelectionListFragment_signal_groups_perform_best_with_d_members_or_fewer, RemoteConfig.groupLimits().getRecommendedLimit()))
.setPositiveButton(android.R.string.ok, null)
.show();
}

View File

@@ -25,13 +25,12 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode;
import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery;
import org.thoughtcrime.securesms.groups.ui.creategroup.details.AddGroupDetailsActivity;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientRepository;
import org.thoughtcrime.securesms.recipients.ui.findby.FindByActivity;
import org.thoughtcrime.securesms.recipients.ui.findby.FindByMode;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import java.io.IOException;
@@ -62,7 +61,7 @@ public class CreateGroupActivity extends ContactSelectionActivity implements Con
int displayMode = ContactSelectionDisplayMode.FLAG_PUSH;
intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, displayMode);
intent.putExtra(ContactSelectionListFragment.SELECTION_LIMITS, FeatureFlags.groupLimits().excludingSelf());
intent.putExtra(ContactSelectionListFragment.SELECTION_LIMITS, RemoteConfig.groupLimits().excludingSelf());
intent.putExtra(ContactSelectionListFragment.RV_PADDING_BOTTOM, (int) DimensionUnit.DP.toPixels(64f));
intent.putExtra(ContactSelectionListFragment.RV_CLIP, false);

View File

@@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.ui.disappearingmessages.RecipientDisappearingMessagesActivity;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
@@ -116,7 +116,7 @@ public class AddGroupDetailsFragment extends LoggingFragment {
avatar.setOnClickListener(v -> showAvatarPicker());
members.setRecipientClickListener(this::handleRecipientClick);
EditTextUtil.addGraphemeClusterLimitFilter(name, FeatureFlags.getMaxGroupNameGraphemeLength());
EditTextUtil.addGraphemeClusterLimitFilter(name, RemoteConfig.getMaxGroupNameGraphemeLength());
name.addTextChangedListener(new AfterTextChanged(editable -> viewModel.setName(editable.toString())));
toolbar.setNavigationOnClickListener(unused -> callback.onNavigationButtonPressed());
create.setOnClickListener(v -> handleCreateClicked());

View File

@@ -4,12 +4,11 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import java.util.LinkedList;
import java.util.List;
@@ -17,8 +16,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE;
/**
* A durable unit of work.
*
@@ -107,7 +104,7 @@ public abstract class Job {
/** Provides a default exponential backoff given the current run attempt. */
protected final long defaultBackoff() {
return BackoffUtil.exponentialBackoff(runAttempt + 1, FeatureFlags.getDefaultMaxBackoff());
return BackoffUtil.exponentialBackoff(runAttempt + 1, RemoteConfig.getDefaultMaxBackoff());
}

View File

@@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.mms.SentMediaQuality;
import org.thoughtcrime.securesms.service.AttachmentProgressService;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.ImageCompressionUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MemoryFileDescriptor.MemoryFileException;
@@ -256,8 +256,8 @@ public final class AttachmentCompressionJob extends BaseJob {
}
}
if (FeatureFlags.useStreamingVideoMuxer()) {
StreamingTranscoder transcoder = new StreamingTranscoder(dataSource, options, constraints.getVideoTranscodingSettings(), constraints.getCompressedVideoMaxSize(context), FeatureFlags.allowAudioRemuxing());
if (RemoteConfig.useStreamingVideoMuxer()) {
StreamingTranscoder transcoder = new StreamingTranscoder(dataSource, options, constraints.getVideoTranscodingSettings(), constraints.getCompressedVideoMaxSize(context), RemoteConfig.allowAudioRemuxing());
if (transcoder.isTranscodeRequired()) {
Log.i(TAG, "Compressing with streaming muxer");

View File

@@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.notifications.v2.ConversationId.Companion.forC
import org.thoughtcrime.securesms.s3.S3
import org.thoughtcrime.securesms.transport.RetryLaterException
import org.thoughtcrime.securesms.util.AttachmentUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.backup.MediaName
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
@@ -222,7 +222,7 @@ class AttachmentDownloadJob private constructor(
attachmentId: AttachmentId,
attachment: DatabaseAttachment
) {
val maxReceiveSize: Long = FeatureFlags.maxAttachmentReceiveSizeBytes
val maxReceiveSize: Long = RemoteConfig.maxAttachmentReceiveSizeBytes
val attachmentFile: File = SignalDatabase.attachments.getOrCreateTransferFile(attachmentId)
var archiveFile: File? = null
var useArchiveCdn = false
@@ -401,7 +401,7 @@ class AttachmentDownloadJob private constructor(
S3.getObject(attachment.fileName!!).use { response ->
val body = response.body()
if (body != null) {
if (body.contentLength() > FeatureFlags.maxAttachmentReceiveSizeBytes) {
if (body.contentLength() > RemoteConfig.maxAttachmentReceiveSizeBytes) {
throw MmsException("Attachment too large, failing download")
}
SignalDatabase.attachments.finalizeAttachmentAfterDownload(messageId, attachmentId, (body.source() as Source).buffer().inputStream())

View File

@@ -27,7 +27,7 @@ import org.thoughtcrime.securesms.mms.MmsException
import org.thoughtcrime.securesms.net.NotPushRegisteredException
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.service.AttachmentProgressService
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream
@@ -66,7 +66,7 @@ class AttachmentUploadJob private constructor(
@JvmStatic
val maxPlaintextSize: Long
get() {
val maxCipherTextSize = FeatureFlags.maxAttachmentSizeBytes
val maxCipherTextSize = RemoteConfig.maxAttachmentSizeBytes
val maxPaddedSize = AttachmentCipherStreamUtil.getPlaintextLength(maxCipherTextSize)
return PaddingInputStream.getMaxUnpaddedSize(maxPaddedSize)
}

View File

@@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.notifications.v2.ConversationId;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
@@ -91,8 +91,8 @@ public class AutomaticSessionResetJob extends BaseJob {
SignalDatabase.senderKeyShared().deleteAllFor(recipientId);
insertLocalMessage();
if (FeatureFlags.automaticSessionReset()) {
long resetInterval = TimeUnit.SECONDS.toMillis(FeatureFlags.automaticSessionResetIntervalSeconds());
if (RemoteConfig.automaticSessionReset()) {
long resetInterval = TimeUnit.SECONDS.toMillis(RemoteConfig.automaticSessionResetIntervalSeconds());
DeviceLastResetTime resetTimes = SignalDatabase.recipients().getLastSessionResetTimes(recipientId);
long timeSinceLastReset = System.currentTimeMillis() - getLastResetTime(resetTimes, deviceId);

View File

@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.JobLogger;
import org.thoughtcrime.securesms.jobmanager.JobManager.Chain;
import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
public abstract class BaseJob extends Job {
@@ -57,7 +57,7 @@ public abstract class BaseJob extends Job {
* override this behavior to define custom backoff behavior.
*/
public long getNextRunAttemptBackoff(int pastAttemptCount, @NonNull Exception exception) {
return BackoffUtil.exponentialBackoff(pastAttemptCount, FeatureFlags.getDefaultMaxBackoff());
return BackoffUtil.exponentialBackoff(pastAttemptCount, RemoteConfig.getDefaultMaxBackoff());
}
protected abstract void onRun() throws Exception;

View File

@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.jobmanager.JsonJobData
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import java.util.concurrent.TimeUnit
/**
@@ -46,7 +46,7 @@ internal class CallLinkPeekJob private constructor(
)
override fun onRun() {
if (!FeatureFlags.adHocCalling) {
if (!RemoteConfig.adHocCalling) {
Log.i(TAG, "Ad hoc calling is disabled. Dropping peek for call link.")
return
}

View File

@@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.jobs.protos.CallLinkUpdateSendJobData
import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException
import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException
@@ -65,7 +65,7 @@ class CallLinkUpdateSendJob private constructor(
override fun onFailure() = Unit
override fun onRun() {
if (!FeatureFlags.adHocCalling) {
if (!RemoteConfig.adHocCalling) {
Log.i(TAG, "Call links are not enabled. Exiting.")
return
}

View File

@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.pad
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.Recipient.Companion.self
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException
import org.whispersystems.signalservice.internal.push.Content
@@ -58,7 +58,7 @@ class MultiDeviceDeleteSendSyncJob private constructor(
return
}
if (!FeatureFlags.deleteSyncEnabled) {
if (!RemoteConfig.deleteSyncEnabled) {
Log.i(TAG, "Delete sync support not enabled.")
return
}
@@ -74,7 +74,7 @@ class MultiDeviceDeleteSendSyncJob private constructor(
return
}
if (!FeatureFlags.deleteSyncEnabled) {
if (!RemoteConfig.deleteSyncEnabled) {
Log.i(TAG, "Delete sync support not enabled.")
return
}

View File

@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.payments.FailureReason;
import org.thoughtcrime.securesms.payments.PaymentTransactionId;
import org.thoughtcrime.securesms.payments.Payments;
import org.thoughtcrime.securesms.payments.Wallet;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException;
import java.io.IOException;
@@ -118,7 +118,7 @@ public final class PaymentTransactionCheckJob extends BaseJob {
public long getNextRunAttemptBackoff(int pastAttemptCount, @NonNull Exception exception) {
if (exception instanceof NonSuccessfulResponseCodeException) {
if (((NonSuccessfulResponseCodeException) exception).is5xx()) {
return BackoffUtil.exponentialBackoff(pastAttemptCount, FeatureFlags.getServerErrorMaxBackoff());
return BackoffUtil.exponentialBackoff(pastAttemptCount, RemoteConfig.getServerErrorMaxBackoff());
}
}

View File

@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.jobs.protos.PreKeysSyncJobData
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.NetworkResult
import org.whispersystems.signalservice.api.SignalServiceAccountDataStore
import org.whispersystems.signalservice.api.account.PreKeyUpload
@@ -138,7 +138,7 @@ class PreKeysSyncJob private constructor(
warn(TAG, "Forced rotation was requested, but the consistency checks passed!")
val timeSinceLastForcedRotation = System.currentTimeMillis() - SignalStore.misc().lastForcedPreKeyRefresh
// We check < 0 in case someone changed their clock and had a bad value set
timeSinceLastForcedRotation > FeatureFlags.preKeyForceRefreshInterval || timeSinceLastForcedRotation < 0
timeSinceLastForcedRotation > RemoteConfig.preKeyForceRefreshInterval || timeSinceLastForcedRotation < 0
}
} else {
false

View File

@@ -62,7 +62,7 @@ import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.signal.core.util.Base64;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.ImageCompressionUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
@@ -76,7 +76,6 @@ import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException;
import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException;
import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException;
import org.whispersystems.signalservice.internal.push.AttachmentPointer;
import org.whispersystems.signalservice.internal.push.BodyRange;
import java.io.ByteArrayInputStream;
@@ -176,7 +175,7 @@ public abstract class PushSendJob extends SendJob {
}
} else if (exception instanceof NonSuccessfulResponseCodeException) {
if (((NonSuccessfulResponseCodeException) exception).is5xx()) {
return BackoffUtil.exponentialBackoff(pastAttemptCount, FeatureFlags.getServerErrorMaxBackoff());
return BackoffUtil.exponentialBackoff(pastAttemptCount, RemoteConfig.getServerErrorMaxBackoff());
}
} else if (exception instanceof RetryLaterException) {
long backoff = ((RetryLaterException) exception).getBackoff();

View File

@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.profiles.manage.UsernameRepository
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import kotlin.time.Duration.Companion.days
/**
@@ -48,7 +48,7 @@ class ReclaimUsernameAndLinkJob private constructor(parameters: Parameters) : Jo
return when (UsernameRepository.reclaimUsernameIfNecessary()) {
UsernameRepository.UsernameReclaimResult.SUCCESS -> Result.success()
UsernameRepository.UsernameReclaimResult.PERMANENT_ERROR -> Result.success()
UsernameRepository.UsernameReclaimResult.NETWORK_ERROR -> Result.retry(BackoffUtil.exponentialBackoff(runAttempt + 1, FeatureFlags.defaultMaxBackoff))
UsernameRepository.UsernameReclaimResult.NETWORK_ERROR -> Result.retry(BackoffUtil.exponentialBackoff(runAttempt + 1, RemoteConfig.defaultMaxBackoff))
}
}

View File

@@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.RemoteConfigResult;
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
@@ -52,7 +52,7 @@ public class RemoteConfigRefreshJob extends BaseJob {
}
RemoteConfigResult result = AppDependencies.getSignalServiceAccountManager().getRemoteConfig();
FeatureFlags.update(result.getConfig());
RemoteConfig.update(result.getConfig());
SignalStore.misc().setLastKnownServerTime(TimeUnit.SECONDS.toMillis(result.getServerEpochTimeSeconds()), System.currentTimeMillis());
}

View File

@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.mms.MmsException
import org.thoughtcrime.securesms.notifications.v2.ConversationId.Companion.forConversation
import org.thoughtcrime.securesms.transport.RetryLaterException
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.backup.MediaName
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
@@ -208,7 +208,7 @@ class RestoreAttachmentJob private constructor(
attachmentId: AttachmentId,
attachment: DatabaseAttachment
) {
val maxReceiveSize: Long = FeatureFlags.maxAttachmentReceiveSizeBytes
val maxReceiveSize: Long = RemoteConfig.maxAttachmentReceiveSizeBytes
val attachmentFile: File = SignalDatabase.attachments.getOrCreateTransferFile(attachmentId)
var archiveFile: File? = null
var useArchiveCdn = false
@@ -439,7 +439,7 @@ class RestoreAttachmentJob private constructor(
return
}
val maxThumbnailSize: Long = FeatureFlags.maxAttachmentReceiveSizeBytes
val maxThumbnailSize: Long = RemoteConfig.maxAttachmentReceiveSizeBytes
val thumbnailTransferFile: File = SignalDatabase.attachments.createArchiveThumbnailTransferFile()
val thumbnailFile: File = SignalDatabase.attachments.createArchiveThumbnailTransferFile()

View File

@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.mms.MmsException
import org.thoughtcrime.securesms.notifications.v2.ConversationId.Companion.forConversation
import org.thoughtcrime.securesms.transport.RetryLaterException
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId
@@ -197,7 +197,7 @@ class RestoreAttachmentThumbnailJob private constructor(
return
}
val maxThumbnailSize: Long = FeatureFlags.maxAttachmentReceiveSizeBytes
val maxThumbnailSize: Long = RemoteConfig.maxAttachmentReceiveSizeBytes
val thumbnailTransferFile: File = SignalDatabase.attachments.createArchiveThumbnailTransferFile()
val thumbnailFile: File = SignalDatabase.attachments.createArchiveThumbnailTransferFile()

View File

@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.releasechannel.ReleaseChannel
import org.thoughtcrime.securesms.s3.S3
import org.thoughtcrime.securesms.transport.RetryLaterException
import org.thoughtcrime.securesms.util.LocaleFeatureFlags
import org.thoughtcrime.securesms.util.LocaleRemoteConfig
import org.whispersystems.signalservice.internal.ServiceResponse
import java.io.IOException
import java.lang.Integer.max
@@ -170,7 +170,7 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool
false
}
}
.filter { it.countries == null || LocaleFeatureFlags.shouldShowReleaseNote(it.uuid, it.countries) }
.filter { it.countries == null || LocaleRemoteConfig.shouldShowReleaseNote(it.uuid, it.countries) }
.sortedBy { it.androidMinVersion!!.toInt() }
.map { resolveReleaseNote(it) }
.toList()

View File

@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.jobmanager.JsonJobData;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
public class TrimThreadJob extends BaseJob {
@@ -78,7 +78,7 @@ public class TrimThreadJob extends BaseJob {
long trimBeforeDate = keepMessagesDuration != KeepMessagesDuration.FOREVER ? System.currentTimeMillis() - keepMessagesDuration.getDuration()
: ThreadTable.NO_TRIM_BEFORE_DATE_SET;
SignalDatabase.threads().trimThread(threadId, SignalStore.settings().shouldSyncThreadTrimDeletes() && FeatureFlags.deleteSyncEnabled(), trimLength, trimBeforeDate, false);
SignalDatabase.threads().trimThread(threadId, SignalStore.settings().shouldSyncThreadTrimDeletes() && RemoteConfig.deleteSyncEnabled(), trimLength, trimBeforeDate, false);
}
@Override

View File

@@ -7,7 +7,7 @@ import org.signal.core.util.ThreadUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.stickers.StickerSearchRepository
import org.thoughtcrime.securesms.util.DefaultValueLiveData
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
class KeyboardPagerViewModel : ViewModel() {
@@ -20,7 +20,7 @@ class KeyboardPagerViewModel : ViewModel() {
startingPages.remove(KeyboardPage.EMOJI)
}
if (!FeatureFlags.gifSearchAvailable) {
if (!RemoteConfig.gifSearchAvailable) {
startingPages.remove(KeyboardPage.GIF)
}

View File

@@ -5,7 +5,7 @@ import androidx.annotation.NonNull;
import org.signal.ringrtc.CallManager;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.util.Environment;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import java.util.Arrays;
import java.util.Collections;
@@ -50,7 +50,7 @@ public final class InternalValues extends SignalStoreValues {
* Members will not be added directly to a GV2 even if they could be.
*/
public synchronized boolean gv2ForceInvites() {
return FeatureFlags.internalUser() && getBoolean(GV2_FORCE_INVITES, false);
return RemoteConfig.internalUser() && getBoolean(GV2_FORCE_INVITES, false);
}
/**
@@ -58,56 +58,56 @@ public final class InternalValues extends SignalStoreValues {
* directly which allows testing of certain testing scenarios.
*/
public synchronized boolean gv2IgnoreP2PChanges() {
return FeatureFlags.internalUser() && getBoolean(GV2_IGNORE_P2P_CHANGES, false);
return RemoteConfig.internalUser() && getBoolean(GV2_IGNORE_P2P_CHANGES, false);
}
/**
* Show detailed recipient info in the {@link org.thoughtcrime.securesms.components.settings.conversation.InternalConversationSettingsFragment}.
*/
public synchronized boolean recipientDetails() {
return FeatureFlags.internalUser() && getBoolean(RECIPIENT_DETAILS, true);
return RemoteConfig.internalUser() && getBoolean(RECIPIENT_DETAILS, true);
}
/**
* Allow changing the censorship circumvention setting regardless of network status.
*/
public synchronized boolean allowChangingCensorshipSetting() {
return FeatureFlags.internalUser() && getBoolean(ALLOW_CENSORSHIP_SETTING, false);
return RemoteConfig.internalUser() && getBoolean(ALLOW_CENSORSHIP_SETTING, false);
}
/**
* Force the app to use the emoji that ship with the app, as opposed to the ones that were downloaded.
*/
public synchronized boolean forceBuiltInEmoji() {
return FeatureFlags.internalUser() && getBoolean(FORCE_BUILT_IN_EMOJI, false);
return RemoteConfig.internalUser() && getBoolean(FORCE_BUILT_IN_EMOJI, false);
}
/**
* Remove the requirement that there must be two sender-key-capable recipients to use sender key
*/
public synchronized boolean removeSenderKeyMinimum() {
return FeatureFlags.internalUser() && getBoolean(REMOVE_SENDER_KEY_MINIMUM, false);
return RemoteConfig.internalUser() && getBoolean(REMOVE_SENDER_KEY_MINIMUM, false);
}
/**
* Delay resending messages in response to retry receipts by 10 seconds.
*/
public synchronized boolean delayResends() {
return FeatureFlags.internalUser() && getBoolean(DELAY_RESENDS, false);
return RemoteConfig.internalUser() && getBoolean(DELAY_RESENDS, false);
}
/**
* Whether or not "shake to report" is enabled.
*/
public synchronized boolean shakeToReport() {
return FeatureFlags.internalUser() && getBoolean(SHAKE_TO_REPORT, true);
return RemoteConfig.internalUser() && getBoolean(SHAKE_TO_REPORT, true);
}
/**
* Whether or not storage service is manually disabled.
*/
public synchronized boolean storageServiceDisabled() {
return FeatureFlags.internalUser() && getBoolean(DISABLE_STORAGE_SERVICE, false);
return RemoteConfig.internalUser() && getBoolean(DISABLE_STORAGE_SERVICE, false);
}
/**
@@ -118,7 +118,7 @@ public final class InternalValues extends SignalStoreValues {
* internal users cannot be left on old servers.
*/
public synchronized @NonNull String groupCallingServer() {
String internalServer = FeatureFlags.internalUser() ? getString(CALLING_SERVER, Environment.Calling.defaultSfuUrl()) : null;
String internalServer = RemoteConfig.internalUser() ? getString(CALLING_SERVER, Environment.Calling.defaultSfuUrl()) : null;
if (internalServer != null && !Arrays.asList(BuildConfig.SIGNAL_SFU_INTERNAL_URLS).contains(internalServer)) {
internalServer = null;
}
@@ -129,7 +129,7 @@ public final class InternalValues extends SignalStoreValues {
* Setting to override the default handling of hardware/software AEC.
*/
public synchronized CallManager.AudioProcessingMethod callingAudioProcessingMethod() {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
return CallManager.AudioProcessingMethod.values()[getInteger(CALLING_AUDIO_PROCESSING_METHOD, CallManager.AudioProcessingMethod.Default.ordinal())];
} else {
return CallManager.AudioProcessingMethod.Default;
@@ -140,7 +140,7 @@ public final class InternalValues extends SignalStoreValues {
* Setting to override the default calling bandwidth mode.
*/
public synchronized CallManager.DataMode callingDataMode() {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
int index = getInteger(CALLING_DATA_MODE, CallManager.DataMode.NORMAL.ordinal());
CallManager.DataMode[] modes = CallManager.DataMode.values();
@@ -154,7 +154,7 @@ public final class InternalValues extends SignalStoreValues {
* Whether or not Telecom integration is manually disabled.
*/
public synchronized boolean callingDisableTelecom() {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
return getBoolean(CALLING_DISABLE_TELECOM, true);
} else {
return false;
@@ -165,7 +165,7 @@ public final class InternalValues extends SignalStoreValues {
* Whether or not LBRed for Opus is manually disabled.
*/
public synchronized boolean callingDisableLBRed() {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
return getBoolean(CALLING_DISABLE_LBRED, false);
} else {
return true;
@@ -176,7 +176,7 @@ public final class InternalValues extends SignalStoreValues {
* Whether or not the system is forced to be in 'websocket mode', where FCM is ignored and we use a foreground service to keep the app alive.
*/
public boolean isWebsocketModeForced() {
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
return getBoolean(FORCE_WEBSOCKET_MODE, false);
} else {
return false;
@@ -196,7 +196,7 @@ public final class InternalValues extends SignalStoreValues {
}
public boolean useConversationItemV2Media() {
return FeatureFlags.internalUser() && getBoolean(CONVERSATION_ITEM_V2_MEDIA, false);
return RemoteConfig.internalUser() && getBoolean(CONVERSATION_ITEM_V2_MEDIA, false);
}
public synchronized void setWebSocketShadowingStats(byte[] bytes) {

View File

@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.payments.currency.CurrencyUtil
import org.thoughtcrime.securesms.payments.proto.MobileCoinLedger
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.storage.StorageSyncHelper
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.payments.Money
import java.io.IOException
@@ -118,7 +118,7 @@ internal class PaymentsValues internal constructor(store: KeyValueStore) : Signa
if (!SignalStore.account().isRegistered) {
return PaymentsAvailability.NOT_IN_REGION
}
return if (FeatureFlags.payments) {
return if (RemoteConfig.payments) {
if (mobileCoinPaymentsEnabled()) {
if (GeographicalRestrictions.e164Allowed(SignalStore.account().e164)) {
PaymentsAvailability.WITHDRAW_AND_SEND

View File

@@ -6,24 +6,24 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.Util;
import java.util.Map;
public class LogSectionFeatureFlags implements LogSection {
public class LogSectionRemoteConfig implements LogSection {
@Override
public @NonNull String getTitle() {
return "FEATURE FLAGS";
return "REMOTE CONFIG";
}
@Override
public @NonNull CharSequence getContent(@NonNull Context context) {
StringBuilder out = new StringBuilder();
Map<String, Object> memory = FeatureFlags.getDebugMemoryValues();
Map<String, Object> disk = FeatureFlags.getDebugDiskValues();
Map<String, Object> pending = FeatureFlags.getDebugPendingDiskValues();
Map<String, Object> memory = RemoteConfig.getDebugMemoryValues();
Map<String, Object> disk = RemoteConfig.getDebugDiskValues();
Map<String, Object> pending = RemoteConfig.getDebugPendingDiskValues();
int remoteLength = Stream.of(memory.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
int diskLength = Stream.of(disk.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
int pendingLength = Stream.of(pending.keySet()).map(String::length).max(Integer::compareTo).orElse(0);

View File

@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.net.StandardUserAgentInterceptor;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.signal.core.util.Stopwatch;
import java.io.IOException;
@@ -77,7 +77,7 @@ public class SubmitDebugLogRepository {
add(new LogSectionCapabilities());
add(new LogSectionMemory());
add(new LogSectionLocalMetrics());
add(new LogSectionFeatureFlags());
add(new LogSectionRemoteConfig());
add(new LogSectionPin());
if (Build.VERSION.SDK_INT >= 28) {
add(new LogSectionPower());
@@ -92,7 +92,7 @@ public class SubmitDebugLogRepository {
add(new LogSectionTrace());
add(new LogSectionThreads());
add(new LogSectionThreadDump());
if (FeatureFlags.internalUser()) {
if (RemoteConfig.internalUser()) {
add(new LogSectionSenderKey());
}
add(new LogSectionDatabaseSchema());

View File

@@ -17,14 +17,13 @@ import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.jobs.MultiDeviceDeleteSendSyncJob;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.util.AttachmentUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.StorageUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
@@ -66,7 +65,7 @@ final class MediaActions {
recordCount);
String confirmMessage;
if (TextSecurePreferences.isMultiDevice(context) && FeatureFlags.deleteSyncEnabled()) {
if (TextSecurePreferences.isMultiDevice(context) && RemoteConfig.deleteSyncEnabled()) {
confirmMessage = res.getQuantityString(R.plurals.MediaOverviewActivity_Media_delete_confirm_message_linked_device,
recordCount,
recordCount);
@@ -99,7 +98,7 @@ final class MediaActions {
}
}
if (FeatureFlags.deleteSyncEnabled() && Util.hasItems(deletedMessageRecords)) {
if (RemoteConfig.deleteSyncEnabled() && Util.hasItems(deletedMessageRecords)) {
MultiDeviceDeleteSendSyncJob.enqueueMessageDeletes(deletedMessageRecords);
}

View File

@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.longmessage.resolveBody
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.sms.MessageSender
import org.thoughtcrime.securesms.util.AttachmentUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
/**
* Repository for accessing the attachments in the encrypted database.
@@ -85,7 +85,7 @@ class MediaPreviewRepository {
fun localDelete(attachment: DatabaseAttachment): Completable {
return Completable.fromRunnable {
val deletedMessageRecord = AttachmentUtil.deleteAttachment(attachment)
if (deletedMessageRecord != null && FeatureFlags.deleteSyncEnabled) {
if (deletedMessageRecord != null && RemoteConfig.deleteSyncEnabled) {
MultiDeviceDeleteSendSyncJob.enqueueMessageDeletes(setOf(deletedMessageRecord))
}
}.subscribeOn(Schedulers.io())

View File

@@ -67,10 +67,10 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.ContextUtil
import org.thoughtcrime.securesms.util.DateUtils
import org.thoughtcrime.securesms.util.Debouncer
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.FullscreenHelper
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.MessageConstraintsUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SaveAttachmentTask
import org.thoughtcrime.securesms.util.SpanUtil
import org.thoughtcrime.securesms.util.StorageUtil
@@ -601,7 +601,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
MaterialAlertDialogBuilder(requireContext()).apply {
setIcon(R.drawable.symbol_error_triangle_fill_24)
setTitle(R.string.MediaPreviewActivity_media_delete_confirmation_title)
setMessage(if (TextSecurePreferences.isMultiDevice(requireContext()) && FeatureFlags.deleteSyncEnabled) R.string.MediaPreviewActivity_media_delete_confirmation_message_linked_device else R.string.MediaPreviewActivity_media_delete_confirmation_message)
setMessage(if (TextSecurePreferences.isMultiDevice(requireContext()) && RemoteConfig.deleteSyncEnabled) R.string.MediaPreviewActivity_media_delete_confirmation_message_linked_device else R.string.MediaPreviewActivity_media_delete_confirmation_message)
setCancelable(true)
setNegativeButton(android.R.string.cancel, null)
setPositiveButton(R.string.ConversationFragment_delete_for_me) { _, _ ->

View File

@@ -62,7 +62,7 @@ import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.MediaConstraints;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -178,7 +178,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
previewView.setScaleType(PREVIEW_SCALE_TYPE);
if (FeatureFlags.customCameraXController()) {
if (RemoteConfig.customCameraXController()) {
View focusIndicator = view.findViewById(R.id.camerax_focus_indicator);
cameraController = new SignalCameraController(requireContext(), getViewLifecycleOwner(), previewView, focusIndicator);
} else {
@@ -199,7 +199,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
onOrientationChanged();
if (FeatureFlags.customCameraXController()) {
if (RemoteConfig.customCameraXController()) {
cameraController.initializeAndBind(requireContext(), getViewLifecycleOwner());
}
@@ -705,7 +705,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
@Override
public void onOrientationChanged(int orientation) {
if (cameraController != null) {
if (FeatureFlags.customCameraXController()) {
if (RemoteConfig.customCameraXController()) {
cameraController.setImageRotation(orientation);
}
}

View File

@@ -30,7 +30,7 @@ import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.util.ContextUtil;
import org.thoughtcrime.securesms.util.Debouncer;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
import org.thoughtcrime.securesms.video.VideoUtil;
@@ -259,7 +259,7 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener
}
public float getDefaultVideoZoomRatio() {
if (FeatureFlags.startVideoRecordAt1x()) {
if (RemoteConfig.startVideoRecordAt1x()) {
return 1f;
} else {
return Objects.requireNonNull(cameraController.getZoomState().getValue()).getMinZoomRatio();

View File

@@ -5,7 +5,7 @@ import android.os.Build
import androidx.camera.view.CameraController
import org.signal.core.util.asListContains
import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.video.VideoUtil
/**
@@ -86,7 +86,7 @@ sealed class CameraXModePolicy {
val isMixedModeSupported = isVideoSupported &&
Build.VERSION.SDK_INT >= 26 &&
CameraXUtil.isMixedModeSupported(context) &&
!FeatureFlags.cameraXMixedModelBlocklist.asListContains(Build.MODEL)
!RemoteConfig.cameraXMixedModelBlocklist.asListContains(Build.MODEL)
return when {
isMixedModeSupported -> Mixed(isQrScanEnabled)

View File

@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.mediasend.camerax
import android.os.Build
import org.signal.core.util.asListContains
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
/**
* Some phones don't work well with CameraX. This class uses a remote config to decide
@@ -12,6 +12,6 @@ object CameraXModelBlocklist {
@JvmStatic
fun isBlocklisted(): Boolean {
return FeatureFlags.cameraXModelBlocklist.asListContains(Build.MODEL)
return RemoteConfig.cameraXModelBlocklist.asListContains(Build.MODEL)
}
}

View File

@@ -44,8 +44,8 @@ import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.Debouncer
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.FullscreenHelper
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.WindowUtil
import org.thoughtcrime.securesms.util.navigation.safeNavigate
import org.thoughtcrime.securesms.util.visible
@@ -92,7 +92,7 @@ class MediaSelectionActivity :
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
setContentView(R.layout.media_selection_activity)
if (FeatureFlags.customCameraXController) {
if (RemoteConfig.customCameraXController) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}

View File

@@ -9,8 +9,8 @@ import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.mms.SentMediaQuality
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.video.TranscodingPreset
data class MediaSelectionState(
@@ -36,7 +36,7 @@ data class MediaSelectionState(
val transcodingPreset: TranscodingPreset = MediaConstraints.getPushMediaConstraints(SentMediaQuality.fromCode(quality.code)).videoTranscodingSettings
val maxSelection = FeatureFlags.maxAttachmentCount
val maxSelection = RemoteConfig.maxAttachmentCount
val canSend = !isSent && selectedMedia.isNotEmpty()

View File

@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.CommunicationActions
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.navigation.safeNavigate
import java.io.FileDescriptor
import java.util.Optional
@@ -94,7 +94,7 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme
.setTitle(R.string.MediaCaptureFragment_device_link_dialog_title)
.setMessage(R.string.MediaCaptureFragment_device_link_dialog_body)
.setPositiveButton(R.string.MediaCaptureFragment_device_link_dialog_continue) { d, _ ->
if (FeatureFlags.internalUser) {
if (RemoteConfig.internalUser) {
startActivity(AppSettingsActivity.linkedDevices(requireContext()))
} else {
startActivity(DeviceActivity.getIntentForScanner(requireContext()))

View File

@@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.sharing.ShareContact
import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter
import org.thoughtcrime.securesms.sharing.ShareSelectionMappingModel
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() {
@@ -65,7 +65,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment(
val contactRecycler: RecyclerView = view.findViewById(R.id.contact_recycler)
mediator = ContactSearchMediator(
fragment = this,
selectionLimits = FeatureFlags.shareSelectionLimit,
selectionLimits = RemoteConfig.shareSelectionLimit,
displayOptions = ContactSearchAdapter.DisplayOptions(
displayCheckBox = true,
displaySecondaryInformation = ContactSearchAdapter.DisplaySecondaryInformation.NEVER

View File

@@ -10,14 +10,14 @@ import kotlinx.parcelize.Parcelize
import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.fonts.TextFont
import org.thoughtcrime.securesms.scribbles.HSVColorSlider
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
@Parcelize
data class TextStoryPostCreationState(
val body: CharSequence = "",
val textColor: Int = HSVColorSlider.getLastColor(),
val textColorStyle: TextColorStyle = TextColorStyle.NO_BACKGROUND,
val textAlignment: TextAlignment = if (FeatureFlags.storiesTextFunctions) TextAlignment.START else TextAlignment.CENTER,
val textAlignment: TextAlignment = if (RemoteConfig.storiesTextFunctions) TextAlignment.START else TextAlignment.CENTER,
val textFont: TextFont = TextFont.REGULAR,
@IntRange(from = 0, to = 100) val textScale: Int = 50,
val backgroundColor: ChatColors = TextStoryBackgroundColors.getInitialBackgroundColor(),

View File

@@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.scribbles.HSVColorSlider
import org.thoughtcrime.securesms.scribbles.HSVColorSlider.getColor
import org.thoughtcrime.securesms.scribbles.HSVColorSlider.setColor
import org.thoughtcrime.securesms.scribbles.HSVColorSlider.setUpForColor
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.fragments.findListener
@@ -105,7 +105,7 @@ class TextStoryPostTextEntryFragment : KeyboardEntryDialogFragment(
backgroundButton
)
if (FeatureFlags.storiesTextFunctions) {
if (RemoteConfig.storiesTextFunctions) {
fadeableViews = fadeableViews + alignmentButton
alignmentButton.visibility = View.VISIBLE
scaleBar.visibility = View.VISIBLE

View File

@@ -39,7 +39,7 @@ import org.thoughtcrime.securesms.profiles.manage.EditProfileActivity;
import org.thoughtcrime.securesms.profiles.username.NewWaysToConnectDialogFragment;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper;
@@ -104,7 +104,7 @@ public final class Megaphones {
* The megaphones we want to display *in priority order*. This is a {@link LinkedHashMap}, so order is preserved.
* We will render the first applicable megaphone in this collection.
* <p>
* This is also when you would hide certain megaphones based on things like {@link FeatureFlags}.
* This is also when you would hide certain megaphones based on things like {@link RemoteConfig}.
*/
private static Map<Event, MegaphoneSchedule> buildDisplayOrder(@NonNull Context context, @NonNull Map<Event, MegaphoneRecord> records) {
return new LinkedHashMap<>() {{
@@ -132,7 +132,7 @@ public final class Megaphones {
return false;
}
long expiringAt = device.lastActiveTimestamp + FeatureFlags.getLinkedDeviceLifespan();
long expiringAt = device.lastActiveTimestamp + RemoteConfig.getLinkedDeviceLifespan();
long expiringIn = Math.max(expiringAt - System.currentTimeMillis(), 0);
return expiringIn < TimeUnit.DAYS.toMillis(7) && expiringIn > 0;
@@ -177,7 +177,7 @@ public final class Megaphones {
throw new IllegalStateException("No linked device to show");
}
long expiringAt = device.lastActiveTimestamp + FeatureFlags.getLinkedDeviceLifespan();
long expiringAt = device.lastActiveTimestamp + RemoteConfig.getLinkedDeviceLifespan();
long expiringIn = Math.max(expiringAt - System.currentTimeMillis(), 0);
int expiringDays = (int) TimeUnit.MILLISECONDS.toDays(expiringIn);

View File

@@ -22,8 +22,8 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.megaphone.RemoteMegaphoneRepository.Action
import org.thoughtcrime.securesms.providers.BlobProvider
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.LocaleFeatureFlags
import org.thoughtcrime.securesms.util.LocaleRemoteConfig
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.VersionTracker
import java.util.Objects
import kotlin.math.min
@@ -89,7 +89,7 @@ object RemoteMegaphoneRepository {
return db.getPotentialMegaphonesAndClearOld(now)
.asSequence()
.filter { it.imageUrl == null || it.imageUri != null }
.filter { it.countries == null || LocaleFeatureFlags.shouldShowReleaseNote(it.uuid, it.countries) }
.filter { it.countries == null || LocaleRemoteConfig.shouldShowReleaseNote(it.uuid, it.countries) }
.filter { it.conditionalId == null || checkCondition(it.conditionalId) }
.filter { it.snoozedAt == 0L || checkSnooze(it, now) }
.firstOrNull()
@@ -112,7 +112,7 @@ object RemoteMegaphoneRepository {
private fun checkCondition(conditionalId: String): Boolean {
return when (conditionalId) {
"standard_donate" -> shouldShowDonateMegaphone()
"internal_user" -> FeatureFlags.internalUser
"internal_user" -> RemoteConfig.internalUser
else -> false
}
}

View File

@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.Callbacks
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.Projection;
import org.thoughtcrime.securesms.util.ProjectionList;
@@ -96,7 +96,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G
}
private void bindInternalDetails(MessageRecord messageRecord) {
if (!FeatureFlags.internalUser()) {
if (!RemoteConfig.internalUser()) {
internalDetailsButton.setVisibility(View.GONE);
return;
}

View File

@@ -18,7 +18,7 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.jobmanager.JobTracker;
import org.thoughtcrime.securesms.jobs.MessageFetchJob;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import java.util.Locale;
import java.util.Optional;
@@ -48,7 +48,7 @@ public final class RoutineMessageFetchReceiver extends BroadcastReceiver {
return;
}
long foregroundDelayMs = FeatureFlags.getBackgroundMessageProcessForegroundDelay();
long foregroundDelayMs = RemoteConfig.getBackgroundMessageProcessForegroundDelay();
long jobTimeout = foregroundDelayMs + 200;
Log.i(TAG, String.format(Locale.US, "Starting PushNotificationReceiveJob asynchronously with %d delay before foreground shown", foregroundDelayMs));
@@ -76,7 +76,7 @@ public final class RoutineMessageFetchReceiver extends BroadcastReceiver {
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123, alarmIntent, PendingIntentFlags.updateCurrent());
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
long interval = FeatureFlags.getBackgroundMessageProcessInterval();
long interval = RemoteConfig.getBackgroundMessageProcessInterval();
if (interval < 0) {
alarmManager.cancel(pendingIntent);

View File

@@ -89,10 +89,10 @@ import org.thoughtcrime.securesms.recipients.RecipientUtil
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.storage.StorageSyncHelper
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.LinkUtil
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.MessageConstraintsUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.isStory
@@ -220,7 +220,7 @@ object DataMessageProcessor {
if (insertResult != null && insertResult.threadWasNewlyCreated && !threadRecipient.isGroup && !threadRecipient.isSelf && !senderRecipient.isSystemContact) {
val timeSinceLastSync = System.currentTimeMillis() - SignalStore.misc().lastCdsForegroundSyncTime
if (timeSinceLastSync > FeatureFlags.cdsForegroundSyncInterval || timeSinceLastSync < 0) {
if (timeSinceLastSync > RemoteConfig.cdsForegroundSyncInterval || timeSinceLastSync < 0) {
log(envelope.timestamp!!, "New 1:1 chat. Scheduling a CDS sync to see if they match someone in our contacts.")
AppDependencies.jobManager.add(DirectoryRefreshJob(false))
SignalStore.misc().lastCdsForegroundSyncTime = System.currentTimeMillis()

View File

@@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.RecipientAccessList;
import org.thoughtcrime.securesms.util.SignalLocalMetrics;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -303,7 +303,7 @@ public final class GroupSendUtil {
long keyCreateTime = SenderKeyUtil.getCreateTimeForOurKey(distributionId);
long keyAge = System.currentTimeMillis() - keyCreateTime;
if (keyCreateTime != -1 && keyAge > FeatureFlags.senderKeyMaxAge()) {
if (keyCreateTime != -1 && keyAge > RemoteConfig.senderKeyMaxAge()) {
Log.w(TAG, "DistributionId " + distributionId + " was created at " + keyCreateTime + " and is " + (keyAge) + " ms old (~" + TimeUnit.MILLISECONDS.toDays(keyAge) + " days). Rotating.");
SenderKeyUtil.rotateOurKey(distributionId);
}

View File

@@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.notifications.v2.ConversationId
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.Util
@@ -561,7 +561,7 @@ open class MessageContentProcessor(private val context: Context) {
}
private fun handleRetryReceipt(envelope: Envelope, metadata: EnvelopeMetadata, decryptionErrorMessage: DecryptionErrorMessage, senderRecipient: Recipient) {
if (!FeatureFlags.retryReceipts) {
if (!RemoteConfig.retryReceipts) {
warn(envelope.timestamp!!, "[RetryReceipt] Feature flag disabled, skipping retry receipt.")
return
}

View File

@@ -49,8 +49,8 @@ import org.thoughtcrime.securesms.notifications.NotificationChannels
import org.thoughtcrime.securesms.notifications.NotificationIds
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.LRUCache
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.asChain
import org.whispersystems.signalservice.api.InvalidMessageStructureException
import org.whispersystems.signalservice.api.crypto.ContentHint
@@ -156,7 +156,7 @@ object MessageDecryptor {
if (validationResult is EnvelopeContentValidator.Result.Invalid) {
Log.w(TAG, "${logPrefix(envelope, cipherResult)} Invalid content! ${validationResult.reason}", validationResult.throwable)
if (FeatureFlags.internalUser) {
if (RemoteConfig.internalUser) {
postInvalidMessageNotification(context, validationResult.reason)
}
@@ -213,11 +213,11 @@ object MessageDecryptor {
check(e is ProtocolException)
Log.w(TAG, "${logPrefix(envelope, e)} Decryption error!", e, true)
if (FeatureFlags.internalUser) {
if (RemoteConfig.internalUser) {
postDecryptionErrorNotification(context)
}
if (FeatureFlags.retryReceipts) {
if (RemoteConfig.retryReceipts) {
buildResultForDecryptionError(context, envelope, serverDeliveredTimestamp, followUpOperations, e)
} else {
Log.w(TAG, "${logPrefix(envelope, e)} Retry receipts disabled! Enqueuing a session reset job, which will also insert an error message.", e, true)
@@ -296,7 +296,7 @@ object MessageDecryptor {
val errorCount: DecryptionErrorCount = decryptionErrorCounts.getOrPut(sender.id) { DecryptionErrorCount(count = 0, lastReceivedTime = 0) }
val timeSinceLastError = receivedTimestamp - errorCount.lastReceivedTime
if (timeSinceLastError > FeatureFlags.retryReceiptMaxCountResetAge && errorCount.count > 0) {
if (timeSinceLastError > RemoteConfig.retryReceiptMaxCountResetAge && errorCount.count > 0) {
Log.i(TAG, "${logPrefix(envelope, senderServiceId)} Resetting decryption error count for ${sender.id} because it has been $timeSinceLastError ms since the last error.", true)
errorCount.count = 0
}
@@ -304,8 +304,8 @@ object MessageDecryptor {
errorCount.count++
errorCount.lastReceivedTime = receivedTimestamp
if (errorCount.count > FeatureFlags.retryReceiptMaxCount) {
Log.w(TAG, "${logPrefix(envelope, senderServiceId)} This is error number ${errorCount.count} from ${sender.id}, which is greater than the maximum of ${FeatureFlags.retryReceiptMaxCount}. Ignoring.", true)
if (errorCount.count > RemoteConfig.retryReceiptMaxCount) {
Log.w(TAG, "${logPrefix(envelope, senderServiceId)} This is error number ${errorCount.count} from ${sender.id}, which is greater than the maximum of ${RemoteConfig.retryReceiptMaxCount}. Ignoring.", true)
if (contentHint == ContentHint.IMPLICIT) {
Log.w(TAG, "${logPrefix(envelope, senderServiceId)} The content hint is $contentHint, so no error message is needed.", true)

View File

@@ -14,8 +14,8 @@ import org.thoughtcrime.securesms.attachments.PointerAttachment
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.InvalidMessageStructureException
import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer
@@ -171,7 +171,7 @@ object SignalServiceProtoUtil {
}
fun List<AttachmentPointer>.toPointersWithinLimit(): List<Attachment> {
return mapNotNull { it.toPointer() }.take(FeatureFlags.maxAttachmentCount)
return mapNotNull { it.toPointer() }.take(RemoteConfig.maxAttachmentCount)
}
fun AttachmentPointer.toPointer(stickerLocator: StickerLocator? = null): Attachment? {

View File

@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.mms.IncomingMessage
import org.thoughtcrime.securesms.mms.MmsException
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata
import org.whispersystems.signalservice.internal.push.Content
import org.whispersystems.signalservice.internal.push.Envelope
@@ -90,7 +90,7 @@ object StoryMessageProcessor {
}
if (insertResult != null) {
Stories.enqueueNextStoriesForDownload(threadRecipient.id, false, FeatureFlags.storiesAutoDownloadMaximum)
Stories.enqueueNextStoriesForDownload(threadRecipient.id, false, RemoteConfig.storiesAutoDownloadMaximum)
AppDependencies.expireStoriesManager.scheduleIfNecessary()
}
}

View File

@@ -90,10 +90,10 @@ import org.thoughtcrime.securesms.service.webrtc.links.SignalCallLinkState
import org.thoughtcrime.securesms.storage.StorageSyncHelper
import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.IdentityUtil
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.MessageConstraintsUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.crypto.EnvelopeMetadata
@@ -1368,7 +1368,7 @@ object SyncMessageProcessor {
@Throws(BadGroupIdException::class)
private fun handleSynchronizeGroupOrAdHocCallEvent(callEvent: SyncMessage.CallEvent, envelopeTimestamp: Long) {
if (!FeatureFlags.adHocCalling && callEvent.type == SyncMessage.CallEvent.Type.AD_HOC_CALL) {
if (!RemoteConfig.adHocCalling && callEvent.type == SyncMessage.CallEvent.Type.AD_HOC_CALL) {
log(envelopeTimestamp, "Ad-Hoc calling is not currently supported by this client, ignoring.")
return
}
@@ -1475,7 +1475,7 @@ object SyncMessageProcessor {
}
private fun handleSynchronizeDeleteForMe(context: Context, deleteForMe: SyncMessage.DeleteForMe, envelopeTimestamp: Long, earlyMessageCacheEntry: EarlyMessageCacheEntry?) {
if (!FeatureFlags.deleteSyncEnabled) {
if (!RemoteConfig.deleteSyncEnabled) {
warn(envelopeTimestamp, "Delete for me sync message dropped as support not enabled")
return
}

View File

@@ -7,7 +7,7 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.JobLogger;
import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
/**
* A base class for jobs that are intended to be used in {@link ApplicationMigrations}. Some
@@ -47,7 +47,7 @@ abstract class MigrationJob extends Job {
} catch (Exception e) {
if (shouldRetry(e)) {
Log.w(TAG, JobLogger.format(this, "Encountered a retryable exception."), e);
return Result.retry(BackoffUtil.exponentialBackoff(getRunAttempt() + 1, FeatureFlags.getDefaultMaxBackoff()));
return Result.retry(BackoffUtil.exponentialBackoff(getRunAttempt() + 1, RemoteConfig.getDefaultMaxBackoff()));
} else {
Log.w(TAG, JobLogger.format(this, "Encountered a non-runtime fatal exception."), e);
throw new FailedMigrationError(e);

View File

@@ -81,7 +81,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.ProfileUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -477,7 +477,7 @@ public class AttachmentManager {
intent.putExtra(PaymentsActivity.EXTRA_PAYMENTS_STARTING_ACTION, R.id.action_directly_to_createPayment);
intent.putExtra(PaymentsActivity.EXTRA_STARTING_ARGUMENTS, new CreatePaymentFragmentArgs.Builder(new PayeeParcelable(recipient.getId())).setFinishOnConfirm(true).build().toBundle());
fragment.startActivity(intent);
} else if (FeatureFlags.paymentsRequestActivateFlow() && recipient.getPaymentActivationCapability().isSupported()) {
} else if (RemoteConfig.paymentsRequestActivateFlow() && recipient.getPaymentActivationCapability().isSupported()) {
showRequestToActivatePayments(fragment.requireContext(), recipient);
} else {
RecipientHasNotEnabledPaymentsDialog.show(fragment.requireContext());

View File

@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
import org.thoughtcrime.securesms.video.TranscodingPreset;
@@ -129,6 +129,6 @@ public abstract class MediaConstraints {
}
public static boolean isVideoTranscodeAvailable() {
return Build.VERSION.SDK_INT >= 26 && (FeatureFlags.useStreamingVideoMuxer() || MemoryFileDescriptor.supported());
return Build.VERSION.SDK_INT >= 26 && (RemoteConfig.useStreamingVideoMuxer() || MemoryFileDescriptor.supported());
}
}

View File

@@ -7,8 +7,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.LocaleFeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.LocaleRemoteConfig;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.video.TranscodingPreset;
@@ -68,7 +68,7 @@ public class PushMediaConstraints extends MediaConstraints {
@Override
public long getCompressedVideoMaxSize(Context context) {
if (FeatureFlags.useStreamingVideoMuxer()) {
if (RemoteConfig.useStreamingVideoMuxer()) {
return getMaxAttachmentSize();
} else {
return Util.isLowMemory(context) ? 30 * MB
@@ -104,7 +104,7 @@ public class PushMediaConstraints extends MediaConstraints {
if (sentMediaQuality == SentMediaQuality.HIGH) {
return MediaConfig.LEVEL_3;
}
return LocaleFeatureFlags.getMediaQualityLevel().orElse(MediaConfig.getDefault(context));
return LocaleRemoteConfig.getMediaQualityLevel().orElse(MediaConfig.getDefault(context));
}
public enum MediaConfig {

View File

@@ -18,7 +18,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity
import org.thoughtcrime.securesms.notifications.NotificationChannels
import org.thoughtcrime.securesms.notifications.NotificationIds
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
import org.whispersystems.signalservice.internal.websocket.WebSocketShadowingBridge
/**
@@ -37,7 +37,7 @@ class DefaultWebSocketShadowingBridge(private val context: Application) : WebSoc
}
override fun triggerFailureNotification(message: String) {
if (!FeatureFlags.internalUser) {
if (!RemoteConfig.internalUser) {
return
}
val notification: Notification = NotificationCompat.Builder(context, NotificationChannels.getInstance().FAILURES)

View File

@@ -13,10 +13,10 @@ import org.thoughtcrime.securesms.database.LocalMetricsDatabase
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.DeviceProperties
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.JsonUtils
import org.thoughtcrime.securesms.util.LocaleFeatureFlags
import org.thoughtcrime.securesms.util.LocaleRemoteConfig
import org.thoughtcrime.securesms.util.PowerManagerCompat
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.SignalLocalMetrics
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.days
@@ -36,7 +36,7 @@ object SlowNotificationHeuristics {
private val TAG = Log.tag(SlowNotificationHeuristics::class.java)
fun getConfiguration(): Configuration {
val json = FeatureFlags.delayedNotificationsPromptConfig
val json = RemoteConfig.delayedNotificationsPromptConfig
return if (TextUtils.isEmpty(json)) {
getDefaultConfiguration()
} else {
@@ -64,7 +64,7 @@ object SlowNotificationHeuristics {
@JvmStatic
fun shouldPromptUserForLogs(): Boolean {
if (!LocaleFeatureFlags.isDelayedNotificationPromptEnabled() || SignalStore.uiHints().hasDeclinedToShareNotificationLogs()) {
if (!LocaleRemoteConfig.isDelayedNotificationPromptEnabled() || SignalStore.uiHints().hasDeclinedToShareNotificationLogs()) {
return false
}
if (System.currentTimeMillis() - SignalStore.uiHints().lastNotificationLogsPrompt < TimeUnit.DAYS.toMillis(7)) {
@@ -80,7 +80,7 @@ object SlowNotificationHeuristics {
return false
}
val remoteEnabled = LocaleFeatureFlags.isBatterySaverPromptEnabled() || LocaleFeatureFlags.isDelayedNotificationPromptEnabled()
val remoteEnabled = LocaleRemoteConfig.isBatterySaverPromptEnabled() || LocaleRemoteConfig.isDelayedNotificationPromptEnabled()
if (!remoteEnabled || SignalStore.uiHints().hasDismissedBatterySaverPrompt()) {
return false
}

View File

@@ -12,8 +12,8 @@ import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.providers.BlobProvider
import org.thoughtcrime.securesms.util.BitmapDecodingException
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.ImageCompressionUtil
import org.thoughtcrime.securesms.util.RemoteConfig
import org.thoughtcrime.securesms.util.kb
import org.thoughtcrime.securesms.util.mb
@@ -41,7 +41,7 @@ object NotificationThumbnails {
* specifics here, we'll just disable notification thumbnails for them.
*/
private val isBlocklisted by lazy {
FeatureFlags.notificationThumbnailProductBlocklist.asListContains(Build.PRODUCT)
RemoteConfig.notificationThumbnailProductBlocklist.asListContains(Build.PRODUCT)
}
fun getWithoutModifying(notificationItem: NotificationItem): NotificationItem.ThumbnailInfo {

View File

@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.payments.reconciliation.LedgerReconcile;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
@@ -25,7 +25,7 @@ public final class DataExportUtil {
private DataExportUtil() {}
public static @NonNull String createTsv() {
if (!FeatureFlags.internalUser()) {
if (!RemoteConfig.internalUser()) {
throw new AssertionError("This is intended for internal use only");
}

View File

@@ -4,7 +4,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.Util;
import java.util.Arrays;
@@ -24,7 +24,7 @@ public final class GeographicalRestrictions {
String bareE164 = e164.startsWith("+") ? e164.substring(1) : e164;
return parsePrefixes(FeatureFlags.paymentsCountryBlocklist())
return parsePrefixes(RemoteConfig.paymentsCountryBlocklist())
.stream()
.noneMatch(bareE164::startsWith);
}

View File

@@ -23,11 +23,9 @@ import com.google.android.material.button.MaterialButton;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.MainActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.jobs.ProfileUploadJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
@@ -40,7 +38,7 @@ import org.thoughtcrime.securesms.registration.RegistrationUtil;
import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate;
import org.thoughtcrime.securesms.restore.RestoreActivity;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
@@ -240,7 +238,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
Activity activity = requireActivity();
if (FeatureFlags.messageBackups()) {
if (RemoteConfig.messageBackups()) {
startActivity(RestoreActivity.getIntentForTransferOrRestore(activity));
} else if (Recipient.self().getProfileName().isEmpty() || !AvatarHelper.hasAvatar(activity, Recipient.self().getId())) {
final Intent main = MainActivity.clearTop(activity);

View File

@@ -5,7 +5,7 @@
package org.thoughtcrime.securesms.pin
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.RemoteConfig
object Svr3Migration {
@@ -19,11 +19,11 @@ object Svr3Migration {
* Whether or not you should write to SVR3. If [shouldWriteToSvr2] is also enabled, you should write to SVR3 first.
*/
val shouldWriteToSvr3: Boolean
get() = shouldReadFromSvr3 && FeatureFlags.svr3MigrationPhase.let { it == 1 || it == 2 }
get() = shouldReadFromSvr3 && RemoteConfig.svr3MigrationPhase.let { it == 1 || it == 2 }
/**
* Whether or not you should write to SVR2. If [shouldWriteToSvr3] is also enabled, you should write to SVR3 first.
*/
val shouldWriteToSvr2: Boolean
get() = !shouldReadFromSvr3 || FeatureFlags.svr3MigrationPhase != 2
get() = !shouldReadFromSvr3 || RemoteConfig.svr3MigrationPhase != 2
}

View File

@@ -41,7 +41,7 @@ import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanFindMeByPhoneNumberFra
import org.thoughtcrime.securesms.profiles.manage.EditProfileNameFragment;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
@@ -166,7 +166,7 @@ public class CreateProfileFragment extends LoggingFragment {
binding.mmsGroupHint.setVisibility(isEditingGroup && groupId.isMms() ? View.VISIBLE : View.GONE);
if (isEditingGroup) {
EditTextUtil.addGraphemeClusterLimitFilter(binding.givenName, FeatureFlags.getMaxGroupNameGraphemeLength());
EditTextUtil.addGraphemeClusterLimitFilter(binding.givenName, RemoteConfig.getMaxGroupNameGraphemeLength());
binding.profileDescriptionText.setVisibility(View.GONE);
binding.whoCanFindMeContainer.setVisibility(View.GONE);
binding.givenName.addTextChangedListener(new AfterTextChanged(s -> viewModel.setGivenName(s.toString())));

View File

@@ -11,7 +11,7 @@ import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
@@ -62,8 +62,8 @@ public class AccountManagerFactory {
deviceId,
password,
BuildConfig.SIGNAL_AGENT,
FeatureFlags.okHttpAutomaticRetry(),
FeatureFlags.groupLimits().getHardLimit());
RemoteConfig.okHttpAutomaticRetry(),
RemoteConfig.groupLimits().getHardLimit());
}
/**
@@ -91,8 +91,8 @@ public class AccountManagerFactory {
deviceId,
password,
BuildConfig.SIGNAL_AGENT,
FeatureFlags.okHttpAutomaticRetry(),
FeatureFlags.groupLimits().getHardLimit());
RemoteConfig.okHttpAutomaticRetry(),
RemoteConfig.groupLimits().getHardLimit());
}
}

View File

@@ -43,7 +43,6 @@ import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.recipients.ui.about.AboutSheet;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ContextUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.SpanUtil;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;

View File

@@ -8,7 +8,7 @@ import androidx.navigation.fragment.NavHostFragment;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.signal.core.util.concurrent.SimpleTask;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
@@ -32,7 +32,7 @@ public final class EnterSmsCodeFragment extends BaseEnterSmsCodeFragment<Registr
SimpleTask.run(() -> {
long startTime = System.currentTimeMillis();
try {
FeatureFlags.refreshSync();
RemoteConfig.refreshSync();
Log.i(TAG, "Took " + (System.currentTimeMillis() - startTime) + " ms to get feature flags.");
} catch (IOException e) {
Log.w(TAG, "Failed to refresh flags after " + (System.currentTimeMillis() - startTime) + " ms.", e);

View File

@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.registration.viewmodel.BaseRegistrationViewModel;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.signal.core.util.Stopwatch;
import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
@@ -61,11 +61,11 @@ public final class RegistrationLockFragment extends BaseRegistrationLockFragment
stopwatch.split("ContactRestore");
try {
FeatureFlags.refreshSync();
RemoteConfig.refreshSync();
} catch (IOException e) {
Log.w(TAG, "Failed to refresh flags.", e);
}
stopwatch.split("FeatureFlags");
stopwatch.split("RemoteConfig");
stopwatch.stop(TAG);

Some files were not shown because too many files have changed in this diff Show More