Code cleanup

This commit is contained in:
ganfra 2026-03-12 12:35:46 +01:00
parent 8274ef220d
commit fb775833c7
28 changed files with 44 additions and 113 deletions

View file

@ -79,4 +79,3 @@ internal class LocationKtTest {
.isEqualTo("geo:1.0,2.0;u=3.0") .isEqualTo("geo:1.0,2.0;u=3.0")
} }
} }

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2025 Element Creations Ltd. * Copyright (c) 2026 Element Creations 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.
@ -11,35 +11,35 @@ import io.element.android.features.location.impl.common.actions.LocationActions
import io.element.android.features.location.impl.common.permissions.PermissionsState import io.element.android.features.location.impl.common.permissions.PermissionsState
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
sealed interface LocationConstraintsCheckResult { sealed interface LocationConstraintsCheck {
data object Success : LocationConstraintsCheckResult data object Success : LocationConstraintsCheck
data object PermissionRationale : LocationConstraintsCheckResult data object PermissionRationale : LocationConstraintsCheck
data object PermissionDenied : LocationConstraintsCheckResult data object PermissionDenied : LocationConstraintsCheck
data object LocationServiceDisabled : LocationConstraintsCheckResult data object LocationServiceDisabled : LocationConstraintsCheck
} }
fun checkLocationConstraints( fun checkLocationConstraints(
permissionsState: PermissionsState, permissionsState: PermissionsState,
locationActions: LocationActions, locationActions: LocationActions,
): LocationConstraintsCheckResult { ): LocationConstraintsCheck {
return when { return when {
permissionsState.isAnyGranted -> { permissionsState.isAnyGranted -> {
if (locationActions.isLocationEnabled()) { if (locationActions.isLocationEnabled()) {
LocationConstraintsCheckResult.Success LocationConstraintsCheck.Success
} else { } else {
LocationConstraintsCheckResult.LocationServiceDisabled LocationConstraintsCheck.LocationServiceDisabled
} }
} }
permissionsState.shouldShowRationale -> LocationConstraintsCheckResult.PermissionRationale permissionsState.shouldShowRationale -> LocationConstraintsCheck.PermissionRationale
else -> LocationConstraintsCheckResult.PermissionDenied else -> LocationConstraintsCheck.PermissionDenied
} }
} }
fun LocationConstraintsCheckResult.toDialogState(): LocationConstraintsDialogState { fun LocationConstraintsCheck.toDialogState(): LocationConstraintsDialogState {
return when (this) { return when (this) {
LocationConstraintsCheckResult.Success -> LocationConstraintsDialogState.None LocationConstraintsCheck.Success -> LocationConstraintsDialogState.None
LocationConstraintsCheckResult.PermissionRationale -> LocationConstraintsDialogState.PermissionRationale LocationConstraintsCheck.PermissionRationale -> LocationConstraintsDialogState.PermissionRationale
LocationConstraintsCheckResult.PermissionDenied -> LocationConstraintsDialogState.PermissionDenied LocationConstraintsCheck.PermissionDenied -> LocationConstraintsDialogState.PermissionDenied
LocationConstraintsCheckResult.LocationServiceDisabled -> LocationConstraintsDialogState.LocationServiceDisabled LocationConstraintsCheck.LocationServiceDisabled -> LocationConstraintsDialogState.LocationServiceDisabled
} }
} }

View file

@ -10,8 +10,6 @@ package io.element.android.features.location.impl.common.ui
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.FloatingActionButtonDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource

View file

@ -77,8 +77,8 @@ fun LocationShareRow(
tint = ElementTheme.colors.iconAccentPrimary, tint = ElementTheme.colors.iconAccentPrimary,
modifier = Modifier.size(16.dp), modifier = Modifier.size(16.dp),
) )
}else { } else {
val icon = if(item.assetType == AssetType.PIN) CompoundIcons.LocationNavigator() else CompoundIcons.LocationNavigatorCentred() val icon = if (item.assetType == AssetType.PIN) CompoundIcons.LocationNavigator() else CompoundIcons.LocationNavigatorCentred()
Icon( Icon(
imageVector = icon, imageVector = icon,
contentDescription = null, contentDescription = null,
@ -122,7 +122,7 @@ internal fun LocationShareRowPreview() = ElementPreview {
formattedTimestamp = "Shared 1 min ago", formattedTimestamp = "Shared 1 min ago",
assetType = AssetType.SENDER, assetType = AssetType.SENDER,
isLive = true, isLive = true,
location = Location(0.0,0.0) location = Location(0.0, 0.0)
), ),
onShareClick = {}, onShareClick = {},
) )
@ -139,7 +139,7 @@ internal fun LocationShareRowPreview() = ElementPreview {
assetType = AssetType.PIN, assetType = AssetType.PIN,
formattedTimestamp = "Shared 5 hours ago", formattedTimestamp = "Shared 5 hours ago",
isLive = false, isLive = false,
location = Location(0.0,0.0) location = Location(0.0, 0.0)
), ),
onShareClick = {}, onShareClick = {},
) )

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2025 Element Creations Ltd. * Copyright (c) 2026 Element Creations 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.
@ -7,7 +7,6 @@
package io.element.android.features.location.impl.common.ui package io.element.android.features.location.impl.common.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.BoxWithConstraints
@ -37,7 +36,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -124,7 +122,7 @@ fun MapBottomSheetScaffold(
) { ) {
val ornamentOptions = mapOptions.ornamentOptions.copy(padding = sheetPadding) val ornamentOptions = mapOptions.ornamentOptions.copy(padding = sheetPadding)
val mapOptions = mapOptions.copy(ornamentOptions = ornamentOptions) val mapOptions = mapOptions.copy(ornamentOptions = ornamentOptions)
Box{ Box {
MaplibreMap( MaplibreMap(
options = mapOptions, options = mapOptions,
baseStyle = BaseStyle.Uri(rememberTileStyleUrl()), baseStyle = BaseStyle.Uri(rememberTileStyleUrl()),

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2025 Element Creations Ltd. * Copyright (c) 2026 Element Creations 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.
@ -17,5 +17,5 @@ enum class LiveLocationDuration(
) { ) {
FifteenMinutes(15.minutes, "15 minutes"), FifteenMinutes(15.minutes, "15 minutes"),
OneHour(1.hours, "1 hour"), OneHour(1.hours, "1 hour"),
EightHours(8.hours, "8 hours"); EightHours(8.hours, "8 hours")
} }

View file

@ -24,7 +24,7 @@ sealed interface ShareLocationEvent {
data object StopTrackingUserLocation : ShareLocationEvent data object StopTrackingUserLocation : ShareLocationEvent
data object DismissDialog : ShareLocationEvent data object DismissDialog : ShareLocationEvent
data object RequestPermissions: ShareLocationEvent data object RequestPermissions : ShareLocationEvent
data object OpenAppSettings : ShareLocationEvent data object OpenAppSettings : ShareLocationEvent
data object OpenLocationSettings : ShareLocationEvent data object OpenLocationSettings : ShareLocationEvent
} }

View file

@ -21,7 +21,7 @@ import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.AssistedInject
import im.vector.app.features.analytics.plan.Composer import im.vector.app.features.analytics.plan.Composer
import io.element.android.features.location.impl.common.LocationConstraintsCheckResult import io.element.android.features.location.impl.common.LocationConstraintsCheck
import io.element.android.features.location.impl.common.MapDefaults import io.element.android.features.location.impl.common.MapDefaults
import io.element.android.features.location.impl.common.actions.LocationActions import io.element.android.features.location.impl.common.actions.LocationActions
import io.element.android.features.location.impl.common.checkLocationConstraints import io.element.android.features.location.impl.common.checkLocationConstraints
@ -81,7 +81,7 @@ class ShareLocationPresenter(
fun checkLocationConstraints() { fun checkLocationConstraints() {
val locationConstraints = checkLocationConstraints(permissionsState, locationActions) val locationConstraints = checkLocationConstraints(permissionsState, locationActions)
dialogState = Constraints(locationConstraints.toDialogState()) dialogState = Constraints(locationConstraints.toDialogState())
trackUserPosition = locationConstraints is LocationConstraintsCheckResult.Success trackUserPosition = locationConstraints is LocationConstraintsCheck.Success
} }
LaunchedEffect(permissionsState.permissions) { checkLocationConstraints() } LaunchedEffect(permissionsState.permissions) { checkLocationConstraints() }
@ -104,7 +104,7 @@ class ShareLocationPresenter(
} }
ShareLocationEvent.ShowLiveLocationDurationPicker -> { ShareLocationEvent.ShowLiveLocationDurationPicker -> {
val constraintsResult = checkLocationConstraints(permissionsState, locationActions) val constraintsResult = checkLocationConstraints(permissionsState, locationActions)
dialogState = if (constraintsResult is LocationConstraintsCheckResult.Success) { dialogState = if (constraintsResult is LocationConstraintsCheck.Success) {
ShareLocationState.Dialog.LiveLocationDuration ShareLocationState.Dialog.LiveLocationDuration
} else { } else {
Constraints(constraintsResult.toDialogState()) Constraints(constraintsResult.toDialogState())
@ -112,7 +112,7 @@ class ShareLocationPresenter(
} }
is ShareLocationEvent.StartLiveLocationShare -> scope.launch { is ShareLocationEvent.StartLiveLocationShare -> scope.launch {
dialogState = ShareLocationState.Dialog.None dialogState = ShareLocationState.Dialog.None
//room.startLiveLocationShare(event.duration.inWholeMilliseconds) // room.startLiveLocationShare(event.duration.inWholeMilliseconds)
} }
ShareLocationEvent.RequestPermissions -> { ShareLocationEvent.RequestPermissions -> {
dialogState = ShareLocationState.Dialog.None dialogState = ShareLocationState.Dialog.None

View file

@ -8,13 +8,11 @@
package io.element.android.features.location.impl.share package io.element.android.features.location.impl.share
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SheetValue import androidx.compose.material3.SheetValue
import androidx.compose.material3.rememberBottomSheetScaffoldState import androidx.compose.material3.rememberBottomSheetScaffoldState
@ -22,8 +20,6 @@ import androidx.compose.material3.rememberStandardBottomSheetState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -44,9 +40,7 @@ import io.element.android.libraries.designsystem.components.LocationPin
import io.element.android.libraries.designsystem.components.PinVariant import io.element.android.libraries.designsystem.components.PinVariant
import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.ListDialog
import io.element.android.libraries.designsystem.components.list.ListItemContent import io.element.android.libraries.designsystem.components.list.ListItemContent
import io.element.android.libraries.designsystem.components.list.RadioButtonListItem
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.IconSource
@ -249,6 +243,7 @@ private fun LiveLocationDurationDialog(
onSelectDuration: (Duration) -> Unit, onSelectDuration: (Duration) -> Unit,
onDismiss: () -> Unit, onDismiss: () -> Unit,
) { ) {
/*
var selectedIndex by remember { mutableIntStateOf(0) } var selectedIndex by remember { mutableIntStateOf(0) }
ListDialog( ListDialog(
title = "Choose how long to share your live location.", title = "Choose how long to share your live location.",
@ -268,6 +263,7 @@ private fun LiveLocationDurationDialog(
) )
} }
} }
*/
} }
@PreviewsDayNight @PreviewsDayNight

View file

@ -19,8 +19,7 @@ import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.AssistedInject
import io.element.android.features.location.api.ShowLocationMode import io.element.android.features.location.api.ShowLocationMode
import io.element.android.features.location.impl.common.LocationConstraintsCheckResult import io.element.android.features.location.impl.common.LocationConstraintsCheck
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.features.location.impl.common.MapDefaults import io.element.android.features.location.impl.common.MapDefaults
import io.element.android.features.location.impl.common.actions.LocationActions import io.element.android.features.location.impl.common.actions.LocationActions
import io.element.android.features.location.impl.common.checkLocationConstraints import io.element.android.features.location.impl.common.checkLocationConstraints
@ -28,6 +27,7 @@ import io.element.android.features.location.impl.common.permissions.PermissionsE
import io.element.android.features.location.impl.common.permissions.PermissionsPresenter import io.element.android.features.location.impl.common.permissions.PermissionsPresenter
import io.element.android.features.location.impl.common.permissions.PermissionsState import io.element.android.features.location.impl.common.permissions.PermissionsState
import io.element.android.features.location.impl.common.toDialogState import io.element.android.features.location.impl.common.toDialogState
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.features.location.impl.common.ui.LocationMarkerData import io.element.android.features.location.impl.common.ui.LocationMarkerData
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildMeta
@ -76,7 +76,7 @@ class ShowLocationPresenter(
is ShowLocationEvents.TrackMyLocation -> { is ShowLocationEvents.TrackMyLocation -> {
if (event.enabled) { if (event.enabled) {
val locationConstraints = checkLocationConstraints(permissionsState, locationActions) val locationConstraints = checkLocationConstraints(permissionsState, locationActions)
isTrackMyLocation = locationConstraints is LocationConstraintsCheckResult.Success isTrackMyLocation = locationConstraints is LocationConstraintsCheck.Success
dialogState = locationConstraints.toDialogState() dialogState = locationConstraints.toDialogState()
} else { } else {
isTrackMyLocation = false isTrackMyLocation = false

View file

@ -27,8 +27,8 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme import io.element.android.compound.theme.ElementTheme
import io.element.android.features.location.api.ShowLocationMode import io.element.android.features.location.api.ShowLocationMode
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialog
import io.element.android.features.location.impl.common.MapDefaults import io.element.android.features.location.impl.common.MapDefaults
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialog
import io.element.android.features.location.impl.common.ui.LocationFloatingActionButton import io.element.android.features.location.impl.common.ui.LocationFloatingActionButton
import io.element.android.features.location.impl.common.ui.LocationPinMarkers import io.element.android.features.location.impl.common.ui.LocationPinMarkers
import io.element.android.features.location.impl.common.ui.LocationShareRow import io.element.android.features.location.impl.common.ui.LocationShareRow

View file

@ -1,19 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="28dp"
android:viewportWidth="26"
android:viewportHeight="28">
<path
android:pathData="M12.962,28L9.819,24.889L16.105,24.889L12.962,28Z"
android:fillColor="#EBEEF2"/>
<path
android:pathData="M12.963,12.963m-12.963,0a12.963,12.963 0,1 1,25.926 0a12.963,12.963 0,1 1,-25.926 0"
android:fillColor="#EBEEF2"/>
<group>
<clip-path
android:pathData="M6.74,6.74h12.444v12.444h-12.444z"/>
<path
android:pathData="M12.962,6.74C10.554,6.74 8.606,8.741 8.606,11.215C8.606,13.88 11.357,17.555 12.489,18.955C12.738,19.262 13.192,19.262 13.441,18.955C14.567,17.555 17.318,13.88 17.318,11.215C17.318,8.741 15.37,6.74 12.962,6.74ZM12.962,12.813C12.103,12.813 11.406,12.097 11.406,11.215C11.406,10.333 12.103,9.617 12.962,9.617C13.821,9.617 14.518,10.333 14.518,11.215C14.518,12.097 13.821,12.813 12.962,12.813Z"
android:fillColor="#101317"/>
</group>
</vector>

View file

@ -1,19 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="28dp"
android:viewportWidth="26"
android:viewportHeight="28">
<path
android:pathData="M12.962,28L9.819,24.889L16.105,24.889L12.962,28Z"
android:fillColor="#1B1D22"/>
<path
android:pathData="M12.963,12.963m-12.963,0a12.963,12.963 0,1 1,25.926 0a12.963,12.963 0,1 1,-25.926 0"
android:fillColor="#1B1D22"/>
<group>
<clip-path
android:pathData="M6.74,6.741h12.444v12.444h-12.444z"/>
<path
android:pathData="M12.962,6.741C10.554,6.741 8.606,8.741 8.606,11.215C8.606,13.88 11.357,17.555 12.489,18.955C12.738,19.262 13.192,19.262 13.441,18.955C14.567,17.555 17.318,13.88 17.318,11.215C17.318,8.741 15.37,6.741 12.962,6.741ZM12.962,12.813C12.103,12.813 11.406,12.097 11.406,11.215C11.406,10.333 12.103,9.617 12.962,9.617C13.821,9.617 14.518,10.333 14.518,11.215C14.518,12.097 13.821,12.813 12.962,12.813Z"
android:fillColor="#ffffff"/>
</group>
</vector>

View file

@ -23,7 +23,7 @@ class LocationConstraintsCheckTest {
val result = checkLocationConstraints(permissionsState, locationActions) val result = checkLocationConstraints(permissionsState, locationActions)
assertThat(result).isEqualTo(LocationConstraintsCheckResult.Success) assertThat(result).isEqualTo(LocationConstraintsCheck.Success)
} }
@Test @Test
@ -35,7 +35,7 @@ class LocationConstraintsCheckTest {
val result = checkLocationConstraints(permissionsState, locationActions) val result = checkLocationConstraints(permissionsState, locationActions)
assertThat(result).isEqualTo(LocationConstraintsCheckResult.Success) assertThat(result).isEqualTo(LocationConstraintsCheck.Success)
} }
@Test @Test
@ -47,7 +47,7 @@ class LocationConstraintsCheckTest {
val result = checkLocationConstraints(permissionsState, locationActions) val result = checkLocationConstraints(permissionsState, locationActions)
assertThat(result).isEqualTo(LocationConstraintsCheckResult.LocationServiceDisabled) assertThat(result).isEqualTo(LocationConstraintsCheck.LocationServiceDisabled)
} }
@Test @Test
@ -60,7 +60,7 @@ class LocationConstraintsCheckTest {
val result = checkLocationConstraints(permissionsState, locationActions) val result = checkLocationConstraints(permissionsState, locationActions)
assertThat(result).isEqualTo(LocationConstraintsCheckResult.PermissionRationale) assertThat(result).isEqualTo(LocationConstraintsCheck.PermissionRationale)
} }
@Test @Test
@ -73,7 +73,6 @@ class LocationConstraintsCheckTest {
val result = checkLocationConstraints(permissionsState, locationActions) val result = checkLocationConstraints(permissionsState, locationActions)
assertThat(result).isEqualTo(LocationConstraintsCheckResult.PermissionDenied) assertThat(result).isEqualTo(LocationConstraintsCheck.PermissionDenied)
} }
} }

View file

@ -37,7 +37,6 @@ import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.lambda.value
import io.element.android.tests.testutils.test import io.element.android.tests.testutils.test
import kotlinx.coroutines.delay
import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule

View file

@ -1,6 +1,5 @@
/* /*
* Copyright (c) 2025 Element Creations Ltd. * Copyright (c) 2026 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.

View file

@ -15,11 +15,11 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.features.location.api.Location import io.element.android.features.location.api.Location
import io.element.android.features.location.api.ShowLocationMode import io.element.android.features.location.api.ShowLocationMode
import io.element.android.features.location.impl.aPermissionsState import io.element.android.features.location.impl.aPermissionsState
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.features.location.impl.common.actions.FakeLocationActions import io.element.android.features.location.impl.common.actions.FakeLocationActions
import io.element.android.features.location.impl.common.permissions.FakePermissionsPresenter import io.element.android.features.location.impl.common.permissions.FakePermissionsPresenter
import io.element.android.features.location.impl.common.permissions.PermissionsEvents import io.element.android.features.location.impl.common.permissions.PermissionsEvents
import io.element.android.features.location.impl.common.permissions.PermissionsState import io.element.android.features.location.impl.common.permissions.PermissionsState
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.libraries.dateformatter.test.FakeDateFormatter import io.element.android.libraries.dateformatter.test.FakeDateFormatter
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.core.aBuildMeta

View file

@ -75,7 +75,6 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.BaseRoom
import io.element.android.libraries.matrix.api.room.alias.matches import io.element.android.libraries.matrix.api.room.alias.matches
import io.element.android.libraries.matrix.api.room.joinedRoomMembers import io.element.android.libraries.matrix.api.room.joinedRoomMembers
import io.element.android.libraries.matrix.api.room.location.AssetType
import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.RoomListService
import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo

View file

@ -17,10 +17,6 @@ import androidx.compose.ui.unit.dp
import io.element.android.features.location.api.StaticMapView import io.element.android.features.location.api.StaticMapView
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContentProvider import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContentProvider
import io.element.android.libraries.designsystem.components.PinVariant
import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight

View file

@ -29,13 +29,9 @@ import io.element.android.features.messages.impl.utils.TextPillificationHelper
import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.androidutils.filesize.FileSizeFormatter
import io.element.android.libraries.androidutils.text.safeLinkify import io.element.android.libraries.androidutils.text.safeLinkify
import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes
import io.element.android.libraries.designsystem.components.PinVariant
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.permalink.PermalinkParser
import io.element.android.libraries.matrix.api.room.location.AssetType
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType
@ -49,7 +45,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessag
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.getAvatarUrl
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
import io.element.android.libraries.matrix.ui.messages.toHtmlDocument import io.element.android.libraries.matrix.ui.messages.toHtmlDocument
import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor

View file

@ -27,7 +27,6 @@ data class TimelineItemLocationContent(
val assetType: AssetType? = null, val assetType: AssetType? = null,
val mode: Mode, val mode: Mode,
) : TimelineItemEventContent { ) : TimelineItemEventContent {
val pinVariant = when (mode) { val pinVariant = when (mode) {
is Mode.Live -> { is Mode.Live -> {
if (mode.isActive) { if (mode.isActive) {
@ -61,4 +60,3 @@ data class TimelineItemLocationContent(
override val type: String = "TimelineItemLocationContent" override val type: String = "TimelineItemLocationContent"
} }

View file

@ -11,9 +11,7 @@ package io.element.android.features.messages.impl.timeline.model.event
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.location.api.Location import io.element.android.features.location.api.Location
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails
import io.element.android.libraries.matrix.ui.components.aMatrixUser
import io.element.android.libraries.matrix.ui.messages.reply.aProfileDetailsReady import io.element.android.libraries.matrix.ui.messages.reply.aProfileDetailsReady
open class TimelineItemLocationContentProvider : PreviewParameterProvider<TimelineItemLocationContent> { open class TimelineItemLocationContentProvider : PreviewParameterProvider<TimelineItemLocationContent> {

View file

@ -17,12 +17,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import coil3.compose.AsyncImagePainter import coil3.compose.AsyncImagePainter
import coil3.compose.SubcomposeAsyncImage import coil3.compose.SubcomposeAsyncImage
import coil3.compose.SubcomposeAsyncImageContent import coil3.compose.SubcomposeAsyncImageContent
import coil3.request.ImageRequest
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import timber.log.Timber import timber.log.Timber

View file

@ -9,7 +9,6 @@
package io.element.android.libraries.designsystem.components.dialogs package io.element.android.libraries.designsystem.components.dialogs
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope

View file

@ -12,4 +12,3 @@ data class LiveLocationInfo(
val geoUri: String, val geoUri: String,
val timestamp: Long, val timestamp: Long,
) )

View file

@ -111,7 +111,7 @@ data class LiveLocationContent(
val timeout: Long, val timeout: Long,
val assetType: AssetType?, val assetType: AssetType?,
val locations: List<LiveLocationInfo>, val locations: List<LiveLocationInfo>,
): EventContent ) : EventContent
data object LegacyCallInviteContent : EventContent data object LegacyCallInviteContent : EventContent

View file

@ -17,7 +17,7 @@ fun AssetType.into(): RustAssetType = when (this) {
AssetType.UNKNOWN -> RustAssetType.UNKNOWN AssetType.UNKNOWN -> RustAssetType.UNKNOWN
} }
fun RustAssetType.into(): AssetType = when(this){ fun RustAssetType.into(): AssetType = when (this) {
RustAssetType.SENDER -> AssetType.SENDER RustAssetType.SENDER -> AssetType.SENDER
RustAssetType.PIN -> AssetType.PIN RustAssetType.PIN -> AssetType.PIN
RustAssetType.UNKNOWN -> AssetType.UNKNOWN RustAssetType.UNKNOWN -> AssetType.UNKNOWN

View file

@ -11,7 +11,6 @@ package io.element.android.libraries.matrix.ui.components
import android.os.Parcelable import android.os.Parcelable
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme