diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt index 2bdf083683..f80db878a7 100644 --- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt +++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt @@ -64,6 +64,7 @@ class MainActivity : NodeActivity() { ElementThemeApp( appPreferencesStore = appBindings.preferencesStore(), enterpriseService = appBindings.enterpriseService(), + buildMeta = appBindings.buildMeta() ) { CompositionLocalProvider( LocalSnackbarDispatcher provides appBindings.snackbarDispatcher(), diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index 4aa5d2c267..3d1838ea33 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -13,6 +13,7 @@ import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.rageshake.api.reporter.BugReporter +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.tracing.TracingService @@ -38,4 +39,6 @@ interface AppBindings { fun analyticsService(): AnalyticsService fun enterpriseService(): EnterpriseService + + fun buildMeta(): BuildMeta } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt index af7323eea4..a1906ff99a 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt @@ -48,6 +48,7 @@ import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.bindings import io.element.android.libraries.core.log.logger.LoggerTag +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import timber.log.Timber @@ -64,6 +65,7 @@ class ElementCallActivity : @Inject lateinit var appPreferencesStore: AppPreferencesStore @Inject lateinit var enterpriseService: EnterpriseService @Inject lateinit var pictureInPicturePresenter: PictureInPicturePresenter + @Inject lateinit var buildMeta: BuildMeta private lateinit var presenter: Presenter @@ -114,6 +116,7 @@ class ElementCallActivity : ElementThemeApp( appPreferencesStore = appPreferencesStore, enterpriseService = enterpriseService, + buildMeta = buildMeta, ) { val state = presenter.present() eventSink = state.eventSink diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt index 1be54e7b43..dd273ebac1 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt @@ -22,6 +22,7 @@ import io.element.android.features.lockscreen.impl.unlock.PinUnlockPresenter import io.element.android.features.lockscreen.impl.unlock.PinUnlockView import io.element.android.features.lockscreen.impl.unlock.di.PinUnlockBindings import io.element.android.libraries.architecture.bindings +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import kotlinx.coroutines.launch @@ -38,6 +39,7 @@ class PinUnlockActivity : AppCompatActivity() { @Inject lateinit var lockScreenService: LockScreenService @Inject lateinit var appPreferencesStore: AppPreferencesStore @Inject lateinit var enterpriseService: EnterpriseService + @Inject lateinit var buildMeta: BuildMeta override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() @@ -47,6 +49,7 @@ class PinUnlockActivity : AppCompatActivity() { ElementThemeApp( appPreferencesStore = appPreferencesStore, enterpriseService = enterpriseService, + buildMeta = buildMeta, ) { val state = presenter.present() PinUnlockView( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index b0ebb4ad53..a10762b617 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -33,7 +33,7 @@ import io.element.android.features.messages.impl.timeline.protection.TimelinePro import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toPx -import io.element.android.libraries.designsystem.theme.LocalIsEnterpriseBuild +import io.element.android.libraries.designsystem.theme.LocalBuildMeta import io.element.android.libraries.designsystem.theme.highlightedMessageBackgroundColor import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId @@ -172,7 +172,7 @@ private fun Modifier.focusedEvent( focusedEventOffset: Dp ): Modifier { val highlightedLineColor = ElementTheme.colors.textActionAccent - val gradientFirstColor = if (LocalIsEnterpriseBuild.current) { + val gradientFirstColor = if (LocalBuildMeta.current.isEnterpriseBuild) { ElementTheme.colors.textActionAccent.copy(alpha = 0.125f) } else { ElementTheme.colors.highlightedMessageBackgroundColor diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt index 98e25b6484..d58e181353 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/GradientFloatingActionButton.kt @@ -42,7 +42,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.compound.tokens.generated.internal.LightColorTokens import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.LocalIsEnterpriseBuild +import io.element.android.libraries.designsystem.theme.LocalBuildMeta import io.element.android.libraries.designsystem.theme.components.Icon @OptIn(CoreColorToken::class) @@ -53,12 +53,12 @@ fun GradientFloatingActionButton( shape: Shape = RoundedCornerShape(25), content: @Composable () -> Unit, ) { - val color1 = if (LocalIsEnterpriseBuild.current) { + val color1 = if (LocalBuildMeta.current.isEnterpriseBuild) { ElementTheme.colors.textActionAccent } else { LightColorTokens.colorGreen700 } - val color2 = if (LocalIsEnterpriseBuild.current) { + val color2 = if (LocalBuildMeta.current.isEnterpriseBuild) { ElementTheme.colors.textActionAccent } else { LightColorTokens.colorBlue900 diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt index 0d74836a05..a53955afc2 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt @@ -42,7 +42,7 @@ import io.element.android.compound.tokens.generated.internal.DarkColorTokens import io.element.android.compound.tokens.generated.internal.LightColorTokens import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.LocalIsEnterpriseBuild +import io.element.android.libraries.designsystem.theme.LocalBuildMeta import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.lowHorizontalPaddingValue @@ -67,7 +67,7 @@ fun SuperButton( } } val isLightTheme = ElementTheme.isLightTheme - val colors = if (LocalIsEnterpriseBuild.current) { + val colors = if (LocalBuildMeta.current.isEnterpriseBuild) { listOf( ElementTheme.colors.textActionAccent, ElementTheme.colors.textActionAccent, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt index 217189527c..bb0fcd971b 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt @@ -20,9 +20,28 @@ import io.element.android.compound.theme.Theme import io.element.android.compound.theme.isDark import io.element.android.compound.theme.mapToTheme import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.preferences.api.store.AppPreferencesStore -val LocalIsEnterpriseBuild = staticCompositionLocalOf { false } +val LocalBuildMeta = staticCompositionLocalOf { + BuildMeta( + isDebuggable = true, + buildType = BuildType.DEBUG, + applicationName = "MyApp", + productionApplicationName = "MyAppProd", + desktopApplicationName = "MyAppDesktop", + applicationId = "AppId", + isEnterpriseBuild = false, + lowPrivacyLoggingEnabled = false, + versionName = "aVersion", + versionCode = 123, + gitRevision = "aRevision", + gitBranchName = "aBranch", + flavorDescription = "aFlavor", + flavorShortDescription = "aFlavorShort", + ) +} /** * Theme to use for all the regular screens of the application. @@ -35,6 +54,7 @@ val LocalIsEnterpriseBuild = staticCompositionLocalOf { false } fun ElementThemeApp( appPreferencesStore: AppPreferencesStore, enterpriseService: EnterpriseService, + buildMeta: BuildMeta, content: @Composable () -> Unit, ) { val theme by remember { @@ -53,7 +73,7 @@ fun ElementThemeApp( val compoundLight = remember { enterpriseService.semanticColorsLight() } val compoundDark = remember { enterpriseService.semanticColorsDark() } CompositionLocalProvider( - LocalIsEnterpriseBuild provides enterpriseService.isEnterpriseBuild, + LocalBuildMeta provides buildMeta, ) { ElementTheme( darkTheme = theme.isDark(),