Annotate Composable function with ReadOnlyComposable where it's possible. (#4859)

This commit is contained in:
Benoit Marty 2025-06-11 14:12:54 +02:00 committed by GitHub
parent 9273542363
commit cfa48d1df7
8 changed files with 24 additions and 0 deletions

View file

@ -19,6 +19,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -124,6 +125,7 @@ private fun SetupPinContent(
} }
@Composable @Composable
@ReadOnlyComposable
private fun SetupPinFailure.content(): String { private fun SetupPinFailure.content(): String {
return when (this) { return when (this) {
SetupPinFailure.ForbiddenPin -> stringResource(id = R.string.screen_app_lock_setup_pin_forbidden_dialog_content) SetupPinFailure.ForbiddenPin -> stringResource(id = R.string.screen_app_lock_setup_pin_forbidden_dialog_content)
@ -132,6 +134,7 @@ private fun SetupPinFailure.content(): String {
} }
@Composable @Composable
@ReadOnlyComposable
private fun SetupPinFailure.title(): String { private fun SetupPinFailure.title(): String {
return when (this) { return when (this) {
SetupPinFailure.ForbiddenPin -> stringResource(id = R.string.screen_app_lock_setup_pin_forbidden_dialog_title) SetupPinFailure.ForbiddenPin -> stringResource(id = R.string.screen_app_lock_setup_pin_forbidden_dialog_title)

View file

@ -9,6 +9,7 @@ package io.element.android.features.login.impl.error
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.login.impl.R import io.element.android.features.login.impl.R
import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException
@ -21,6 +22,7 @@ sealed class ChangeServerError : Throwable() {
val messageStr: String? = null, val messageStr: String? = null,
) : ChangeServerError() { ) : ChangeServerError() {
@Composable @Composable
@ReadOnlyComposable
fun message(): String = messageStr ?: stringResource(messageId ?: CommonStrings.error_unknown) fun message(): String = messageStr ?: stringResource(messageId ?: CommonStrings.error_unknown)
} }

View file

@ -30,6 +30,7 @@ import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.material3.ripple import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -394,6 +395,7 @@ private fun VerifiedUserSendFailureView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
@Composable @Composable
@ReadOnlyComposable
fun VerifiedUserSendFailure.headline(): String { fun VerifiedUserSendFailure.headline(): String {
return when (this) { return when (this) {
is None -> "" is None -> ""

View file

@ -8,6 +8,7 @@
package io.element.android.features.preferences.impl.advanced package io.element.android.features.preferences.impl.advanced
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.libraries.designsystem.components.preferences.DropdownOption import io.element.android.libraries.designsystem.components.preferences.DropdownOption
import io.element.android.libraries.matrix.api.media.MediaPreviewValue import io.element.android.libraries.matrix.api.media.MediaPreviewValue
@ -26,14 +27,17 @@ data class AdvancedSettingsState(
enum class ThemeOption : DropdownOption { enum class ThemeOption : DropdownOption {
System { System {
@Composable @Composable
@ReadOnlyComposable
override fun getText(): String = stringResource(CommonStrings.common_system) override fun getText(): String = stringResource(CommonStrings.common_system)
}, },
Dark { Dark {
@Composable @Composable
@ReadOnlyComposable
override fun getText(): String = stringResource(CommonStrings.common_dark) override fun getText(): String = stringResource(CommonStrings.common_dark)
}, },
Light { Light {
@Composable @Composable
@ReadOnlyComposable
override fun getText(): String = stringResource(CommonStrings.common_light) override fun getText(): String = stringResource(CommonStrings.common_light)
} }
} }

View file

@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -27,6 +28,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
* will be smaller. * will be smaller.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Dp.applyScaleDown(): Dp = with(LocalDensity.current) { fun Dp.applyScaleDown(): Dp = with(LocalDensity.current) {
return this@applyScaleDown * fontScale.coerceAtMost(1f) return this@applyScaleDown * fontScale.coerceAtMost(1f)
} }
@ -37,6 +39,7 @@ fun Dp.applyScaleDown(): Dp = with(LocalDensity.current) {
* will be bigger. * will be bigger.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Dp.applyScaleUp(): Dp = with(LocalDensity.current) { fun Dp.applyScaleUp(): Dp = with(LocalDensity.current) {
return this@applyScaleUp * fontScale.coerceAtLeast(1f) return this@applyScaleUp * fontScale.coerceAtLeast(1f)
} }

View file

@ -8,6 +8,7 @@
package io.element.android.libraries.designsystem.text package io.element.android.libraries.designsystem.text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
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.TextUnit import androidx.compose.ui.unit.TextUnit
@ -17,6 +18,7 @@ import androidx.compose.ui.unit.TextUnit
* Can be used for instance to use Dp unit for text. * Can be used for instance to use Dp unit for text.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Dp.toSp(): TextUnit = with(LocalDensity.current) { toSp() } fun Dp.toSp(): TextUnit = with(LocalDensity.current) { toSp() }
/** /**
@ -24,22 +26,26 @@ fun Dp.toSp(): TextUnit = with(LocalDensity.current) { toSp() }
* Can be used for instance to use Sp unit for size. * Can be used for instance to use Sp unit for size.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun TextUnit.toDp(): Dp = with(LocalDensity.current) { toDp() } fun TextUnit.toDp(): Dp = with(LocalDensity.current) { toDp() }
/** /**
* Convert Px value to Dp, regarding current density. * Convert Px value to Dp, regarding current density.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Int.toDp(): Dp = with(LocalDensity.current) { toDp() } fun Int.toDp(): Dp = with(LocalDensity.current) { toDp() }
/** /**
* Convert Dp value to pixels, regarding current density. * Convert Dp value to pixels, regarding current density.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Dp.toPx(): Float = with(LocalDensity.current) { toPx() } fun Dp.toPx(): Float = with(LocalDensity.current) { toPx() }
/** /**
* Convert Dp value to pixels, regarding current density. * Convert Dp value to pixels, regarding current density.
*/ */
@Composable @Composable
@ReadOnlyComposable
fun Dp.roundToPx(): Int = with(LocalDensity.current) { roundToPx() } fun Dp.roundToPx(): Int = with(LocalDensity.current) { roundToPx() }

View file

@ -9,10 +9,12 @@ package io.element.android.libraries.designsystem.utils
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalLayoutDirection
@Composable @Composable
@ReadOnlyComposable
fun WindowInsets.copy( fun WindowInsets.copy(
top: Int? = null, top: Int? = null,
right: Int? = null, right: Int? = null,

View file

@ -9,6 +9,7 @@ package io.element.android.libraries.permissions.api
import android.Manifest import android.Manifest
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
@ -41,6 +42,7 @@ fun PermissionsView(
} }
@Composable @Composable
@ReadOnlyComposable
private fun String.toDialogContent(): String { private fun String.toDialogContent(): String {
return when (this) { return when (this) {
Manifest.permission.POST_NOTIFICATIONS -> stringResource(id = R.string.dialog_permission_notification) Manifest.permission.POST_NOTIFICATIONS -> stringResource(id = R.string.dialog_permission_notification)