From a38c2970f8ce2b3808e162c48effa3c11a0abede Mon Sep 17 00:00:00 2001 From: DianQK Date: Tue, 9 May 2023 22:15:24 +0800 Subject: [PATCH] Preview page adds RTL support --- .../data/preference/TextDirectionPreference.kt | 6 ++++++ .../ruslin/ui/page/note_detail/NoteDetailPage.kt | 8 ++++++-- .../ui/page/note_detail/NoteDetailViewModel.kt | 13 +++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/dianqk/ruslin/data/preference/TextDirectionPreference.kt b/app/src/main/java/org/dianqk/ruslin/data/preference/TextDirectionPreference.kt index 880f1b7..dd8a351 100644 --- a/app/src/main/java/org/dianqk/ruslin/data/preference/TextDirectionPreference.kt +++ b/app/src/main/java/org/dianqk/ruslin/data/preference/TextDirectionPreference.kt @@ -29,6 +29,12 @@ sealed class TextDirectionPreference(val value: Int) { Auto -> context.getString(R.string.auto) } + fun toHtmlDirAttribute(): String = when (this) { + Ltr -> "ltr" + Rtl -> "rtl" + Auto -> "auto" + } + fun getTextDirection(): TextDirection = when (this) { Ltr -> TextDirection.Ltr Rtl -> TextDirection.Rtl diff --git a/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailPage.kt b/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailPage.kt index a800be2..e74676e 100644 --- a/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailPage.kt +++ b/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailPage.kt @@ -43,7 +43,11 @@ fun NoteDetailPage( val titles = listOf(stringResource(id = R.string.edit), stringResource(id = R.string.preview)) var selectedTabIndex by remember { mutableStateOf(if (viewModel.isPreview) PREVIEW_TAB_INDEX else EDIT_TAB_INDEX) } val focusManager = LocalFocusManager.current - val contentTextDirection = LocalContentTextDirection.current.getTextDirection() + val contentTextDirection = LocalContentTextDirection.current + + LaunchedEffect(contentTextDirection) { + viewModel.updateTextDirectionPreference(contentTextDirection) + } Scaffold( topBar = { @@ -86,7 +90,7 @@ fun NoteDetailPage( .zIndex(if (selectedTabIndex == EDIT_TAB_INDEX) 1f else 0f), title = uiState.title, body = uiState.body, - textDirection = contentTextDirection, + textDirection = contentTextDirection.getTextDirection(), onTitleChanged = viewModel::updateTitle, onBodyChanged = viewModel::updateBody, onSaveResource = { uri: Uri -> diff --git a/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailViewModel.kt b/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailViewModel.kt index 98789fe..f663f73 100644 --- a/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailViewModel.kt +++ b/app/src/main/java/org/dianqk/ruslin/ui/page/note_detail/NoteDetailViewModel.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.dianqk.ruslin.data.NotesRepository +import org.dianqk.ruslin.data.preference.TextDirectionPreference import org.dianqk.ruslin.ui.RuslinDestinationsArgs import uniffi.ruslin.FfiNote import java.io.FileOutputStream @@ -28,6 +29,7 @@ data class NoteDetailUiState( val body: String = "", val isLoading: Boolean = false, val previewHtml: String = "", + val textDirectionPreference: TextDirectionPreference = TextDirectionPreference.default, ) const val TAG = "NoteDetailViewModel" @@ -83,6 +85,12 @@ class NoteDetailViewModel @Inject constructor( } } + fun updateTextDirectionPreference(textDirectionPreference: TextDirectionPreference) { + _uiState.update { + it.copy(textDirectionPreference = textDirectionPreference) + } + } + fun updateTitle(newTitle: String) { edited = true _uiState.update { @@ -163,7 +171,8 @@ class NoteDetailViewModel @Inject constructor( } } - fun setPreviewHtml(body: String) { + private fun setPreviewHtml(body: String) { + val htmlDirAttribute = uiState.value.textDirectionPreference.toHtmlDirAttribute() viewModelScope.launch { withContext(Dispatchers.IO) { // TODO: Adapted to m3 theme, already adapted to the background color @@ -171,7 +180,7 @@ class NoteDetailViewModel @Inject constructor( append( """ - +