whats new view

This commit is contained in:
Diogo
2024-11-16 14:56:14 +00:00
parent 79d3504de1
commit 2a3674d33f
8 changed files with 53 additions and 14 deletions
@@ -135,6 +135,8 @@ object ChatModel {
val clipboardHasText = mutableStateOf(false)
val networkInfo = mutableStateOf(UserNetworkInfo(networkType = UserNetworkType.OTHER, online = true))
val conditions = mutableStateOf(ServerOperatorConditionsDetail.empty)
val updatingProgress = mutableStateOf(null as Float?)
var updatingRequest: Closeable? = null
@@ -3646,14 +3646,14 @@ data class UsageConditionsDetail(
@Serializable
sealed class UsageConditionsAction {
data class Review(val operators: List<ServerOperator>, val deadline: Date?, private val showNoticeFlag: Boolean) : UsageConditionsAction() {
val showNotice: Boolean
get() = showNoticeFlag
}
data class Accepted(val operators: List<ServerOperator>) : UsageConditionsAction() {
val showNotice: Boolean
get() = false
}
data class Review(val operators: List<ServerOperator>, val deadline: Date?, val showNotice: Boolean) : UsageConditionsAction()
data class Accepted(val operators: List<ServerOperator>) : UsageConditionsAction()
val shouldSowNotice: Boolean
get() = when (this) {
is Review -> showNotice
else -> false
}
}
@Serializable
@@ -118,6 +118,7 @@ suspend fun initChatController(useKey: String? = null, confirmMigrations: Migrat
if (appPreferences.encryptionStartedAt.get() != null) appPreferences.encryptionStartedAt.set(null)
val user = chatController.apiGetActiveUser(null)
chatModel.currentUser.value = user
chatModel.conditions.value = chatController.getServerOperators(null) ?: ServerOperatorConditionsDetail.empty
if (user == null) {
chatModel.controller.appPrefs.privacyDeliveryReceiptsSet.set(true)
chatModel.currentUser.value = null
@@ -133,9 +133,11 @@ fun ToggleChatListCard() {
fun ChatListView(chatModel: ChatModel, userPickerState: MutableStateFlow<AnimatedViewState>, setPerformLA: (Boolean) -> Unit, stopped: Boolean) {
val oneHandUI = remember { appPrefs.oneHandUI.state }
LaunchedEffect(Unit) {
if (shouldShowWhatsNew(chatModel)) {
val showWhatsNew = shouldShowWhatsNew(chatModel)
val showOperatorsNotice = chatModel.conditions.value?.conditionsAction?.shouldSowNotice ?: false
if (showWhatsNew || showOperatorsNotice) {
delay(1000L)
ModalManager.center.showCustomModal { close -> WhatsNewView(close = close) }
ModalManager.center.showCustomModal { close -> WhatsNewView(close = close, showWhatsNew = remember { mutableStateOf(showWhatsNew) }, showOperatorsNotice = showOperatorsNotice) }
}
}
@@ -0,0 +1,9 @@
package chat.simplex.common.views.onboarding
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
@Composable
fun ChooseServerOperators(onboarding: Boolean) {
Column { }
}
@@ -17,6 +17,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.common.model.ChatController.setConditionsNotified
import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.*
@@ -26,9 +27,26 @@ import dev.icerock.moko.resources.ImageResource
import dev.icerock.moko.resources.StringResource
@Composable
fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
fun WhatsNewView(showWhatsNew: MutableState<Boolean> = mutableStateOf(true), showOperatorsNotice: Boolean = false, viaSettings: Boolean = false, close: () -> Unit) {
val currentVersion = remember { mutableStateOf(versionDescriptions.lastIndex) }
if (showOperatorsNotice) {
LaunchedEffect(Unit) {
val conditionsId = chatModel.conditions.value?.currentConditions?.conditionsId
if (conditionsId != null) {
try {
setConditionsNotified(rh = chatModel.remoteHostId(), conditionsId = conditionsId)
} catch (e: Exception) {
Log.d(TAG, "WhatsNewView setConditionsNotified error: ${e.message}")
}
}
}
}
if (showOperatorsNotice) {
return ChooseServerOperators(onboarding = false)
}
@Composable
fun featureDescription(icon: ImageResource?, titleId: StringResource, descrId: StringResource?, link: String?, subfeatures: List<Pair<ImageResource, StringResource>>) {
@Composable
@@ -140,8 +158,14 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
Modifier.fillMaxWidth(), contentAlignment = Alignment.Center
) {
Text(
generalGetString(MR.strings.ok),
modifier = Modifier.clickable(onClick = close),
if (showOperatorsNotice) generalGetString(MR.strings.server_operators_view_updated_conditions) else generalGetString(MR.strings.ok),
modifier = Modifier.clickable(onClick = {
if (showOperatorsNotice) {
showWhatsNew.value = false
} else {
close()
}
}),
style = MaterialTheme.typography.h3,
color = MaterialTheme.colors.primary
)
@@ -118,7 +118,7 @@ fun SettingsLayout(
SectionView(stringResource(MR.strings.settings_section_title_help)) {
SettingsActionItem(painterResource(MR.images.ic_help), stringResource(MR.strings.how_to_use_simplex_chat), showModal { HelpView(userDisplayName ?: "") }, disabled = stopped)
SettingsActionItem(painterResource(MR.images.ic_add), stringResource(MR.strings.whats_new), showCustomModal { _, close -> WhatsNewView(viaSettings = true, close) }, disabled = stopped)
SettingsActionItem(painterResource(MR.images.ic_add), stringResource(MR.strings.whats_new), showCustomModal { _, close -> WhatsNewView(viaSettings = true, close = close) }, disabled = stopped)
SettingsActionItem(painterResource(MR.images.ic_info), stringResource(MR.strings.about_simplex_chat), showModal { SimpleXInfo(it, onboarding = false) })
if (!chatModel.desktopNoUserNoRemote) {
SettingsActionItem(painterResource(MR.images.ic_tag), stringResource(MR.strings.chat_with_the_founder), { uriHandler.openVerifiedSimplexUri(simplexTeamUri) }, textColor = MaterialTheme.colors.primary, disabled = stopped)
@@ -2056,6 +2056,7 @@
<string name="v6_1_message_dates_descr">Better message dates.</string>
<string name="v6_1_forward_many_messages_descr">Forward up to 20 messages at once.</string>
<string name="v6_1_delete_many_messages_descr">Delete or moderate up to 200 messages.</string>
<string name="server_operators_view_updated_conditions">View updated conditions</string>
<!-- CustomTimePicker -->
<string name="custom_time_unit_seconds">seconds</string>