Skip to content

Commit 9a24e7d

Browse files
committed
Change type of NotificationSettingsState.currentPushDistributor from AsyncAction to AsyncData
1 parent ab99137 commit 9a24e7d

File tree

5 files changed

+20
-16
lines changed

5 files changed

+20
-16
lines changed

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import androidx.compose.runtime.remember
2727
import androidx.compose.runtime.rememberCoroutineScope
2828
import androidx.compose.runtime.setValue
2929
import io.element.android.libraries.architecture.AsyncAction
30+
import io.element.android.libraries.architecture.AsyncData
3031
import io.element.android.libraries.architecture.Presenter
3132
import io.element.android.libraries.architecture.runCatchingUpdatingState
3233
import io.element.android.libraries.matrix.api.MatrixClient
@@ -90,16 +91,16 @@ class NotificationSettingsPresenter @Inject constructor(
9091
distributors.map { it.second.name }.toImmutableList()
9192
}
9293

93-
var currentDistributorName by remember { mutableStateOf<AsyncAction<String>>(AsyncAction.Uninitialized) }
94+
var currentDistributorName by remember { mutableStateOf<AsyncData<String>>(AsyncData.Uninitialized) }
9495
var refreshPushProvider by remember { mutableIntStateOf(0) }
9596

9697
LaunchedEffect(refreshPushProvider) {
9798
val p = pushService.getCurrentPushProvider()
9899
val name = p?.getCurrentDistributor(matrixClient)?.name
99100
currentDistributorName = if (name != null) {
100-
AsyncAction.Success(name)
101+
AsyncData.Success(name)
101102
} else {
102-
AsyncAction.Failure(Exception("Failed to get current push provider"))
103+
AsyncData.Failure(Exception("Failed to get current push provider"))
103104
}
104105
}
105106

@@ -112,7 +113,7 @@ class NotificationSettingsPresenter @Inject constructor(
112113
data ?: return@launch
113114
// No op if the value is the same.
114115
if (data.second.name == currentDistributorName.dataOrNull()) return@launch
115-
currentDistributorName = AsyncAction.Loading
116+
currentDistributorName = AsyncData.Loading(currentDistributorName.dataOrNull())
116117
data.let { (pushProvider, distributor) ->
117118
pushService.registerWith(
118119
matrixClient = matrixClient,
@@ -124,7 +125,7 @@ class NotificationSettingsPresenter @Inject constructor(
124125
refreshPushProvider++
125126
},
126127
{
127-
currentDistributorName = AsyncAction.Failure(it)
128+
currentDistributorName = AsyncData.Failure(it)
128129
}
129130
)
130131
}

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package io.element.android.features.preferences.impl.notifications
1818

1919
import androidx.compose.runtime.Immutable
2020
import io.element.android.libraries.architecture.AsyncAction
21+
import io.element.android.libraries.architecture.AsyncData
2122
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
2223
import kotlinx.collections.immutable.ImmutableList
2324

@@ -26,7 +27,7 @@ data class NotificationSettingsState(
2627
val matrixSettings: MatrixSettings,
2728
val appSettings: AppSettings,
2829
val changeNotificationSettingAction: AsyncAction<Unit>,
29-
val currentPushDistributor: AsyncAction<String>,
30+
val currentPushDistributor: AsyncData<String>,
3031
val availablePushDistributors: ImmutableList<String>,
3132
val showChangePushProviderDialog: Boolean,
3233
val eventSink: (NotificationSettingsEvents) -> Unit,

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsStateProvider.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package io.element.android.features.preferences.impl.notifications
1818

1919
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
2020
import io.element.android.libraries.architecture.AsyncAction
21+
import io.element.android.libraries.architecture.AsyncData
2122
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
2223
import kotlinx.collections.immutable.persistentListOf
2324
import kotlinx.collections.immutable.toImmutableList
@@ -35,8 +36,8 @@ open class NotificationSettingsStateProvider : PreviewParameterProvider<Notifica
3536
),
3637
aValidNotificationSettingsState(availablePushDistributors = listOf("Firebase")),
3738
aValidNotificationSettingsState(showChangePushProviderDialog = true),
38-
aValidNotificationSettingsState(currentPushDistributor = AsyncAction.Loading),
39-
aValidNotificationSettingsState(currentPushDistributor = AsyncAction.Failure(Exception("Failed to change distributor"))),
39+
aValidNotificationSettingsState(currentPushDistributor = AsyncData.Loading()),
40+
aValidNotificationSettingsState(currentPushDistributor = AsyncData.Failure(Exception("Failed to change distributor"))),
4041
aInvalidNotificationSettingsState(),
4142
aInvalidNotificationSettingsState(fixFailed = true),
4243
)
@@ -49,7 +50,7 @@ fun aValidNotificationSettingsState(
4950
inviteForMeNotificationsEnabled: Boolean = true,
5051
systemNotificationsEnabled: Boolean = true,
5152
appNotificationEnabled: Boolean = true,
52-
currentPushDistributor: AsyncAction<String> = AsyncAction.Success("Firebase"),
53+
currentPushDistributor: AsyncData<String> = AsyncData.Success("Firebase"),
5354
availablePushDistributors: List<String> = listOf("Firebase", "ntfy"),
5455
showChangePushProviderDialog: Boolean = false,
5556
eventSink: (NotificationSettingsEvents) -> Unit = {},
@@ -84,7 +85,7 @@ fun aInvalidNotificationSettingsState(
8485
appNotificationsEnabled = true,
8586
),
8687
changeNotificationSettingAction = AsyncAction.Uninitialized,
87-
currentPushDistributor = AsyncAction.Uninitialized,
88+
currentPushDistributor = AsyncData.Uninitialized,
8889
availablePushDistributors = persistentListOf(),
8990
showChangePushProviderDialog = false,
9091
eventSink = eventSink,

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsView.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import androidx.lifecycle.Lifecycle
2828
import io.element.android.compound.tokens.generated.CompoundIcons
2929
import io.element.android.features.preferences.impl.R
3030
import io.element.android.libraries.androidutils.system.startNotificationSettingsIntent
31-
import io.element.android.libraries.architecture.AsyncAction
31+
import io.element.android.libraries.architecture.AsyncData
3232
import io.element.android.libraries.designsystem.atomic.molecules.DialogLikeBannerMolecule
3333
import io.element.android.libraries.designsystem.components.async.AsyncActionView
3434
import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog
@@ -188,20 +188,19 @@ private fun NotificationSettingsContentView(
188188
Text(text = stringResource(id = R.string.screen_advanced_settings_push_provider_android))
189189
},
190190
trailingContent = when (state.currentPushDistributor) {
191-
AsyncAction.Uninitialized,
192-
AsyncAction.Confirming,
193-
AsyncAction.Loading -> ListItemContent.Custom {
191+
AsyncData.Uninitialized,
192+
is AsyncData.Loading -> ListItemContent.Custom {
194193
CircularProgressIndicator(
195194
modifier = Modifier
196195
.progressSemantics()
197196
.size(20.dp),
198197
strokeWidth = 2.dp
199198
)
200199
}
201-
is AsyncAction.Failure -> ListItemContent.Text(
200+
is AsyncData.Failure -> ListItemContent.Text(
202201
stringResource(id = CommonStrings.common_error)
203202
)
204-
is AsyncAction.Success -> ListItemContent.Text(
203+
is AsyncData.Success -> ListItemContent.Text(
205204
state.currentPushDistributor.dataOrNull() ?: ""
206205
)
207206
},

libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/AsyncData.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ sealed interface AsyncData<out T> {
9191
fun isSuccess(): Boolean = this is Success<T>
9292

9393
fun isUninitialized(): Boolean = this == Uninitialized
94+
95+
fun isReady() = isSuccess() || isFailure()
9496
}
9597

9698
suspend inline fun <T> MutableState<AsyncData<T>>.runCatchingUpdatingState(

0 commit comments

Comments
 (0)