mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 01:19:33 +00:00
WIP
This commit is contained in:
committed by
Benoit Marty
parent
ab4b11b9f0
commit
bf1462f9b1
+2
-1
@@ -10,6 +10,7 @@ package io.element.android.features.home.impl.components
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -160,7 +161,7 @@ fun HomeTopBar(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun RoomListMenuItems(
|
||||
private fun RowScope.RoomListMenuItems(
|
||||
onToggleSearch: () -> Unit,
|
||||
onMenuActionClick: (RoomListMenuAction) -> Unit,
|
||||
canReportBug: Boolean,
|
||||
|
||||
+5
-4
@@ -48,6 +48,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
|
||||
import io.element.android.libraries.matrix.api.spaces.SpaceServiceFilter
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -93,7 +94,7 @@ fun SpaceFiltersView(
|
||||
SpaceFiltersBottomSheetContent(
|
||||
filters = state.visibleFilters,
|
||||
searchQuery = state.searchQuery,
|
||||
onFilterSelected = { filter ->
|
||||
onSelectFilter = { filter ->
|
||||
state.eventSink(SpaceFiltersEvent.Selecting.SelectFilter(filter))
|
||||
}
|
||||
)
|
||||
@@ -105,9 +106,9 @@ fun SpaceFiltersView(
|
||||
|
||||
@Composable
|
||||
private fun SpaceFiltersBottomSheetContent(
|
||||
filters: List<SpaceServiceFilter>,
|
||||
filters: ImmutableList<SpaceServiceFilter>,
|
||||
searchQuery: TextFieldState,
|
||||
onFilterSelected: (SpaceServiceFilter) -> Unit,
|
||||
onSelectFilter: (SpaceServiceFilter) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Column(
|
||||
@@ -133,7 +134,7 @@ private fun SpaceFiltersBottomSheetContent(
|
||||
items(filters) { filter ->
|
||||
SpaceFilterItem(
|
||||
filter = filter,
|
||||
onClick = { onFilterSelected(filter) }
|
||||
onClick = { onSelectFilter(filter) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ private fun DoneButton(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun Buttons(
|
||||
private fun ColumnScope.Buttons(
|
||||
onRetry: () -> Unit,
|
||||
onCancel: () -> Unit,
|
||||
) {
|
||||
|
||||
+2
-1
@@ -14,6 +14,7 @@ import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.features.location.api.Location
|
||||
import io.element.android.libraries.designsystem.components.PinVariant
|
||||
import io.element.android.libraries.designsystem.components.rememberLocationPinBitmap
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.serialization.json.JsonPrimitive
|
||||
import org.maplibre.compose.expressions.dsl.and
|
||||
import org.maplibre.compose.expressions.dsl.asString
|
||||
@@ -66,7 +67,7 @@ data class LocationMarkerData(
|
||||
*/
|
||||
@Composable
|
||||
fun LocationPinMarkers(
|
||||
markers: List<LocationMarkerData>,
|
||||
markers: ImmutableList<LocationMarkerData>,
|
||||
onMarkerClick: ((LocationMarkerData) -> Unit)? = null,
|
||||
onClusterClick: ((Position) -> Unit)? = null,
|
||||
) {
|
||||
|
||||
+3
-1
@@ -26,6 +26,7 @@ import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -180,6 +181,7 @@ private fun StartLiveLocationActionView(
|
||||
onActionSuccess: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val updatedOnActionSuccess by rememberUpdatedState(onActionSuccess)
|
||||
Box(modifier = modifier) {
|
||||
val asyncIndicatorState = rememberAsyncIndicatorState()
|
||||
AsyncIndicatorHost(state = asyncIndicatorState)
|
||||
@@ -202,7 +204,7 @@ private fun StartLiveLocationActionView(
|
||||
}
|
||||
}
|
||||
is AsyncAction.Success -> {
|
||||
LaunchedEffect(action) { onActionSuccess() }
|
||||
LaunchedEffect(action) { updatedOnActionSuccess() }
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
|
||||
+2
-1
@@ -50,6 +50,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.designsystem.theme.components.Text
|
||||
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.launch
|
||||
import org.maplibre.compose.camera.CameraMoveReason
|
||||
import org.maplibre.compose.camera.CameraPosition
|
||||
@@ -172,7 +173,7 @@ fun ShowLocationView(
|
||||
trackUserLocation = state.isTrackMyLocation
|
||||
)
|
||||
val markers = remember(state.locationShares) {
|
||||
state.locationShares.map { it.toMarkerData() }
|
||||
state.locationShares.map { it.toMarkerData() }.toImmutableList()
|
||||
}
|
||||
LocationPinMarkers(markers)
|
||||
},
|
||||
|
||||
+1
-1
@@ -125,7 +125,7 @@ private fun Content(errorScreenType: QrCodeErrorScreenType) {
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun Buttons(
|
||||
private fun ColumnScope.Buttons(
|
||||
onRetry: () -> Unit,
|
||||
onCancel: () -> Unit,
|
||||
) {
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||
@@ -412,7 +413,7 @@ fun MessagesView(
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun MessagesMenuActions(
|
||||
internal fun RowScope.MessagesMenuActions(
|
||||
displayThreads: Boolean,
|
||||
roomCallState: RoomCallState,
|
||||
onJoinCallClick: (isAudioCall: Boolean) -> Unit,
|
||||
|
||||
+3
-1
@@ -28,6 +28,7 @@ import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -157,6 +158,7 @@ private fun ScrollHelper(
|
||||
listState: LazyListState,
|
||||
onPaginate: () -> Unit,
|
||||
) {
|
||||
val updatedOnPaginate by rememberUpdatedState(onPaginate)
|
||||
val lastVisibleItemIndex by remember {
|
||||
derivedStateOf { listState.firstVisibleItemIndex + listState.layoutInfo.visibleItemsInfo.size - 1 }
|
||||
}
|
||||
@@ -168,7 +170,7 @@ private fun ScrollHelper(
|
||||
}
|
||||
LaunchedEffect(needsPagination, lastVisibleItemIndex) {
|
||||
if (needsPagination) {
|
||||
onPaginate()
|
||||
updatedOnPaginate()
|
||||
delay(400L)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -9,7 +9,9 @@
|
||||
package io.element.android.features.messages.impl.timeline.model.event
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import io.element.android.features.location.api.Location
|
||||
import io.element.android.libraries.designsystem.components.PinVariant
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
@@ -103,8 +105,9 @@ private fun rememberIsLiveLocationActive(
|
||||
mode: TimelineItemLocationContent.Mode.Live,
|
||||
currentTimeMillis: () -> Long,
|
||||
): Boolean {
|
||||
val updatedCurrentTimeMillis by rememberUpdatedState(currentTimeMillis)
|
||||
fun TimelineItemLocationContent.Mode.Live.isActive(): Boolean {
|
||||
return isActive && endTimestamp > currentTimeMillis()
|
||||
return isActive && endTimestamp > updatedCurrentTimeMillis()
|
||||
}
|
||||
return produceState(
|
||||
initialValue = mode.isActive(),
|
||||
@@ -112,7 +115,7 @@ private fun rememberIsLiveLocationActive(
|
||||
key2 = mode.isActive,
|
||||
) {
|
||||
if (mode.isActive) {
|
||||
val remainingMillis = mode.endTimestamp - currentTimeMillis()
|
||||
val remainingMillis = mode.endTimestamp - updatedCurrentTimeMillis()
|
||||
delay(remainingMillis)
|
||||
}
|
||||
value = false
|
||||
|
||||
+3
-1
@@ -19,6 +19,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -343,6 +344,7 @@ private fun LiveLocationUpdatesSection(
|
||||
onOpenAppPermissionsClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val updatedOnValueSaved by rememberUpdatedState(onValueSaved)
|
||||
PreferenceCategory(
|
||||
modifier = modifier,
|
||||
showTopDivider = true,
|
||||
@@ -382,7 +384,7 @@ private fun LiveLocationUpdatesSection(
|
||||
value = sliderValue.toFloat(),
|
||||
onValueChange = { sliderValue = it.roundToInt() },
|
||||
onValueChangeFinish = {
|
||||
onValueSaved(sliderValue)
|
||||
updatedOnValueSaved(sliderValue)
|
||||
},
|
||||
valueRange = valueRange,
|
||||
colors = SliderDefaults.colors(
|
||||
|
||||
Reference in New Issue
Block a user