Address comments
- Add additional states to preview. - Add TODO description for commented code - Move showUserDefinedSettingStyle from the node to the view for testability.
This commit is contained in:
parent
463ceba52c
commit
39af4d5e1b
9 changed files with 47 additions and 15 deletions
|
|
@ -89,6 +89,7 @@ fun NotificationSettingsView(
|
||||||
onGroupChatsClicked = { onOpenEditDefault(false) },
|
onGroupChatsClicked = { onOpenEditDefault(false) },
|
||||||
onDirectChatsClicked = { onOpenEditDefault(true) },
|
onDirectChatsClicked = { onOpenEditDefault(true) },
|
||||||
onMentionNotificationsChanged = { state.eventSink(NotificationSettingsEvents.SetAtRoomNotificationsEnabled(it)) },
|
onMentionNotificationsChanged = { state.eventSink(NotificationSettingsEvents.SetAtRoomNotificationsEnabled(it)) },
|
||||||
|
// TODO We are removing the call notification toggle until support for call notifications has been added
|
||||||
// onCallsNotificationsChanged = { state.eventSink(NotificationSettingsEvents.SetCallNotificationsEnabled(it)) },
|
// onCallsNotificationsChanged = { state.eventSink(NotificationSettingsEvents.SetCallNotificationsEnabled(it)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -116,6 +117,7 @@ private fun NotificationSettingsContentView(
|
||||||
onGroupChatsClicked: () -> Unit,
|
onGroupChatsClicked: () -> Unit,
|
||||||
onDirectChatsClicked: () -> Unit,
|
onDirectChatsClicked: () -> Unit,
|
||||||
onMentionNotificationsChanged: (Boolean) -> Unit,
|
onMentionNotificationsChanged: (Boolean) -> Unit,
|
||||||
|
// TODO We are removing the call notification toggle until support for call notifications has been added
|
||||||
// onCallsNotificationsChanged: (Boolean) -> Unit,
|
// onCallsNotificationsChanged: (Boolean) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
|
|
@ -166,7 +168,7 @@ private fun NotificationSettingsContentView(
|
||||||
onCheckedChange = onMentionNotificationsChanged
|
onCheckedChange = onMentionNotificationsChanged
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// We are removing the call notification toggle until call support has been added
|
// TODO We are removing the call notification toggle until support for call notifications has been added
|
||||||
// PreferenceCategory(title = stringResource(id = CommonStrings.screen_notification_settings_additional_settings_section_title)) {
|
// PreferenceCategory(title = stringResource(id = CommonStrings.screen_notification_settings_additional_settings_section_title)) {
|
||||||
// PreferenceSwitch(
|
// PreferenceSwitch(
|
||||||
// modifier = Modifier,
|
// modifier = Modifier,
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,12 @@ open class EditDefaultNotificationSettingStateProvider: PreviewParameterProvider
|
||||||
override val values: Sequence<EditDefaultNotificationSettingState>
|
override val values: Sequence<EditDefaultNotificationSettingState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
anEditDefaultNotificationSettingsState(),
|
anEditDefaultNotificationSettingsState(),
|
||||||
|
anEditDefaultNotificationSettingsState(isOneToOne = true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun anEditDefaultNotificationSettingsState() = EditDefaultNotificationSettingState(
|
fun anEditDefaultNotificationSettingsState(isOneToOne: Boolean = false) = EditDefaultNotificationSettingState(
|
||||||
isOneToOne = false,
|
isOneToOne = isOneToOne,
|
||||||
mode = RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY,
|
mode = RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY,
|
||||||
roomsWithUserDefinedMode = listOf(aRoomSummary()),
|
roomsWithUserDefinedMode = listOf(aRoomSummary()),
|
||||||
changeNotificationSettingAction = Async.Uninitialized,
|
changeNotificationSettingAction = Async.Uninitialized,
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import io.element.android.services.analytics.api.AnalyticsService
|
||||||
class RoomNotificationSettingsNode @AssistedInject constructor(
|
class RoomNotificationSettingsNode @AssistedInject constructor(
|
||||||
@Assisted buildContext: BuildContext,
|
@Assisted buildContext: BuildContext,
|
||||||
@Assisted plugins: List<Plugin>,
|
@Assisted plugins: List<Plugin>,
|
||||||
private val presenter: RoomNotificationSettingsPresenter,
|
presenterFactory: RoomNotificationSettingsPresenter.Factory,
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
) : Node(buildContext, plugins = plugins) {
|
) : Node(buildContext, plugins = plugins) {
|
||||||
|
|
||||||
|
|
@ -45,6 +45,7 @@ class RoomNotificationSettingsNode @AssistedInject constructor(
|
||||||
|
|
||||||
private val inputs = inputs<RoomNotificationSettingInput>()
|
private val inputs = inputs<RoomNotificationSettingInput>()
|
||||||
|
|
||||||
|
private val presenter = presenterFactory.create(inputs.showUserDefinedSettingStyle)
|
||||||
init {
|
init {
|
||||||
lifecycle.subscribe(
|
lifecycle.subscribe(
|
||||||
onResume = {
|
onResume = {
|
||||||
|
|
@ -56,18 +57,10 @@ class RoomNotificationSettingsNode @AssistedInject constructor(
|
||||||
@Composable
|
@Composable
|
||||||
override fun View(modifier: Modifier) {
|
override fun View(modifier: Modifier) {
|
||||||
val state = presenter.present()
|
val state = presenter.present()
|
||||||
if(inputs.showUserDefinedSettingStyle) {
|
|
||||||
UserDefinedRoomNotificationSettingsView(
|
|
||||||
state = state,
|
|
||||||
modifier = modifier,
|
|
||||||
onBackPressed = this::navigateUp,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
RoomNotificationSettingsView(
|
RoomNotificationSettingsView(
|
||||||
state = state,
|
state = state,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
onBackPressed = this::navigateUp,
|
onBackPressed = this::navigateUp,
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,9 @@ import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import dagger.assisted.Assisted
|
||||||
|
import dagger.assisted.AssistedFactory
|
||||||
|
import dagger.assisted.AssistedInject
|
||||||
import io.element.android.libraries.architecture.Async
|
import io.element.android.libraries.architecture.Async
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
|
|
@ -36,13 +39,19 @@ import kotlinx.coroutines.flow.debounce
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
class RoomNotificationSettingsPresenter @Inject constructor(
|
class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
||||||
private val room: MatrixRoom,
|
private val room: MatrixRoom,
|
||||||
private val notificationSettingsService: NotificationSettingsService,
|
private val notificationSettingsService: NotificationSettingsService,
|
||||||
|
@Assisted private val showUserDefinedSettingStyle: Boolean,
|
||||||
) : Presenter<RoomNotificationSettingsState> {
|
) : Presenter<RoomNotificationSettingsState> {
|
||||||
|
|
||||||
|
@AssistedFactory
|
||||||
|
interface Factory {
|
||||||
|
fun create(showUserDefinedSettingStyle: Boolean): RoomNotificationSettingsPresenter
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): RoomNotificationSettingsState {
|
override fun present(): RoomNotificationSettingsState {
|
||||||
val defaultRoomNotificationMode: MutableState<RoomNotificationMode?> = rememberSaveable {
|
val defaultRoomNotificationMode: MutableState<RoomNotificationMode?> = rememberSaveable {
|
||||||
|
|
@ -107,6 +116,7 @@ class RoomNotificationSettingsPresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
return RoomNotificationSettingsState(
|
return RoomNotificationSettingsState(
|
||||||
|
showUserDefinedSettingStyle = showUserDefinedSettingStyle,
|
||||||
roomName = room.displayName,
|
roomName = room.displayName,
|
||||||
roomNotificationSettings = roomNotificationSettings.value,
|
roomNotificationSettings = roomNotificationSettings.value,
|
||||||
pendingRoomNotificationMode = pendingRoomNotificationMode.value,
|
pendingRoomNotificationMode = pendingRoomNotificationMode.value,
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
||||||
|
|
||||||
data class RoomNotificationSettingsState(
|
data class RoomNotificationSettingsState(
|
||||||
|
val showUserDefinedSettingStyle: Boolean,
|
||||||
val roomName: String,
|
val roomName: String,
|
||||||
val roomNotificationSettings: Async<RoomNotificationSettings>,
|
val roomNotificationSettings: Async<RoomNotificationSettings>,
|
||||||
val pendingRoomNotificationMode: RoomNotificationMode?,
|
val pendingRoomNotificationMode: RoomNotificationMode?,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ internal class RoomNotificationSettingsStateProvider : PreviewParameterProvider<
|
||||||
override val values: Sequence<RoomNotificationSettingsState>
|
override val values: Sequence<RoomNotificationSettingsState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
RoomNotificationSettingsState(
|
RoomNotificationSettingsState(
|
||||||
|
showUserDefinedSettingStyle = false,
|
||||||
roomName = "Room 1",
|
roomName = "Room 1",
|
||||||
Async.Success(RoomNotificationSettings(
|
Async.Success(RoomNotificationSettings(
|
||||||
mode = RoomNotificationMode.MUTE,
|
mode = RoomNotificationMode.MUTE,
|
||||||
|
|
|
||||||
|
|
@ -45,11 +45,33 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
import io.element.android.libraries.theme.ElementTheme
|
import io.element.android.libraries.theme.ElementTheme
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RoomNotificationSettingsView(
|
fun RoomNotificationSettingsView(
|
||||||
state: RoomNotificationSettingsState,
|
state: RoomNotificationSettingsState,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onBackPressed: () -> Unit = {},
|
onBackPressed: () -> Unit = {},
|
||||||
|
) {
|
||||||
|
if(state.showUserDefinedSettingStyle) {
|
||||||
|
UserDefinedRoomNotificationSettingsView(
|
||||||
|
state = state,
|
||||||
|
modifier = modifier,
|
||||||
|
onBackPressed = onBackPressed,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
RoomSpecificNotificationSettingsView(
|
||||||
|
state = state,
|
||||||
|
modifier = modifier,
|
||||||
|
onBackPressed = onBackPressed,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RoomSpecificNotificationSettingsView(
|
||||||
|
state: RoomNotificationSettingsState,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
onBackPressed: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ internal class UserDefinedRoomNotificationSettingsStateProvider : PreviewParamet
|
||||||
override val values: Sequence<RoomNotificationSettingsState>
|
override val values: Sequence<RoomNotificationSettingsState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
RoomNotificationSettingsState(
|
RoomNotificationSettingsState(
|
||||||
|
showUserDefinedSettingStyle = false,
|
||||||
roomName = "Room 1",
|
roomName = "Room 1",
|
||||||
Async.Success(
|
Async.Success(
|
||||||
RoomNotificationSettings(
|
RoomNotificationSettings(
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,8 @@ class RoomNotificationSettingsPresenterTests {
|
||||||
val room = aMatrixRoom(notificationSettingsService = notificationSettingsService)
|
val room = aMatrixRoom(notificationSettingsService = notificationSettingsService)
|
||||||
return RoomNotificationSettingsPresenter(
|
return RoomNotificationSettingsPresenter(
|
||||||
room = room,
|
room = room,
|
||||||
notificationSettingsService = notificationSettingsService
|
notificationSettingsService = notificationSettingsService,
|
||||||
|
showUserDefinedSettingStyle = false,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue