change(room details edit): move to his own module
This commit is contained in:
parent
15cb6431c6
commit
2e7355e789
54 changed files with 475 additions and 29 deletions
|
|
@ -59,6 +59,7 @@ dependencies {
|
||||||
implementation(projects.features.roommembermoderation.api)
|
implementation(projects.features.roommembermoderation.api)
|
||||||
implementation(projects.features.rolesandpermissions.api)
|
implementation(projects.features.rolesandpermissions.api)
|
||||||
implementation(projects.features.securityandprivacy.api)
|
implementation(projects.features.securityandprivacy.api)
|
||||||
|
implementation(projects.features.roomdetailsedit.api)
|
||||||
implementation(projects.features.invitepeople.api)
|
implementation(projects.features.invitepeople.api)
|
||||||
|
|
||||||
testCommonDependencies(libs, true)
|
testCommonDependencies(libs, true)
|
||||||
|
|
@ -73,6 +74,7 @@ dependencies {
|
||||||
testImplementation(projects.features.call.test)
|
testImplementation(projects.features.call.test)
|
||||||
testImplementation(projects.features.rolesandpermissions.test)
|
testImplementation(projects.features.rolesandpermissions.test)
|
||||||
testImplementation(projects.features.securityandprivacy.test)
|
testImplementation(projects.features.securityandprivacy.test)
|
||||||
|
implementation(projects.features.roomdetailsedit.test)
|
||||||
testImplementation(projects.features.knockrequests.test)
|
testImplementation(projects.features.knockrequests.test)
|
||||||
testImplementation(projects.features.messages.test)
|
testImplementation(projects.features.messages.test)
|
||||||
testImplementation(projects.features.poll.test)
|
testImplementation(projects.features.poll.test)
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRoles
|
||||||
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesListType
|
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesListType
|
||||||
import io.element.android.features.rolesandpermissions.api.RolesAndPermissionsEntryPoint
|
import io.element.android.features.rolesandpermissions.api.RolesAndPermissionsEntryPoint
|
||||||
import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
|
import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
|
||||||
import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditNode
|
|
||||||
import io.element.android.features.roomdetails.impl.invite.RoomInviteMembersNode
|
import io.element.android.features.roomdetails.impl.invite.RoomInviteMembersNode
|
||||||
import io.element.android.features.roomdetails.impl.members.RoomMemberListNode
|
import io.element.android.features.roomdetails.impl.members.RoomMemberListNode
|
||||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsNode
|
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsNode
|
||||||
import io.element.android.features.roomdetails.impl.notificationsettings.RoomNotificationSettingsNode
|
import io.element.android.features.roomdetails.impl.notificationsettings.RoomNotificationSettingsNode
|
||||||
|
import io.element.android.features.roomdetailsedit.api.RoomDetailsEditEntryPoint
|
||||||
import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyEntryPoint
|
import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyEntryPoint
|
||||||
import io.element.android.features.userprofile.shared.UserProfileNodeHelper
|
import io.element.android.features.userprofile.shared.UserProfileNodeHelper
|
||||||
import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint
|
import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint
|
||||||
|
|
@ -85,6 +85,7 @@ class RoomDetailsFlowNode(
|
||||||
private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
|
private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
|
||||||
private val rolesAndPermissionsEntryPoint: RolesAndPermissionsEntryPoint,
|
private val rolesAndPermissionsEntryPoint: RolesAndPermissionsEntryPoint,
|
||||||
private val securityAndPrivacyEntryPoint: SecurityAndPrivacyEntryPoint,
|
private val securityAndPrivacyEntryPoint: SecurityAndPrivacyEntryPoint,
|
||||||
|
private val roomDetailsEditEntryPoint: RoomDetailsEditEntryPoint,
|
||||||
) : BaseFlowNode<RoomDetailsFlowNode.NavTarget>(
|
) : BaseFlowNode<RoomDetailsFlowNode.NavTarget>(
|
||||||
backstack = BackStack(
|
backstack = BackStack(
|
||||||
initialElement = plugins.filterIsInstance<RoomDetailsEntryPoint.Params>().first().initialElement.toNavTarget(),
|
initialElement = plugins.filterIsInstance<RoomDetailsEntryPoint.Params>().first().initialElement.toNavTarget(),
|
||||||
|
|
@ -256,7 +257,7 @@ class RoomDetailsFlowNode(
|
||||||
}
|
}
|
||||||
|
|
||||||
NavTarget.RoomDetailsEdit -> {
|
NavTarget.RoomDetailsEdit -> {
|
||||||
createNode<RoomDetailsEditNode>(buildContext)
|
roomDetailsEditEntryPoint.createNode(this, buildContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
NavTarget.InviteMembers -> {
|
NavTarget.InviteMembers -> {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import io.element.android.features.messages.test.FakeMessagesEntryPoint
|
||||||
import io.element.android.features.poll.test.history.FakePollHistoryEntryPoint
|
import io.element.android.features.poll.test.history.FakePollHistoryEntryPoint
|
||||||
import io.element.android.features.reportroom.test.FakeReportRoomEntryPoint
|
import io.element.android.features.reportroom.test.FakeReportRoomEntryPoint
|
||||||
import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
|
import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint
|
||||||
|
import io.element.android.features.roomdetailsedit.test.FakeRoomDetailsEditEntryPoint
|
||||||
import io.element.android.features.securityandprivacy.test.FakeSecurityAndPrivacyEntryPoint
|
import io.element.android.features.securityandprivacy.test.FakeSecurityAndPrivacyEntryPoint
|
||||||
import io.element.android.features.verifysession.test.FakeOutgoingVerificationEntryPoint
|
import io.element.android.features.verifysession.test.FakeOutgoingVerificationEntryPoint
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
|
|
@ -63,6 +64,7 @@ class DefaultRoomDetailsEntryPointTest {
|
||||||
changeRoomMemberRolesEntryPoint = FakeChangeRoomMemberRolesEntryPoint(),
|
changeRoomMemberRolesEntryPoint = FakeChangeRoomMemberRolesEntryPoint(),
|
||||||
rolesAndPermissionsEntryPoint = FakeRolesAndPermissionsEntryPoint(),
|
rolesAndPermissionsEntryPoint = FakeRolesAndPermissionsEntryPoint(),
|
||||||
securityAndPrivacyEntryPoint = FakeSecurityAndPrivacyEntryPoint(),
|
securityAndPrivacyEntryPoint = FakeSecurityAndPrivacyEntryPoint(),
|
||||||
|
roomDetailsEditEntryPoint = FakeRoomDetailsEditEntryPoint(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val callback = object : RoomDetailsEntryPoint.Callback {
|
val callback = object : RoomDetailsEntryPoint.Callback {
|
||||||
|
|
|
||||||
21
features/roomdetailsedit/api/build.gradle.kts
Normal file
21
features/roomdetailsedit/api/build.gradle.kts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
* Copyright 2022-2025 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("io.element.android-library")
|
||||||
|
id("kotlin-parcelize")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "io.element.android.features.roomdetailsedit.api"
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(projects.libraries.architecture)
|
||||||
|
implementation(projects.libraries.matrix.api)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
* Copyright 2023-2025 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.roomdetailsedit.api
|
||||||
|
|
||||||
|
import io.element.android.libraries.architecture.SimpleFeatureEntryPoint
|
||||||
|
|
||||||
|
fun interface RoomDetailsEditEntryPoint : SimpleFeatureEntryPoint
|
||||||
57
features/roomdetailsedit/impl/build.gradle.kts
Normal file
57
features/roomdetailsedit/impl/build.gradle.kts
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
import extension.setupDependencyInjection
|
||||||
|
import extension.testCommonDependencies
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
* Copyright 2023, 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("io.element.android-compose-library")
|
||||||
|
id("kotlin-parcelize")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "io.element.android.features.roomdetailsedit.impl"
|
||||||
|
testOptions {
|
||||||
|
unitTests {
|
||||||
|
isIncludeAndroidResources = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupDependencyInjection()
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(projects.libraries.core)
|
||||||
|
implementation(projects.libraries.architecture)
|
||||||
|
implementation(projects.libraries.matrix.api)
|
||||||
|
implementation(projects.libraries.matrixui)
|
||||||
|
implementation(projects.libraries.designsystem)
|
||||||
|
implementation(projects.libraries.uiStrings)
|
||||||
|
implementation(projects.libraries.androidutils)
|
||||||
|
implementation(projects.libraries.mediapickers.api)
|
||||||
|
implementation(projects.libraries.mediaupload.api)
|
||||||
|
implementation(projects.libraries.mediaviewer.api)
|
||||||
|
implementation(projects.libraries.featureflag.api)
|
||||||
|
implementation(projects.libraries.permissions.api)
|
||||||
|
implementation(projects.libraries.preferences.api)
|
||||||
|
implementation(projects.services.analytics.api)
|
||||||
|
implementation(projects.libraries.testtags)
|
||||||
|
api(projects.features.roomdetailsedit.api)
|
||||||
|
api(projects.services.apperror.api)
|
||||||
|
implementation(libs.coil.compose)
|
||||||
|
|
||||||
|
testCommonDependencies(libs, true)
|
||||||
|
testImplementation(projects.libraries.matrix.test)
|
||||||
|
testImplementation(projects.libraries.mediaupload.test)
|
||||||
|
testImplementation(projects.libraries.mediapickers.test)
|
||||||
|
testImplementation(projects.libraries.mediaviewer.test)
|
||||||
|
testImplementation(projects.libraries.permissions.test)
|
||||||
|
testImplementation(projects.libraries.preferences.test)
|
||||||
|
testImplementation(projects.libraries.featureflag.test)
|
||||||
|
testImplementation(projects.services.analytics.test)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
* Copyright 2023-2025 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
|
import com.bumble.appyx.core.modality.BuildContext
|
||||||
|
import com.bumble.appyx.core.node.Node
|
||||||
|
import dev.zacsweers.metro.AppScope
|
||||||
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
|
import io.element.android.features.roomdetailsedit.api.RoomDetailsEditEntryPoint
|
||||||
|
import io.element.android.libraries.architecture.createNode
|
||||||
|
|
||||||
|
@ContributesBinding(AppScope::class)
|
||||||
|
class DefaultRoomDetailsEditEntryPoint : RoomDetailsEditEntryPoint {
|
||||||
|
override fun createNode(parentNode: Node, buildContext: BuildContext): Node {
|
||||||
|
return parentNode.createNode<RoomDetailsEditNode>(buildContext)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
||||||
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
|
@ -6,8 +6,9 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
|
@ -51,7 +52,7 @@ class RoomDetailsEditPresenter(
|
||||||
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
||||||
private val mediaOptimizationConfigProvider: MediaOptimizationConfigProvider,
|
private val mediaOptimizationConfigProvider: MediaOptimizationConfigProvider,
|
||||||
) : Presenter<RoomDetailsEditState> {
|
) : Presenter<RoomDetailsEditState> {
|
||||||
private val cameraPermissionPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
private val cameraPermissionPresenter = permissionsPresenterFactory.create(Manifest.permission.CAMERA)
|
||||||
private var pendingPermissionRequest = false
|
private var pendingPermissionRequest = false
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
@file:OptIn(ExperimentalMaterial3Api::class)
|
@file:OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -31,7 +31,6 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.input.KeyboardCapitalization
|
import androidx.compose.ui.text.input.KeyboardCapitalization
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.features.roomdetails.impl.R
|
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
||||||
import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults
|
import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults
|
||||||
|
|
@ -108,9 +107,9 @@ fun RoomDetailsEditView(
|
||||||
displayName = state.roomRawName,
|
displayName = state.roomRawName,
|
||||||
avatarUrl = state.roomAvatarUrl,
|
avatarUrl = state.roomAvatarUrl,
|
||||||
avatarSize = AvatarSize.EditRoomDetails,
|
avatarSize = AvatarSize.EditRoomDetails,
|
||||||
avatarType = if(state.isSpace){
|
avatarType = if (state.isSpace) {
|
||||||
AvatarType.Space()
|
AvatarType.Space()
|
||||||
}else {
|
} else {
|
||||||
AvatarType.Room()
|
AvatarType.Room()
|
||||||
},
|
},
|
||||||
onAvatarClick = ::onAvatarClick,
|
onAvatarClick = ::onAvatarClick,
|
||||||
|
|
@ -119,7 +118,7 @@ fun RoomDetailsEditView(
|
||||||
Spacer(modifier = Modifier.height(60.dp))
|
Spacer(modifier = Modifier.height(60.dp))
|
||||||
|
|
||||||
TextField(
|
TextField(
|
||||||
label = stringResource(id = R.string.screen_room_details_room_name_label),
|
label = stringResource(id = CommonStrings.common_room_name),
|
||||||
value = state.roomRawName,
|
value = state.roomRawName,
|
||||||
placeholder = stringResource(CommonStrings.common_room_name_placeholder),
|
placeholder = stringResource(CommonStrings.common_room_name_placeholder),
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Рэдагаваць пакой"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Адбылася невядомая памылка, і інфармацыю нельга было змяніць."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Немагчыма абнавіць пакой"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Ідзе абнаўленне пакоя…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Редактиране на стаята"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Възникна неизвестна грешка и информацията не можа да бъде променена."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Не може да се обнови стаята"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Обновяване на стаята…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Upravit podrobnosti"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Došlo k neznámé chybě a informace nebylo možné změnit."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nelze aktualizovat místnost"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Aktualizace místnosti…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Ystafell Golygu"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Roedd gwall anhysbys ac nid oedd modd newid y manylion."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Methu diweddaru\'r ystafell"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Wrthi\'n diweddaru ystafell…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Rediger rum"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Der opstod en ukendt fejl, og oplysningerne kunne ikke ændres."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Rummet kunne ikke opdateres"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Opdaterer rum…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Chat bearbeiten"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Es ist ein unbekannter Fehler aufgetreten und die Informationen konnten nicht geändert werden."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Chat kann nicht aktualisiert werden"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Chat wird aktualisiert…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Επεξεργασία Αίθουσας"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Υπήρξε ένα άγνωστο σφάλμα και οι πληροφορίες δεν μπορούσαν να αλλάξουν."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Αδυναμία ενημέρωσης αίθουσας"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Ενημέρωση αίθουσας…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Editar sala"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Se ha producido un error desconocido y no se ha podido cambiar la información."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"No se puede actualizar la sala"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Actualizando la sala…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Muuda üksikasju"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Tekkis tundmatu viga ja andmed jäid muutmata."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Jututoa andmete muutmine ei õnnestu"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Uuendame jututuba…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Editatu gela"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Errore ezezaguna gertatu da eta ezin izan da informazioa aldatu."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Ezin da gela eguneratu"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Gela eguneratzen…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"ویرایش اتاق"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"خطایی ناشناخته رخ داد و اطّلاعات قابل تغییر نبودند."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"ناتوان در بهروز رسانی اتاق"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"بهروز کردن اتاق…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Muokkaa tietoja"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Tuntematon virhe tapahtui, eikä tietoja voitu muuttaa."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Huoneen muokkaaminen ei onnistunut"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Muokataan huonetta…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Modifier les détails"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Une erreur inconnue s’est produite et les informations n’ont pas pu être modifiées."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Impossible de mettre à jour le salon"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Mise à jour du salon…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Részletek szerkesztése"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Ismeretlen hiba történt, és az információkat nem lehetett megváltoztatni."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nem sikerült frissíteni a szobát"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Szoba frissítése…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Sunting Ruangan"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Terjadi kesalahan yang tidak diketahui dan informasinya tidak dapat diubah."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Tidak dapat memperbarui ruangan"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Memperbarui ruangan…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Modifica dettagli"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Si è verificato un errore sconosciuto e non è stato possibile modificare le informazioni."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Impossibile aggiornare la stanza"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Aggiornamento della stanza…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"ოთახის რედაქტირება"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"უცნობი შეცდომა მოხდა. ინფორმაციის შეცვლა ვერ მოხერხდა."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"ოთახის განახლება შეუძლებელია"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"ოთახის განახლება…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"방 편집"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"알 수 없는 오류가 발생하여 정보를 변경할 수 없습니다."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"방을 업데이트할 수 없습니다."</string>
|
||||||
|
<string name="screen_room_details_updating_room">"방 업데이트 중…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Redaguoti kambarį"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Įvyko nežinoma klaida ir informacijos pakeisti nepavyko."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nepavyko atnaujinti kambario"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Atnaujinamas kambarys…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Rediger rom"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Det oppstod en ukjent feil, og informasjonen kunne ikke endres."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Kan ikke oppdatere rommet"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Oppdaterer rommet …"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Kamer bewerken"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Er is een onbekende fout opgetreden en de informatie kon niet worden gewijzigd."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Kan kamer niet bijwerken"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Kamer bijwerken…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Edytuj pokój"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Wystąpił nieznany błąd i nie można było zmienić informacji."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nie można zaktualizować pokoju"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Aktualizuję pokój…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Editar detalhes"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Ocorreu um erro desconhecido e as informações não puderam ser alteradas."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Não foi possível atualizar a sala"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Atualizando a sala…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Editar sala"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Ocorreu um erro desconhecido e não foi possível alterar a informação."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Não foi possível atualizar a sala"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"A atualizar sala…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Editați camera"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"A apărut o eroare la actualizarea detaliilor camerei"</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nu s-a putut actualiza camera"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Se actualizează camera…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Редактировать комнату"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Произошла неизвестная ошибка и информацию не удалось изменить."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Не удалось обновить комнату"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Обновление комнаты…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Upraviť podrobnosti"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Vyskytla sa neznáma chyba a informácie nebolo možné zmeniť."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Nepodarilo sa aktualizovať miestnosť"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Aktualizácia miestnosti…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Redigera rummet"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Ett okänt fel uppstod och informationen kunde inte ändras."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Kunde inte uppdatera rummet"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Uppdaterar rummet …"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Odayı Düzenle"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Bilinmeyen bir hata oluştu ve bilgiler değiştirilemedi."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Oda güncellenemiyor"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Oda güncelleniyor…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Редагувати кімнату"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Сталася невідома помилка, й інформацію не вдалося змінити."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Не вдалося оновити кімнату"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Оновлення кімнати…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"کمرے میں ترمیم کریں"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"ایک نامعلوم خلل تھا اور معلومات تبدیل نہیں ہوسکی۔"</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"کمرے کی تجدید کرنے سے قاصر"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"کمرے کی تجدید کر رہا ہے…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Xonani tahrirlash"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"Nomaʼlum xatolik yuz berdi va maʼlumotni oʻzgartirib boʻlmadi."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Xonani yangilab bo‘lmadi"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Xona yangilanmoqda…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"編輯詳細資訊"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"發生未知錯誤,無法變更資訊。"</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"無法更新聊天室"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"正在更新聊天室…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"编辑聊天室"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"出现未知错误,无法更改信息。"</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"无法更新聊天室"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"正在更新聊天室……"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<string name="screen_room_details_edit_room_title">"Edit details"</string>
|
||||||
|
<string name="screen_room_details_edition_error">"There was an unknown error and the information couldn\'t be changed."</string>
|
||||||
|
<string name="screen_room_details_edition_error_title">"Unable to update room"</string>
|
||||||
|
<string name="screen_room_details_updating_room">"Updating room…"</string>
|
||||||
|
</resources>
|
||||||
|
|
@ -1,25 +1,28 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2025 Element Creations Ltd.
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
* Copyright 2023-2025 New Vector Ltd.
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import app.cash.turbine.ReceiveTurbine
|
import app.cash.turbine.ReceiveTurbine
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.features.roomdetails.impl.aJoinedRoom
|
|
||||||
import io.element.android.libraries.androidutils.file.TemporaryUriDeleter
|
import io.element.android.libraries.androidutils.file.TemporaryUriDeleter
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.api.room.StateEventType
|
import io.element.android.libraries.matrix.api.room.StateEventType
|
||||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_RAW_NAME
|
import io.element.android.libraries.matrix.test.A_ROOM_RAW_NAME
|
||||||
|
import io.element.android.libraries.matrix.test.A_ROOM_TOPIC
|
||||||
|
import io.element.android.libraries.matrix.test.room.FakeBaseRoom
|
||||||
|
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
|
||||||
|
import io.element.android.libraries.matrix.test.room.aRoomInfo
|
||||||
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
||||||
import io.element.android.libraries.mediapickers.test.FakePickerProvider
|
import io.element.android.libraries.mediapickers.test.FakePickerProvider
|
||||||
import io.element.android.libraries.mediaupload.api.MediaUploadInfo
|
import io.element.android.libraries.mediaupload.api.MediaUploadInfo
|
||||||
|
|
@ -124,16 +127,17 @@ class RoomDetailsEditPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - sets canChangeName if user has permission`() = runTest {
|
fun `present - sets canChangeName if user has permission`() = runTest {
|
||||||
val room = aJoinedRoom(
|
val room = FakeJoinedRoom(
|
||||||
avatarUrl = AN_AVATAR_URL,
|
FakeBaseRoom(
|
||||||
canSendStateResult = { _, stateEventType ->
|
canSendStateResult = { _, stateEventType ->
|
||||||
when (stateEventType) {
|
when (stateEventType) {
|
||||||
StateEventType.ROOM_NAME -> Result.success(true)
|
StateEventType.ROOM_NAME -> Result.success(true)
|
||||||
StateEventType.ROOM_AVATAR -> Result.success(false)
|
StateEventType.ROOM_AVATAR -> Result.success(false)
|
||||||
StateEventType.ROOM_TOPIC -> Result.failure(RuntimeException("Oops"))
|
StateEventType.ROOM_TOPIC -> Result.failure(RuntimeException("Oops"))
|
||||||
else -> lambdaError()
|
else -> lambdaError()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
val deleteCallback = lambdaRecorder<Uri?, Unit> {}
|
val deleteCallback = lambdaRecorder<Uri?, Unit> {}
|
||||||
val presenter = createRoomDetailsEditPresenter(
|
val presenter = createRoomDetailsEditPresenter(
|
||||||
|
|
@ -769,6 +773,34 @@ class RoomDetailsEditPresenterTest {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun aJoinedRoom(
|
||||||
|
avatarUrl: String? = AN_AVATAR_URL,
|
||||||
|
displayName: String = A_ROOM_NAME,
|
||||||
|
rawName: String = displayName,
|
||||||
|
topic: String? = A_ROOM_TOPIC,
|
||||||
|
setNameResult: (String) -> Result<Unit> = { Result.success(Unit) },
|
||||||
|
setTopicResult: (String) -> Result<Unit> = { Result.success(Unit) },
|
||||||
|
updateAvatarResult: (String, ByteArray) -> Result<Unit> = { _, _ -> Result.success(Unit) },
|
||||||
|
removeAvatarResult: () -> Result<Unit> = { Result.success(Unit) },
|
||||||
|
canSendStateResult: (UserId, StateEventType) -> Result<Boolean>,
|
||||||
|
): JoinedRoom {
|
||||||
|
return FakeJoinedRoom(
|
||||||
|
baseRoom = FakeBaseRoom(
|
||||||
|
canSendStateResult = canSendStateResult,
|
||||||
|
initialRoomInfo = aRoomInfo(
|
||||||
|
name = displayName,
|
||||||
|
topic = topic,
|
||||||
|
avatarUrl = avatarUrl,
|
||||||
|
rawName = rawName
|
||||||
|
)
|
||||||
|
),
|
||||||
|
setNameResult = setNameResult,
|
||||||
|
setTopicResult = setTopicResult,
|
||||||
|
updateAvatarResult = updateAvatarResult,
|
||||||
|
removeAvatarResult = removeAvatarResult,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ANOTHER_AVATAR_URL = "example://camera/foo.jpg"
|
private const val ANOTHER_AVATAR_URL = "example://camera/foo.jpg"
|
||||||
}
|
}
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2025 Element Creations Ltd.
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
* Copyright 2024, 2025 New Vector Ltd.
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.roomdetails.impl.edit
|
package io.element.android.features.roomdetailsedit.impl
|
||||||
|
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
22
features/roomdetailsedit/test/build.gradle.kts
Normal file
22
features/roomdetailsedit/test/build.gradle.kts
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
* Copyright 2025 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("io.element.android-library")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "io.element.android.features.roomdetetailsedit.test"
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(projects.features.roomdetailsedit.api)
|
||||||
|
implementation(projects.libraries.architecture)
|
||||||
|
implementation(projects.libraries.matrix.api)
|
||||||
|
implementation(projects.tests.testutils)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.roomdetailsedit.test
|
||||||
|
|
||||||
|
import com.bumble.appyx.core.modality.BuildContext
|
||||||
|
import com.bumble.appyx.core.node.Node
|
||||||
|
import io.element.android.features.roomdetailsedit.api.RoomDetailsEditEntryPoint
|
||||||
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
|
||||||
|
class FakeRoomDetailsEditEntryPoint : RoomDetailsEditEntryPoint {
|
||||||
|
override fun createNode(parentNode: Node, buildContext: BuildContext): Node {
|
||||||
|
lambdaError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -92,7 +92,8 @@ fun EditableAvatarView(
|
||||||
radius = (editIconRadius + 4.dp).toPx(),
|
radius = (editIconRadius + 4.dp).toPx(),
|
||||||
blendMode = BlendMode.Clear,
|
blendMode = BlendMode.Clear,
|
||||||
)
|
)
|
||||||
}) {
|
}
|
||||||
|
) {
|
||||||
when {
|
when {
|
||||||
avatarUrl == null || avatarUrl.startsWith("mxc://") -> {
|
avatarUrl == null || avatarUrl.startsWith("mxc://") -> {
|
||||||
Avatar(
|
Avatar(
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,15 @@
|
||||||
"screen\\.security_and_privacy\\..*"
|
"screen\\.security_and_privacy\\..*"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name" : ":features:roomdetailsedit:impl",
|
||||||
|
"includeRegex" : [
|
||||||
|
"screen_room_details_edit_room_title",
|
||||||
|
"screen_room_details_edition_error",
|
||||||
|
"screen_room_details_edition_error_title",
|
||||||
|
"screen_room_details_updating_room"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name" : ":features:space:impl",
|
"name" : ":features:space:impl",
|
||||||
"includeRegex" : [
|
"includeRegex" : [
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue