Skip to content

Commit ad63de0

Browse files
authored
Merge branch 'develop' into fix
2 parents 532dd03 + 0a2bdbd commit ad63de0

File tree

207 files changed

+2228
-1539
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

207 files changed

+2228
-1539
lines changed

app/src/main/res/xml/locales_config.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<locale android:name="el"/>
1010
<locale android:name="en"/>
1111
<locale android:name="en_US"/>
12+
<locale android:name="eo"/>
1213
<locale android:name="es"/>
1314
<locale android:name="et"/>
1415
<locale android:name="eu"/>

appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ import kotlinx.coroutines.flow.SharingStarted
5454
import kotlinx.coroutines.flow.combine
5555
import kotlinx.coroutines.flow.distinctUntilChanged
5656
import kotlinx.coroutines.flow.filter
57-
import kotlinx.coroutines.flow.first
5857
import kotlinx.coroutines.flow.launchIn
5958
import kotlinx.coroutines.flow.map
6059
import kotlinx.coroutines.flow.shareIn
@@ -111,7 +110,7 @@ class RoomFlowNode(
111110
data class JoinedRoom(val roomId: RoomId) : NavTarget
112111

113112
@Parcelize
114-
data class Space(val spaceId: RoomId) : NavTarget
113+
data class JoinedSpace(val spaceId: RoomId) : NavTarget
115114
}
116115

117116
override fun onBuilt() {
@@ -149,30 +148,28 @@ class RoomFlowNode(
149148
.withPreviousValue()
150149
combine(currentMembershipFlow, isSpaceFlow) { (previousMembership, membership), isSpace ->
151150
Timber.d("Room membership: $membership")
152-
when (membership) {
153-
CurrentUserMembership.JOINED -> {
154-
if (isSpace) {
155-
backstack.newRoot(NavTarget.Space(spaceId = roomId))
156-
} else {
157-
backstack.newRoot(NavTarget.JoinedRoom(roomId))
158-
}
151+
if (membership == CurrentUserMembership.JOINED) {
152+
if (isSpace) {
153+
backstack.newRoot(NavTarget.JoinedSpace(spaceId = roomId))
154+
} else {
155+
backstack.newRoot(NavTarget.JoinedRoom(roomId))
159156
}
160-
else -> {
161-
if (membership == CurrentUserMembership.LEFT && previousMembership == CurrentUserMembership.JOINED) {
162-
// The user left the room in this device, remove the room from the backstack
163-
if (!membershipUpdateFlow.first().isUserInRoom) {
164-
navigateUp()
165-
}
166-
} else {
167-
// Was invited or the room is not known, display the join room screen
168-
backstack.newRoot(
169-
NavTarget.JoinRoom(
170-
roomId = roomId,
171-
serverNames = serverNames,
172-
trigger = inputs.trigger.getOrNull() ?: JoinedRoom.Trigger.Invite,
173-
)
157+
} else {
158+
val leavingFromCurrentDevice =
159+
membership == CurrentUserMembership.LEFT &&
160+
previousMembership == CurrentUserMembership.JOINED &&
161+
membershipUpdateFlow.replayCache.lastOrNull()?.isUserInRoom == false
162+
163+
if (leavingFromCurrentDevice) {
164+
navigateUp()
165+
} else {
166+
backstack.newRoot(
167+
NavTarget.JoinRoom(
168+
roomId = roomId,
169+
serverNames = serverNames,
170+
trigger = inputs.trigger.getOrNull() ?: JoinedRoom.Trigger.Invite,
174171
)
175-
}
172+
)
176173
}
177174
}
178175
}.launchIn(lifecycleScope)
@@ -214,7 +211,7 @@ class RoomFlowNode(
214211
)
215212
createNode<JoinedRoomFlowNode>(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback)
216213
}
217-
is NavTarget.Space -> {
214+
is NavTarget.JoinedSpace -> {
218215
val spaceCallback = plugins<SpaceEntryPoint.Callback>().single()
219216
spaceEntryPoint.nodeBuilder(this, buildContext)
220217
.inputs(SpaceEntryPoint.Inputs(roomId = navTarget.spaceId))

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ allprojects {
9393
// Fix compilation warning for annotations
9494
// See https://youtrack.jetbrains.com/issue/KT-73255/Change-defaulting-rule-for-annotations for more details
9595
freeCompilerArgs.add("-Xannotation-default-target=first-only")
96+
// Opt-in to context receivers
97+
freeCompilerArgs.add("-Xcontext-parameters")
9698
}
9799
}
98100
}

features/changeroommemberroles/impl/src/main/res/values-cy/translations.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
33
<string name="screen_room_change_permissions_administrators">"Gweinyddwyr yn unig"</string>
44
<string name="screen_room_change_permissions_ban_people">"Gwahardd pobl"</string>
5-
<string name="screen_room_change_permissions_delete_messages">"Dileu negeseuon"</string>
5+
<string name="screen_room_change_permissions_delete_messages">"Tynnu negeseuon"</string>
66
<string name="screen_room_change_permissions_everyone">"Pawb"</string>
77
<string name="screen_room_change_permissions_invite_people">"Gwahodd pobl a derbyn ceisiadau i ymuno"</string>
88
<string name="screen_room_change_permissions_member_moderation">"Cymedroli aelodau"</string>
@@ -17,13 +17,17 @@
1717
<string name="screen_room_change_role_administrators_title">"Golygu Gweinyddwyr"</string>
1818
<string name="screen_room_change_role_confirm_add_admin_description">"Fyddwch chi ddim yn gallu dadwneud y weithred hon. Rydych chi\'n hyrwyddo\'r defnyddiwr i gael yr un lefel pŵer â chi."</string>
1919
<string name="screen_room_change_role_confirm_add_admin_title">"Ychwanegu Gweinyddwr?"</string>
20+
<string name="screen_room_change_role_confirm_change_owners_description">"Fyddwch chi ddim yn gallu dadwneud y weithred hon. Rydych yn trosglwyddo\'r berchnogaeth i\'r defnyddwyr a ddewiswyd. Unwaith y byddwch yn gadael bydd hyn yn barhaol."</string>
21+
<string name="screen_room_change_role_confirm_change_owners_title">"Trosglwyddo perchnogaeth?"</string>
2022
<string name="screen_room_change_role_confirm_demote_self_action">"Gostwng"</string>
2123
<string name="screen_room_change_role_confirm_demote_self_description">"Fyddwch chi ddim yn gallu dadwneud y newid hwn gan eich bod yn israddio eich hun, os mai chi yw\'r defnyddiwr breintiedig olaf yn yr ystafell bydd yn amhosibl adennill breintiau."</string>
2224
<string name="screen_room_change_role_confirm_demote_self_title">"Israddio eich hun?"</string>
2325
<string name="screen_room_change_role_invited_member_name">"%1$s (Yn aros)"</string>
2426
<string name="screen_room_change_role_invited_member_name_android">"Yn aros"</string>
2527
<string name="screen_room_change_role_moderators_admin_section_footer">"Mae gan weinyddwyr freintiau cymedrolwr yn awtomatig"</string>
28+
<string name="screen_room_change_role_moderators_owner_section_footer">"Mae gan berchnogion freintiau gweinyddwr yn awtomatig."</string>
2629
<string name="screen_room_change_role_moderators_title">"Golygu Cymedrolwyr"</string>
30+
<string name="screen_room_change_role_owners_title">"Dewiswch Berchnogion"</string>
2731
<string name="screen_room_change_role_section_administrators">"Gweinyddwyr"</string>
2832
<string name="screen_room_change_role_section_moderators">"Cymedrolwyr"</string>
2933
<string name="screen_room_change_role_section_users">"Aelodau"</string>
@@ -48,15 +52,18 @@
4852
<string name="screen_room_member_list_pending_header_title">"Dan ystyriaeth"</string>
4953
<string name="screen_room_member_list_role_administrator">"Gweinyddwr"</string>
5054
<string name="screen_room_member_list_role_moderator">"Cymedrolwr"</string>
55+
<string name="screen_room_member_list_role_owner">"Perchennog"</string>
5156
<string name="screen_room_member_list_room_members_header_title">"Aelodau\'r ystafell"</string>
5257
<string name="screen_room_member_list_unbanning_user">"Dad-wahardd %1$s"</string>
5358
<string name="screen_room_roles_and_permissions_admins">"Gweinyddwyr"</string>
59+
<string name="screen_room_roles_and_permissions_admins_and_owners">"Gweinyddwyr a pherchnogion"</string>
5460
<string name="screen_room_roles_and_permissions_change_my_role">"Newid fy rôl"</string>
5561
<string name="screen_room_roles_and_permissions_change_role_demote_to_member">"Israddio aelod"</string>
5662
<string name="screen_room_roles_and_permissions_change_role_demote_to_moderator">"Israddio cymedrolwr"</string>
5763
<string name="screen_room_roles_and_permissions_member_moderation">"Cymedroli aelodau"</string>
5864
<string name="screen_room_roles_and_permissions_messages_and_content">"Negeseuon a chynnwys"</string>
5965
<string name="screen_room_roles_and_permissions_moderators">"Cymedrolwyr"</string>
66+
<string name="screen_room_roles_and_permissions_owners">"Perchnogion"</string>
6067
<string name="screen_room_roles_and_permissions_permissions_header">"Caniatâd"</string>
6168
<string name="screen_room_roles_and_permissions_reset">"Ailosod caniatâd"</string>
6269
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Ar ôl i chi ailosod caniatâd, byddwch yn colli\'r gosodiadau cyfredol."</string>

features/changeroommemberroles/impl/src/main/res/values-fi/translations.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
<string name="screen_room_change_permissions_send_messages">"Viestien lähettäminen"</string>
1717
<string name="screen_room_change_role_administrators_title">"Muokkaa ylläpitäjiä"</string>
1818
<string name="screen_room_change_role_confirm_add_admin_description">"Et voi peruuttaa tätä toimenpidettä. Ylennät käyttäjän samalle oikeustasolle kuin sinä."</string>
19-
<string name="screen_room_change_role_confirm_add_admin_title">"Lisää ylläpitäjä?"</string>
19+
<string name="screen_room_change_role_confirm_add_admin_title">"Lisätäänkö ylläpitäjä?"</string>
2020
<string name="screen_room_change_role_confirm_change_owners_description">"Et voi kumota tätä toimintoa. Olet siirtämässä omistajuuden valituille käyttäjille. Kun poistut, muutos on pysyvä."</string>
2121
<string name="screen_room_change_role_confirm_change_owners_title">"Siirretäänkö omistajuus?"</string>
2222
<string name="screen_room_change_role_confirm_demote_self_action">"Alenna"</string>
2323
<string name="screen_room_change_role_confirm_demote_self_description">"Et voi perua tätä muutosta, koska olet alentamassa itseäsi. Jos olet viimeinen oikeutettu henkilö tässä huoneessa, oikeuksia ei voi enää saada takaisin."</string>
24-
<string name="screen_room_change_role_confirm_demote_self_title">"Alenna itsesi?"</string>
24+
<string name="screen_room_change_role_confirm_demote_self_title">"Haluatko alentaa itsesi?"</string>
2525
<string name="screen_room_change_role_invited_member_name">"%1$s (Kutsuttu)"</string>
2626
<string name="screen_room_change_role_invited_member_name_android">"(Kutsuttu)"</string>
2727
<string name="screen_room_change_role_moderators_admin_section_footer">"Ylläpitäjillä on automaattisesti valvojan oikeudet"</string>
@@ -32,7 +32,7 @@
3232
<string name="screen_room_change_role_section_moderators">"Valvojat"</string>
3333
<string name="screen_room_change_role_section_users">"Jäsenet"</string>
3434
<string name="screen_room_change_role_unsaved_changes_description">"Sinulla on tallentamattomia muutoksia"</string>
35-
<string name="screen_room_change_role_unsaved_changes_title">"Tallenna muutokset?"</string>
35+
<string name="screen_room_change_role_unsaved_changes_title">"Tallennetaanko muutokset?"</string>
3636
<string name="screen_room_member_list_banned_empty">"Tässä huoneessa ei ole porttikieltoja"</string>
3737
<plurals name="screen_room_member_list_header_title">
3838
<item quantity="one">"%1$d henkilö"</item>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
<string name="screen_deactivate_account_list_item_3">"Delete your account information from our server."</string>
4+
</resources>

features/ftue/api/src/main/kotlin/io/element/android/features/ftue/api/state/FtueService.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ import kotlinx.coroutines.flow.StateFlow
1515
interface FtueService {
1616
/** The current state of the FTUE. */
1717
val state: StateFlow<FtueState>
18-
19-
/** Reset the FTUE state. */
20-
suspend fun reset()
2118
}
2219

2320
/** The state of the FTUE. */

features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import androidx.compose.runtime.Composable
1414
import androidx.compose.ui.Alignment
1515
import androidx.compose.ui.Modifier
1616
import androidx.lifecycle.lifecycleScope
17-
import com.bumble.appyx.core.lifecycle.subscribe
1817
import com.bumble.appyx.core.modality.BuildContext
1918
import com.bumble.appyx.core.node.Node
2019
import com.bumble.appyx.core.plugin.Plugin
@@ -30,28 +29,25 @@ import io.element.android.features.ftue.impl.notifications.NotificationsOptInNod
3029
import io.element.android.features.ftue.impl.sessionverification.FtueSessionVerificationFlowNode
3130
import io.element.android.features.ftue.impl.state.DefaultFtueService
3231
import io.element.android.features.ftue.impl.state.FtueStep
32+
import io.element.android.features.ftue.impl.state.InternalFtueState
3333
import io.element.android.features.lockscreen.api.LockScreenEntryPoint
3434
import io.element.android.libraries.architecture.BackstackView
3535
import io.element.android.libraries.architecture.BaseFlowNode
3636
import io.element.android.libraries.architecture.createNode
3737
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
3838
import io.element.android.libraries.di.SessionScope
39-
import io.element.android.services.analytics.api.AnalyticsService
40-
import kotlinx.coroutines.flow.distinctUntilChanged
41-
import kotlinx.coroutines.flow.filter
39+
import kotlinx.coroutines.flow.filterIsInstance
4240
import kotlinx.coroutines.flow.launchIn
4341
import kotlinx.coroutines.flow.onEach
44-
import kotlinx.coroutines.launch
4542
import kotlinx.parcelize.Parcelize
4643

4744
@ContributesNode(SessionScope::class)
4845
@Inject
4946
class FtueFlowNode(
5047
@Assisted buildContext: BuildContext,
5148
@Assisted plugins: List<Plugin>,
52-
private val ftueState: DefaultFtueService,
49+
private val defaultFtueService: DefaultFtueService,
5350
private val analyticsEntryPoint: AnalyticsEntryPoint,
54-
private val analyticsService: AnalyticsService,
5551
private val lockScreenEntryPoint: LockScreenEntryPoint,
5652
) : BaseFlowNode<FtueFlowNode.NavTarget>(
5753
backstack = BackStack(
@@ -80,19 +76,11 @@ class FtueFlowNode(
8076

8177
override fun onBuilt() {
8278
super.onBuilt()
83-
84-
lifecycle.subscribe(onCreate = {
85-
moveToNextStepIfNeeded()
86-
})
87-
88-
analyticsService.didAskUserConsentFlow
89-
.distinctUntilChanged()
90-
.onEach { moveToNextStepIfNeeded() }
91-
.launchIn(lifecycleScope)
92-
93-
ftueState.isVerificationStatusKnown
94-
.filter { it }
95-
.onEach { moveToNextStepIfNeeded() }
79+
defaultFtueService.ftueStepStateFlow
80+
.filterIsInstance(InternalFtueState.Incomplete::class)
81+
.onEach {
82+
showStep(it.nextStep)
83+
}
9684
.launchIn(lifecycleScope)
9785
}
9886

@@ -104,15 +92,15 @@ class FtueFlowNode(
10492
is NavTarget.SessionVerification -> {
10593
val callback = object : FtueSessionVerificationFlowNode.Callback {
10694
override fun onDone() {
107-
moveToNextStepIfNeeded()
95+
defaultFtueService.onUserCompletedSessionVerification()
10896
}
10997
}
11098
createNode<FtueSessionVerificationFlowNode>(buildContext, listOf(callback))
11199
}
112100
NavTarget.NotificationsOptIn -> {
113101
val callback = object : NotificationsOptInNode.Callback {
114102
override fun onNotificationsOptInFinished() {
115-
moveToNextStepIfNeeded()
103+
defaultFtueService.updateFtueStep()
116104
}
117105
}
118106
createNode<NotificationsOptInNode>(buildContext, listOf(callback))
@@ -123,7 +111,7 @@ class FtueFlowNode(
123111
NavTarget.LockScreenSetup -> {
124112
val callback = object : LockScreenEntryPoint.Callback {
125113
override fun onSetupDone() {
126-
moveToNextStepIfNeeded()
114+
defaultFtueService.updateFtueStep()
127115
}
128116
}
129117
lockScreenEntryPoint.nodeBuilder(this, buildContext, LockScreenEntryPoint.Target.Setup)
@@ -133,8 +121,8 @@ class FtueFlowNode(
133121
}
134122
}
135123

136-
private fun moveToNextStepIfNeeded() = lifecycleScope.launch {
137-
when (ftueState.getNextStep()) {
124+
private fun showStep(ftueStep: FtueStep) {
125+
when (ftueStep) {
138126
FtueStep.WaitingForInitialState -> {
139127
backstack.newRoot(NavTarget.Placeholder)
140128
}
@@ -150,7 +138,6 @@ class FtueFlowNode(
150138
FtueStep.LockscreenSetup -> {
151139
backstack.newRoot(NavTarget.LockScreenSetup)
152140
}
153-
null -> Unit
154141
}
155142
}
156143

0 commit comments

Comments
 (0)