Skip to content

Commit ae1dd0e

Browse files
Merge pull request #1959 from Infomaniak/update-caret-color
Update caret color of the rich html editor
2 parents d5b36d5 + d078018 commit ae1dd0e

File tree

7 files changed

+40
-30
lines changed

7 files changed

+40
-30
lines changed

app/src/main/java/com/infomaniak/mail/ui/newMessage/NewMessageFragment.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import com.infomaniak.mail.ui.newMessage.NewMessageViewModel.ImportationResult
6969
import com.infomaniak.mail.ui.newMessage.NewMessageViewModel.UiFrom
7070
import com.infomaniak.mail.utils.SentryDebug
7171
import com.infomaniak.mail.utils.SignatureUtils
72+
import com.infomaniak.mail.utils.UiUtils.PRIMARY_COLOR_CODE
7273
import com.infomaniak.mail.utils.Utils
7374
import com.infomaniak.mail.utils.WebViewUtils
7475
import com.infomaniak.mail.utils.WebViewUtils.Companion.destroyAndClearHistory
@@ -78,9 +79,10 @@ import com.infomaniak.mail.utils.extensions.AttachmentExtensions.openAttachment
7879
import com.infomaniak.mail.utils.extensions.bindAlertToViewLifecycle
7980
import com.infomaniak.mail.utils.extensions.changeToolbarColorOnScroll
8081
import com.infomaniak.mail.utils.extensions.enableAlgorithmicDarkening
82+
import com.infomaniak.mail.utils.extensions.getAttributeColor
8183
import com.infomaniak.mail.utils.extensions.initWebViewClientAndBridge
84+
import com.infomaniak.mail.utils.extensions.loadCss
8285
import com.infomaniak.mail.utils.extensions.navigateToDownloadProgressDialog
83-
import com.infomaniak.mail.utils.extensions.readRawResource
8486
import com.infomaniak.mail.utils.extensions.setSystemBarsColors
8587
import com.infomaniak.mail.utils.extensions.valueOrEmpty
8688
import dagger.hilt.android.AndroidEntryPoint
@@ -92,6 +94,7 @@ import kotlinx.coroutines.flow.launchIn
9294
import kotlinx.coroutines.flow.onEach
9395
import kotlinx.coroutines.launch
9496
import javax.inject.Inject
97+
import com.google.android.material.R as RMaterial
9598

9699
@AndroidEntryPoint
97100
class NewMessageFragment : Fragment() {
@@ -348,10 +351,11 @@ class NewMessageFragment : Fragment() {
348351
private fun initEditorUi() {
349352
binding.editorWebView.apply {
350353
enableAlgorithmicDarkening(isEnabled = true)
351-
if (context.isNightModeEnabled()) addCss(context.readRawResource(R.raw.custom_dark_mode))
354+
if (context.isNightModeEnabled()) addCss(context.loadCss(R.raw.custom_dark_mode))
352355

353-
addCss(context.readRawResource(R.raw.style))
354-
addCss(context.readRawResource(R.raw.editor_style))
356+
val customColors = listOf(PRIMARY_COLOR_CODE to context.getAttributeColor(RMaterial.attr.colorPrimary))
357+
addCss(context.loadCss(R.raw.style, customColors))
358+
addCss(context.loadCss(R.raw.editor_style, customColors))
355359

356360
val isPlaceholderVisible = combine(
357361
isEmptyFlow.filterNotNull(),

app/src/main/java/com/infomaniak/mail/utils/HtmlFormatter.kt

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ import com.infomaniak.html.cleaner.HtmlSanitizer
2323
import com.infomaniak.mail.R
2424
import com.infomaniak.mail.data.models.message.Message
2525
import com.infomaniak.mail.utils.JsoupParserUtil.jsoupParseWithLog
26+
import com.infomaniak.mail.utils.UiUtils.PRIMARY_COLOR_CODE
2627
import com.infomaniak.mail.utils.extensions.getAttributeColor
28+
import com.infomaniak.mail.utils.extensions.loadCss
2729
import com.infomaniak.mail.utils.extensions.readRawResource
2830
import org.jsoup.nodes.Element
2931
import org.jsoup.nodes.Node
@@ -178,7 +180,6 @@ class HtmlFormatter(private val html: String) {
178180
data class PrintData(val context: Context, val message: Message)
179181

180182
companion object {
181-
private const val PRIMARY_COLOR_CODE = "--kmail-primary-color"
182183
private const val KMAIL_MESSAGE_ID = "kmail-message-content"
183184

184185
private const val WBR = "wbr"
@@ -189,22 +190,6 @@ class HtmlFormatter(private val html: String) {
189190
private val DETECT_BUT_DO_NOT_BREAK = setOf(' ')
190191
private val BREAK_CHARACTERS = setOf(':', '/', '~', '.', ',', '-', '_', '?', '#', '%', '=', '&')
191192

192-
private fun Context.loadCss(@RawRes cssResId: Int, customColors: List<Pair<String, Int>> = emptyList()): String {
193-
var css = readRawResource(cssResId)
194-
195-
if (customColors.isNotEmpty()) {
196-
var header = ":root {\n"
197-
customColors.forEach { (variableName, color) ->
198-
header += formatCssVariable(variableName, color)
199-
}
200-
header += "}\n\n"
201-
202-
css = header + css
203-
}
204-
205-
return css
206-
}
207-
208193
private fun Context.loadScript(
209194
@RawRes scriptResId: Int,
210195
customVariablesDeclaration: List<Pair<String, Any>> = emptyList(),
@@ -225,11 +210,6 @@ class HtmlFormatter(private val html: String) {
225210
}
226211
}
227212

228-
private fun formatCssVariable(variableName: String, color: Int): String {
229-
val formattedColor = Utils.colorToHexRepresentation(color)
230-
return "$variableName: $formattedColor;\n"
231-
}
232-
233213
fun Context.getCustomDarkMode(): String = loadCss(R.raw.custom_dark_mode)
234214

235215
fun Context.getImproveRenderingStyle(): String = loadCss(R.raw.improve_rendering)

app/src/main/java/com/infomaniak/mail/utils/SignatureUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ package com.infomaniak.mail.utils
1919

2020
import android.content.Context
2121
import com.infomaniak.mail.R
22-
import com.infomaniak.mail.utils.extensions.readRawResource
22+
import com.infomaniak.mail.utils.extensions.loadCss
2323
import javax.inject.Inject
2424
import javax.inject.Singleton
2525

2626
@Singleton
2727
class SignatureUtils @Inject constructor(appContext: Context) {
2828

29-
private val signatureMargins by lazy { appContext.readRawResource(R.raw.signature_margins) }
29+
private val signatureMargins by lazy { appContext.loadCss(R.raw.signature_margins) }
3030

3131
fun encapsulateSignatureContentWithInfomaniakClass(signatureContent: String): String {
3232
val verticalMarginsCss = signatureMargins

app/src/main/java/com/infomaniak/mail/utils/UiUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.infomaniak.mail.utils.extensions.updateNavigationBarColor
3737
object UiUtils {
3838

3939
const val FULLY_SLID = 1.0f
40+
const val PRIMARY_COLOR_CODE = "--kmail-primary-color"
4041

4142
@ColorInt
4243
fun pointBetweenColors(@ColorInt from: Int, @ColorInt to: Int, percent: Float): Int {

app/src/main/java/com/infomaniak/mail/utils/WebViewUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import com.infomaniak.mail.utils.HtmlFormatter.Companion.getPrintMailStyle
3232
import com.infomaniak.mail.utils.HtmlFormatter.Companion.getResizeScript
3333
import com.infomaniak.mail.utils.HtmlFormatter.Companion.getSignatureMarginStyle
3434
import com.infomaniak.mail.utils.extensions.enableAlgorithmicDarkening
35-
import com.infomaniak.mail.utils.extensions.readRawResource
35+
import com.infomaniak.mail.utils.extensions.loadCss
3636

3737
class WebViewUtils(context: Context) {
3838

@@ -156,7 +156,7 @@ class WebViewUtils(context: Context) {
156156
}
157157

158158
private fun WebView.addBackgroundJs() {
159-
val css = context.readRawResource(R.raw.custom_dark_mode)
159+
val css = context.loadCss(R.raw.custom_dark_mode)
160160
evaluateJavascript(
161161
""" var style = document.createElement('style')
162162
document.head.appendChild(style)

app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,27 @@ fun Context.formatSubject(subject: String?): String {
203203

204204
fun Context.readRawResource(@RawRes resId: Int): String = Scanner(resources.openRawResource(resId)).useDelimiter("\\A").next()
205205

206+
fun Context.loadCss(@RawRes cssResId: Int, customColors: List<Pair<String, Int>> = emptyList()): String {
207+
var css = readRawResource(cssResId)
208+
209+
if (customColors.isNotEmpty()) {
210+
var header = ":root {\n"
211+
customColors.forEach { (variableName, color) ->
212+
header += formatCssVariable(variableName, color)
213+
}
214+
header += "}\n\n"
215+
216+
css = header + css
217+
}
218+
219+
return css
220+
}
221+
222+
private fun formatCssVariable(variableName: String, color: Int): String {
223+
val formattedColor = Utils.colorToHexRepresentation(color)
224+
return "$variableName: $formattedColor;\n"
225+
}
226+
206227
fun LottieAnimationView.repeatFrame(firstFrame: Int, lastFrame: Int) {
207228
addAnimatorListener(object : Animator.AnimatorListener {
208229
override fun onAnimationStart(animation: Animator) = Unit

app/src/main/res/raw/editor_style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
html {
2+
caret-color: var(--kmail-primary-color);
3+
}
4+
15
body {
26
margin-top: 0px;
37
margin-bottom: 0px;

0 commit comments

Comments
 (0)