Merge branch 'develop' of https://github.com/vector-im/element-x-android-poc into develop
This commit is contained in:
commit
bf64c8945a
5 changed files with 51 additions and 10 deletions
|
|
@ -7,15 +7,18 @@ import androidx.compose.foundation.rememberScrollState
|
|||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
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.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardCapitalization
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
|
@ -61,8 +64,6 @@ fun LoginContent(
|
|||
onSubmitClicked: () -> Unit = {},
|
||||
onLoginWithSuccess: () -> Unit = {},
|
||||
) {
|
||||
var login by textFieldState(state.login)
|
||||
var password by textFieldState(state.password)
|
||||
Surface(color = MaterialTheme.colorScheme.background) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
|
|
@ -116,6 +117,7 @@ fun LoginContent(
|
|||
}
|
||||
)
|
||||
}
|
||||
var login by textFieldState(state.login)
|
||||
OutlinedTextField(
|
||||
value = login,
|
||||
modifier = Modifier
|
||||
|
|
@ -133,6 +135,12 @@ fun LoginContent(
|
|||
imeAction = ImeAction.Next
|
||||
),
|
||||
)
|
||||
var passwordVisible by remember { mutableStateOf(false) }
|
||||
var password by textFieldState(state.password)
|
||||
if (state.isLoggedIn is Loading) {
|
||||
// Ensure password is hidden when user submits the form
|
||||
passwordVisible = false
|
||||
}
|
||||
OutlinedTextField(
|
||||
value = password,
|
||||
modifier = Modifier
|
||||
|
|
@ -146,11 +154,21 @@ fun LoginContent(
|
|||
Text(text = "Password")
|
||||
},
|
||||
isError = isError,
|
||||
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
|
||||
trailingIcon = {
|
||||
val image =
|
||||
if (passwordVisible) Icons.Filled.Visibility else Icons.Filled.VisibilityOff
|
||||
val description =
|
||||
if (passwordVisible) "Hide password" else "Show password"
|
||||
|
||||
IconButton(onClick = { passwordVisible = !passwordVisible }) {
|
||||
Icon(imageVector = image, description)
|
||||
}
|
||||
},
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Password,
|
||||
imeAction = ImeAction.Done,
|
||||
),
|
||||
visualTransformation = PasswordVisualTransformation(),
|
||||
keyboardActions = KeyboardActions(
|
||||
onDone = { onSubmitClicked() }
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package io.element.android.x.features.login
|
||||
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import com.airbnb.mvrx.MavericksViewModel
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import io.element.android.x.matrix.MatrixInstance
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
package io.element.android.x.features.roomlist
|
||||
|
||||
import com.airbnb.mvrx.MavericksViewModel
|
||||
import com.airbnb.mvrx.MavericksViewModelFactory
|
||||
import com.airbnb.mvrx.ViewModelContext
|
||||
import com.airbnb.mvrx.*
|
||||
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
|
||||
import io.element.android.x.features.roomlist.model.MatrixUser
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummary
|
||||
import io.element.android.x.features.roomlist.model.RoomListViewState
|
||||
import io.element.android.x.features.roomlist.model.createFakePlaceHolders
|
||||
import io.element.android.x.matrix.MatrixClient
|
||||
import io.element.android.x.matrix.MatrixInstance
|
||||
import io.element.android.x.matrix.media.MediaResolver
|
||||
|
|
@ -80,7 +79,19 @@ class RoomListViewModel(
|
|||
.map(::mapRoomSummaries)
|
||||
.flowOn(Dispatchers.Default)
|
||||
.execute {
|
||||
copy(rooms = it)
|
||||
copy(
|
||||
rooms = when {
|
||||
it is Loading ||
|
||||
// Note: this second case will prevent to handle correctly the empty case
|
||||
(it is Success && it().isEmpty()) -> {
|
||||
// Show fake placeholders to avoid having empty screen
|
||||
Loading(createFakePlaceHolders())
|
||||
}
|
||||
else -> {
|
||||
it
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package io.element.android.x.features.roomlist.model
|
||||
|
||||
|
||||
/**
|
||||
* Create a list of 16 RoomListRoomSummary placeholders
|
||||
*/
|
||||
fun createFakePlaceHolders(): List<RoomListRoomSummary> {
|
||||
return mutableListOf<RoomListRoomSummary>().apply {
|
||||
for (i in 0..15) {
|
||||
add(RoomListRoomSummary.placeholder("\$fakeRoom$i"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ dependencies {
|
|||
implementation("androidx.compose.ui:ui")
|
||||
implementation("androidx.compose.material:material")
|
||||
implementation("androidx.compose.material3:material3")
|
||||
implementation("androidx.compose.material:material-icons-extended")
|
||||
implementation("androidx.compose.ui:ui-tooling-preview")
|
||||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1")
|
||||
implementation("androidx.activity:activity-compose:1.6.1")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue