Skip to content

Commit 77a4522

Browse files
Merge pull request #10076 from rafaeltonholo/fix/3172/email-html-css-bad-rendering
fix(message-reader): complex html email rendering incorrectly
2 parents 0c7cfc2 + d3e565f commit 77a4522

File tree

56 files changed

+887
-206
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+887
-206
lines changed

app-common/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ dependencies {
4949

5050
implementation(projects.feature.mail.message.export.api)
5151
implementation(projects.feature.mail.message.export.implEml)
52+
implementation(projects.feature.mail.message.reader.api)
53+
implementation(projects.feature.mail.message.reader.impl)
5254

5355
implementation(projects.mail.protocols.imap)
5456
implementation(projects.backend.imap)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package net.thunderbird.android.feature.mail.message.reader.api.css
2+
3+
import com.fsck.k9.message.html.EmailTextToHtml
4+
import net.thunderbird.core.featureflag.FeatureFlagProvider
5+
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags
6+
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
7+
8+
class DefaultCssClassNameProvider(
9+
featureFlagProvider: FeatureFlagProvider,
10+
override val defaultNamespaceClassName: String,
11+
) : CssClassNameProvider {
12+
override val rootClassName: String = "${defaultNamespaceClassName}__message-viewer"
13+
override val mainContentClassName: String = "${defaultNamespaceClassName}__main-content"
14+
override val plainTextMessagePreClassName: String =
15+
if (featureFlagProvider.provide(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles).isEnabled()) {
16+
"${defaultNamespaceClassName}__plain-text-message-pre"
17+
} else {
18+
EmailTextToHtml.K9MAIL_CSS_CLASS
19+
}
20+
override val signatureClassName: String =
21+
if (featureFlagProvider.provide(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles).isEnabled()) {
22+
"${defaultNamespaceClassName}__signature"
23+
} else {
24+
"k9mail-signature"
25+
}
26+
}

app-common/src/main/kotlin/net/thunderbird/app/common/feature/AppCommonFeatureModule.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import app.k9mail.feature.launcher.FeatureLauncherExternalContract
44
import app.k9mail.feature.launcher.di.featureLauncherModule
55
import net.thunderbird.app.common.feature.mail.appCommonFeatureMailModule
66
import net.thunderbird.feature.mail.message.composer.inject.featureMessageComposerModule
7+
import net.thunderbird.feature.mail.message.reader.impl.inject.featureMessageReaderModule
78
import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract
89
import net.thunderbird.feature.notification.impl.inject.featureNotificationModule
910
import org.koin.android.ext.koin.androidContext
@@ -14,6 +15,7 @@ internal val appCommonFeatureModule = module {
1415
includes(featureNotificationModule)
1516
includes(featureMessageComposerModule)
1617
includes(appCommonFeatureMailModule)
18+
includes(featureMessageReaderModule)
1719

1820
factory<FeatureLauncherExternalContract.AccountSetupFinishedLauncher> {
1921
AccountSetupFinishedLauncher(

app-k9mail/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ dependencies {
142142
implementation(projects.core.ui.legacy.theme2.k9mail)
143143
implementation(projects.feature.launcher)
144144
implementation(projects.feature.mail.message.list)
145+
implementation(projects.feature.mail.message.reader.api)
145146

146147
implementation(projects.legacy.core)
147148
implementation(projects.legacy.ui.legacy)

app-k9mail/src/debug/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
77
import net.thunderbird.core.featureflag.FeatureFlagKey
88
import net.thunderbird.core.featureflag.toFeatureFlagKey
99
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
10+
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags
1011

1112
class K9FeatureFlagFactory : FeatureFlagFactory {
1213
override fun createFeatureCatalog(): List<FeatureFlag> {
@@ -20,6 +21,7 @@ class K9FeatureFlagFactory : FeatureFlagFactory {
2021
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
2122
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = true),
2223
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
24+
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = true),
2325
)
2426
}
2527
}

app-k9mail/src/main/kotlin/app/k9mail/feature/FeatureModule.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ import app.k9mail.feature.funding.featureFundingModule
55
import app.k9mail.feature.migration.launcher.featureMigrationModule
66
import app.k9mail.feature.onboarding.migration.onboardingMigrationModule
77
import app.k9mail.feature.telemetry.telemetryModule
8+
import com.fsck.k9.BuildConfig
9+
import net.thunderbird.android.feature.mail.message.reader.api.css.DefaultCssClassNameProvider
810
import net.thunderbird.feature.account.settings.featureAccountSettingsModule
911
import net.thunderbird.feature.mail.message.list.featureMessageListModule
12+
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
1013
import org.koin.dsl.module
1114

1215
val featureModule = module {
@@ -18,4 +21,11 @@ val featureModule = module {
1821
includes(featureMessageListModule)
1922

2023
single<FundingSettings> { K9FundingSettings() }
24+
25+
single<CssClassNameProvider> {
26+
DefaultCssClassNameProvider(
27+
featureFlagProvider = get(),
28+
defaultNamespaceClassName = BuildConfig.APPLICATION_ID.replace(".", "-"),
29+
)
30+
}
2131
}

app-k9mail/src/release/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
77
import net.thunderbird.core.featureflag.FeatureFlagKey
88
import net.thunderbird.core.featureflag.toFeatureFlagKey
99
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
10+
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags
1011

1112
/**
1213
* Feature flags for K-9 Mail (release)
@@ -23,6 +24,7 @@ class K9FeatureFlagFactory : FeatureFlagFactory {
2324
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
2425
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = false),
2526
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
27+
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = false),
2628
)
2729
}
2830
}

app-k9mail/src/test/kotlin/app/k9mail/DependencyInjectionTest.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ import com.fsck.k9.job.MailSyncWorker
1515
import com.fsck.k9.job.SyncDebugWorker
1616
import com.fsck.k9.mailstore.AttachmentResolver
1717
import com.fsck.k9.message.html.DisplayHtml
18-
import com.fsck.k9.message.html.HtmlSettings
18+
import com.fsck.k9.message.html.DisplayHtmlFactory
1919
import com.fsck.k9.ui.changelog.ChangeLogMode
2020
import com.fsck.k9.ui.changelog.ChangelogViewModel
21+
import com.fsck.k9.ui.helper.DisplayHtmlUiFactory
2122
import com.fsck.k9.view.K9WebViewClient
2223
import com.fsck.k9.view.MessageWebView
2324
import net.openid.appauth.AppAuthConfiguration
25+
import net.thunderbird.core.common.mail.html.HtmlSettings
2426
import net.thunderbird.core.preference.storage.Storage
2527
import net.thunderbird.feature.account.AccountId
2628
import net.thunderbird.feature.mail.message.list.ui.dialog.SetupArchiveFolderDialogContract
29+
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
2730
import org.junit.Test
2831
import org.koin.core.annotation.KoinExperimentalAPI
2932
import org.koin.test.verify.definition
@@ -53,7 +56,13 @@ class DependencyInjectionTest {
5356
injections = injectedParameters(
5457
definition<AccountRemoverWorker>(WorkerParameters::class),
5558
definition<ChangelogViewModel>(ChangeLogMode::class),
56-
definition<DisplayHtml>(HtmlSettings::class),
59+
definition<DisplayHtml>(
60+
HtmlSettings::class,
61+
CssClassNameProvider::class,
62+
List::class,
63+
),
64+
definition<DisplayHtmlFactory>(List::class),
65+
definition<DisplayHtmlUiFactory>(List::class),
5766
definition<K9WebViewClient>(AttachmentResolver::class, MessageWebView.OnPageFinishedListener::class),
5867
definition<MailSyncWorker>(WorkerParameters::class),
5968
definition<SyncDebugWorker>(WorkerParameters::class),

app-thunderbird/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ dependencies {
222222

223223
implementation(projects.feature.account.settings.impl)
224224
implementation(projects.feature.mail.message.list)
225+
implementation(projects.feature.mail.message.reader.api)
225226

226227
implementation(projects.feature.widget.messageList)
227228
implementation(projects.feature.widget.messageListGlance)

app-thunderbird/src/beta/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import net.thunderbird.core.featureflag.FeatureFlagFactory
77
import net.thunderbird.core.featureflag.FeatureFlagKey
88
import net.thunderbird.core.featureflag.toFeatureFlagKey
99
import net.thunderbird.feature.account.settings.AccountSettingsFeatureFlags
10+
import net.thunderbird.feature.mail.message.reader.api.MessageReaderFeatureFlags
1011

1112
/**
1213
* Feature flags for Thunderbird Beta
@@ -23,6 +24,7 @@ class TbFeatureFlagFactory : FeatureFlagFactory {
2324
FeatureFlag(MessageListFeatureFlags.UseComposeForMessageListItems, enabled = false),
2425
FeatureFlag(MessageViewFeatureFlags.ActionExportEml, enabled = false),
2526
FeatureFlag(AccountSettingsFeatureFlags.EnableAvatarCustomization, enabled = false),
27+
FeatureFlag(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles, enabled = false),
2628
)
2729
}
2830
}

0 commit comments

Comments
 (0)