diff --git a/.editorconfig b/.editorconfig index 4f23d46afd..26bef415d7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,7 +6,7 @@ indent_style = space insert_final_newline = true max_line_length = 160 tab_width = 4 -ij_continuation_indent_size = 8 +ij_continuation_indent_size = 4 ij_formatter_off_tag = @formatter:off ij_formatter_on_tag = @formatter:on ij_formatter_tags_enabled = false @@ -105,7 +105,7 @@ ij_java_for_statement_wrap = off ij_java_generate_final_locals = false ij_java_generate_final_parameters = false ij_java_if_brace_force = never -ij_java_imports_layout = $android.**,$androidx.**,$com.**,$junit.**,$net.**,$org.**,$java.**,$javax.**,$*,|,android.**,|,androidx.**,|,com.**,|,junit.**,|,net.**,|,org.**,|,java.**,|,javax.**,|,*,| +ij_java_imports_layout = $android.**, $androidx.**, $com.**, $junit.**, $net.**, $org.**, $java.**, $javax.**, $*, |, android.**, |, androidx.**, |, com.**, |, junit.**, |, net.**, |, org.**, |, java.**, |, javax.**, |, *, | ij_java_indent_case_from_switch = true ij_java_insert_inner_class_imports = false ij_java_insert_override_annotation = true @@ -640,7 +640,7 @@ ij_groovy_for_statement_right_paren_on_new_line = false ij_groovy_for_statement_wrap = off ij_groovy_if_brace_force = never ij_groovy_import_annotation_wrap = 2 -ij_groovy_imports_layout = *,|,javax.**,java.**,|,$* +ij_groovy_imports_layout = *, |, javax.**, java.**, |, $* ij_groovy_indent_case_from_switch = true ij_groovy_indent_label_blocks = true ij_groovy_insert_inner_class_imports = false @@ -797,7 +797,7 @@ ij_kotlin_field_annotation_wrap = normal ij_kotlin_finally_on_new_line = false ij_kotlin_if_rparen_on_new_line = false ij_kotlin_import_nested_classes = false -ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^ +ij_kotlin_imports_layout = *, java.**, javax.**, kotlin.**, ^ ij_kotlin_insert_whitespaces_in_simple_one_line_method = true ij_kotlin_keep_blank_lines_before_right_brace = 0 ij_kotlin_keep_blank_lines_in_code = 1 @@ -860,22 +860,22 @@ ij_json_spaces_within_brackets = false ij_json_wrap_long_lines = false [{*.htm,*.html,*.sht,*.shtm,*.shtml}] -ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3 +ij_html_add_new_line_before_tags = body, div, p, form, h1, h2, h3 ij_html_align_attributes = true ij_html_align_text = false ij_html_attribute_wrap = normal ij_html_block_comment_at_first_column = true ij_html_do_not_align_children_of_min_lines = 0 -ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p -ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot +ij_html_do_not_break_if_inline_tags = title, h1, h2, h3, h4, h5, h6, p +ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot ij_html_enforce_quotes = false -ij_html_inline_tags = a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var +ij_html_inline_tags = a, abbr, acronym, b, basefont, bdo, big, br, cite, cite, code, dfn, em, font, i, img, input, kbd, label, q, s, samp, select, small, span, strike, strong, sub, sup, textarea, tt, u, var ij_html_keep_blank_lines = 2 ij_html_keep_indents_on_empty_lines = false ij_html_keep_line_breaks = true ij_html_keep_line_breaks_in_text = true ij_html_keep_whitespaces = false -ij_html_keep_whitespaces_inside = span,pre,textarea +ij_html_keep_whitespaces_inside = span, pre, textarea ij_html_line_comment_at_first_column = true ij_html_new_line_after_last_attribute = never ij_html_new_line_before_first_attribute = never diff --git a/.github/workflows/triage-labelled.yml b/.github/workflows/triage-labelled.yml index 25dcc59e36..de2522c9e3 100644 --- a/.github/workflows/triage-labelled.yml +++ b/.github/workflows/triage-labelled.yml @@ -2,7 +2,7 @@ name: Move labelled issues to correct boards and columns on: issues: - types: [labeled] + types: [ labeled ] jobs: move_element_x_issues: diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000..74709d9df5 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,125 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000..79ee123c2b --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md index b288e273cf..82cc63ea3b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # element-x-android-poc + Proof Of Concept to run a Matrix client on Android devices using the Matrix Rust Sdk and Jetpack compose. -The plan is [here](https://github.com/vector-im/element-x-android-poc/issues/1)! \ No newline at end of file +The plan is [here](https://github.com/vector-im/element-x-android-poc/issues/1)! diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 02a86ad839..a173819d1f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -29,12 +29,12 @@ android { } register("nightly") { keyAlias = System.getenv("ELEMENT_ANDROID_NIGHTLY_KEYID") - ?: project.property("signing.element.nightly.keyId") as? String? + ?: project.property("signing.element.nightly.keyId") as? String? keyPassword = System.getenv("ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD") - ?: project.property("signing.element.nightly.keyPassword") as? String? + ?: project.property("signing.element.nightly.keyPassword") as? String? storeFile = file("./signature/nightly.keystore") storePassword = System.getenv("ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD") - ?: project.property("signing.element.nightly.storePassword") as? String? + ?: project.property("signing.element.nightly.storePassword") as? String? } } @@ -80,7 +80,6 @@ android { appId = "1:912726360885:android:e17435e0beb0303000427c" } } - } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 @@ -135,29 +134,29 @@ android { exclude { element -> element.file.path.contains("$buildDir/generated/") } } disabledRules.set( - setOf( - // TODO Re-enable these 4 rules after reformatting project - "indent", - "experimental:argument-list-wrapping", - "max-line-length", - "parameter-list-wrapping", + setOf( + // TODO Re-enable these 4 rules after reformatting project + "indent", + "experimental:argument-list-wrapping", + "max-line-length", + "parameter-list-wrapping", - "spacing-between-declarations-with-comments", - "no-multi-spaces", - "experimental:spacing-between-declarations-with-annotations", - "experimental:annotation", - // - Missing newline after "(" - // - Missing newline before ")" - "wrapping", - // - Unnecessary trailing comma before ")" - "experimental:trailing-comma", - // - A block comment in between other elements on the same line is disallowed - "experimental:comment-wrapping", - // - A KDoc comment after any other element on the same line must be separated by a new line - "experimental:kdoc-wrapping", - // Ignore error "Redundant curly braces", since we use it to fix false positives, for instance in "elementLogs.${i}.txt" - "string-template", - ) + "spacing-between-declarations-with-comments", + "no-multi-spaces", + "experimental:spacing-between-declarations-with-annotations", + "experimental:annotation", + // - Missing newline after "(" + // - Missing newline before ")" + "wrapping", + // - Unnecessary trailing comma before ")" + "experimental:trailing-comma", + // - A block comment in between other elements on the same line is disallowed + "experimental:comment-wrapping", + // - A KDoc comment after any other element on the same line must be separated by a new line + "experimental:kdoc-wrapping", + // Ignore error "Redundant curly braces", since we use it to fix false positives, for instance in "elementLogs.${i}.txt" + "string-template", + ) ) } } diff --git a/app/src/main/java/io/element/android/x/Showkase.kt b/app/src/main/java/io/element/android/x/ElementRootModule.kt similarity index 78% rename from app/src/main/java/io/element/android/x/Showkase.kt rename to app/src/main/java/io/element/android/x/ElementRootModule.kt index 999cc5bc68..ea6e1e7f31 100644 --- a/app/src/main/java/io/element/android/x/Showkase.kt +++ b/app/src/main/java/io/element/android/x/ElementRootModule.kt @@ -4,4 +4,4 @@ import com.airbnb.android.showkase.annotation.ShowkaseRoot import com.airbnb.android.showkase.annotation.ShowkaseRootModule @ShowkaseRoot -class ElementRootModule : ShowkaseRootModule \ No newline at end of file +class ElementRootModule : ShowkaseRootModule diff --git a/app/src/main/java/io/element/android/x/ElementXApplication.kt b/app/src/main/java/io/element/android/x/ElementXApplication.kt index 715b6c215b..df853fee82 100644 --- a/app/src/main/java/io/element/android/x/ElementXApplication.kt +++ b/app/src/main/java/io/element/android/x/ElementXApplication.kt @@ -29,4 +29,4 @@ class ElementXApplication : Application(), ImageLoaderFactory { } .build() } -} \ No newline at end of file +} diff --git a/app/src/main/java/io/element/android/x/MainActivity.kt b/app/src/main/java/io/element/android/x/MainActivity.kt index 68c524d52a..80df65935c 100644 --- a/app/src/main/java/io/element/android/x/MainActivity.kt +++ b/app/src/main/java/io/element/android/x/MainActivity.kt @@ -19,8 +19,15 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview @@ -106,7 +113,6 @@ class MainActivity : ComponentActivity() { OnLifecycleEvent { _, event -> Timber.v("OnLifecycleEvent: $event") } - } @Composable @@ -165,5 +171,4 @@ class MainActivity : ComponentActivity() { fun MainContentPreview() { MainContent(startRoute = OnBoardingScreenNavigationDestination) } - -} \ No newline at end of file +} diff --git a/app/src/main/java/io/element/android/x/MainViewModel.kt b/app/src/main/java/io/element/android/x/MainViewModel.kt index 2cdc09989c..198697edb9 100644 --- a/app/src/main/java/io/element/android/x/MainViewModel.kt +++ b/app/src/main/java/io/element/android/x/MainViewModel.kt @@ -13,14 +13,14 @@ class MainViewModel : ViewModel() { return matrix.isLoggedIn().first() } - fun startSyncIfLogged(){ + fun startSyncIfLogged() { viewModelScope.launch { - if(!isLoggedIn()) return@launch + if (!isLoggedIn()) return@launch matrix.activeClient().startSync() } } - fun stopSyncIfLogged(){ + fun stopSyncIfLogged() { viewModelScope.launch { if (!isLoggedIn()) return@launch matrix.activeClient().stopSync() @@ -31,4 +31,4 @@ class MainViewModel : ViewModel() { matrix.restoreSession() matrix.activeClient().startSync() } -} \ No newline at end of file +} diff --git a/app/src/main/java/io/element/android/x/Navigation.kt b/app/src/main/java/io/element/android/x/Navigation.kt index 5e67ebfff4..9555fcb555 100644 --- a/app/src/main/java/io/element/android/x/Navigation.kt +++ b/app/src/main/java/io/element/android/x/Navigation.kt @@ -77,6 +77,3 @@ fun RoomListScreenNavigation(navigator: DestinationsNavigator) { fun MessagesScreenNavigation(roomId: String, navigator: DestinationsNavigator) { MessagesScreen(roomId, navigator::navigateUp) } - - - diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 80e60d5f76..87cfa21f41 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -3,25 +3,26 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - - - - - - + + + + + + diff --git a/docs/usefulLinks.md b/docs/usefulLinks.md index 35ae4cf8c8..9c0ddde819 100644 --- a/docs/usefulLinks.md +++ b/docs/usefulLinks.md @@ -1,14 +1,11 @@ ### VersionCatalog - - - ### Jetpack Compose https://developer.android.com/jetpack/compose/mental-model - + https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.md#api-guidelines-for-jetpack-compose Preview https://alexzh.com/jetpack-compose-preview/ -https://github.com/airbnb/Showkase \ No newline at end of file +https://github.com/airbnb/Showkase diff --git a/features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt b/features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt index ba9eb96b15..ec5ace41e6 100644 --- a/features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt +++ b/features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package io.element.android.x.features.login -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * @@ -21,4 +19,4 @@ class ExampleInstrumentedTest { val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("io.element.android.x.features.login.test", appContext.packageName) } -} \ No newline at end of file +} diff --git a/features/login/src/main/AndroidManifest.xml b/features/login/src/main/AndroidManifest.xml index a5918e68ab..e100076157 100644 --- a/features/login/src/main/AndroidManifest.xml +++ b/features/login/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/features/login/src/main/java/io/element/android/x/features/login/LoginScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/LoginScreen.kt index 9e5540ba01..d521f93e2c 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/LoginScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/LoginScreen.kt @@ -2,7 +2,13 @@ package io.element.android.x.features.login -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions @@ -10,8 +16,21 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.Button +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight @@ -55,7 +74,6 @@ fun LoginScreen( ) } - @OptIn(ExperimentalMaterial3Api::class) @Composable fun LoginContent( diff --git a/features/login/src/main/java/io/element/android/x/features/login/LoginViewModel.kt b/features/login/src/main/java/io/element/android/x/features/login/LoginViewModel.kt index 5593313149..fcc590344d 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/LoginViewModel.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/LoginViewModel.kt @@ -55,4 +55,4 @@ class LoginViewModel(initialState: LoginViewState) : formState.value = formState.value.copy(login = name) setState { copy(isLoggedIn = Uninitialized) } } -} \ No newline at end of file +} diff --git a/features/login/src/main/java/io/element/android/x/features/login/LoginViewState.kt b/features/login/src/main/java/io/element/android/x/features/login/LoginViewState.kt index 62513cff08..d64d32ce58 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/LoginViewState.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/LoginViewState.kt @@ -22,5 +22,4 @@ data class LoginFormState( companion object { val Default = LoginFormState("", "") } - -} \ No newline at end of file +} diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerScreen.kt index de03fcb868..6e22221327 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerScreen.kt @@ -3,13 +3,27 @@ package io.element.android.x.features.login.changeserver import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.* +import androidx.compose.material3.Button +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -45,7 +59,6 @@ fun ChangeServerScreen( ) } - @Composable fun ChangeServerContent( state: ChangeServerViewState, @@ -101,7 +114,7 @@ fun ChangeServerContent( ) Text( text = "A server is a home for all your data.\n" + - "You choose your server and it’s easy to make one.", // TODO "Learn more.", + "You choose your server and it’s easy to make one.", // TODO "Learn more.", modifier = Modifier .fillMaxWidth() .align(Alignment.CenterHorizontally) diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewModel.kt b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewModel.kt index 58679beb91..15793e4a57 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewModel.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewModel.kt @@ -37,4 +37,4 @@ class ChangeServerViewModel(initialState: ChangeServerViewState) : } } } -} \ No newline at end of file +} diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewState.kt b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewState.kt index 34a7d4aeb8..8e1f907c31 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewState.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerViewState.kt @@ -10,4 +10,4 @@ data class ChangeServerViewState( val changeServerAction: Async = Uninitialized, ) : MavericksState { val submitEnabled = homeserver.isNotEmpty() && changeServerAction !is Loading -} \ No newline at end of file +} diff --git a/features/login/src/main/res/drawable/element_logo_green.xml b/features/login/src/main/res/drawable/element_logo_green.xml index 6e948c3536..33c066a636 100644 --- a/features/login/src/main/res/drawable/element_logo_green.xml +++ b/features/login/src/main/res/drawable/element_logo_green.xml @@ -6,17 +6,17 @@ + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> diff --git a/features/login/src/main/res/drawable/ic_baseline_dataset_24.xml b/features/login/src/main/res/drawable/ic_baseline_dataset_24.xml index f1171cb51c..aa885cbf10 100644 --- a/features/login/src/main/res/drawable/ic_baseline_dataset_24.xml +++ b/features/login/src/main/res/drawable/ic_baseline_dataset_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt b/features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt index bcc403cdbf..f1768db5bc 100644 --- a/features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt +++ b/features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package io.element.android.x.features.login +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt b/features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt index 5594e59678..6c7e4fce97 100644 --- a/features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt +++ b/features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package io.element.android.x.features.messages -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * @@ -21,4 +19,4 @@ class ExampleInstrumentedTest { val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("io.element.android.x.features.messages.test", appContext.packageName) } -} \ No newline at end of file +} diff --git a/features/messages/src/main/AndroidManifest.xml b/features/messages/src/main/AndroidManifest.xml index a5918e68ab..e100076157 100644 --- a/features/messages/src/main/AndroidManifest.xml +++ b/features/messages/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessageTimelineItemStateFactory.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessageTimelineItemStateFactory.kt index d52754b3b2..de9538a962 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessageTimelineItemStateFactory.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessageTimelineItemStateFactory.kt @@ -9,7 +9,14 @@ import io.element.android.x.features.messages.model.AggregatedReaction import io.element.android.x.features.messages.model.MessagesItemGroupPosition import io.element.android.x.features.messages.model.MessagesItemReactionState import io.element.android.x.features.messages.model.MessagesTimelineItemState -import io.element.android.x.features.messages.model.content.* +import io.element.android.x.features.messages.model.content.MessagesTimelineItemContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemEmoteContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemEncryptedContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemImageContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemNoticeContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemUnknownContent import io.element.android.x.features.messages.util.invalidateLast import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.media.MediaResolver @@ -83,7 +90,6 @@ class MessageTimelineItemStateFactory( timelineItemStates.emit(newTimelineItemStates) } - private fun calculateAndApplyDiff(newTimelineItems: List) { val timeToDiff = measureTimeMillis { val diffCallback = @@ -232,5 +238,4 @@ class MessageTimelineItemStateFactory( .resolve(url, kind = MediaResolver.Kind.Thumbnail(size.value)) return AvatarData(name, model, size) } - } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt index 44320e3e70..53be142766 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt @@ -8,7 +8,25 @@ package io.element.android.x.features.messages import Avatar import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items @@ -20,8 +38,24 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.material.rememberModalBottomSheetState -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.End import androidx.compose.ui.Alignment.Companion.Start @@ -42,9 +76,27 @@ import io.element.android.x.core.compose.LogCompositions import io.element.android.x.core.compose.PairCombinedPreviewParameter import io.element.android.x.core.data.StableCharSequence import io.element.android.x.designsystem.components.avatar.AvatarData -import io.element.android.x.features.messages.components.* -import io.element.android.x.features.messages.model.* -import io.element.android.x.features.messages.model.content.* +import io.element.android.x.features.messages.components.MessageEventBubble +import io.element.android.x.features.messages.components.MessagesReactionsView +import io.element.android.x.features.messages.components.MessagesTimelineItemEncryptedView +import io.element.android.x.features.messages.components.MessagesTimelineItemImageView +import io.element.android.x.features.messages.components.MessagesTimelineItemRedactedView +import io.element.android.x.features.messages.components.MessagesTimelineItemTextView +import io.element.android.x.features.messages.components.MessagesTimelineItemUnknownView +import io.element.android.x.features.messages.components.TimelineItemActionsScreen +import io.element.android.x.features.messages.model.AggregatedReaction +import io.element.android.x.features.messages.model.MessagesItemGroupPosition +import io.element.android.x.features.messages.model.MessagesItemGroupPositionProvider +import io.element.android.x.features.messages.model.MessagesItemReactionState +import io.element.android.x.features.messages.model.MessagesTimelineItemState +import io.element.android.x.features.messages.model.MessagesViewState +import io.element.android.x.features.messages.model.content.MessagesTimelineItemContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemContentProvider +import io.element.android.x.features.messages.model.content.MessagesTimelineItemEncryptedContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemImageContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent +import io.element.android.x.features.messages.model.content.MessagesTimelineItemUnknownContent import io.element.android.x.features.messages.textcomposer.MessageComposerViewModel import io.element.android.x.features.messages.textcomposer.MessageComposerViewState import io.element.android.x.textcomposer.MessageComposerMode @@ -322,7 +374,6 @@ fun TimelineItems( onLoadMore = onReachedLoadMore ) } - } private fun MessagesTimelineItemState.key(): String { @@ -339,7 +390,6 @@ private fun MessagesTimelineItemState.contentType(): Int { } } - @Composable fun TimelineItemRow( timelineItem: MessagesTimelineItemState, @@ -526,7 +576,6 @@ internal fun BoxScope.MessagesScrollHelper( Icon(Icons.Default.ArrowDownward, "") } } - } @Composable @@ -543,7 +592,6 @@ internal fun MessagesLoadingMoreIndicator() { color = MaterialTheme.colorScheme.primary ) } - } class MessagesItemGroupPositionToMessagesTimelineItemContentProvider : diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt index 8210529e20..2697dd05f1 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt @@ -230,4 +230,4 @@ class MessagesViewModel( timeline.callback = null timeline.dispose() } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessageEventBubble.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessageEventBubble.kt index 47bf5f3674..2791cde42b 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessageEventBubble.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessageEventBubble.kt @@ -13,7 +13,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.dp -import io.element.android.x.designsystem.* +import io.element.android.x.designsystem.LocalIsDarkTheme +import io.element.android.x.designsystem.MessageHighlightDark +import io.element.android.x.designsystem.MessageHighlightLight +import io.element.android.x.designsystem.SystemGrey5Dark +import io.element.android.x.designsystem.SystemGrey5Light +import io.element.android.x.designsystem.SystemGrey6Dark +import io.element.android.x.designsystem.SystemGrey6Light import io.element.android.x.features.messages.model.MessagesItemGroupPosition private val BUBBLE_RADIUS = 16.dp @@ -102,4 +108,4 @@ fun MessageEventBubble( shape = bubbleShape, content = content ) -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesReactionsView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesReactionsView.kt index 7b62e9d6cb..0802493a67 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesReactionsView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesReactionsView.kt @@ -24,7 +24,7 @@ fun MessagesReactionsView( reactionsState: MessagesItemReactionState, modifier: Modifier = Modifier, ) { - if(reactionsState.reactions.isEmpty()) return + if (reactionsState.reactions.isEmpty()) return FlowRow( modifier = modifier, mainAxisSpacing = 2.dp, @@ -53,4 +53,4 @@ fun MessagesReactionButton(reaction: AggregatedReaction, modifier: Modifier = Mo Text(text = reaction.count, color = MaterialTheme.colorScheme.secondary, fontSize = 12.sp) } } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemActionsSheet.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemActionsSheet.kt index 3d1b6cede9..bf45101d19 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemActionsSheet.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemActionsSheet.kt @@ -3,14 +3,28 @@ package io.element.android.x.features.messages.components import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.* -import androidx.compose.runtime.* +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.ListItem +import androidx.compose.material.LocalContentColor +import androidx.compose.material.MaterialTheme +import androidx.compose.material.ModalBottomSheetLayout +import androidx.compose.material.ModalBottomSheetState +import androidx.compose.material.ModalBottomSheetValue +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.unit.dp import com.airbnb.mvrx.compose.collectAsState import io.element.android.x.designsystem.components.VectorIcon @@ -21,7 +35,6 @@ import io.element.android.x.features.messages.model.MessagesTimelineItemState import io.element.android.x.features.messages.model.MessagesViewState import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent import io.element.android.x.features.messages.textcomposer.MessageComposerViewModel -import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch @@ -71,11 +84,12 @@ fun TimelineItemActionsScreen( SheetContent( actionsSheetState = itemActionsSheetState(), onActionClicked = ::onItemActionClicked, - modifier = Modifier.navigationBarsPadding().imePadding() + modifier = Modifier + .navigationBarsPadding() + .imePadding() ) } ) {} - } @Composable @@ -113,4 +127,4 @@ private fun SheetContent( ) } } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemEncryptedView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemEncryptedView.kt index d2b280657e..cf89c3418a 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemEncryptedView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemEncryptedView.kt @@ -17,4 +17,4 @@ fun MessagesTimelineItemEncryptedView( icon = Icons.Default.Warning, modifier = modifier ) -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt index eaac062ae2..dd614be275 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.heightIn import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf @@ -16,7 +15,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import coil.request.ImageRequest import io.element.android.x.features.messages.model.content.MessagesTimelineItemImageContent @@ -26,9 +24,9 @@ fun MessagesTimelineItemImageView( content: MessagesTimelineItemImageContent, modifier: Modifier = Modifier ) { - val widthPercent = if(content.aspectRatio > 1f){ + val widthPercent = if (content.aspectRatio > 1f) { 1f - }else { + } else { 0.7f } Box( @@ -52,4 +50,4 @@ fun MessagesTimelineItemImageView( onSuccess = { isLoading.value = false }, ) } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt index dbfe9ccf96..56f5723486 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt @@ -40,4 +40,4 @@ fun MessagesTimelineItemInformativeView( text = text ) } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemRedactedView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemRedactedView.kt index bc1a4d2d10..f87ef4c18e 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemRedactedView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemRedactedView.kt @@ -17,4 +17,4 @@ fun MessagesTimelineItemRedactedView( icon = Icons.Default.Delete, modifier = modifier ) -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemTextView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemTextView.kt index 26fd802bc5..a5753ff628 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemTextView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemTextView.kt @@ -74,4 +74,4 @@ private fun String.linkify( end = end ) } -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemUnknownView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemUnknownView.kt index 2c9344e02d..9445103c5f 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemUnknownView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemUnknownView.kt @@ -17,4 +17,4 @@ fun MessagesTimelineItemUnknownView( icon = Icons.Default.Info, modifier = modifier ) -} \ No newline at end of file +} diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/html/HtmlDocument.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/html/HtmlDocument.kt index e71769b532..d65de84e5d 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/html/HtmlDocument.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/html/HtmlDocument.kt @@ -9,17 +9,25 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent -import androidx.compose.material3.* +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.* +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.google.accompanist.flowlayout.FlowRow @@ -268,7 +276,6 @@ private fun HtmlBlockquote( } } - @Composable private fun HtmlHeading( heading: Element, @@ -402,7 +409,6 @@ private fun HtmlUnorderedList( } } - @Composable private fun HtmlListItems( list: Element, @@ -426,7 +432,6 @@ private fun HtmlListItems( ) } } - } } } @@ -452,7 +457,6 @@ private fun AnnotatedString.Builder.appendInlineChildrenElements( } } - private fun AnnotatedString.Builder.appendInlineElement(element: Element, colors: ColorScheme) { when (element.normalName()) { "br" -> { @@ -490,7 +494,6 @@ private fun AnnotatedString.Builder.appendInlineElement(element: Element, colors appendInlineChildrenElements(element.childNodes(), colors) } } - } private fun AnnotatedString.Builder.appendLink(link: Element) { diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/diff/CacheInvalidator.kt b/features/messages/src/main/java/io/element/android/x/features/messages/diff/CacheInvalidator.kt index 4940ea6046..542bd98b8d 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/diff/CacheInvalidator.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/diff/CacheInvalidator.kt @@ -37,5 +37,4 @@ internal class CacheInvalidator(private val itemStatesCache: MutableList true else -> false } - } internal class MessagesItemGroupPositionProvider : PreviewParameterProvider { @@ -22,4 +21,4 @@ internal class MessagesItemGroupPositionProvider : PreviewParameterProvider ) + @Stable data class AggregatedReaction( val key: String, val count: String, val isHighlighted: Boolean = false -) \ No newline at end of file +) diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt index e194e9a1a4..6c86a8687a 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt @@ -23,10 +23,7 @@ sealed interface MessagesTimelineItemState { val showSenderInformation = groupPosition.isNew() && !isMine val safeSenderName: String = senderDisplayName ?: senderId - } - - } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/content/MessagesTimelineItemContent.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/content/MessagesTimelineItemContent.kt index 57c6edd330..8c758347f8 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/content/MessagesTimelineItemContent.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/content/MessagesTimelineItemContent.kt @@ -2,8 +2,6 @@ package io.element.android.x.features.messages.model.content import androidx.compose.ui.tooling.preview.PreviewParameterProvider import org.matrix.rustcomponents.sdk.EncryptedMessage -import org.matrix.rustcomponents.sdk.FormattedBody -import org.matrix.rustcomponents.sdk.MessageFormat sealed interface MessagesTimelineItemContent @@ -28,4 +26,4 @@ class MessagesTimelineItemContentProvider : PreviewParameterProvider - + - \ No newline at end of file + diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt index 8a1b4bfa39..232f020477 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt @@ -3,12 +3,24 @@ package io.element.android.x.features.onboarding import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -42,7 +54,6 @@ fun OnBoardingScreen( ) } - @OptIn(ExperimentalPagerApi::class) @Composable fun OnBoardingContent( @@ -164,4 +175,4 @@ fun OnBoardingPage( ) } } -} \ No newline at end of file +} diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt index 0749c4a50d..b1f708b126 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt @@ -12,4 +12,4 @@ class OnBoardingViewModel(initialState: OnBoardingViewState) : ) } } -} \ No newline at end of file +} diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt index f9b0bb9dfb..e21ccf9058 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt @@ -20,12 +20,12 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes data class SplashCarouselState( - val items: List + val items: List ) { data class Item( - @StringRes val title: Int, - @StringRes val body: Int, - @DrawableRes val image: Int, - @DrawableRes val pageBackground: Int + @StringRes val title: Int, + @StringRes val body: Int, + @DrawableRes val image: Int, + @DrawableRes val pageBackground: Int ) } diff --git a/features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt b/features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt index bcc403cdbf..f1768db5bc 100644 --- a/features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt +++ b/features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package io.element.android.x.features.login +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt b/features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt index 8b9c88c9c3..c16a44bebb 100644 --- a/features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt +++ b/features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package io.element.android.x.features.roomlist -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * @@ -21,4 +19,4 @@ class ExampleInstrumentedTest { val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("io.element.android.x.features.roomlist.test", appContext.packageName) } -} \ No newline at end of file +} diff --git a/features/roomlist/src/main/AndroidManifest.xml b/features/roomlist/src/main/AndroidManifest.xml index a5918e68ab..e100076157 100644 --- a/features/roomlist/src/main/AndroidManifest.xml +++ b/features/roomlist/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt index 4cd35efc15..06dca99637 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt @@ -2,11 +2,17 @@ package io.element.android.x.features.roomlist import android.text.format.DateFormat import android.text.format.DateUtils -import kotlinx.datetime.* +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant +import kotlinx.datetime.toJavaLocalDate +import kotlinx.datetime.toJavaLocalDateTime +import kotlinx.datetime.toLocalDateTime import java.time.Period import java.time.format.DateTimeFormatter -import java.util.* +import java.util.Locale import kotlin.math.absoluteValue class LastMessageFormatter( @@ -29,7 +35,6 @@ class LastMessageFormatter( DateTimeFormatter.ofPattern(pattern) } - fun format(timestamp: Long?): String { if (timestamp == null) return "" val now: Instant = clock.now() @@ -77,6 +82,4 @@ class LastMessageFormatter( DateUtils.FORMAT_SHOW_WEEKDAY ).toString() } - - -} \ No newline at end of file +} diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt index aae69e5497..799622c9a6 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt @@ -1,6 +1,10 @@ package io.element.android.x.features.roomlist -import com.airbnb.mvrx.* +import com.airbnb.mvrx.Loading +import com.airbnb.mvrx.MavericksViewModel +import com.airbnb.mvrx.MavericksViewModelFactory +import com.airbnb.mvrx.Success +import com.airbnb.mvrx.ViewModelContext import io.element.android.x.core.data.parallelMap import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.x.designsystem.components.avatar.AvatarSize @@ -118,8 +122,8 @@ class RoomListViewModel( copy( rooms = when { it is Loading || - // Note: this second case will prevent to handle correctly the empty case - (it is Success && it().isEmpty() && filter.isEmpty()) -> { + // Note: this second case will prevent to handle correctly the empty case + (it is Success && it().isEmpty() && filter.isEmpty()) -> { // Show fake placeholders to avoid having empty screen Loading(RoomListRoomSummaryPlaceholders.createFakeList(size = 16)) } @@ -164,5 +168,4 @@ class RoomListViewModel( .resolve(url, kind = MediaResolver.Kind.Thumbnail(size.value)) return AvatarData(name, model, size) } - -} \ No newline at end of file +} diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt index 95b7744f5c..2c1f9eb54d 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt @@ -11,9 +11,23 @@ import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Logout import androidx.compose.material.icons.filled.Search -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.MediumTopAppBar +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester @@ -65,7 +79,6 @@ fun RoomListTopBar( scrollBehavior = scrollBehavior, ) } - } @Composable @@ -83,8 +96,8 @@ fun SearchRoomListTopBar( title = { TextField( modifier = Modifier - .fillMaxWidth() - .focusRequester(focusRequester), + .fillMaxWidth() + .focusRequester(focusRequester), value = filterState, textStyle = TextStyle( fontSize = 17.sp diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt index 5cdee76523..5b5486c8a4 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt @@ -4,13 +4,21 @@ import Avatar import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.ripple.rememberRipple import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.CenterVertically @@ -57,7 +65,6 @@ internal fun RoomSummaryRow( ) { DefaultRoomSummaryRow(room = room) } - } @Composable diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt index 98e2200df6..893824756f 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt @@ -13,4 +13,5 @@ data class RoomListRoomSummary( val timestamp: String? = null, val lastMessage: CharSequence? = null, val avatarData: AvatarData = AvatarData(), - val isPlaceholder: Boolean = false,) + val isPlaceholder: Boolean = false, +) diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt index 1be8c07b2d..93eb2a6d42 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt @@ -2,7 +2,6 @@ package io.element.android.x.features.roomlist.model import io.element.android.x.designsystem.components.avatar.AvatarData - object RoomListRoomSummaryPlaceholders { fun create(id: String): RoomListRoomSummary { @@ -23,6 +22,5 @@ object RoomListRoomSummaryPlaceholders { } } } - } diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt index 4c8844b13b..3261e63a6d 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt @@ -22,4 +22,4 @@ internal fun stubbedRoomSummaries(): List { ), RoomListRoomSummaryPlaceholders.create("roomId2") ) -} \ No newline at end of file +} diff --git a/features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt b/features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt index 39034b2cb2..38bdf65d63 100644 --- a/features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt +++ b/features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package io.element.android.x.features.roomlist +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index c4b415660b..9caae7208e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,8 +21,7 @@ kotlin.code.style=official # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true - # Dummy values for signing secrets / nightly signing.element.nightly.storePassword=Secret signing.element.nightly.keyId=Secret -signing.element.nightly.keyPassword=Secret \ No newline at end of file +signing.element.nightly.keyPassword=Secret diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt b/libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt index 7ab910b135..ba1371335f 100644 --- a/libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt +++ b/libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt @@ -6,7 +6,6 @@ import androidx.compose.runtime.SideEffect import androidx.compose.runtime.remember import io.element.android.x.core.BuildConfig - // Note the inline function below which ensures that this function is essentially // copied at the call site to ensure that its logging only recompositions from the // original call site. @@ -19,4 +18,4 @@ inline fun LogCompositions(tag: String, msg: String) { } } -class Ref(var value: Int) \ No newline at end of file +class Ref(var value: Int) diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt b/libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt index 310e85a061..c022703236 100644 --- a/libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt +++ b/libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt @@ -12,7 +12,7 @@ import androidx.lifecycle.LifecycleOwner fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) { val eventHandler = rememberUpdatedState(onEvent) val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current) - + DisposableEffect(lifecycleOwner.value) { val lifecycle = lifecycleOwner.value.lifecycle val observer = LifecycleEventObserver { owner, event -> @@ -24,4 +24,4 @@ fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> lifecycle.removeObserver(observer) } } -} \ No newline at end of file +} diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt b/libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt index 188d99260d..0b3067968c 100644 --- a/libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt +++ b/libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt @@ -5,7 +5,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember - @Composable public fun textFieldState(stateValue: String): MutableState = - remember(stateValue) { mutableStateOf(stateValue) } \ No newline at end of file + remember(stateValue) { mutableStateOf(stateValue) } diff --git a/libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt b/libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt index 7564f77f14..bdca1eefd0 100644 --- a/libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt +++ b/libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt @@ -24,18 +24,18 @@ class DimensionConverter(val resources: Resources) { @Px fun dpToPx(dp: Int): Int { return TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, - dp.toFloat(), - resources.displayMetrics + TypedValue.COMPLEX_UNIT_DIP, + dp.toFloat(), + resources.displayMetrics ).toInt() } @Px fun spToPx(sp: Int): Int { return TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_SP, - sp.toFloat(), - resources.displayMetrics + TypedValue.COMPLEX_UNIT_SP, + sp.toFloat(), + resources.displayMetrics ).toInt() } diff --git a/libraries/core/src/main/java/io/element/android/x/core/ui/View.kt b/libraries/core/src/main/java/io/element/android/x/core/ui/View.kt index e9c0542c09..a240a4d10c 100644 --- a/libraries/core/src/main/java/io/element/android/x/core/ui/View.kt +++ b/libraries/core/src/main/java/io/element/android/x/core/ui/View.kt @@ -35,9 +35,9 @@ fun View.showKeyboard(andRequestFocus: Boolean = false) { fun View.setHorizontalPadding(padding: Int) { setPadding( - padding, - paddingTop, - padding, - paddingBottom + padding, + paddingTop, + padding, + paddingBottom ) } diff --git a/libraries/designsystem/src/main/AndroidManifest.xml b/libraries/designsystem/src/main/AndroidManifest.xml index a5918e68ab..e100076157 100644 --- a/libraries/designsystem/src/main/AndroidManifest.xml +++ b/libraries/designsystem/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt index 0bc41fb0d3..6bf9aaca92 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt @@ -5,6 +5,7 @@ import com.airbnb.android.showkase.annotation.ShowkaseColor @ShowkaseColor(name = "LightGrey", group = "Material Design") val LightGrey = Color(0x993C3C43) + @ShowkaseColor(name = "DarkGrey", group = "Material Design") val DarkGrey = Color(0x99EBEBF5) @@ -37,7 +38,8 @@ val Vermilion = Color(0xFFFF5B55) // TODO Update color val MessageHighlightLight = Azure + // TODO Update color val MessageHighlightDark = Azure -val LinkColor = Color(0xFF054F6E) \ No newline at end of file +val LinkColor = Color(0xFF054F6E) diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt index 2f757fa11b..1c3c78c475 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt @@ -2,7 +2,11 @@ package io.element.android.x.designsystem import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.* +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect @@ -81,7 +85,6 @@ fun ElementXTheme( content = content ) } - } diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt index 3cfdcf85f3..3e92cda7af 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt @@ -9,7 +9,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.sp import com.airbnb.android.showkase.annotation.ShowkaseTypography - @ShowkaseTypography(name = "Body Large", group = "Element") val bodyLarge = TextStyle( fontFamily = FontFamily.Default, @@ -231,6 +230,4 @@ object ElementTextStyles { textAlign = TextAlign.Center ) } - - -} \ No newline at end of file +} diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt index a01c2eeddc..6be64bc51f 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt @@ -53,4 +53,4 @@ fun ProgressDialog(text: String? = null, onDismiss: () -> Unit = {}) { @Preview fun ProgressDialogPreview() { ProgressDialog("test dialog content") -} \ No newline at end of file +} diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt index 70198103eb..df1939e9af 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt @@ -5,7 +5,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier - @Composable fun VectorButton(text: String, enabled: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier) { Button( diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorTextField.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorTextField.kt index 53ffa2739a..524aea98b9 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorTextField.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorTextField.kt @@ -6,7 +6,6 @@ import androidx.compose.material3.OutlinedTextField import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier - @OptIn(ExperimentalMaterial3Api::class) @Composable fun VectorTextField(value: String, onValueChange: (String) -> Unit, isError: Boolean = false) { diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt index c5eb17164a..115fbb4dac 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt @@ -52,7 +52,6 @@ private fun ImageAvatar( ) } - @Composable private fun InitialsAvatar( initials: String, diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt index ce1fd06dba..34892867ce 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt @@ -30,5 +30,4 @@ data class AvatarData( result = 31 * result + size.value return result } - -} \ No newline at end of file +} diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt index 1161fcb5f3..eb07d8f9c5 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt @@ -77,4 +77,4 @@ fun ConfirmationDialogPreview() { title = "Title", content = "Content", ) -} \ No newline at end of file +} diff --git a/libraries/designsystem/src/main/res/drawable/ic_baseline_delete_outline_24.xml b/libraries/designsystem/src/main/res/drawable/ic_baseline_delete_outline_24.xml index ef36649125..33b26af516 100644 --- a/libraries/designsystem/src/main/res/drawable/ic_baseline_delete_outline_24.xml +++ b/libraries/designsystem/src/main/res/drawable/ic_baseline_delete_outline_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/libraries/designsystem/src/main/res/drawable/ic_baseline_edit_24.xml b/libraries/designsystem/src/main/res/drawable/ic_baseline_edit_24.xml index 1c9bd3e6bd..7aeb747672 100644 --- a/libraries/designsystem/src/main/res/drawable/ic_baseline_edit_24.xml +++ b/libraries/designsystem/src/main/res/drawable/ic_baseline_edit_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/libraries/designsystem/src/main/res/drawable/ic_baseline_reply_24.xml b/libraries/designsystem/src/main/res/drawable/ic_baseline_reply_24.xml index c5fba99883..7555e22d54 100644 --- a/libraries/designsystem/src/main/res/drawable/ic_baseline_reply_24.xml +++ b/libraries/designsystem/src/main/res/drawable/ic_baseline_reply_24.xml @@ -1,5 +1,11 @@ - - + + diff --git a/libraries/designsystem/src/main/res/drawable/ic_content_arrow_forward.xml b/libraries/designsystem/src/main/res/drawable/ic_content_arrow_forward.xml index 8d3848e661..2927820a2b 100644 --- a/libraries/designsystem/src/main/res/drawable/ic_content_arrow_forward.xml +++ b/libraries/designsystem/src/main/res/drawable/ic_content_arrow_forward.xml @@ -1,5 +1,11 @@ - - + + diff --git a/libraries/designsystem/src/main/res/drawable/ic_content_copy.xml b/libraries/designsystem/src/main/res/drawable/ic_content_copy.xml index bac0f6001a..4b70c6f537 100644 --- a/libraries/designsystem/src/main/res/drawable/ic_content_copy.xml +++ b/libraries/designsystem/src/main/res/drawable/ic_content_copy.xml @@ -1,5 +1,10 @@ - - + + diff --git a/libraries/elementresources/src/main/AndroidManifest.xml b/libraries/elementresources/src/main/AndroidManifest.xml index 8bdb7e14b3..e100076157 100644 --- a/libraries/elementresources/src/main/AndroidManifest.xml +++ b/libraries/elementresources/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + diff --git a/libraries/elementresources/src/main/res/drawable/ic_close_round.xml b/libraries/elementresources/src/main/res/drawable/ic_close_round.xml index 413a233b56..97d20390f6 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_close_round.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_close_round.xml @@ -3,18 +3,18 @@ android:height="22dp" android:viewportWidth="22" android:viewportHeight="22"> - - + + diff --git a/libraries/elementresources/src/main/res/drawable/ic_composer_bold.xml b/libraries/elementresources/src/main/res/drawable/ic_composer_bold.xml index 3d9a10d16b..17adfc3d35 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_composer_bold.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_composer_bold.xml @@ -3,8 +3,8 @@ android:height="44dp" android:viewportWidth="44" android:viewportHeight="44"> - + diff --git a/libraries/elementresources/src/main/res/drawable/ic_composer_full_screen.xml b/libraries/elementresources/src/main/res/drawable/ic_composer_full_screen.xml index 394dc52279..4c88f9063c 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_composer_full_screen.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_composer_full_screen.xml @@ -3,7 +3,7 @@ android:height="48dp" android:viewportWidth="48" android:viewportHeight="48"> - + diff --git a/libraries/elementresources/src/main/res/drawable/ic_composer_italic.xml b/libraries/elementresources/src/main/res/drawable/ic_composer_italic.xml index faa4f89cd4..97050d52f9 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_composer_italic.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_composer_italic.xml @@ -3,8 +3,8 @@ android:height="44dp" android:viewportWidth="44" android:viewportHeight="44"> - + diff --git a/libraries/elementresources/src/main/res/drawable/ic_composer_strikethrough.xml b/libraries/elementresources/src/main/res/drawable/ic_composer_strikethrough.xml index 3970c95381..505558409a 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_composer_strikethrough.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_composer_strikethrough.xml @@ -3,10 +3,10 @@ android:height="44dp" android:viewportWidth="44" android:viewportHeight="44"> - - + + diff --git a/libraries/elementresources/src/main/res/drawable/ic_composer_underlined.xml b/libraries/elementresources/src/main/res/drawable/ic_composer_underlined.xml index fe18d60185..296e16f3d8 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_composer_underlined.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_composer_underlined.xml @@ -3,11 +3,10 @@ android:height="44dp" android:viewportWidth="44" android:viewportHeight="44"> - - - - + + + + diff --git a/libraries/elementresources/src/main/res/drawable/ic_edit.xml b/libraries/elementresources/src/main/res/drawable/ic_edit.xml index 33214d4246..048c153f5f 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_edit.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_edit.xml @@ -3,18 +3,18 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + + diff --git a/libraries/elementresources/src/main/res/drawable/ic_send.xml b/libraries/elementresources/src/main/res/drawable/ic_send.xml index 9f10eca84a..7e415e2803 100644 --- a/libraries/elementresources/src/main/res/drawable/ic_send.xml +++ b/libraries/elementresources/src/main/res/drawable/ic_send.xml @@ -1,5 +1,10 @@ - - + + diff --git a/libraries/elementresources/src/main/res/transition/image_preview_transition.xml b/libraries/elementresources/src/main/res/transition/image_preview_transition.xml index c1af6d7973..4ad8f83dfd 100644 --- a/libraries/elementresources/src/main/res/transition/image_preview_transition.xml +++ b/libraries/elementresources/src/main/res/transition/image_preview_transition.xml @@ -2,10 +2,11 @@ The transitions which us used for the entrance and exit of shared elements. Here we declare two different transitions which are targeting specific views. --> - + - + diff --git a/libraries/elementresources/src/main/res/values/style_action_button.xml b/libraries/elementresources/src/main/res/values/style_action_button.xml index 0a3c73622f..dd5c424707 100644 --- a/libraries/elementresources/src/main/res/values/style_action_button.xml +++ b/libraries/elementresources/src/main/res/values/style_action_button.xml @@ -1,8 +1,9 @@ + - \ No newline at end of file + diff --git a/libraries/elementresources/src/main/res/values/style_snackbar.xml b/libraries/elementresources/src/main/res/values/style_snackbar.xml index d15f846d8f..82b2120c71 100644 --- a/libraries/elementresources/src/main/res/values/style_snackbar.xml +++ b/libraries/elementresources/src/main/res/values/style_snackbar.xml @@ -2,15 +2,15 @@ diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt index 5be629b7f8..d98dfee413 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt @@ -10,14 +10,18 @@ import io.element.android.x.matrix.util.logError import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.asCoroutineDispatcher -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.AuthenticationService import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.ClientBuilder import timber.log.Timber import java.io.File -import java.util.* +import java.util.Optional import java.util.concurrent.Executors class Matrix( @@ -115,4 +119,4 @@ class Matrix( matrixClient.value = Optional.of(it) } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt index 2ac426a03d..e392d54e74 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt @@ -11,7 +11,13 @@ import io.element.android.x.matrix.session.SessionStore import io.element.android.x.matrix.sync.SlidingSyncObserverProxy import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.* +import org.matrix.rustcomponents.sdk.Client +import org.matrix.rustcomponents.sdk.ClientDelegate +import org.matrix.rustcomponents.sdk.MediaSource +import org.matrix.rustcomponents.sdk.RequiredState +import org.matrix.rustcomponents.sdk.SlidingSyncMode +import org.matrix.rustcomponents.sdk.SlidingSyncViewBuilder +import org.matrix.rustcomponents.sdk.StoppableSpawn import timber.log.Timber import java.io.Closeable import java.io.File @@ -78,7 +84,7 @@ class MatrixClient internal constructor( client.setDelegate(clientDelegate) } - private fun onRestartSync(){ + private fun onRestartSync() { slidingSyncObserverToken = slidingSync.sync() } diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixInstance.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixInstance.kt index b7173b0b2b..2c83d4d241 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixInstance.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixInstance.kt @@ -7,7 +7,6 @@ import io.element.android.x.matrix.tracing.setupTracing import io.element.android.x.sdk.matrix.BuildConfig import kotlinx.coroutines.CoroutineScope - object MatrixInstance { @SuppressLint("StaticFieldLeak") private lateinit var instance: Matrix @@ -24,4 +23,4 @@ object MatrixInstance { fun getInstance(): Matrix { return instance } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/RoomWrapper.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/RoomWrapper.kt index 90aaaa6251..b9a6ea9fb3 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/RoomWrapper.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/RoomWrapper.kt @@ -12,4 +12,4 @@ class RoomWrapper( Log.d(LOG_TAG, "We have ${rooms.size} rooms") return rooms.firstOrNull { it.id() == roomId } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt index ab516d8ba8..e73cf2b024 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt @@ -80,15 +80,15 @@ object MatrixPatterns { // list of patterns to find some matrix item. val MATRIX_PATTERNS = listOf( - PATTERN_CONTAIN_MATRIX_TO_PERMALINK_ROOM_ID, - PATTERN_CONTAIN_MATRIX_TO_PERMALINK_ROOM_ALIAS, - PATTERN_CONTAIN_APP_LINK_PERMALINK_ROOM_ID, - PATTERN_CONTAIN_APP_LINK_PERMALINK_ROOM_ALIAS, - PATTERN_CONTAIN_MATRIX_USER_IDENTIFIER, - PATTERN_CONTAIN_MATRIX_ALIAS, - PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER, - PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER, - PATTERN_CONTAIN_MATRIX_GROUP_IDENTIFIER + PATTERN_CONTAIN_MATRIX_TO_PERMALINK_ROOM_ID, + PATTERN_CONTAIN_MATRIX_TO_PERMALINK_ROOM_ALIAS, + PATTERN_CONTAIN_APP_LINK_PERMALINK_ROOM_ID, + PATTERN_CONTAIN_APP_LINK_PERMALINK_ROOM_ALIAS, + PATTERN_CONTAIN_MATRIX_USER_IDENTIFIER, + PATTERN_CONTAIN_MATRIX_ALIAS, + PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER, + PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER, + PATTERN_CONTAIN_MATRIX_GROUP_IDENTIFIER ) /** @@ -129,9 +129,9 @@ object MatrixPatterns { */ fun isEventId(str: String?): Boolean { return str != null && - (str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER || - str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER_V3 || - str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER_V4) + (str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER || + str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER_V3 || + str matches PATTERN_CONTAIN_MATRIX_EVENT_IDENTIFIER_V4) } /** diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt index cea9a9e8d6..3369cab78a 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt @@ -3,4 +3,4 @@ package io.element.android.x.matrix.core import java.io.Serializable @JvmInline -value class RoomId(val value: String): Serializable \ No newline at end of file +value class RoomId(val value: String) : Serializable diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt index 3c499f8487..cf34ba13c8 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt @@ -3,4 +3,4 @@ package io.element.android.x.matrix.core import java.io.Serializable @JvmInline -value class UserId(val value: String): Serializable \ No newline at end of file +value class UserId(val value: String) : Serializable diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt index 7ed5f3c7e9..22b1b43635 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt @@ -35,4 +35,4 @@ internal class MediaFetcher( ) } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt index 949ce02cf4..8a1991298c 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt @@ -24,7 +24,6 @@ interface MediaResolver { suspend fun resolve(meta: Meta): ByteArray? } - internal class RustMediaResolver(private val client: MatrixClient) : MediaResolver { override suspend fun resolve(url: String?, kind: MediaResolver.Kind): ByteArray? { @@ -43,6 +42,4 @@ internal class RustMediaResolver(private val client: MatrixClient) : MediaResolv ) }.getOrNull() } - - -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt index e1f878d331..bd20bd3277 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt @@ -43,12 +43,12 @@ object PermalinkParser { // we are limiting to 2 params val params = safeFragment - .split(MatrixPatterns.SEP_REGEX) - .filter { it.isNotEmpty() } - .take(2) + .split(MatrixPatterns.SEP_REGEX) + .filter { it.isNotEmpty() } + .take(2) val decodedParams = params - .map { URLDecoder.decode(it, "UTF-8") } + .map { URLDecoder.decode(it, "UTF-8") } val identifier = params.getOrNull(0) val decodedIdentifier = decodedParams.getOrNull(0) @@ -61,10 +61,10 @@ object PermalinkParser { } MatrixPatterns.isRoomAlias(decodedIdentifier) -> { PermalinkData.RoomLink( - roomIdOrAlias = decodedIdentifier, - isRoomAlias = true, - eventId = extraParameter.takeIf { !it.isNullOrEmpty() && MatrixPatterns.isEventId(it) }, - viaParameters = viaQueryParameters + roomIdOrAlias = decodedIdentifier, + isRoomAlias = true, + eventId = extraParameter.takeIf { !it.isNullOrEmpty() && MatrixPatterns.isEventId(it) }, + viaParameters = viaQueryParameters ) } else -> PermalinkData.FallbackLink(uri, MatrixPatterns.isGroupId(identifier)) @@ -83,16 +83,16 @@ object PermalinkParser { val token = signValidUri.getQueryParameter("token") ?: throw IllegalArgumentException() val privateKey = signValidUri.getQueryParameter("private_key") ?: throw IllegalArgumentException() PermalinkData.RoomEmailInviteLink( - roomId = identifier, - email = email!!, - signUrl = signUrl!!, - roomName = paramList.firstOrNull { it.first == "room_name" }?.second, - inviterName = paramList.firstOrNull { it.first == "inviter_name" }?.second, - roomAvatarUrl = paramList.firstOrNull { it.first == "room_avatar_url" }?.second, - roomType = paramList.firstOrNull { it.first == "room_type" }?.second, - identityServer = identityServerHost, - token = token, - privateKey = privateKey + roomId = identifier, + email = email!!, + signUrl = signUrl!!, + roomName = paramList.firstOrNull { it.first == "room_name" }?.second, + inviterName = paramList.firstOrNull { it.first == "inviter_name" }?.second, + roomAvatarUrl = paramList.firstOrNull { it.first == "room_avatar_url" }?.second, + roomType = paramList.firstOrNull { it.first == "room_type" }?.second, + identityServer = identityServerHost, + token = token, + privateKey = privateKey ) } catch (failure: Throwable) { Timber.i("## Permalink: Failed to parse permalink $signUrl") @@ -100,29 +100,29 @@ object PermalinkParser { } } else { PermalinkData.RoomLink( - roomIdOrAlias = identifier, - isRoomAlias = false, - eventId = extraParameter.takeIf { !it.isNullOrEmpty() && MatrixPatterns.isEventId(it) }, - viaParameters = viaQueryParameters + roomIdOrAlias = identifier, + isRoomAlias = false, + eventId = extraParameter.takeIf { !it.isNullOrEmpty() && MatrixPatterns.isEventId(it) }, + viaParameters = viaQueryParameters ) } } private fun safeExtractParams(fragment: String) = - fragment.substringAfter("?").split('&').mapNotNull { - val splitNameValue = it.split("=") - if (splitNameValue.size == 2) { - Pair(splitNameValue[0], URLDecoder.decode(splitNameValue[1], "UTF-8")) - } else null - } + fragment.substringAfter("?").split('&').mapNotNull { + val splitNameValue = it.split("=") + if (splitNameValue.size == 2) { + Pair(splitNameValue[0], URLDecoder.decode(splitNameValue[1], "UTF-8")) + } else null + } private fun String.getViaParameters(): List { return UrlQuerySanitizer(this) - .parameterList - .filter { - it.mParameter == "via" - }.map { - URLDecoder.decode(it.mValue, "UTF-8") - } + .parameterList + .filter { + it.mParameter == "via" + }.map { + URLDecoder.decode(it.mValue, "UTF-8") + } } } diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt index 940c3018cf..f2e38bc2bf 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt @@ -9,7 +9,11 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.* +import org.matrix.rustcomponents.sdk.Room +import org.matrix.rustcomponents.sdk.SlidingSyncRoom +import org.matrix.rustcomponents.sdk.UpdateSummary +import org.matrix.rustcomponents.sdk.genTransactionId +import org.matrix.rustcomponents.sdk.messageEventContentFromMarkdown class MatrixRoom( private val slidingSyncUpdateFlow: Flow, @@ -98,10 +102,10 @@ class MatrixRoom( } } - suspend fun redactEvent(eventId: String, reason: String? = null, ) = withContext(coroutineDispatchers.io) { + suspend fun redactEvent(eventId: String, reason: String? = null) = withContext(coroutineDispatchers.io) { val transactionId = genTransactionId() runCatching { room.redact(eventId, reason, transactionId) } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt index 691798b6e3..59bf35dc98 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt @@ -9,7 +9,6 @@ import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.TimelineDiff import org.matrix.rustcomponents.sdk.TimelineListener - fun Room.timelineDiff(scope: CoroutineScope): Flow = callbackFlow { val listener = object : TimelineListener { override fun onUpdate(update: TimelineDiff) { diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt index ff4a01eaf0..580a64e081 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt @@ -2,7 +2,6 @@ package io.element.android.x.matrix.room import io.element.android.x.matrix.core.RoomId - sealed interface RoomSummary { data class Empty(val identifier: String) : RoomSummary data class Filled(val details: RoomSummaryDetails) : RoomSummary @@ -13,7 +12,6 @@ sealed interface RoomSummary { is Filled -> details.roomId.value } } - } data class RoomSummaryDetails( diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt index 91af2c5eca..5ec62cef06 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt @@ -3,12 +3,27 @@ package io.element.android.x.matrix.room import io.element.android.x.core.coroutine.CoroutineDispatchers import io.element.android.x.matrix.sync.roomListDiff import io.element.android.x.matrix.sync.state -import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* -import org.matrix.rustcomponents.sdk.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelChildren +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.sample +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.matrix.rustcomponents.sdk.RoomListEntry +import org.matrix.rustcomponents.sdk.SlidingSync +import org.matrix.rustcomponents.sdk.SlidingSyncState +import org.matrix.rustcomponents.sdk.SlidingSyncView +import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff +import org.matrix.rustcomponents.sdk.UpdateSummary import timber.log.Timber import java.io.Closeable -import java.util.* +import java.util.Collections +import java.util.UUID interface RoomSummaryDataSource { fun roomSummaries(): Flow> @@ -56,7 +71,6 @@ internal class RustRoomSummaryDataSource( Timber.v("New sliding sync state: $slidingSyncState") state.value = slidingSyncState }.launchIn(coroutineScope) - } fun stopSync() { @@ -163,4 +177,4 @@ internal class RustRoomSummaryDataSource( else -> false } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt index 0427987bd5..8f9c4a471b 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt @@ -7,7 +7,7 @@ import org.matrix.rustcomponents.sdk.SlidingSyncRoom class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFactory = RoomMessageFactory()) { - fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails{ + fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails { val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.let { roomMessageFactory.create(it) } @@ -17,14 +17,13 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto else -> "${latestRoomMessage.sender.value}: ${latestRoomMessage.body}" } return RoomSummaryDetails( - roomId = RoomId(slidingSyncRoom.roomId()), - name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(), - isDirect = slidingSyncRoom.isDm() ?: false, - avatarURLString = room?.avatarUrl(), - unreadNotificationCount = slidingSyncRoom.unreadNotifications().notificationCount().toInt(), - lastMessage = computedLastMessage, - lastMessageTimestamp = latestRoomMessage?.originServerTs + roomId = RoomId(slidingSyncRoom.roomId()), + name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(), + isDirect = slidingSyncRoom.isDm() ?: false, + avatarURLString = room?.avatarUrl(), + unreadNotificationCount = slidingSyncRoom.unreadNotifications().notificationCount().toInt(), + lastMessage = computedLastMessage, + lastMessageTimestamp = latestRoomMessage?.originServerTs ) } - -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt index 7c82c42472..4bcb86eefb 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt @@ -14,5 +14,4 @@ class RoomMessageFactory { originServerTs = eventTimelineItem.originServerTs()?.toLong() ?: 0L ) } - -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt index a30c5b4ebc..288e181b78 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt @@ -10,7 +10,8 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.serialization.Serializable -import kotlinx.serialization.* +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.matrix.rustcomponents.sdk.Session @@ -73,4 +74,4 @@ internal class SessionStore( suspend fun reset() { store.edit { it.clear() } } -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt index b5365cdf9a..88f8175d86 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt @@ -11,6 +11,7 @@ import org.matrix.rustcomponents.sdk.UpdateSummary // Sounds like a reasonable buffer size before it suspends emitting new items. private const val BUFFER_SIZE = 64 + class SlidingSyncObserverProxy( private val coroutineScope: CoroutineScope, private val coroutineDispatchers: CoroutineDispatchers @@ -26,5 +27,4 @@ class SlidingSyncObserverProxy( updateSummaryMutableFlow.emit(summary) } } - -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt index 8eaa386390..3e814877e8 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt @@ -4,7 +4,12 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch import mxCallbackFlow -import org.matrix.rustcomponents.sdk.* +import org.matrix.rustcomponents.sdk.SlidingSyncState +import org.matrix.rustcomponents.sdk.SlidingSyncView +import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomListObserver +import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsCountObserver +import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff +import org.matrix.rustcomponents.sdk.SlidingSyncViewStateObserver fun SlidingSyncView.roomListDiff(scope: CoroutineScope): Flow = mxCallbackFlow { diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt index c987716104..3a65bedadf 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt @@ -8,9 +8,14 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.sample import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.* +import org.matrix.rustcomponents.sdk.PaginationOutcome +import org.matrix.rustcomponents.sdk.Room +import org.matrix.rustcomponents.sdk.SlidingSyncRoom +import org.matrix.rustcomponents.sdk.TimelineChange +import org.matrix.rustcomponents.sdk.TimelineDiff +import org.matrix.rustcomponents.sdk.TimelineListener import timber.log.Timber -import java.util.* +import java.util.Collections class MatrixTimeline( private val matrixRoom: MatrixRoom, @@ -31,7 +36,6 @@ class MatrixTimeline( private val timelineItems: MutableStateFlow> = MutableStateFlow(emptyList()) - fun timelineItems(): Flow> { return timelineItems.sample(50) } @@ -41,7 +45,6 @@ class MatrixTimeline( return paginationOutcome.value.moreMessages } - private fun MutableList.applyDiff(diff: TimelineDiff) { when (diff.change()) { TimelineChange.PUSH -> { @@ -140,5 +143,4 @@ class MatrixTimeline( } } } - -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt index 947bff09f5..de5ae950bb 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt @@ -9,7 +9,6 @@ data class TracingConfiguration( targets.map { "${it.key.filter}=${it.value.filter}" }.joinToString(separator = ",") }" - sealed class Target(open val filter: String) { object Hyper : Target("hyper") object Sled : Target("sled") @@ -31,7 +30,6 @@ data class TracingConfiguration( object Debug : LogLevel("debug") object Error : LogLevel("error") } - } fun setupTracing(tracingConfiguration: TracingConfiguration) { @@ -47,4 +45,4 @@ object TracingConfigurations { TracingConfiguration.Target.Sled to TracingConfiguration.LogLevel.Warn ) ) -} \ No newline at end of file +} diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt index 23bb5f6fbc..3d76294e6f 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt @@ -12,4 +12,4 @@ internal fun mxCallbackFlow(block: suspend ProducerScope.() -> StoppableS awaitClose { token.cancel() } - } \ No newline at end of file + } diff --git a/libraries/textcomposer/src/main/AndroidManifest.xml b/libraries/textcomposer/src/main/AndroidManifest.xml index 8bdb7e14b3..e100076157 100644 --- a/libraries/textcomposer/src/main/AndroidManifest.xml +++ b/libraries/textcomposer/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt index 617eeef499..dff983a47a 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt @@ -34,7 +34,6 @@ sealed interface MessageComposerMode { override val defaultContent: CharSequence ) : Special(eventId, defaultContent) - val relatedEventId: String? get() = when (this) { is Normal -> null @@ -42,7 +41,5 @@ sealed interface MessageComposerMode { is Quote -> eventId is Reply -> eventId } - - } diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt index 870fe1e657..bb57ca98af 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt @@ -70,7 +70,6 @@ fun TextComposer( override fun onFullScreenModeChanged() { onFullscreenToggle() } - } setFullScreen(fullscreen, animated = false, manageKeyboard = true) (this as MessageComposerView).apply { diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt index 649221c2bd..fa0a218d19 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt @@ -1,7 +1,11 @@ package io.element.android.x.textcomposer.tools import android.view.ViewGroup -import androidx.transition.* +import androidx.transition.ChangeBounds +import androidx.transition.Fade +import androidx.transition.Transition +import androidx.transition.TransitionManager +import androidx.transition.TransitionSet fun ViewGroup.animateLayoutChange(animationDuration: Long, transitionComplete: (() -> Unit)? = null) { val transition = TransitionSet().apply { diff --git a/libraries/textcomposer/src/main/res/drawable/bg_composer_rich_bottom_sheet.xml b/libraries/textcomposer/src/main/res/drawable/bg_composer_rich_bottom_sheet.xml index 47364373f7..ab91f2f496 100644 --- a/libraries/textcomposer/src/main/res/drawable/bg_composer_rich_bottom_sheet.xml +++ b/libraries/textcomposer/src/main/res/drawable/bg_composer_rich_bottom_sheet.xml @@ -1,5 +1,7 @@ - - + + diff --git a/libraries/textcomposer/src/main/res/drawable/bottomsheet_handle.xml b/libraries/textcomposer/src/main/res/drawable/bottomsheet_handle.xml index 89ccf57ed0..f1bb917c61 100644 --- a/libraries/textcomposer/src/main/res/drawable/bottomsheet_handle.xml +++ b/libraries/textcomposer/src/main/res/drawable/bottomsheet_handle.xml @@ -1,6 +1,7 @@ - - + + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_composer_collapse.xml b/libraries/textcomposer/src/main/res/drawable/ic_composer_collapse.xml index 724a833761..3e24b2d62e 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_composer_collapse.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_composer_collapse.xml @@ -5,5 +5,5 @@ android:viewportHeight="20"> + android:pathData="M10.708,10Q10.438,10 10.219,9.781Q10,9.562 10,9.292V4.542Q10,4.354 10.146,4.219Q10.292,4.083 10.458,4.083Q10.646,4.083 10.781,4.219Q10.917,4.354 10.917,4.542V8.438L16.375,3Q16.5,2.854 16.688,2.854Q16.875,2.854 17,3Q17.146,3.125 17.146,3.312Q17.146,3.5 17,3.625L11.562,9.083H15.458Q15.646,9.083 15.781,9.229Q15.917,9.375 15.917,9.542Q15.917,9.729 15.781,9.865Q15.646,10 15.458,10ZM3,17Q2.854,16.875 2.854,16.688Q2.854,16.5 3,16.375L8.438,10.917H4.542Q4.354,10.917 4.219,10.771Q4.083,10.625 4.083,10.458Q4.083,10.271 4.219,10.135Q4.354,10 4.542,10H9.292Q9.562,10 9.781,10.219Q10,10.438 10,10.708V15.458Q10,15.646 9.854,15.781Q9.708,15.917 9.542,15.917Q9.354,15.917 9.219,15.781Q9.083,15.646 9.083,15.458V11.562L3.625,17Q3.5,17.146 3.312,17.146Q3.125,17.146 3,17Z" /> diff --git a/libraries/textcomposer/src/main/res/drawable/ic_composer_full_screen.xml b/libraries/textcomposer/src/main/res/drawable/ic_composer_full_screen.xml index de1862c09b..d877319d0e 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_composer_full_screen.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_composer_full_screen.xml @@ -5,5 +5,5 @@ android:viewportHeight="20"> + android:pathData="M3.625,17.083Q3.354,17.083 3.135,16.865Q2.917,16.646 2.917,16.375V11.625Q2.917,11.438 3.062,11.302Q3.208,11.167 3.375,11.167Q3.562,11.167 3.698,11.302Q3.833,11.438 3.833,11.625V15.5L15.5,3.833H11.625Q11.438,3.833 11.302,3.688Q11.167,3.542 11.167,3.375Q11.167,3.188 11.302,3.052Q11.438,2.917 11.625,2.917H16.375Q16.646,2.917 16.865,3.135Q17.083,3.354 17.083,3.625V8.375Q17.083,8.562 16.938,8.698Q16.792,8.833 16.625,8.833Q16.438,8.833 16.302,8.698Q16.167,8.562 16.167,8.375V4.5L4.5,16.167H8.375Q8.562,16.167 8.698,16.312Q8.833,16.458 8.833,16.625Q8.833,16.812 8.698,16.948Q8.562,17.083 8.375,17.083Z" /> diff --git a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_close.xml b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_close.xml index c461470de5..44343de281 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_close.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_close.xml @@ -3,7 +3,7 @@ android:height="12dp" android:viewportWidth="12" android:viewportHeight="12"> - + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_edit.xml b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_edit.xml index 4556974221..a5ef981c5b 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_edit.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_editor_edit.xml @@ -3,10 +3,10 @@ android:height="12dp" android:viewportWidth="12" android:viewportHeight="12"> - - + + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_save.xml b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_save.xml index f270d6f8ae..e447fdc6af 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_save.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_composer_rich_text_save.xml @@ -3,14 +3,14 @@ android:height="36dp" android:viewportWidth="36" android:viewportHeight="36"> - - + + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_quote.xml b/libraries/textcomposer/src/main/res/drawable/ic_quote.xml index 0689651f1d..e287c9296d 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_quote.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_quote.xml @@ -3,12 +3,12 @@ android:height="14dp" android:viewportWidth="20" android:viewportHeight="14"> - + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_reply.xml b/libraries/textcomposer/src/main/res/drawable/ic_reply.xml index f23730624f..80eeab00c9 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_reply.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_reply.xml @@ -1,11 +1,20 @@ - - + - + + android:strokeColor="#000000" + android:strokeLineCap="round" + android:strokeLineJoin="round" + android:strokeWidth="2" /> diff --git a/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_add.xml b/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_add.xml index 3a90a40902..9dc6ed03e9 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_add.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_add.xml @@ -3,13 +3,13 @@ android:height="36dp" android:viewportWidth="36" android:viewportHeight="36"> - - + + diff --git a/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_send.xml b/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_send.xml index 0f99c1670e..18afb70d6d 100644 --- a/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_send.xml +++ b/libraries/textcomposer/src/main/res/drawable/ic_rich_composer_send.xml @@ -3,10 +3,10 @@ android:height="36dp" android:viewportWidth="36" android:viewportHeight="36"> - - + + diff --git a/libraries/textcomposer/src/main/res/layout/composer_rich_text_layout.xml b/libraries/textcomposer/src/main/res/layout/composer_rich_text_layout.xml index d099c72cab..0e82ca381b 100644 --- a/libraries/textcomposer/src/main/res/layout/composer_rich_text_layout.xml +++ b/libraries/textcomposer/src/main/res/layout/composer_rich_text_layout.xml @@ -81,7 +81,8 @@ app:layout_constraintStart_toStartOf="@id/composerEditTextOuterBorder" app:tint="?vctr_content_tertiary" /> - - -