correctly render whitespace in posts (#2383)
* correctly preserve whitespace in posts * use extension function to convert from Spanned to Html * improve comment
This commit is contained in:
parent
991d261459
commit
a257d9b769
1 changed files with 15 additions and 4 deletions
|
@ -19,6 +19,7 @@ import android.text.Spanned
|
|||
import android.text.SpannedString
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.core.text.parseAsHtml
|
||||
import androidx.core.text.toHtml
|
||||
import com.google.gson.JsonDeserializationContext
|
||||
import com.google.gson.JsonDeserializer
|
||||
import com.google.gson.JsonElement
|
||||
|
@ -32,12 +33,22 @@ import java.lang.reflect.Type
|
|||
class SpannedTypeAdapter : JsonDeserializer<Spanned>, JsonSerializer<Spanned?> {
|
||||
@Throws(JsonParseException::class)
|
||||
override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Spanned {
|
||||
/* Html.fromHtml returns trailing whitespace if the html ends in a </p> tag, which
|
||||
* all status contents do, so it should be trimmed. */
|
||||
return json.asString?.parseAsHtml()?.trimTrailingWhitespace() ?: SpannedString("")
|
||||
return json.asString
|
||||
/* Mastodon uses 'white-space: pre-wrap;' so spaces are displayed as returned by the Api.
|
||||
* We can't use CSS so we replace spaces with non-breaking-spaces to emulate the behavior.
|
||||
*/
|
||||
?.replace("<br> ", "<br> ")
|
||||
?.replace("<br /> ", "<br /> ")
|
||||
?.replace("<br/> ", "<br/> ")
|
||||
?.replace(" ", " ")
|
||||
?.parseAsHtml()
|
||||
/* Html.fromHtml returns trailing whitespace if the html ends in a </p> tag, which
|
||||
* most status contents do, so it should be trimmed. */
|
||||
?.trimTrailingWhitespace()
|
||||
?: SpannedString("")
|
||||
}
|
||||
|
||||
override fun serialize(src: Spanned?, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
return JsonPrimitive(HtmlCompat.toHtml(src!!, HtmlCompat.TO_HTML_PARAGRAPH_LINES_INDIVIDUAL))
|
||||
return JsonPrimitive(src!!.toHtml(HtmlCompat.TO_HTML_PARAGRAPH_LINES_INDIVIDUAL))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue