Skip to content
Merged
2 changes: 2 additions & 0 deletions app-common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ dependencies {

implementation(projects.feature.mail.message.export.api)
implementation(projects.feature.mail.message.export.implEml)
implementation(projects.feature.mail.message.reader.api)
implementation(projects.feature.mail.message.reader.impl)

implementation(projects.mail.protocols.imap)
implementation(projects.backend.imap)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.thunderbird.android.feature.mail.message.reader.api.css

import com.fsck.k9.message.html.EmailTextToHtml
import net.thunderbird.core.featureflag.FeatureFlagProvider
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider

class DefaultCssClassNameProvider(
featureFlagProvider: FeatureFlagProvider,
override val defaultNamespaceClassName: String,
) : CssClassNameProvider {
override val rootClassName: String = "${defaultNamespaceClassName}__message-viewer"
override val mainContentClassName: String = "${defaultNamespaceClassName}__main-content"
override val plainTextMessagePreClassName: String =
if (featureFlagProvider.provide(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles).isEnabled()) {
"${defaultNamespaceClassName}__plain-text-message-pre"
} else {
EmailTextToHtml.K9MAIL_CSS_CLASS
}
override val signatureClassName: String =
if (featureFlagProvider.provide(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles).isEnabled()) {
"${defaultNamespaceClassName}__signature"
} else {
"k9mail-signature"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import app.k9mail.feature.launcher.FeatureLauncherExternalContract
import app.k9mail.feature.launcher.di.featureLauncherModule
import net.thunderbird.app.common.feature.mail.appCommonFeatureMailModule
import net.thunderbird.feature.mail.message.composer.inject.featureMessageComposerModule
import net.thunderbird.feature.mail.message.reader.impl.inject.featureMessageReaderModule
import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract
import net.thunderbird.feature.notification.impl.inject.featureNotificationModule
import org.koin.android.ext.koin.androidContext
Expand All @@ -14,6 +15,7 @@ internal val appCommonFeatureModule = module {
includes(featureNotificationModule)
includes(featureMessageComposerModule)
includes(appCommonFeatureMailModule)
includes(featureMessageReaderModule)

factory<FeatureLauncherExternalContract.AccountSetupFinishedLauncher> {
AccountSetupFinishedLauncher(
Expand Down
1 change: 1 addition & 0 deletions app-k9mail/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ dependencies {
implementation(projects.core.ui.legacy.theme2.k9mail)
implementation(projects.feature.launcher)
implementation(projects.feature.mail.message.list)
implementation(projects.feature.mail.message.reader.api)

implementation(projects.legacy.core)
implementation(projects.legacy.ui.legacy)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

class K9FeatureFlagFactory : FeatureFlagFactory {
override fun createFeatureCatalog(): List<FeatureFlag> {
Expand All @@ -20,6 +21,7 @@ class K9FeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = true),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = true),
)
}
}
10 changes: 10 additions & 0 deletions app-k9mail/src/main/kotlin/app/k9mail/feature/FeatureModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ import app.k9mail.feature.funding.featureFundingModule
import app.k9mail.feature.migration.launcher.featureMigrationModule
import app.k9mail.feature.onboarding.migration.onboardingMigrationModule
import app.k9mail.feature.telemetry.telemetryModule
import com.fsck.k9.BuildConfig
import net.thunderbird.android.feature.mail.message.reader.api.css.DefaultCssClassNameProvider
import net.thunderbird.feature.account.settings.featureAccountSettingsModule
import net.thunderbird.feature.mail.message.list.featureMessageListModule
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
import org.koin.dsl.module

val featureModule = module {
Expand All @@ -18,4 +21,11 @@ val featureModule = module {
includes(featureMessageListModule)

single<FundingSettings> { K9FundingSettings() }

single<CssClassNameProvider> {
DefaultCssClassNameProvider(
featureFlagProvider = get(),
defaultNamespaceClassName = BuildConfig.APPLICATION_ID.replace(".", "-"),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

/**
* Feature flags for K-9 Mail (release)
Expand All @@ -23,6 +24,7 @@ class K9FeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = false),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = false),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@ import com.fsck.k9.job.MailSyncWorker
import com.fsck.k9.job.SyncDebugWorker
import com.fsck.k9.mailstore.AttachmentResolver
import com.fsck.k9.message.html.DisplayHtml
import com.fsck.k9.message.html.HtmlSettings
import com.fsck.k9.message.html.DisplayHtmlFactory
import com.fsck.k9.ui.changelog.ChangeLogMode
import com.fsck.k9.ui.changelog.ChangelogViewModel
import com.fsck.k9.ui.helper.DisplayHtmlUiFactory
import com.fsck.k9.view.K9WebViewClient
import com.fsck.k9.view.MessageWebView
import net.openid.appauth.AppAuthConfiguration
import net.thunderbird.core.common.mail.html.HtmlSettings
import net.thunderbird.core.preference.storage.Storage
import net.thunderbird.feature.account.AccountId
import net.thunderbird.feature.mail.message.list.ui.dialog.SetupArchiveFolderDialogContract
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
import org.junit.Test
import org.koin.core.annotation.KoinExperimentalAPI
import org.koin.test.verify.definition
Expand Down Expand Up @@ -53,7 +56,13 @@ class DependencyInjectionTest {
injections = injectedParameters(
definition<AccountRemoverWorker>(WorkerParameters::class),
definition<ChangelogViewModel>(ChangeLogMode::class),
definition<DisplayHtml>(HtmlSettings::class),
definition<DisplayHtml>(
HtmlSettings::class,
CssClassNameProvider::class,
List::class,
),
definition<DisplayHtmlFactory>(List::class),
definition<DisplayHtmlUiFactory>(List::class),
definition<K9WebViewClient>(AttachmentResolver::class, MessageWebView.OnPageFinishedListener::class),
definition<MailSyncWorker>(WorkerParameters::class),
definition<SyncDebugWorker>(WorkerParameters::class),
Expand Down
1 change: 1 addition & 0 deletions app-thunderbird/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ dependencies {

implementation(projects.feature.account.settings.impl)
implementation(projects.feature.mail.message.list)
implementation(projects.feature.mail.message.reader.api)

implementation(projects.feature.widget.messageList)
implementation(projects.feature.widget.messageListGlance)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

/**
* Feature flags for Thunderbird Beta
Expand All @@ -23,6 +24,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = false),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = false),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

/**
* Feature flags for Thunderbird Daily
Expand All @@ -23,6 +24,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = true),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = true),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

/**
* Feature flags for Thunderbird Debug
Expand All @@ -23,6 +24,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = true),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = true),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ import app.k9mail.feature.funding.featureFundingModule
import app.k9mail.feature.migration.launcher.featureMigrationModule
import app.k9mail.feature.onboarding.migration.onboardingMigrationModule
import app.k9mail.feature.telemetry.telemetryModule
import net.thunderbird.android.BuildConfig
import net.thunderbird.android.feature.mail.message.reader.api.css.DefaultCssClassNameProvider
import net.thunderbird.feature.account.settings.featureAccountSettingsModule
import net.thunderbird.feature.mail.message.list.featureMessageListModule
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
import org.koin.dsl.module

internal val featureModule = module {
Expand All @@ -18,4 +21,11 @@ internal val featureModule = module {
includes(featureMessageListModule)

single<FundingSettings> { TbFundingSettings() }

single<CssClassNameProvider> {
DefaultCssClassNameProvider(
featureFlagProvider = get(),
defaultNamespaceClassName = BuildConfig.APPLICATION_ID.replace(".", "-"),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags

/**
* Feature flags for Thunderbird (release)
Expand All @@ -23,6 +24,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory {
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = false),
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = false),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@ import com.fsck.k9.job.MailSyncWorker
import com.fsck.k9.job.SyncDebugWorker
import com.fsck.k9.mailstore.AttachmentResolver
import com.fsck.k9.message.html.DisplayHtml
import com.fsck.k9.message.html.HtmlSettings
import com.fsck.k9.message.html.DisplayHtmlFactory
import com.fsck.k9.ui.changelog.ChangeLogMode
import com.fsck.k9.ui.changelog.ChangelogViewModel
import com.fsck.k9.ui.helper.DisplayHtmlUiFactory
import com.fsck.k9.view.K9WebViewClient
import com.fsck.k9.view.MessageWebView
import net.openid.appauth.AppAuthConfiguration
import net.thunderbird.core.common.mail.html.HtmlSettings
import net.thunderbird.core.preference.storage.Storage
import net.thunderbird.feature.account.AccountId
import net.thunderbird.feature.mail.message.list.ui.dialog.SetupArchiveFolderDialogContract
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
import org.junit.Test
import org.koin.core.annotation.KoinExperimentalAPI
import org.koin.test.verify.definition
Expand Down Expand Up @@ -53,7 +56,13 @@ class DependencyInjectionTest {
injections = injectedParameters(
definition<AccountRemoverWorker>(WorkerParameters::class),
definition<ChangelogViewModel>(ChangeLogMode::class),
definition<DisplayHtml>(HtmlSettings::class),
definition<DisplayHtml>(
HtmlSettings::class,
CssClassNameProvider::class,
List::class,
),
definition<DisplayHtmlFactory>(List::class),
definition<DisplayHtmlUiFactory>(List::class),
definition<K9WebViewClient>(AttachmentResolver::class, MessageWebView.OnPageFinishedListener::class),
definition<MailSyncWorker>(WorkerParameters::class),
definition<SyncDebugWorker>(WorkerParameters::class),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.core.Context
import com.github.ajalt.clikt.core.main
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.default
import com.github.ajalt.clikt.parameters.arguments.optional
import com.github.ajalt.clikt.parameters.types.enum
import com.github.ajalt.clikt.parameters.types.file
import com.github.ajalt.clikt.parameters.types.inputStream
import java.io.File
Expand All @@ -19,6 +21,10 @@ class HtmlCleaner : CliktCommand() {
val input by argument(help = "HTML input file (needs to be UTF-8 encoded)")
.inputStream()

val app by argument(help = "The app the email will be target to")
.enum<App>(ignoreCase = true)
.default(App.THUNDERBIRD)

val output by argument(help = "Output file")
.file(mustExist = false, canBeDir = false)
.optional()
Expand All @@ -37,8 +43,17 @@ class HtmlCleaner : CliktCommand() {
}

private fun cleanHtml(html: String): String {
val defaultNamespaceClassName = if (app == App.THUNDERBIRD) {
"net_thunderbird_android"
} else {
"com_fsck_k9"
}
val htmlProcessor = HtmlProcessor(
object : HtmlHeadProvider {
customClasses = setOf(
"${defaultNamespaceClassName}__message-viewer",
"${defaultNamespaceClassName}__main-content",
),
htmlHeadProvider = object : HtmlHeadProvider {
override val headHtml = """<meta name="viewport" content="width=device-width"/>"""
},
)
Expand All @@ -57,4 +72,6 @@ class HtmlCleaner : CliktCommand() {
}
}

enum class App { THUNDERBIRD, K9MAIL }

fun main(args: Array<String>) = HtmlCleaner().main(args)
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,25 @@ inline fun <reified T> Module.singleListOf(vararg items: Definition<T>, qualifie
}
}

/**
* Defines a factory for a list of elements of type [T].
*
* This function creates a factory definition for a list of elements. Each time this list is
* requested, a new list is created, and each element in the list is resolved anew from the
* provided [items] definitions.
*
* @param T The type of elements in the list.
* @param items Vararg of [Definition]s that will be resolved and added to the list.
* @param qualifier Optional [Qualifier] to distinguish this list from others of the same type.
* If null, a default qualifier based on the type [T] will be used.
*/
@KoinDslMarker
inline fun <reified T> Module.factoryListOf(vararg items: Definition<T>, qualifier: Qualifier? = null) {
factory(qualifier ?: defaultListQualifier<T>()) {
items.map { definition -> definition(this, parametersOf()) }
}
}

/**
* Resolves a [List] of instances of type [T].
* This is a helper function for Koin's multibinding feature.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.fsck.k9.message.html
package net.thunderbird.core.common.mail.html

data class HtmlSettings(
val useDarkMode: Boolean,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package net.thunderbird.core.common.mail.html

fun interface HtmlSettingsProvider {
fun create(): HtmlSettings
}
1 change: 1 addition & 0 deletions feature/mail/message/composer/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ android {
}

dependencies {
implementation(projects.core.common)
implementation(projects.core.ui.compose.designsystem)
implementation(projects.core.ui.theme.api)
implementation(projects.feature.notification.api)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.thunderbird.feature.mail.message.composer.html

import net.thunderbird.core.common.mail.html.HtmlSettings
import net.thunderbird.core.common.mail.html.HtmlSettingsProvider
import net.thunderbird.core.ui.theme.api.Theme
import net.thunderbird.core.ui.theme.api.ThemeManager

interface MessageComposerHtmlSettingsProvider : HtmlSettingsProvider

internal fun MessageComposerHtmlSettingsProvider(themeManager: ThemeManager): MessageComposerHtmlSettingsProvider =
object : MessageComposerHtmlSettingsProvider {
override fun create(): HtmlSettings = HtmlSettings(
useDarkMode = themeManager.messageComposeTheme == Theme.DARK,
useFixedWidthFont = false,
)
}
Loading
Loading