Skip to content

Commit 0fefd2d

Browse files
committed
feat(message-reader): add css classname provider
1 parent e32bc2e commit 0fefd2d

File tree

5 files changed

+85
-0
lines changed

5 files changed

+85
-0
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+
EmailTextToHtml.K9MAIL_CSS_CLASS
17+
} else {
18+
"${defaultNamespaceClassName}__plain-text-message-pre"
19+
}
20+
override val signatureClassName: String =
21+
if (featureFlagProvider.provide(MessageReaderFeatureFlags.UseNewMessageReaderCssStyles).isEnabled()) {
22+
"${defaultNamespaceClassName}__signature"
23+
} else {
24+
"k9mail-signature"
25+
}
26+
}

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-thunderbird/src/main/kotlin/net/thunderbird/android/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 net.thunderbird.android.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
internal val featureModule = module {
@@ -18,4 +21,11 @@ internal val featureModule = module {
1821
includes(featureMessageListModule)
1922

2023
single<FundingSettings> { TbFundingSettings() }
24+
25+
single<CssClassNameProvider> {
26+
DefaultCssClassNameProvider(
27+
featureFlagProvider = get(),
28+
defaultNamespaceClassName = BuildConfig.APPLICATION_ID.replace(".", "-"),
29+
)
30+
}
2131
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package net.thunderbird.feature.mail.message.reader.api.css
2+
3+
/**
4+
* Provides CSS class names used for styling the message viewer.
5+
*
6+
* This allows for a consistent and centralized way to manage the class names
7+
* used in the HTML of the message display, making it easier to style and
8+
* maintain.
9+
*/
10+
interface CssClassNameProvider {
11+
/**
12+
* The class name used to namespace all CSS rules to avoid conflicts with message content.
13+
*
14+
* This class should be applied to a high-level container element wrapping the entire message view.
15+
*/
16+
val defaultNamespaceClassName: String
17+
18+
/**
19+
* The class name for the root element of the message content. This is typically the `<body>` tag.
20+
*/
21+
val rootClassName: String
22+
23+
/**
24+
* The class name for the main content block of the message viewer.
25+
*/
26+
val mainContentClassName: String
27+
28+
/**
29+
* The class name for the `<pre>` tag that wraps plain text messages to preserve formatting.
30+
*/
31+
val plainTextMessagePreClassName: String
32+
33+
/**
34+
* The class name used to style email signatures.
35+
*/
36+
val signatureClassName: String
37+
}

0 commit comments

Comments
 (0)