replacing DEBUG build config flag with injectable property

This commit is contained in:
Adam Brown 2022-07-01 09:05:04 +01:00
parent b6d052e58d
commit cc4aae0f4a
22 changed files with 93 additions and 49 deletions

View File

@ -41,6 +41,7 @@ import com.vanniktech.emoji.EmojiManager
import com.vanniktech.emoji.google.GoogleEmojiProvider import com.vanniktech.emoji.google.GoogleEmojiProvider
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.resources.BuildMeta
import im.vector.app.features.analytics.VectorAnalytics import im.vector.app.features.analytics.VectorAnalytics
import im.vector.app.features.call.webrtc.WebRtcCallManager import im.vector.app.features.call.webrtc.WebRtcCallManager
import im.vector.app.features.configuration.VectorConfiguration import im.vector.app.features.configuration.VectorConfiguration
@ -99,6 +100,7 @@ class VectorApplication :
@Inject lateinit var flipperProxy: FlipperProxy @Inject lateinit var flipperProxy: FlipperProxy
@Inject lateinit var matrix: Matrix @Inject lateinit var matrix: Matrix
@Inject lateinit var fcmHelper: FcmHelper @Inject lateinit var fcmHelper: FcmHelper
@Inject lateinit var buildMeta: BuildMeta
// font thread handler // font thread handler
private var fontThreadHandler: Handler? = null private var fontThreadHandler: Handler? = null
@ -127,12 +129,12 @@ class VectorApplication :
.filterIsInstance(JitsiMeetDefaultLogHandler::class.java) .filterIsInstance(JitsiMeetDefaultLogHandler::class.java)
.forEach { Timber.uproot(it) } .forEach { Timber.uproot(it) }
if (BuildConfig.DEBUG) { if (buildMeta.isDebug) {
Timber.plant(Timber.DebugTree()) Timber.plant(Timber.DebugTree())
} }
Timber.plant(vectorFileLogger) Timber.plant(vectorFileLogger)
if (BuildConfig.DEBUG) { if (buildMeta.isDebug) {
Stetho.initializeWithDefaults(this) Stetho.initializeWithDefaults(this)
} }
logInfo() logInfo()
@ -148,7 +150,7 @@ class VectorApplication :
R.array.com_google_android_gms_fonts_certs R.array.com_google_android_gms_fonts_certs
) )
FontsContractCompat.requestFont(this, fontRequest, emojiCompatFontProvider, getFontThreadHandler()) FontsContractCompat.requestFont(this, fontRequest, emojiCompatFontProvider, getFontThreadHandler())
VectorLocale.init(this) VectorLocale.init(this, buildMeta)
ThemeUtils.init(this) ThemeUtils.init(this)
vectorConfiguration.applyToApplicationContext() vectorConfiguration.applyToApplicationContext()

View File

@ -24,6 +24,7 @@ import im.vector.app.BuildConfig
import im.vector.app.config.Analytics import im.vector.app.config.Analytics
import im.vector.app.config.Config import im.vector.app.config.Config
import im.vector.app.config.KeySharingStrategy import im.vector.app.config.KeySharingStrategy
import im.vector.app.core.resources.BuildMeta
import im.vector.app.features.analytics.AnalyticsConfig import im.vector.app.features.analytics.AnalyticsConfig
import im.vector.app.features.call.webrtc.VoipConfig import im.vector.app.features.call.webrtc.VoipConfig
import im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy import im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy
@ -36,8 +37,8 @@ import im.vector.app.features.raw.wellknown.CryptoConfig
object ConfigurationModule { object ConfigurationModule {
@Provides @Provides
fun providesAnalyticsConfig(): AnalyticsConfig { fun providesAnalyticsConfig(buildMeta: BuildMeta): AnalyticsConfig {
val config: Analytics = when (BuildConfig.DEBUG) { val config: Analytics = when (buildMeta.isDebug) {
true -> Config.DEBUG_ANALYTICS_CONFIG true -> Config.DEBUG_ANALYTICS_CONFIG
false -> Config.RELEASE_ANALYTICS_CONFIG false -> Config.RELEASE_ANALYTICS_CONFIG
} }

View File

@ -23,6 +23,7 @@ import android.content.SharedPreferences
import android.content.res.Resources import android.content.res.Resources
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.i18n.phonenumbers.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil
import android.os.Build
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -236,7 +237,11 @@ object VectorStaticModule {
@Provides @Provides
@Singleton @Singleton
fun providesBuildMeta() = BuildMeta() fun providesBuildMeta() = BuildMeta(
isDebug = BuildConfig.DEBUG,
sdkInt = Build.VERSION.SDK_INT,
applicationId = BuildConfig.APPLICATION_ID,
)
@Provides @Provides
@Singleton @Singleton

View File

@ -53,7 +53,6 @@ import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.EntryPointAccessors import dagger.hilt.android.EntryPointAccessors
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.di.ActivityEntryPoint import im.vector.app.core.di.ActivityEntryPoint
@ -67,6 +66,7 @@ import im.vector.app.core.extensions.restart
import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.setTextOrHide
import im.vector.app.core.extensions.singletonEntryPoint import im.vector.app.core.extensions.singletonEntryPoint
import im.vector.app.core.extensions.toMvRxBundle import im.vector.app.core.extensions.toMvRxBundle
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.AndroidSystemSettingsProvider import im.vector.app.core.utils.AndroidSystemSettingsProvider
import im.vector.app.core.utils.ToolbarConfig import im.vector.app.core.utils.ToolbarConfig
import im.vector.app.core.utils.toast import im.vector.app.core.utils.toast
@ -155,11 +155,9 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
protected lateinit var bugReporter: BugReporter protected lateinit var bugReporter: BugReporter
private lateinit var pinLocker: PinLocker private lateinit var pinLocker: PinLocker
@Inject @Inject lateinit var rageShake: RageShake
lateinit var rageShake: RageShake @Inject lateinit var buildMeta: BuildMeta
@Inject lateinit var fontScalePreferences: FontScalePreferences
@Inject
lateinit var fontScalePreferences: FontScalePreferences
lateinit var navigator: Navigator lateinit var navigator: Navigator
private set private set
@ -409,7 +407,7 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
} }
DebugReceiver DebugReceiver
.getIntentFilter(this) .getIntentFilter(this)
.takeIf { BuildConfig.DEBUG } .takeIf { buildMeta.isDebug }
?.let { ?.let {
debugReceiver = DebugReceiver() debugReceiver = DebugReceiver()
registerReceiver(debugReceiver, it) registerReceiver(debugReceiver, it)

View File

@ -16,8 +16,8 @@
package im.vector.app.core.resources package im.vector.app.core.resources
import android.os.Build
data class BuildMeta( data class BuildMeta(
val sdkInt: Int = Build.VERSION.SDK_INT val isDebug: Boolean,
val sdkInt: Int,
val applicationId: String,
) )

View File

@ -19,10 +19,15 @@ package im.vector.app.features.analytics.impl
import android.content.Context import android.content.Context
import com.posthog.android.PostHog import com.posthog.android.PostHog
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.core.resources.BuildMeta
import im.vector.app.features.analytics.AnalyticsConfig import im.vector.app.features.analytics.AnalyticsConfig
import javax.inject.Inject import javax.inject.Inject
class PostHogFactory @Inject constructor(private val context: Context, private val analyticsConfig: AnalyticsConfig) { class PostHogFactory @Inject constructor(
private val context: Context,
private val analyticsConfig: AnalyticsConfig,
private val buildMeta: BuildMeta,
) {
fun createPosthog(): PostHog { fun createPosthog(): PostHog {
return PostHog.Builder(context, analyticsConfig.postHogApiKey, analyticsConfig.postHogHost) return PostHog.Builder(context, analyticsConfig.postHogApiKey, analyticsConfig.postHogHost)
@ -43,7 +48,7 @@ class PostHogFactory @Inject constructor(private val context: Context, private v
} }
private fun getLogLevel(): PostHog.LogLevel { private fun getLogLevel(): PostHog.LogLevel {
return if (BuildConfig.DEBUG) { return if (buildMeta.isDebug) {
PostHog.LogLevel.DEBUG PostHog.LogLevel.DEBUG
} else { } else {
PostHog.LogLevel.INFO PostHog.LogLevel.INFO

View File

@ -23,11 +23,11 @@ import android.view.ViewGroup
import androidx.core.app.ActivityOptionsCompat import androidx.core.app.ActivityOptionsCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.observeK import im.vector.app.core.extensions.observeK
import im.vector.app.core.extensions.replaceChildFragment import im.vector.app.core.extensions.replaceChildFragment
import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.startSharePlainTextIntent import im.vector.app.core.utils.startSharePlainTextIntent
import im.vector.app.databinding.FragmentHomeDrawerBinding import im.vector.app.databinding.FragmentHomeDrawerBinding
import im.vector.app.features.analytics.plan.MobileScreen import im.vector.app.features.analytics.plan.MobileScreen
@ -43,7 +43,8 @@ import javax.inject.Inject
class HomeDrawerFragment @Inject constructor( class HomeDrawerFragment @Inject constructor(
private val session: Session, private val session: Session,
private val vectorPreferences: VectorPreferences, private val vectorPreferences: VectorPreferences,
private val avatarRenderer: AvatarRenderer private val avatarRenderer: AvatarRenderer,
private val buildMeta: BuildMeta,
) : VectorBaseFragment<FragmentHomeDrawerBinding>() { ) : VectorBaseFragment<FragmentHomeDrawerBinding>() {
private lateinit var sharedActionViewModel: HomeSharedActionViewModel private lateinit var sharedActionViewModel: HomeSharedActionViewModel
@ -112,7 +113,7 @@ class HomeDrawerFragment @Inject constructor(
} }
// Debug menu // Debug menu
views.homeDrawerHeaderDebugView.isVisible = BuildConfig.DEBUG && vectorPreferences.developerMode() views.homeDrawerHeaderDebugView.isVisible = buildMeta.isDebug && vectorPreferences.developerMode()
views.homeDrawerHeaderDebugView.debouncedClicks { views.homeDrawerHeaderDebugView.debouncedClicks {
sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer) sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer)
navigator.openDebug(requireActivity()) navigator.openDebug(requireActivity())

View File

@ -26,6 +26,7 @@ import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.core.glide.GlideApp import im.vector.app.core.glide.GlideApp
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.DimensionConverter import im.vector.app.core.utils.DimensionConverter
import im.vector.app.features.MainActivity import im.vector.app.features.MainActivity
import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.RoomSummary
@ -35,13 +36,15 @@ import javax.inject.Inject
private val useAdaptiveIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O private val useAdaptiveIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
private const val adaptiveIconSizeDp = 108 private const val adaptiveIconSizeDp = 108
private const val adaptiveIconOuterSidesDp = 18 private const val adaptiveIconOuterSidesDp = 18
private const val directShareCategory = BuildConfig.APPLICATION_ID + ".SHORTCUT_SHARE"
class ShortcutCreator @Inject constructor( class ShortcutCreator @Inject constructor(
private val context: Context, private val context: Context,
private val avatarRenderer: AvatarRenderer, private val avatarRenderer: AvatarRenderer,
private val dimensionConverter: DimensionConverter private val dimensionConverter: DimensionConverter,
buildMeta: BuildMeta,
) { ) {
private val directShareCategory = buildMeta.applicationId + ".SHORTCUT_SHARE"
private val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp) private val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp)
private val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp) private val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp)
private val iconSize by lazy { private val iconSize by lazy {

View File

@ -33,6 +33,7 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.mvrx.runCatchingToAsync import im.vector.app.core.mvrx.runCatchingToAsync
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.resources.StringProvider import im.vector.app.core.resources.StringProvider
import im.vector.app.core.utils.BehaviorDataSource import im.vector.app.core.utils.BehaviorDataSource
import im.vector.app.features.analytics.AnalyticsTracker import im.vector.app.features.analytics.AnalyticsTracker
@ -139,6 +140,7 @@ class TimelineViewModel @AssistedInject constructor(
private val stopLiveLocationShareUseCase: StopLiveLocationShareUseCase, private val stopLiveLocationShareUseCase: StopLiveLocationShareUseCase,
private val redactLiveLocationShareEventUseCase: RedactLiveLocationShareEventUseCase, private val redactLiveLocationShareEventUseCase: RedactLiveLocationShareEventUseCase,
private val cryptoConfig: CryptoConfig, private val cryptoConfig: CryptoConfig,
buildMeta: BuildMeta,
timelineFactory: TimelineFactory, timelineFactory: TimelineFactory,
spaceStateHandler: SpaceStateHandler, spaceStateHandler: SpaceStateHandler,
) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState), ) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState),
@ -152,7 +154,7 @@ class TimelineViewModel @AssistedInject constructor(
val timeline = timelineFactory.createTimeline(viewModelScope, room, eventId, initialState.rootThreadEventId) val timeline = timelineFactory.createTimeline(viewModelScope, room, eventId, initialState.rootThreadEventId)
// Same lifecycle than the ViewModel (survive to screen rotation) // Same lifecycle than the ViewModel (survive to screen rotation)
val previewUrlRetriever = PreviewUrlRetriever(session, viewModelScope) val previewUrlRetriever = PreviewUrlRetriever(session, viewModelScope, buildMeta)
// Slot to keep a pending action during permission request // Slot to keep a pending action during permission request
var pendingAction: RoomDetailAction? = null var pendingAction: RoomDetailAction? = null

View File

@ -21,6 +21,7 @@ import android.media.AudioAttributes
import android.media.MediaPlayer import android.media.MediaPlayer
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.core.resources.BuildMeta
import im.vector.app.features.home.room.detail.timeline.helper.AudioMessagePlaybackTracker import im.vector.app.features.home.room.detail.timeline.helper.AudioMessagePlaybackTracker
import im.vector.app.features.voice.VoiceFailure import im.vector.app.features.voice.VoiceFailure
import im.vector.app.features.voice.VoiceRecorder import im.vector.app.features.voice.VoiceRecorder
@ -43,6 +44,7 @@ import javax.inject.Inject
class AudioMessageHelper @Inject constructor( class AudioMessageHelper @Inject constructor(
private val context: Context, private val context: Context,
private val playbackTracker: AudioMessagePlaybackTracker, private val playbackTracker: AudioMessagePlaybackTracker,
private val buildMeta: BuildMeta,
voiceRecorderProvider: VoiceRecorderProvider voiceRecorderProvider: VoiceRecorderProvider
) { ) {
private var mediaPlayer: MediaPlayer? = null private var mediaPlayer: MediaPlayer? = null
@ -88,7 +90,7 @@ class AudioMessageHelper @Inject constructor(
try { try {
voiceMessageFile?.let { voiceMessageFile?.let {
val outputFileUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", it, "Voice message.${it.extension}") val outputFileUri = FileProvider.getUriForFile(context, buildMeta.applicationId + ".fileProvider", it, "Voice message.${it.extension}")
return outputFileUri return outputFileUri
.toMultiPickerAudioType(context) .toMultiPickerAudioType(context)
?.apply { ?.apply {

View File

@ -16,7 +16,7 @@
package im.vector.app.features.home.room.detail.timeline.url package im.vector.app.features.home.room.detail.timeline.url
import im.vector.app.BuildConfig import im.vector.app.core.resources.BuildMeta
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -27,7 +27,8 @@ import org.matrix.android.sdk.api.session.room.timeline.getLatestEventId
class PreviewUrlRetriever( class PreviewUrlRetriever(
session: Session, session: Session,
private val coroutineScope: CoroutineScope private val coroutineScope: CoroutineScope,
private val buildMeta: BuildMeta,
) { ) {
private val mediaService = session.mediaService() private val mediaService = session.mediaService()
@ -77,7 +78,7 @@ class PreviewUrlRetriever(
mediaService.getPreviewUrl( mediaService.getPreviewUrl(
url = urlToRetrieve, url = urlToRetrieve,
timestamp = null, timestamp = null,
cacheStrategy = if (BuildConfig.DEBUG) CacheStrategy.NoCache else CacheStrategy.TtlCache(CACHE_VALIDITY, false) cacheStrategy = if (buildMeta.isDebug) CacheStrategy.NoCache else CacheStrategy.TtlCache(CACHE_VALIDITY, false)
) )
}.fold( }.fold(
{ {

View File

@ -27,9 +27,9 @@ import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.ensureProtocol
import im.vector.app.core.utils.openUrlInChromeCustomTab import im.vector.app.core.utils.openUrlInChromeCustomTab
import im.vector.app.databinding.FragmentLoginServerUrlFormBinding import im.vector.app.databinding.FragmentLoginServerUrlFormBinding
@ -43,7 +43,9 @@ import javax.inject.Inject
/** /**
* In this screen, the user is prompted to enter a homeserver url. * In this screen, the user is prompted to enter a homeserver url.
*/ */
class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment<FragmentLoginServerUrlFormBinding>() { class LoginServerUrlFormFragment @Inject constructor(
private val buildMeta: BuildMeta,
) : AbstractLoginFragment<FragmentLoginServerUrlFormBinding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlFormBinding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlFormBinding {
return FragmentLoginServerUrlFormBinding.inflate(inflater, container, false) return FragmentLoginServerUrlFormBinding.inflate(inflater, container, false)
@ -99,7 +101,7 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment<F
views.loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice) views.loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice)
} }
} }
val completions = state.knownCustomHomeServersUrls + if (BuildConfig.DEBUG) listOf("http://10.0.2.2:8080") else emptyList() val completions = state.knownCustomHomeServersUrls + if (buildMeta.isDebug) listOf("http://10.0.2.2:8080") else emptyList()
views.loginServerUrlFormHomeServerUrl.setAdapter( views.loginServerUrlFormHomeServerUrl.setAdapter(
ArrayAdapter( ArrayAdapter(
requireContext(), requireContext(),

View File

@ -25,6 +25,7 @@ import androidx.core.view.isVisible
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.resources.BuildMeta
import im.vector.app.databinding.FragmentLoginSplashBinding import im.vector.app.databinding.FragmentLoginSplashBinding
import im.vector.app.features.analytics.plan.MobileScreen import im.vector.app.features.analytics.plan.MobileScreen
import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.settings.VectorPreferences
@ -36,7 +37,8 @@ import javax.inject.Inject
* In this screen, the user is viewing an introduction to what he can do with this application. * In this screen, the user is viewing an introduction to what he can do with this application.
*/ */
class LoginSplashFragment @Inject constructor( class LoginSplashFragment @Inject constructor(
private val vectorPreferences: VectorPreferences private val vectorPreferences: VectorPreferences,
private val buildMeta: BuildMeta,
) : AbstractLoginFragment<FragmentLoginSplashBinding>() { ) : AbstractLoginFragment<FragmentLoginSplashBinding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginSplashBinding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginSplashBinding {
@ -57,7 +59,7 @@ class LoginSplashFragment @Inject constructor(
private fun setupViews() { private fun setupViews() {
views.loginSplashSubmit.debouncedClicks { getStarted() } views.loginSplashSubmit.debouncedClicks { getStarted() }
if (BuildConfig.DEBUG || vectorPreferences.developerMode()) { if (buildMeta.isDebug || vectorPreferences.developerMode()) {
views.loginSplashVersion.isVisible = true views.loginSplashVersion.isVisible = true
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" + views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" +

View File

@ -26,9 +26,9 @@ import android.widget.ArrayAdapter
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.ensureProtocol
import im.vector.app.databinding.FragmentLoginServerUrlForm2Binding import im.vector.app.databinding.FragmentLoginServerUrlForm2Binding
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
@ -43,7 +43,9 @@ import javax.net.ssl.HttpsURLConnection
/** /**
* In this screen, the user is prompted to enter a homeserver url. * In this screen, the user is prompted to enter a homeserver url.
*/ */
class LoginServerUrlFormFragment2 @Inject constructor() : AbstractLoginFragment2<FragmentLoginServerUrlForm2Binding>() { class LoginServerUrlFormFragment2 @Inject constructor(
private val buildMeta: BuildMeta,
) : AbstractLoginFragment2<FragmentLoginServerUrlForm2Binding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlForm2Binding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlForm2Binding {
return FragmentLoginServerUrlForm2Binding.inflate(inflater, container, false) return FragmentLoginServerUrlForm2Binding.inflate(inflater, container, false)
@ -80,7 +82,7 @@ class LoginServerUrlFormFragment2 @Inject constructor() : AbstractLoginFragment2
} }
private fun setupUi(state: LoginViewState2) { private fun setupUi(state: LoginViewState2) {
val completions = state.knownCustomHomeServersUrls + if (BuildConfig.DEBUG) listOf("http://10.0.2.2:8080") else emptyList() val completions = state.knownCustomHomeServersUrls + if (buildMeta.isDebug) listOf("http://10.0.2.2:8080") else emptyList()
views.loginServerUrlFormHomeServerUrl.setAdapter( views.loginServerUrlFormHomeServerUrl.setAdapter(
ArrayAdapter( ArrayAdapter(
requireContext(), requireContext(),

View File

@ -23,6 +23,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.core.resources.BuildMeta
import im.vector.app.databinding.FragmentLoginSplash2Binding import im.vector.app.databinding.FragmentLoginSplash2Binding
import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.settings.VectorPreferences
import javax.inject.Inject import javax.inject.Inject
@ -32,7 +33,8 @@ import javax.inject.Inject
* This is the new splash screen. * This is the new splash screen.
*/ */
class LoginSplashSignUpSignInSelectionFragment2 @Inject constructor( class LoginSplashSignUpSignInSelectionFragment2 @Inject constructor(
private val vectorPreferences: VectorPreferences private val vectorPreferences: VectorPreferences,
private val buildMeta: BuildMeta,
) : AbstractLoginFragment2<FragmentLoginSplash2Binding>() { ) : AbstractLoginFragment2<FragmentLoginSplash2Binding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginSplash2Binding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginSplash2Binding {
@ -49,7 +51,7 @@ class LoginSplashSignUpSignInSelectionFragment2 @Inject constructor(
views.loginSignupSigninSignUp.setOnClickListener { signUp() } views.loginSignupSigninSignUp.setOnClickListener { signUp() }
views.loginSignupSigninSignIn.setOnClickListener { signIn() } views.loginSignupSigninSignIn.setOnClickListener { signIn() }
if (BuildConfig.DEBUG || vectorPreferences.developerMode()) { if (buildMeta.isDebug || vectorPreferences.developerMode()) {
views.loginSplashVersion.isVisible = true views.loginSplashVersion.isVisible = true
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" + views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" +

View File

@ -49,6 +49,7 @@ import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.createIgnoredUri import im.vector.app.core.extensions.createIgnoredUri
import im.vector.app.core.platform.PendingIntentCompat import im.vector.app.core.platform.PendingIntentCompat
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.resources.StringProvider import im.vector.app.core.resources.StringProvider
import im.vector.app.core.services.CallAndroidService import im.vector.app.core.services.CallAndroidService
import im.vector.app.core.time.Clock import im.vector.app.core.time.Clock
@ -79,6 +80,7 @@ class NotificationUtils @Inject constructor(
private val stringProvider: StringProvider, private val stringProvider: StringProvider,
private val vectorPreferences: VectorPreferences, private val vectorPreferences: VectorPreferences,
private val clock: Clock, private val clock: Clock,
private val buildMeta: BuildMeta,
) { ) {
companion object { companion object {

View File

@ -30,6 +30,7 @@ import com.google.android.material.textfield.TextInputLayout
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.ensureProtocol
import im.vector.app.core.utils.openUrlInChromeCustomTab import im.vector.app.core.utils.openUrlInChromeCustomTab
import im.vector.app.databinding.FragmentLoginServerUrlFormBinding import im.vector.app.databinding.FragmentLoginServerUrlFormBinding
@ -47,7 +48,9 @@ import javax.inject.Inject
/** /**
* In this screen, the user is prompted to enter a homeserver url. * In this screen, the user is prompted to enter a homeserver url.
*/ */
class FtueAuthServerUrlFormFragment @Inject constructor() : AbstractFtueAuthFragment<FragmentLoginServerUrlFormBinding>() { class FtueAuthServerUrlFormFragment @Inject constructor(
private val buildMeta: BuildMeta,
) : AbstractFtueAuthFragment<FragmentLoginServerUrlFormBinding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlFormBinding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLoginServerUrlFormBinding {
return FragmentLoginServerUrlFormBinding.inflate(inflater, container, false) return FragmentLoginServerUrlFormBinding.inflate(inflater, container, false)
@ -103,7 +106,7 @@ class FtueAuthServerUrlFormFragment @Inject constructor() : AbstractFtueAuthFrag
views.loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice) views.loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice)
} }
} }
val completions = state.knownCustomHomeServersUrls + if (BuildConfig.DEBUG) listOf("http://10.0.2.2:8080") else emptyList() val completions = state.knownCustomHomeServersUrls + if (buildMeta.isDebug) listOf("http://10.0.2.2:8080") else emptyList()
views.loginServerUrlFormHomeServerUrl.setAdapter( views.loginServerUrlFormHomeServerUrl.setAdapter(
ArrayAdapter( ArrayAdapter(
requireContext(), requireContext(),

View File

@ -31,6 +31,7 @@ import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.incrementByOneAndWrap import im.vector.app.core.extensions.incrementByOneAndWrap
import im.vector.app.core.extensions.setCurrentItem import im.vector.app.core.extensions.setCurrentItem
import im.vector.app.core.resources.BuildMeta
import im.vector.app.databinding.FragmentFtueSplashCarouselBinding import im.vector.app.databinding.FragmentFtueSplashCarouselBinding
import im.vector.app.features.VectorFeatures import im.vector.app.features.VectorFeatures
import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingAction
@ -48,7 +49,8 @@ class FtueAuthSplashCarouselFragment @Inject constructor(
private val vectorPreferences: VectorPreferences, private val vectorPreferences: VectorPreferences,
private val vectorFeatures: VectorFeatures, private val vectorFeatures: VectorFeatures,
private val carouselController: SplashCarouselController, private val carouselController: SplashCarouselController,
private val carouselStateFactory: SplashCarouselStateFactory private val carouselStateFactory: SplashCarouselStateFactory,
private val buildMeta: BuildMeta,
) : AbstractFtueAuthFragment<FragmentFtueSplashCarouselBinding>() { ) : AbstractFtueAuthFragment<FragmentFtueSplashCarouselBinding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueSplashCarouselBinding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueSplashCarouselBinding {
@ -76,7 +78,7 @@ class FtueAuthSplashCarouselFragment @Inject constructor(
debouncedClicks { alreadyHaveAnAccount() } debouncedClicks { alreadyHaveAnAccount() }
} }
if (BuildConfig.DEBUG || vectorPreferences.developerMode()) { if (buildMeta.isDebug || vectorPreferences.developerMode()) {
views.loginSplashVersion.isVisible = true views.loginSplashVersion.isVisible = true
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}#${BuildConfig.BUILD_NUMBER}\n" + views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}#${BuildConfig.BUILD_NUMBER}\n" +

View File

@ -24,6 +24,7 @@ import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.resources.BuildMeta
import im.vector.app.databinding.FragmentFtueAuthSplashBinding import im.vector.app.databinding.FragmentFtueAuthSplashBinding
import im.vector.app.features.VectorFeatures import im.vector.app.features.VectorFeatures
import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingAction
@ -36,7 +37,8 @@ import javax.inject.Inject
*/ */
class FtueAuthSplashFragment @Inject constructor( class FtueAuthSplashFragment @Inject constructor(
private val vectorPreferences: VectorPreferences, private val vectorPreferences: VectorPreferences,
private val vectorFeatures: VectorFeatures private val vectorFeatures: VectorFeatures,
private val buildMeta: BuildMeta,
) : AbstractFtueAuthFragment<FragmentFtueAuthSplashBinding>() { ) : AbstractFtueAuthFragment<FragmentFtueAuthSplashBinding>() {
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueAuthSplashBinding { override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueAuthSplashBinding {
@ -59,7 +61,7 @@ class FtueAuthSplashFragment @Inject constructor(
debouncedClicks { alreadyHaveAnAccount() } debouncedClicks { alreadyHaveAnAccount() }
} }
if (BuildConfig.DEBUG || vectorPreferences.developerMode()) { if (buildMeta.isDebug || vectorPreferences.developerMode()) {
views.loginSplashVersion.isVisible = true views.loginSplashVersion.isVisible = true
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" + views.loginSplashVersion.text = "Version : ${BuildConfig.VERSION_NAME}\n" +

View File

@ -22,6 +22,7 @@ import androidx.core.content.edit
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.DefaultSharedPreferences import im.vector.app.core.di.DefaultSharedPreferences
import im.vector.app.core.resources.BuildMeta
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import timber.log.Timber import timber.log.Timber
@ -53,12 +54,14 @@ object VectorLocale {
private set private set
private lateinit var context: Context private lateinit var context: Context
private lateinit var buildMeta: BuildMeta
/** /**
* Init this object. * Init this object.
*/ */
fun init(context: Context) { fun init(context: Context, buildMeta: BuildMeta) {
this.context = context this.context = context
this.buildMeta = buildMeta
val preferences = DefaultSharedPreferences.getInstance(context) val preferences = DefaultSharedPreferences.getInstance(context)
if (preferences.contains(APPLICATION_LOCALE_LANGUAGE_KEY)) { if (preferences.contains(APPLICATION_LOCALE_LANGUAGE_KEY)) {
@ -174,7 +177,7 @@ object VectorLocale {
.setScript(script) .setScript(script)
.build() .build()
} catch (exception: IllformedLocaleException) { } catch (exception: IllformedLocaleException) {
if (BuildConfig.DEBUG) { if (buildMeta.isDebug) {
throw exception throw exception
} }
// Ignore this locale in production // Ignore this locale in production

View File

@ -26,6 +26,7 @@ import com.squareup.seismic.ShakeDetector
import im.vector.app.BuildConfig import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.DefaultSharedPreferences import im.vector.app.core.di.DefaultSharedPreferences
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.time.Clock import im.vector.app.core.time.Clock
import im.vector.app.features.disclaimer.SHARED_PREF_KEY import im.vector.app.features.disclaimer.SHARED_PREF_KEY
import im.vector.app.features.home.ShortcutsHandler import im.vector.app.features.home.ShortcutsHandler
@ -38,6 +39,7 @@ import javax.inject.Inject
class VectorPreferences @Inject constructor( class VectorPreferences @Inject constructor(
private val context: Context, private val context: Context,
private val clock: Clock, private val clock: Clock,
private val buildMeta: BuildMeta,
) { ) {
companion object { companion object {
@ -364,7 +366,7 @@ class VectorPreferences @Inject constructor(
} }
fun failFast(): Boolean { fun failFast(): Boolean {
return BuildConfig.DEBUG || (developerMode() && defaultPrefs.getBoolean(SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY, false)) return buildMeta.isDebug || (developerMode() && defaultPrefs.getBoolean(SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY, false))
} }
fun didAskUserToEnableSessionPush(): Boolean { fun didAskUserToEnableSessionPush(): Boolean {

View File

@ -22,6 +22,7 @@ import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.orEmpty import im.vector.app.core.extensions.orEmpty
import im.vector.app.core.preference.VectorPreference import im.vector.app.core.preference.VectorPreference
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.utils.FirstThrottler import im.vector.app.core.utils.FirstThrottler
import im.vector.app.core.utils.copyToClipboard import im.vector.app.core.utils.copyToClipboard
import im.vector.app.core.utils.openAppSettingsPage import im.vector.app.core.utils.openAppSettingsPage
@ -32,7 +33,8 @@ import org.matrix.android.sdk.api.Matrix
import javax.inject.Inject import javax.inject.Inject
class VectorSettingsHelpAboutFragment @Inject constructor( class VectorSettingsHelpAboutFragment @Inject constructor(
private val versionProvider: VersionProvider private val versionProvider: VersionProvider,
private val buildMeta: BuildMeta,
) : VectorSettingsBaseFragment() { ) : VectorSettingsBaseFragment() {
override var titleRes = R.string.preference_root_help_about override var titleRes = R.string.preference_root_help_about
@ -66,7 +68,7 @@ class VectorSettingsHelpAboutFragment @Inject constructor(
findPreference<VectorPreference>(VectorPreferences.SETTINGS_VERSION_PREFERENCE_KEY)!!.let { findPreference<VectorPreference>(VectorPreferences.SETTINGS_VERSION_PREFERENCE_KEY)!!.let {
it.summary = buildString { it.summary = buildString {
append(versionProvider.getVersion(longFormat = false, useBuildNumber = true)) append(versionProvider.getVersion(longFormat = false, useBuildNumber = true))
if (BuildConfig.DEBUG) { if (buildMeta.isDebug) {
append(" ") append(" ")
append(BuildConfig.GIT_BRANCH_NAME) append(BuildConfig.GIT_BRANCH_NAME)
} }