diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt index 772a6dd5f7..1b04b1e673 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity import androidx.lifecycle.* @@ -39,6 +38,7 @@ import chat.simplex.app.views.newchat.* import chat.simplex.app.views.onboarding.* import chat.simplex.app.views.usersettings.LAMode import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* import kotlinx.coroutines.flow.distinctUntilChanged @@ -435,7 +435,7 @@ fun MainPage( ) { SimpleButton( stringResource(MR.strings.auth_unlock), - icon = painterResource(R.drawable.ic_lock), + icon = painterResource(MR.images.ic_lock), click = { laFailed.value = false runAuthenticate() diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/ChatModel.kt index a4f66c357b..f7ff5a80c8 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -16,6 +16,7 @@ import chat.simplex.app.views.onboarding.OnboardingStage import chat.simplex.app.views.usersettings.NotificationPreviewMode import chat.simplex.app.views.usersettings.NotificationsMode import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* import kotlinx.datetime.* @@ -1578,12 +1579,12 @@ data class CIMeta ( val isRcvNew: Boolean get() = itemStatus is CIStatus.RcvNew - fun statusIcon(primaryColor: Color, metaColor: Color = CurrentColors.value.colors.secondary): Pair? = + fun statusIcon(primaryColor: Color, metaColor: Color = CurrentColors.value.colors.secondary): Pair? = when (itemStatus) { - is CIStatus.SndSent -> R.drawable.ic_check_filled to metaColor - is CIStatus.SndErrorAuth -> R.drawable.ic_close to Color.Red - is CIStatus.SndError -> R.drawable.ic_warning_filled to WarningYellow - is CIStatus.RcvNew -> R.drawable.ic_circle_filled to primaryColor + is CIStatus.SndSent -> MR.images.ic_check_filled to metaColor + is CIStatus.SndErrorAuth -> MR.images.ic_close to Color.Red + is CIStatus.SndError -> MR.images.ic_warning_filled to WarningYellow + is CIStatus.RcvNew -> MR.images.ic_circle_filled to primaryColor else -> null } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index be21e2d8a9..ba96000544 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -1707,7 +1707,7 @@ object ChatController { title = { Row { Icon( - painterResource(R.drawable.ic_bolt), + painterResource(MR.images.ic_bolt), contentDescription = if (mode == NotificationsMode.SERVICE) stringResource(MR.strings.icon_descr_instant_notifications) else stringResource(MR.strings.periodic_notifications), ) @@ -1744,7 +1744,7 @@ object ChatController { title = { Row { Icon( - painterResource(R.drawable.ic_bolt), + painterResource(MR.images.ic_bolt), contentDescription = if (mode == NotificationsMode.SERVICE) stringResource(MR.strings.icon_descr_instant_notifications) else stringResource(MR.strings.periodic_notifications), ) @@ -1775,7 +1775,7 @@ object ChatController { title = { Row { Icon( - painterResource(R.drawable.ic_bolt), + painterResource(MR.images.ic_bolt), contentDescription = if (mode == NotificationsMode.SERVICE) stringResource(MR.strings.icon_descr_instant_notifications) else stringResource(MR.strings.periodic_notifications), ) @@ -2856,20 +2856,20 @@ enum class ChatFeature: Feature { val icon: Painter @Composable get() = when(this) { - TimedMessages -> painterResource(R.drawable.ic_timer) - FullDelete -> painterResource(R.drawable.ic_delete_forever) - Reactions -> painterResource(R.drawable.ic_add_reaction) - Voice -> painterResource(R.drawable.ic_keyboard_voice) - Calls -> painterResource(R.drawable.ic_call) + TimedMessages -> painterResource(MR.images.ic_timer) + FullDelete -> painterResource(MR.images.ic_delete_forever) + Reactions -> painterResource(MR.images.ic_add_reaction) + Voice -> painterResource(MR.images.ic_keyboard_voice) + Calls -> painterResource(MR.images.ic_call) } @Composable override fun iconFilled(): Painter = when(this) { - TimedMessages -> painterResource(R.drawable.ic_timer_filled) - FullDelete -> painterResource(R.drawable.ic_delete_forever_filled) - Reactions -> painterResource(R.drawable.ic_add_reaction_filled) - Voice -> painterResource(R.drawable.ic_keyboard_voice_filled) - Calls -> painterResource(R.drawable.ic_call_filled) + TimedMessages -> painterResource(MR.images.ic_timer_filled) + FullDelete -> painterResource(MR.images.ic_delete_forever_filled) + Reactions -> painterResource(MR.images.ic_add_reaction_filled) + Voice -> painterResource(MR.images.ic_keyboard_voice_filled) + Calls -> painterResource(MR.images.ic_call_filled) } fun allowDescription(allowed: FeatureAllowed): String = @@ -2962,22 +2962,22 @@ enum class GroupFeature: Feature { val icon: Painter @Composable get() = when(this) { - TimedMessages -> painterResource(R.drawable.ic_timer) - DirectMessages -> painterResource(R.drawable.ic_swap_horizontal_circle) - FullDelete -> painterResource(R.drawable.ic_delete_forever) - Reactions -> painterResource(R.drawable.ic_add_reaction) - Voice -> painterResource(R.drawable.ic_keyboard_voice) - Files -> painterResource(R.drawable.ic_draft) + TimedMessages -> painterResource(MR.images.ic_timer) + DirectMessages -> painterResource(MR.images.ic_swap_horizontal_circle) + FullDelete -> painterResource(MR.images.ic_delete_forever) + Reactions -> painterResource(MR.images.ic_add_reaction) + Voice -> painterResource(MR.images.ic_keyboard_voice) + Files -> painterResource(MR.images.ic_draft) } @Composable override fun iconFilled(): Painter = when(this) { - TimedMessages -> painterResource(R.drawable.ic_timer_filled) - DirectMessages -> painterResource(R.drawable.ic_swap_horizontal_circle_filled) - FullDelete -> painterResource(R.drawable.ic_delete_forever_filled) - Reactions -> painterResource(R.drawable.ic_add_reaction_filled) - Voice -> painterResource(R.drawable.ic_keyboard_voice_filled) - Files -> painterResource(R.drawable.ic_draft_filled) + TimedMessages -> painterResource(MR.images.ic_timer_filled) + DirectMessages -> painterResource(MR.images.ic_swap_horizontal_circle_filled) + FullDelete -> painterResource(MR.images.ic_delete_forever_filled) + Reactions -> painterResource(MR.images.ic_add_reaction_filled) + Voice -> painterResource(MR.images.ic_keyboard_voice_filled) + Files -> painterResource(MR.images.ic_draft_filled) } fun enableDescription(enabled: GroupFeatureEnabled, canEdit: Boolean): String = diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/ui/theme/Type.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/ui/theme/Type.kt index 177a8effad..a67a14d0c1 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/ui/theme/Type.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/ui/theme/Type.kt @@ -4,16 +4,16 @@ import androidx.compose.material.Typography import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.* import androidx.compose.ui.unit.sp -import chat.simplex.app.R +import chat.simplex.res.MR // https://github.com/rsms/inter -val Inter = FontFamily( - Font(R.font.inter_regular), - Font(R.font.inter_italic, style = FontStyle.Italic), - Font(R.font.inter_bold, weight = FontWeight.Bold), - Font(R.font.inter_semi_bold, weight = FontWeight.SemiBold), - Font(R.font.inter_medium, weight = FontWeight.Medium), - Font(R.font.inter_light, weight = FontWeight.Light), +val Inter: FontFamily = FontFamily( + Font(MR.fonts.Inter.regular.fontResourceId), + Font(MR.fonts.Inter.italic.fontResourceId, style = FontStyle.Italic), + Font(MR.fonts.Inter.bold.fontResourceId, FontWeight.Bold), + Font(MR.fonts.Inter.semibold.fontResourceId, FontWeight.SemiBold), + Font(MR.fonts.Inter.medium.fontResourceId, FontWeight.Medium), + Font(MR.fonts.Inter.light.fontResourceId, FontWeight.Light) ) // Set of Material typography styles to start with diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/SplashView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/SplashView.kt index a831bcc3a9..9491ea75e0 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/SplashView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/SplashView.kt @@ -14,7 +14,7 @@ fun SplashView() { color = MaterialTheme.colors.background ) { // Image( -// painter = painterResource(R.drawable.logo), +// painter = painterResource(MR.images.logo), // contentDescription = "Simplex Icon", // modifier = Modifier // .height(230.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/WelcomeView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/WelcomeView.kt index 5156155120..57ca136cf0 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/WelcomeView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/WelcomeView.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.* import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight @@ -88,7 +88,7 @@ fun CreateProfilePanel(chatModel: ChatModel, close: () -> Unit) { if (chatModel.users.isEmpty()) { SimpleButtonDecorated( text = stringResource(MR.strings.about_simplex), - icon = painterResource(R.drawable.ic_arrow_back_ios_new), + icon = painterResource(MR.images.ic_arrow_back_ios_new), textDecoration = TextDecoration.None, fontWeight = FontWeight.Medium ) { chatModel.onboardingStage.value = OnboardingStage.Step1_SimpleXInfo } @@ -107,7 +107,7 @@ fun CreateProfilePanel(chatModel: ChatModel, close: () -> Unit) { Surface(shape = RoundedCornerShape(20.dp), color = Color.Transparent) { Row(verticalAlignment = Alignment.CenterVertically, modifier = createModifier) { Text(stringResource(MR.strings.create_profile_button), style = MaterialTheme.typography.caption, color = createColor, fontWeight = FontWeight.Medium) - Icon(painterResource(R.drawable.ic_arrow_forward_ios), stringResource(MR.strings.create_profile_button), tint = createColor) + Icon(painterResource(MR.images.ic_arrow_forward_ios), stringResource(MR.strings.create_profile_button), tint = createColor) } } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallView.kt index bcebcdd580..e69d4c54f1 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallView.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.Preview @@ -273,14 +273,14 @@ private fun ActiveCallOverlayLayout( ToggleAudioButton(call, toggleAudio) Spacer(Modifier.size(40.dp)) IconButton(onClick = dismiss) { - Icon(painterResource(R.drawable.ic_call_end_filled), stringResource(MR.strings.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp)) + Icon(painterResource(MR.images.ic_call_end_filled), stringResource(MR.strings.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp)) } if (call.videoEnabled) { - ControlButton(call, painterResource(R.drawable.ic_flip_camera_android_filled), MR.strings.icon_descr_flip_camera, flipCamera) - ControlButton(call, painterResource(R.drawable.ic_videocam_filled), MR.strings.icon_descr_video_off, toggleVideo) + ControlButton(call, painterResource(MR.images.ic_flip_camera_android_filled), MR.strings.icon_descr_flip_camera, flipCamera) + ControlButton(call, painterResource(MR.images.ic_videocam_filled), MR.strings.icon_descr_video_off, toggleVideo) } else { Spacer(Modifier.size(48.dp)) - ControlButton(call, painterResource(R.drawable.ic_videocam_off), MR.strings.icon_descr_video_on, toggleVideo) + ControlButton(call, painterResource(MR.images.ic_videocam_off), MR.strings.icon_descr_video_on, toggleVideo) } } } @@ -298,7 +298,7 @@ private fun ActiveCallOverlayLayout( Box(Modifier.fillMaxWidth().padding(bottom = DEFAULT_BOTTOM_PADDING), contentAlignment = Alignment.CenterStart) { Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { IconButton(onClick = dismiss) { - Icon(painterResource(R.drawable.ic_call_end_filled), stringResource(MR.strings.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp)) + Icon(painterResource(MR.images.ic_call_end_filled), stringResource(MR.strings.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp)) } } Box(Modifier.padding(start = 32.dp)) { @@ -329,18 +329,18 @@ private fun ControlButton(call: Call, icon: Painter, iconText: StringResource, a @Composable private fun ToggleAudioButton(call: Call, toggleAudio: () -> Unit) { if (call.audioEnabled) { - ControlButton(call, painterResource(R.drawable.ic_mic), MR.strings.icon_descr_audio_off, toggleAudio) + ControlButton(call, painterResource(MR.images.ic_mic), MR.strings.icon_descr_audio_off, toggleAudio) } else { - ControlButton(call, painterResource(R.drawable.ic_mic_off), MR.strings.icon_descr_audio_on, toggleAudio) + ControlButton(call, painterResource(MR.images.ic_mic_off), MR.strings.icon_descr_audio_on, toggleAudio) } } @Composable private fun ToggleSoundButton(call: Call, enabled: Boolean, toggleSound: () -> Unit) { if (call.soundSpeaker) { - ControlButton(call, painterResource(R.drawable.ic_volume_up), MR.strings.icon_descr_speaker_off, toggleSound, enabled) + ControlButton(call, painterResource(MR.images.ic_volume_up), MR.strings.icon_descr_speaker_off, toggleSound, enabled) } else { - ControlButton(call, painterResource(R.drawable.ic_volume_down), MR.strings.icon_descr_speaker_on, toggleSound, enabled) + ControlButton(call, painterResource(MR.images.ic_volume_down), MR.strings.icon_descr_speaker_on, toggleSound, enabled) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallActivity.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallActivity.kt index 95181e0509..d2ffc507e0 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallActivity.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallActivity.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.draw.scale import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -171,18 +171,18 @@ fun IncomingCallLockScreenAlertLayout( Text(invitation.contact.chatViewName, style = MaterialTheme.typography.h2) Spacer(Modifier.fillMaxHeight().weight(1f)) Row { - LockScreenCallButton(stringResource(MR.strings.reject), painterResource(R.drawable.ic_call_end_filled), Color.Red, rejectCall) + LockScreenCallButton(stringResource(MR.strings.reject), painterResource(MR.images.ic_call_end_filled), Color.Red, rejectCall) Spacer(Modifier.size(48.dp)) - LockScreenCallButton(stringResource(MR.strings.ignore), painterResource(R.drawable.ic_close), MaterialTheme.colors.primary, ignoreCall) + LockScreenCallButton(stringResource(MR.strings.ignore), painterResource(MR.images.ic_close), MaterialTheme.colors.primary, ignoreCall) Spacer(Modifier.size(48.dp)) - LockScreenCallButton(stringResource(MR.strings.accept), painterResource(R.drawable.ic_check_filled), SimplexGreen, acceptCall) + LockScreenCallButton(stringResource(MR.strings.accept), painterResource(MR.images.ic_check_filled), SimplexGreen, acceptCall) } } else if (callOnLockScreen == CallOnLockScreen.SHOW) { SimpleXLogo() Text(stringResource(MR.strings.open_simplex_chat_to_accept_call), textAlign = TextAlign.Center, lineHeight = 22.sp) Text(stringResource(MR.strings.allow_accepting_calls_from_lock_screen), textAlign = TextAlign.Center, style = MaterialTheme.typography.body2, lineHeight = 22.sp) Spacer(Modifier.fillMaxHeight().weight(1f)) - SimpleButton(text = stringResource(MR.strings.open_verb), icon = painterResource(R.drawable.ic_check_filled), click = openApp) + SimpleButton(text = stringResource(MR.strings.open_verb), icon = painterResource(MR.images.ic_check_filled), click = openApp) } } } @@ -190,7 +190,7 @@ fun IncomingCallLockScreenAlertLayout( @Composable private fun SimpleXLogo() { Image( - painter = painterResource(if (isInDarkTheme()) R.drawable.logo_light else R.drawable.logo), + painter = painterResource(if (isInDarkTheme()) MR.images.logo_light else MR.images.logo), contentDescription = stringResource(MR.strings.image_descr_simplex_logo), modifier = Modifier .padding(vertical = DEFAULT_PADDING) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallAlertView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallAlertView.kt index b7e663954e..532ecda9c6 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallAlertView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/IncomingCallAlertView.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.draw.scale import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -60,9 +60,9 @@ fun IncomingCallAlertLayout( ProfilePreview(profileOf = invitation.contact, size = 64.dp) } Row(verticalAlignment = Alignment.CenterVertically) { - CallButton(stringResource(MR.strings.reject), painterResource(R.drawable.ic_call_end_filled), Color.Red, rejectCall) - CallButton(stringResource(MR.strings.ignore), painterResource(R.drawable.ic_close), MaterialTheme.colors.primary, ignoreCall) - CallButton(stringResource(MR.strings.accept), painterResource(R.drawable.ic_check_filled), SimplexGreen, acceptCall) + CallButton(stringResource(MR.strings.reject), painterResource(MR.images.ic_call_end_filled), Color.Red, rejectCall) + CallButton(stringResource(MR.strings.ignore), painterResource(MR.images.ic_close), MaterialTheme.colors.primary, ignoreCall) + CallButton(stringResource(MR.strings.accept), painterResource(MR.images.ic_check_filled), SimplexGreen, acceptCall) } } } @@ -76,8 +76,8 @@ fun IncomingCallInfo(invitation: RcvCallInvitation, chatModel: ChatModel) { ProfileImage(size = 32.dp, image = invitation.user.profile.image, color = MaterialTheme.colors.secondaryVariant) Spacer(Modifier.width(4.dp)) } - if (invitation.callType.media == CallMediaType.Video) CallIcon(painterResource(R.drawable.ic_videocam_filled), stringResource(MR.strings.icon_descr_video_call)) - else CallIcon(painterResource(R.drawable.ic_call_filled), stringResource(MR.strings.icon_descr_audio_call)) + if (invitation.callType.media == CallMediaType.Video) CallIcon(painterResource(MR.images.ic_videocam_filled), stringResource(MR.strings.icon_descr_video_call)) + else CallIcon(painterResource(MR.images.ic_call_filled), stringResource(MR.strings.icon_descr_audio_call)) Spacer(Modifier.width(4.dp)) Text(invitation.callTypeText, color = MaterialTheme.colors.onBackground) } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt index b6ff8c2c49..f7e28ff365 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.TextStyle @@ -275,7 +275,7 @@ fun ChatInfoHeader(cInfo: ChatInfo, contact: Contact) { ChatInfoImage(cInfo, size = 192.dp, iconColor = if (isInDarkTheme()) GroupDark else SettingsSecondaryLight) Row(Modifier.padding(bottom = 8.dp), verticalAlignment = Alignment.CenterVertically) { if (contact.verified) { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.padding(end = 6.dp, top = 4.dp).size(24.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.padding(end = 6.dp, top = 4.dp).size(24.dp), tint = MaterialTheme.colors.secondary) } Text( contact.profile.displayName, style = MaterialTheme.typography.h1.copy(fontWeight = FontWeight.Normal), @@ -320,7 +320,7 @@ fun LocalAliasEditor( ) }, leadingIcon = if (leadingIcon) { - { Icon(painterResource(R.drawable.ic_edit_filled), null, Modifier.padding(start = 7.dp)) } + { Icon(painterResource(MR.images.ic_edit_filled), null, Modifier.padding(start = 7.dp)) } } else null, color = MaterialTheme.colors.secondary, focus = focus, @@ -357,7 +357,7 @@ private fun NetworkStatusRow(networkStatus: NetworkStatus) { ) { Text(stringResource(MR.strings.network_status)) Icon( - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), stringResource(MR.strings.network_status), tint = MaterialTheme.colors.primary ) @@ -381,12 +381,12 @@ private fun ServerImage(networkStatus: NetworkStatus) { Box(Modifier.size(18.dp)) { when (networkStatus) { is NetworkStatus.Connected -> - Icon(painterResource(R.drawable.ic_circle_filled), stringResource(MR.strings.icon_descr_server_status_connected), tint = Color.Green) + Icon(painterResource(MR.images.ic_circle_filled), stringResource(MR.strings.icon_descr_server_status_connected), tint = Color.Green) is NetworkStatus.Disconnected -> - Icon(painterResource(R.drawable.ic_pending_filled), stringResource(MR.strings.icon_descr_server_status_disconnected), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_pending_filled), stringResource(MR.strings.icon_descr_server_status_disconnected), tint = MaterialTheme.colors.secondary) is NetworkStatus.Error -> - Icon(painterResource(R.drawable.ic_error_filled), stringResource(MR.strings.icon_descr_server_status_error), tint = MaterialTheme.colors.secondary) - else -> Icon(painterResource(R.drawable.ic_circle), stringResource(MR.strings.icon_descr_server_status_pending), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_error_filled), stringResource(MR.strings.icon_descr_server_status_error), tint = MaterialTheme.colors.secondary) + else -> Icon(painterResource(MR.images.ic_circle), stringResource(MR.strings.icon_descr_server_status_pending), tint = MaterialTheme.colors.secondary) } } } @@ -424,7 +424,7 @@ fun AbortSwitchAddressButton(disabled: Boolean, abortSwitchAddress: () -> Unit) @Composable fun VerifyCodeButton(contactVerified: Boolean, onClick: () -> Unit) { SettingsActionItem( - if (contactVerified) painterResource(R.drawable.ic_verified_user) else painterResource(R.drawable.ic_shield), + if (contactVerified) painterResource(MR.images.ic_verified_user) else painterResource(MR.images.ic_shield), stringResource(if (contactVerified) MR.strings.view_security_code else MR.strings.verify_security_code), click = onClick, iconColor = MaterialTheme.colors.secondary, @@ -434,7 +434,7 @@ fun VerifyCodeButton(contactVerified: Boolean, onClick: () -> Unit) { @Composable private fun ContactPreferencesButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_toggle_on), + painterResource(MR.images.ic_toggle_on), stringResource(MR.strings.contact_preferences), click = onClick ) @@ -443,7 +443,7 @@ private fun ContactPreferencesButton(onClick: () -> Unit) { @Composable fun ClearChatButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_settings_backup_restore), + painterResource(MR.images.ic_settings_backup_restore), stringResource(MR.strings.clear_chat_button), click = onClick, textColor = WarningOrange, @@ -454,7 +454,7 @@ fun ClearChatButton(onClick: () -> Unit) { @Composable private fun DeleteContactButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.button_delete_contact), click = onClick, textColor = Color.Red, @@ -465,7 +465,7 @@ private fun DeleteContactButton(onClick: () -> Unit) { @Composable fun ShareAddressButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_share_filled), + painterResource(MR.images.ic_share_filled), stringResource(MR.strings.share_address), onClick, iconColor = MaterialTheme.colors.primary, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt index 97a8da402f..6eebb7901d 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt @@ -13,7 +13,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp @@ -81,11 +81,11 @@ fun ChatItemInfoView(ci: ChatItem, ciInfo: ChatItemInfo, devTools: Boolean) { } if (text != "") { DefaultDropdownMenu(showMenu) { - ItemAction(stringResource(MR.strings.share_verb), painterResource(R.drawable.ic_share), onClick = { + ItemAction(stringResource(MR.strings.share_verb), painterResource(MR.images.ic_share), onClick = { shareText(text) showMenu.value = false }) - ItemAction(stringResource(MR.strings.copy_verb), painterResource(R.drawable.ic_content_copy), onClick = { + ItemAction(stringResource(MR.strings.copy_verb), painterResource(MR.images.ic_content_copy), onClick = { copyText(text) showMenu.value = false }) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatView.kt index 8ffaac1535..6f7b61725c 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ChatView.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight @@ -422,7 +422,7 @@ fun ChatInfoToolbar( val barButtons = arrayListOf<@Composable RowScope.() -> Unit>() val menuItems = arrayListOf<@Composable () -> Unit>() menuItems.add { - ItemAction(stringResource(MR.strings.search_verb).capitalize(Locale.current), painterResource(R.drawable.ic_search), onClick = { + ItemAction(stringResource(MR.strings.search_verb).capitalize(Locale.current), painterResource(MR.images.ic_search), onClick = { showMenu.value = false showSearch = true }) @@ -434,11 +434,11 @@ fun ChatInfoToolbar( showMenu.value = false startCall(CallMediaType.Audio) }) { - Icon(painterResource(R.drawable.ic_call_500), stringResource(MR.strings.icon_descr_more_button), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_call_500), stringResource(MR.strings.icon_descr_more_button), tint = MaterialTheme.colors.primary) } } menuItems.add { - ItemAction(stringResource(MR.strings.icon_descr_video_call).capitalize(Locale.current), painterResource(R.drawable.ic_videocam), onClick = { + ItemAction(stringResource(MR.strings.icon_descr_video_call).capitalize(Locale.current), painterResource(MR.images.ic_videocam), onClick = { showMenu.value = false startCall(CallMediaType.Video) }) @@ -449,7 +449,7 @@ fun ChatInfoToolbar( showMenu.value = false addMembers(chat.chatInfo.groupInfo) }) { - Icon(painterResource(R.drawable.ic_person_add_500), stringResource(MR.strings.icon_descr_add_members), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_person_add_500), stringResource(MR.strings.icon_descr_add_members), tint = MaterialTheme.colors.primary) } } } @@ -457,7 +457,7 @@ fun ChatInfoToolbar( menuItems.add { ItemAction( if (ntfsEnabled.value) stringResource(MR.strings.mute_chat) else stringResource(MR.strings.unmute_chat), - if (ntfsEnabled.value) painterResource(R.drawable.ic_notifications_off) else painterResource(R.drawable.ic_notifications), + if (ntfsEnabled.value) painterResource(MR.images.ic_notifications_off) else painterResource(MR.images.ic_notifications), onClick = { showMenu.value = false // Just to make a delay before changing state of ntfsEnabled, otherwise it will redraw menu item with new value before closing the menu @@ -528,7 +528,7 @@ fun ChatInfoToolbarTitle(cInfo: ChatInfo, imageSize: Dp = 40.dp, iconColor: Colo @Composable private fun ContactVerifiedShield() { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.size(18.dp).padding(end = 3.dp, top = 1.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.size(18.dp).padding(end = 3.dp, top = 1.dp), tint = MaterialTheme.colors.secondary) } data class CIListState(val scrolled: Boolean, val itemCount: Int, val keyboardState: KeyboardState) @@ -830,7 +830,7 @@ fun BoxWithConstraintsScope.FloatingButtons( DefaultDropdownMenu(showDropDown, offset = DpOffset(maxWidth - DEFAULT_PADDING, 24.dp + fabSize)) { ItemAction( generalGetString(MR.strings.mark_read), - painterResource(R.drawable.ic_check), + painterResource(MR.images.ic_check), onClick = { markRead( CC.ItemRange(minUnreadItemId, chatItems[chatItems.size - listState.layoutInfo.visibleItemsInfo.lastIndex - 1].id - 1), @@ -937,7 +937,7 @@ private fun bottomEndFloatingButton( backgroundColor = MaterialTheme.colors.secondaryVariant, ) { Icon( - painter = painterResource(R.drawable.ic_keyboard_arrow_down), + painter = painterResource(MR.images.ic_keyboard_arrow_down), contentDescription = null, tint = MaterialTheme.colors.primary ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeFileView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeFileView.kt index 5b51f74a88..8043b7c8e8 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeFileView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeFileView.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -25,7 +25,7 @@ fun ComposeFileView(fileName: String, cancelFile: () -> Unit, cancelEnabled: Boo verticalAlignment = Alignment.CenterVertically ) { Icon( - painterResource(R.drawable.ic_draft_filled), + painterResource(MR.images.ic_draft_filled), stringResource(MR.strings.icon_descr_file), Modifier .padding(start = 4.dp, end = 2.dp) @@ -37,7 +37,7 @@ fun ComposeFileView(fileName: String, cancelFile: () -> Unit, cancelEnabled: Boo if (cancelEnabled) { IconButton(onClick = cancelFile, modifier = Modifier.padding(0.dp)) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.icon_descr_cancel_file_preview), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(10.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeImageView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeImageView.kt index 14750c04b1..3c36a6e2af 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeImageView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeImageView.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.app.R @@ -45,7 +45,7 @@ fun ComposeImageView(media: ComposePreview.MediaPreview, cancelImages: () -> Uni modifier = Modifier.widthIn(max = 80.dp).height(60.dp) ) Icon( - painterResource(R.drawable.ic_videocam_filled), + painterResource(MR.images.ic_videocam_filled), "preview video", Modifier .size(20.dp), @@ -65,7 +65,7 @@ fun ComposeImageView(media: ComposePreview.MediaPreview, cancelImages: () -> Uni if (cancelEnabled) { IconButton(onClick = cancelImages) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.icon_descr_cancel_image_preview), tint = MaterialTheme.colors.primary, ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeView.kt index a57c2c611b..f0569c6661 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeView.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat @@ -660,10 +660,10 @@ fun ComposeView( fun contextItemView() { when (val contextItem = composeState.value.contextItem) { ComposeContextItem.NoContextItem -> {} - is ComposeContextItem.QuotedItem -> ContextItemView(contextItem.chatItem, painterResource(R.drawable.ic_reply)) { + is ComposeContextItem.QuotedItem -> ContextItemView(contextItem.chatItem, painterResource(MR.images.ic_reply)) { composeState.value = composeState.value.copy(contextItem = ComposeContextItem.NoContextItem) } - is ComposeContextItem.EditingItem -> ContextItemView(contextItem.chatItem, painterResource(R.drawable.ic_edit_filled)) { + is ComposeContextItem.EditingItem -> ContextItemView(contextItem.chatItem, painterResource(MR.images.ic_edit_filled)) { clearState() } } @@ -728,7 +728,7 @@ fun ComposeView( } IconButton(attachmentClicked, enabled = !composeState.value.attachmentDisabled && rememberUpdatedState(chat.userCanSend).value) { Icon( - painterResource(R.drawable.ic_attach_file_filled_500), + painterResource(MR.images.ic_attach_file_filled_500), contentDescription = stringResource(MR.strings.attach), tint = if (!composeState.value.attachmentDisabled && userCanSend.value && !isGroupAndProhibitedFiles) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeVoiceView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeVoiceView.kt index dc293af439..6ea0b345f8 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeVoiceView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ComposeVoiceView.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -58,7 +58,7 @@ fun ComposeVoiceView( enabled = finishedRecording ) { Icon( - if (audioPlaying.value) painterResource(R.drawable.ic_pause_filled) else painterResource(R.drawable.ic_play_arrow_filled), + if (audioPlaying.value) painterResource(MR.images.ic_pause_filled) else painterResource(MR.images.ic_play_arrow_filled), stringResource(MR.strings.icon_descr_file), Modifier .padding(start = 4.dp, end = 2.dp) @@ -90,7 +90,7 @@ fun ComposeVoiceView( modifier = Modifier.padding(0.dp) ) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.icon_descr_cancel_file_preview), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(10.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ContextItemView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ContextItemView.kt index fda4893d47..a92db078c3 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ContextItemView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/ContextItemView.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -59,7 +59,7 @@ fun ContextItemView( } IconButton(onClick = cancelContextItem) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.cancel_verb), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(10.dp) @@ -74,7 +74,7 @@ fun PreviewContextItemView() { SimpleXTheme { ContextItemView( contextItem = ChatItem.getSampleData(1, CIDirection.DirectRcv(), Clock.System.now(), "hello"), - contextIcon = painterResource(R.drawable.ic_edit_filled) + contextIcon = painterResource(MR.images.ic_edit_filled) ) {} } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt index 6565ad2908..4c2bf1ca27 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt @@ -50,6 +50,7 @@ import chat.simplex.app.views.helpers.* import com.google.accompanist.permissions.rememberMultiplePermissionsState import chat.simplex.res.MR import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* import java.lang.reflect.Field @@ -160,7 +161,7 @@ fun SendMsgView( } else -> { val cs = composeState.value - val icon = if (cs.editing || cs.liveMessage != null) painterResource(R.drawable.ic_check_filled) else painterResource(R.drawable.ic_arrow_upward) + val icon = if (cs.editing || cs.liveMessage != null) painterResource(MR.images.ic_check_filled) else painterResource(MR.images.ic_arrow_upward) val disabled = !cs.sendEnabled() || (!allowedVoiceByPrefs && cs.preview is ComposePreview.VoicePreview) || cs.endLiveDisabled @@ -191,7 +192,7 @@ fun SendMsgView( menuItems.add { ItemAction( generalGetString(MR.strings.disappearing_message), - painterResource(R.drawable.ic_timer), + painterResource(MR.images.ic_timer), onClick = { showCustomDisappearingMessageDialog.value = true showDropdown.value = false @@ -281,7 +282,7 @@ private fun CustomDisappearingMessageDialog( color = MaterialTheme.colors.secondary ) Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), generalGetString(MR.strings.icon_descr_close_button), tint = MaterialTheme.colors.secondary, modifier = Modifier @@ -436,7 +437,7 @@ private fun BoxScope.DeleteTextButton(composeState: MutableState) { composeState.value = composeState.value.copy(message = "") }, Modifier.align(Alignment.TopEnd).size(36.dp) ) { - Icon(painterResource(R.drawable.ic_close), null, Modifier.padding(7.dp).size(36.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_close), null, Modifier.padding(7.dp).size(36.dp), tint = MaterialTheme.colors.secondary) } } @@ -493,7 +494,7 @@ private fun RecordVoiceView(recState: MutableState, stopRecOnNex private fun DisallowedVoiceButton(enabled: Boolean, onClick: () -> Unit) { IconButton(onClick, Modifier.size(36.dp), enabled = enabled) { Icon( - painterResource(R.drawable.ic_keyboard_voice), + painterResource(MR.images.ic_keyboard_voice), stringResource(MR.strings.icon_descr_record_voice_message), tint = MaterialTheme.colors.secondary, modifier = Modifier @@ -507,7 +508,7 @@ private fun DisallowedVoiceButton(enabled: Boolean, onClick: () -> Unit) { private fun VoiceButtonWithoutPermission(onClick: () -> Unit) { IconButton(onClick, Modifier.size(36.dp)) { Icon( - painterResource(R.drawable.ic_keyboard_voice_filled), + painterResource(MR.images.ic_keyboard_voice_filled), stringResource(MR.strings.icon_descr_record_voice_message), tint = MaterialTheme.colors.primary, modifier = Modifier @@ -539,7 +540,7 @@ private fun LockToCurrentOrientationUntilDispose() { private fun StopRecordButton(onClick: () -> Unit) { IconButton(onClick, Modifier.size(36.dp)) { Icon( - painterResource(R.drawable.ic_stop_filled), + painterResource(MR.images.ic_stop_filled), stringResource(MR.strings.icon_descr_record_voice_message), tint = MaterialTheme.colors.primary, modifier = Modifier @@ -553,7 +554,7 @@ private fun StopRecordButton(onClick: () -> Unit) { private fun RecordVoiceButton(interactionSource: MutableInteractionSource) { IconButton({}, Modifier.size(36.dp), interactionSource = interactionSource) { Icon( - painterResource(R.drawable.ic_keyboard_voice_filled), + painterResource(MR.images.ic_keyboard_voice_filled), stringResource(MR.strings.icon_descr_record_voice_message), tint = MaterialTheme.colors.primary, modifier = Modifier @@ -574,7 +575,7 @@ private fun CancelLiveMessageButton( ) { IconButton(onClick, Modifier.size(36.dp)) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), stringResource(MR.strings.icon_descr_cancel_live_message), tint = MaterialTheme.colors.primary, modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt index 48b2e80e06..9a122f360b 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt @@ -10,7 +10,7 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp @@ -65,7 +65,7 @@ private fun VerifyCodeLayout( val splitCode = splitToParts(connectionCode, 24) Row(Modifier.fillMaxWidth().padding(bottom = DEFAULT_PADDING_HALF), horizontalArrangement = Arrangement.Center) { if (connectionVerified) { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.padding(end = 4.dp).size(22.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.padding(end = 4.dp).size(22.dp), tint = MaterialTheme.colors.secondary) Text(String.format(stringResource(MR.strings.is_verified), displayName)) } else { Text(String.format(stringResource(MR.strings.is_not_verified), displayName)) @@ -88,7 +88,7 @@ private fun VerifyCodeLayout( } Box(Modifier.weight(1f)) { IconButton({ shareText(connectionCode) }, Modifier.size(20.dp).align(Alignment.CenterStart)) { - Icon(painterResource(R.drawable.ic_share_filled), null, tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_share_filled), null, tint = MaterialTheme.colors.primary) } } Spacer(Modifier.weight(1f)) @@ -104,16 +104,16 @@ private fun VerifyCodeLayout( horizontalArrangement = Arrangement.spacedBy(10.dp) ) { if (connectionVerified) { - SimpleButton(generalGetString(MR.strings.clear_verification), painterResource(R.drawable.ic_shield)) { + SimpleButton(generalGetString(MR.strings.clear_verification), painterResource(MR.images.ic_shield)) { verifyCode(null) {} } } else { - SimpleButton(generalGetString(MR.strings.scan_code), painterResource(R.drawable.ic_qr_code)) { + SimpleButton(generalGetString(MR.strings.scan_code), painterResource(MR.images.ic_qr_code)) { ModalManager.shared.showModal { ScanCodeView(verifyCode) { } } } - SimpleButton(generalGetString(MR.strings.mark_code_verified), painterResource(R.drawable.ic_verified_user)) { + SimpleButton(generalGetString(MR.strings.mark_code_verified), painterResource(MR.images.ic_verified_user)) { verifyCode(connectionCode) { verified -> if (!verified) { AlertManager.shared.showAlertMsg( diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt index 764621f4a1..555d6c4a2e 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalView -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextOverflow @@ -180,7 +180,7 @@ private fun SearchRowView( selectedContactsSize: Int ) { Box(Modifier.width(36.dp), contentAlignment = Alignment.Center) { - Icon(painterResource(R.drawable.ic_search), stringResource(MR.strings.search_verb), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_search), stringResource(MR.strings.search_verb), tint = MaterialTheme.colors.secondary) } Spacer(Modifier.width(DEFAULT_SPACE_AFTER_ICON)) SearchTextField(Modifier.fillMaxWidth(), searchText = searchText, alwaysVisible = true) { @@ -214,7 +214,7 @@ private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState Unit, disabled: Boolean) { SettingsActionItem( - painterResource(R.drawable.ic_check), + painterResource(MR.images.ic_check), stringResource(MR.strings.invite_to_group_button), click = onClick, textColor = MaterialTheme.colors.primary, @@ -226,7 +226,7 @@ fun InviteMembersButton(onClick: () -> Unit, disabled: Boolean) { @Composable fun SkipInvitingButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_check), + painterResource(MR.images.ic_check), stringResource(MR.strings.skip_inviting_button), click = onClick, textColor = MaterialTheme.colors.primary, @@ -299,13 +299,13 @@ fun ContactCheckRow( val icon: Painter val iconColor: Color if (prohibitedToInviteIncognito) { - icon = painterResource(R.drawable.ic_theater_comedy_filled) + icon = painterResource(MR.images.ic_theater_comedy_filled) iconColor = MaterialTheme.colors.secondary } else if (checked) { - icon = painterResource(R.drawable.ic_check_circle_filled) + icon = painterResource(MR.images.ic_check_circle_filled) iconColor = if (enabled) MaterialTheme.colors.primary else MaterialTheme.colors.secondary } else { - icon = painterResource(R.drawable.ic_circle) + icon = painterResource(MR.images.ic_circle) iconColor = MaterialTheme.colors.secondary } SectionItemView( diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt index b5b972b959..a2c8d21684 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt @@ -17,7 +17,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.TextFieldValue @@ -260,7 +260,7 @@ private fun GroupChatInfoHeader(cInfo: ChatInfo) { @Composable private fun GroupPreferencesButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_toggle_on), + painterResource(MR.images.ic_toggle_on), stringResource(MR.strings.group_preferences), click = onClick ) @@ -269,7 +269,7 @@ private fun GroupPreferencesButton(onClick: () -> Unit) { @Composable private fun AddMembersButton(tint: Color = MaterialTheme.colors.primary, onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_add), + painterResource(MR.images.ic_add), stringResource(MR.strings.button_add_members), onClick, iconColor = tint, @@ -333,13 +333,13 @@ private fun MemberRow(member: GroupMember, user: Boolean = false) { @Composable private fun MemberVerifiedShield() { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.padding(end = 3.dp).size(16.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.padding(end = 3.dp).size(16.dp), tint = MaterialTheme.colors.secondary) } @Composable private fun GroupLinkButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_link), + painterResource(MR.images.ic_link), stringResource(MR.strings.group_link), onClick, iconColor = MaterialTheme.colors.secondary @@ -349,7 +349,7 @@ private fun GroupLinkButton(onClick: () -> Unit) { @Composable private fun CreateGroupLinkButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_add_link), + painterResource(MR.images.ic_add_link), stringResource(MR.strings.create_group_link), onClick, iconColor = MaterialTheme.colors.secondary @@ -359,7 +359,7 @@ private fun CreateGroupLinkButton(onClick: () -> Unit) { @Composable fun EditGroupProfileButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_edit), + painterResource(MR.images.ic_edit), stringResource(MR.strings.button_edit_group_profile), onClick, iconColor = MaterialTheme.colors.secondary @@ -374,7 +374,7 @@ private fun AddOrEditWelcomeMessage(welcomeMessage: String?, onClick: () -> Unit stringResource(MR.strings.button_welcome_message) } SettingsActionItem( - painterResource(R.drawable.ic_maps_ugc), + painterResource(MR.images.ic_maps_ugc), text, onClick, iconColor = MaterialTheme.colors.secondary @@ -384,7 +384,7 @@ private fun AddOrEditWelcomeMessage(welcomeMessage: String?, onClick: () -> Unit @Composable private fun LeaveGroupButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_logout), + painterResource(MR.images.ic_logout), stringResource(MR.strings.button_leave_group), onClick, iconColor = Color.Red, @@ -395,7 +395,7 @@ private fun LeaveGroupButton(onClick: () -> Unit) { @Composable private fun DeleteGroupButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.button_delete_group), onClick, iconColor = Color.Red, @@ -408,7 +408,7 @@ private fun SearchRowView( searchText: MutableState = rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue()) } ) { Box(Modifier.width(36.dp), contentAlignment = Alignment.Center) { - Icon(painterResource(R.drawable.ic_search), stringResource(MR.strings.search_verb), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_search), stringResource(MR.strings.search_verb), tint = MaterialTheme.colors.secondary) } Spacer(Modifier.width(14.dp)) SearchTextField(Modifier.fillMaxWidth(), searchText = searchText, alwaysVisible = true) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt index f473ac4cbd..025251cd8b 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -113,7 +113,7 @@ fun GroupLinkLayout( verticalArrangement = Arrangement.SpaceEvenly ) { if (groupLink == null) { - SimpleButton(stringResource(MR.strings.button_create_group_link), icon = painterResource(R.drawable.ic_add_link), disabled = creatingLink, click = createLink) + SimpleButton(stringResource(MR.strings.button_create_group_link), icon = painterResource(MR.images.ic_add_link), disabled = creatingLink, click = createLink) } else { RoleSelectionRow(groupInfo, groupLinkMemberRole) var initialLaunch by remember { mutableStateOf(true) } @@ -131,12 +131,12 @@ fun GroupLinkLayout( ) { SimpleButton( stringResource(MR.strings.share_link), - icon = painterResource(R.drawable.ic_share), + icon = painterResource(MR.images.ic_share), click = share ) SimpleButton( stringResource(MR.strings.delete_link), - icon = painterResource(R.drawable.ic_delete), + icon = painterResource(MR.images.ic_delete), color = Color.Red, click = deleteLink ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt index a9a29f011d..8c17466312 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -301,7 +301,7 @@ fun GroupMemberInfoHeader(member: GroupMember) { ProfileImage(size = 192.dp, member.image, color = if (isInDarkTheme()) GroupDark else SettingsSecondaryLight) Row(verticalAlignment = Alignment.CenterVertically) { if (member.verified) { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.padding(end = 6.dp, top = 4.dp).size(24.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.padding(end = 6.dp, top = 4.dp).size(24.dp), tint = MaterialTheme.colors.secondary) } Text( member.displayName, style = MaterialTheme.typography.h1.copy(fontWeight = FontWeight.Normal), @@ -324,7 +324,7 @@ fun GroupMemberInfoHeader(member: GroupMember) { @Composable fun RemoveMemberButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.button_remove_member), click = onClick, textColor = Color.Red, @@ -335,7 +335,7 @@ fun RemoveMemberButton(onClick: () -> Unit) { @Composable fun OpenChatButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_chat), + painterResource(MR.images.ic_chat), stringResource(MR.strings.button_send_direct_message), click = onClick, textColor = MaterialTheme.colors.primary, @@ -346,7 +346,7 @@ fun OpenChatButton(onClick: () -> Unit) { @Composable fun ConnectViaAddressButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_link), + painterResource(MR.images.ic_link), stringResource(MR.strings.connect_button), click = onClick, textColor = MaterialTheme.colors.primary, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt index 8875b61dfc..7cd7c9ca38 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -141,7 +141,7 @@ private fun SaveButton(save: () -> Unit, disabled: Boolean) { private fun ChangeModeButton(editMode: Boolean, click: () -> Unit, disabled: Boolean) { SectionItemView(click, disabled = disabled) { Icon( - painterResource(if (editMode) R.drawable.ic_visibility else R.drawable.ic_edit), + painterResource(if (editMode) MR.images.ic_visibility else MR.images.ic_edit), contentDescription = generalGetString(MR.strings.edit_verb), tint = if (disabled) MaterialTheme.colors.secondary else MaterialTheme.colors.primary, ) @@ -157,7 +157,7 @@ private fun ChangeModeButton(editMode: Boolean, click: () -> Unit, disabled: Boo private fun CopyTextButton(click: () -> Unit) { SectionItemView(click) { Icon( - painterResource(R.drawable.ic_content_copy), + painterResource(MR.images.ic_content_copy), contentDescription = generalGetString(MR.strings.copy_verb), tint = MaterialTheme.colors.primary, ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt index 12d2b9e5e5..b2f2245d23 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -22,20 +22,20 @@ fun CICallItemView(cInfo: ChatInfo, cItem: ChatItem, status: CICallStatus, durat Modifier .padding(horizontal = 4.dp) .padding(bottom = 8.dp), horizontalAlignment = Alignment.CenterHorizontally) { - @Composable fun ConnectingCallIcon() = Icon(painterResource(R.drawable.ic_settings_phone), stringResource(MR.strings.icon_descr_call_connecting), tint = SimplexGreen) + @Composable fun ConnectingCallIcon() = Icon(painterResource(MR.images.ic_settings_phone), stringResource(MR.strings.icon_descr_call_connecting), tint = SimplexGreen) when (status) { CICallStatus.Pending -> if (sent) { - Icon(painterResource(R.drawable.ic_call), stringResource(MR.strings.icon_descr_call_pending_sent)) + Icon(painterResource(MR.images.ic_call), stringResource(MR.strings.icon_descr_call_pending_sent)) } else { AcceptCallButton(cInfo, acceptCall) } - CICallStatus.Missed -> Icon(painterResource(R.drawable.ic_call), stringResource(MR.strings.icon_descr_call_missed), tint = Color.Red) - CICallStatus.Rejected -> Icon(painterResource(R.drawable.ic_call_end), stringResource(MR.strings.icon_descr_call_rejected), tint = Color.Red) + CICallStatus.Missed -> Icon(painterResource(MR.images.ic_call), stringResource(MR.strings.icon_descr_call_missed), tint = Color.Red) + CICallStatus.Rejected -> Icon(painterResource(MR.images.ic_call_end), stringResource(MR.strings.icon_descr_call_rejected), tint = Color.Red) CICallStatus.Accepted -> ConnectingCallIcon() CICallStatus.Negotiated -> ConnectingCallIcon() - CICallStatus.Progress -> Icon(painterResource(R.drawable.ic_phone_in_talk_filled), stringResource(MR.strings.icon_descr_call_progress), tint = SimplexGreen) + CICallStatus.Progress -> Icon(painterResource(MR.images.ic_phone_in_talk_filled), stringResource(MR.strings.icon_descr_call_progress), tint = SimplexGreen) CICallStatus.Ended -> Row { - Icon(painterResource(R.drawable.ic_call_end), stringResource(MR.strings.icon_descr_call_ended), tint = MaterialTheme.colors.secondary, modifier = Modifier.padding(end = 4.dp)) + Icon(painterResource(MR.images.ic_call_end), stringResource(MR.strings.icon_descr_call_ended), tint = MaterialTheme.colors.secondary, modifier = Modifier.padding(end = 4.dp)) Text(durationText(duration), color = MaterialTheme.colors.secondary) } CICallStatus.Error -> {} @@ -53,9 +53,9 @@ fun CICallItemView(cInfo: ChatInfo, cItem: ChatItem, status: CICallStatus, durat @Composable fun AcceptCallButton(cInfo: ChatInfo, acceptCall: (Contact) -> Unit) { if (cInfo is ChatInfo.Direct) { - SimpleButton(stringResource(MR.strings.answer_call), painterResource(R.drawable.ic_ring_volume)) { acceptCall(cInfo.contact) } + SimpleButton(stringResource(MR.strings.answer_call), painterResource(MR.images.ic_ring_volume)) { acceptCall(cInfo.contact) } } else { - Icon(painterResource(R.drawable.ic_ring_volume), stringResource(MR.strings.answer_call), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_ring_volume), stringResource(MR.strings.answer_call), tint = MaterialTheme.colors.secondary) } // if case let .direct(contact) = chatInfo { // Button { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt index ac2491f88e..7c9e49766b 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.* import androidx.compose.ui.unit.dp @@ -44,7 +44,7 @@ fun CIFileView( contentAlignment = Alignment.Center ) { Icon( - painterResource(R.drawable.ic_draft_filled), + painterResource(MR.images.ic_draft_filled), stringResource(MR.strings.icon_descr_file), Modifier.fillMaxSize(), tint = color @@ -152,15 +152,15 @@ fun CIFileView( FileProtocol.XFTP -> progressCircle(file.fileStatus.sndProgress, file.fileStatus.sndTotal) FileProtocol.SMP -> progressIndicator() } - is CIFileStatus.SndComplete -> fileIcon(innerIcon = painterResource(R.drawable.ic_check_filled)) - is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(R.drawable.ic_close)) - is CIFileStatus.SndError -> fileIcon(innerIcon = painterResource(R.drawable.ic_close)) + is CIFileStatus.SndComplete -> fileIcon(innerIcon = painterResource(MR.images.ic_check_filled)) + is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) + is CIFileStatus.SndError -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) is CIFileStatus.RcvInvitation -> if (fileSizeValid()) - fileIcon(innerIcon = painterResource(R.drawable.ic_arrow_downward), color = MaterialTheme.colors.primary) + fileIcon(innerIcon = painterResource(MR.images.ic_arrow_downward), color = MaterialTheme.colors.primary) else - fileIcon(innerIcon = painterResource(R.drawable.ic_priority_high), color = WarningOrange) - is CIFileStatus.RcvAccepted -> fileIcon(innerIcon = painterResource(R.drawable.ic_more_horiz)) + fileIcon(innerIcon = painterResource(MR.images.ic_priority_high), color = WarningOrange) + is CIFileStatus.RcvAccepted -> fileIcon(innerIcon = painterResource(MR.images.ic_more_horiz)) is CIFileStatus.RcvTransfer -> if (file.fileProtocol == FileProtocol.XFTP && file.fileStatus.rcvProgress < file.fileStatus.rcvTotal) { progressCircle(file.fileStatus.rcvProgress, file.fileStatus.rcvTotal) @@ -168,8 +168,8 @@ fun CIFileView( progressIndicator() } is CIFileStatus.RcvComplete -> fileIcon() - is CIFileStatus.RcvCancelled -> fileIcon(innerIcon = painterResource(R.drawable.ic_close)) - is CIFileStatus.RcvError -> fileIcon(innerIcon = painterResource(R.drawable.ic_close)) + is CIFileStatus.RcvCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) + is CIFileStatus.RcvError -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) } } else { fileIcon() diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt index 6a0e07619a..d66dc4ae23 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt @@ -44,7 +44,7 @@ fun CIGroupInvitationView( .padding(vertical = 4.dp) .padding(end = 2.dp) ) { - ProfileImage(size = 60.dp, image = groupInvitation.groupProfile.image, icon = R.drawable.ic_supervised_user_circle_filled, color = iconColor) + ProfileImage(size = 60.dp, image = groupInvitation.groupProfile.image, icon = MR.images.ic_supervised_user_circle_filled, color = iconColor) Spacer(Modifier.padding(horizontal = 3.dp)) Column( Modifier.defaultMinSize(minHeight = 60.dp), diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIImageView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIImageView.kt index b5933c9d35..642757f271 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIImageView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIImageView.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.layoutId import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -78,14 +78,14 @@ fun CIImageView( FileProtocol.SMP -> {} } is CIFileStatus.SndTransfer -> progressIndicator() - is CIFileStatus.SndComplete -> fileIcon(painterResource(R.drawable.ic_check_filled), MR.strings.icon_descr_image_snd_complete) - is CIFileStatus.SndCancelled -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.SndError -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.RcvInvitation -> fileIcon(painterResource(R.drawable.ic_arrow_downward), MR.strings.icon_descr_asked_to_receive) - is CIFileStatus.RcvAccepted -> fileIcon(painterResource(R.drawable.ic_more_horiz), MR.strings.icon_descr_waiting_for_image) + is CIFileStatus.SndComplete -> fileIcon(painterResource(MR.images.ic_check_filled), MR.strings.icon_descr_image_snd_complete) + is CIFileStatus.SndCancelled -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.SndError -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvInvitation -> fileIcon(painterResource(MR.images.ic_arrow_downward), MR.strings.icon_descr_asked_to_receive) + is CIFileStatus.RcvAccepted -> fileIcon(painterResource(MR.images.ic_more_horiz), MR.strings.icon_descr_waiting_for_image) is CIFileStatus.RcvTransfer -> progressIndicator() - is CIFileStatus.RcvCancelled -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.RcvError -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvCancelled -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvError -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) else -> {} } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIInvalidJSONView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIInvalidJSONView.kt index d1aad7c297..64111ee4ea 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIInvalidJSONView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIInvalidJSONView.kt @@ -7,7 +7,7 @@ import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp @@ -32,7 +32,7 @@ fun InvalidJSONView(json: String) { Column { Spacer(Modifier.height(DEFAULT_PADDING)) SectionView { - SettingsActionItem(painterResource(R.drawable.ic_share), generalGetString(MR.strings.share_verb), click = { + SettingsActionItem(painterResource(MR.images.ic_share), generalGetString(MR.strings.share_verb), click = { shareText(json) }) } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt index eace6bed88..9404b24369 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt @@ -3,8 +3,7 @@ package chat.simplex.app.views.chat.item import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.res.painterResource -import chat.simplex.app.R +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -15,6 +14,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.app.model.* import chat.simplex.app.ui.theme.CurrentColors +import chat.simplex.res.MR import kotlinx.datetime.Clock @Composable @@ -37,11 +37,11 @@ fun CIMetaView(chatItem: ChatItem, timedMessagesTTL: Int?, metaColor: Color = Ma // changing this function requires updating reserveSpaceForMeta private fun CIMetaText(meta: CIMeta, chatTTL: Int?, color: Color) { if (meta.itemEdited) { - StatusIconText(painterResource(R.drawable.ic_edit), color) + StatusIconText(painterResource(MR.images.ic_edit), color) Spacer(Modifier.width(3.dp)) } if (meta.disappearing) { - StatusIconText(painterResource(R.drawable.ic_timer), color) + StatusIconText(painterResource(MR.images.ic_timer), color) val ttl = meta.itemTimed?.ttl if (ttl != chatTTL) { Text(shortTimeText(ttl), color = color, fontSize = 12.sp) @@ -54,7 +54,7 @@ private fun CIMetaText(meta: CIMeta, chatTTL: Int?, color: Color) { StatusIconText(painterResource(icon), statusColor) Spacer(Modifier.width(4.dp)) } else if (!meta.disappearing) { - StatusIconText(painterResource(R.drawable.ic_circle_filled), Color.Transparent) + StatusIconText(painterResource(MR.images.ic_circle_filled), Color.Transparent) Spacer(Modifier.width(4.dp)) } Text(meta.timestampText, color = color, fontSize = 12.sp, maxLines = 1, overflow = TextOverflow.Ellipsis) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVideoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVideoView.kt index 71f27a40c4..f6123e7bed 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVideoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVideoView.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.* import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.* import androidx.compose.ui.viewinterop.AndroidView @@ -162,7 +162,7 @@ private fun BoxScope.PlayButton(error: Boolean = false, onLongClick: () -> Unit, contentAlignment = Alignment.Center ) { Icon( - painterResource(R.drawable.ic_play_arrow_filled), + painterResource(MR.images.ic_play_arrow_filled), contentDescription = null, tint = if (error) WarningOrange else Color.White ) @@ -190,7 +190,7 @@ private fun DurationProgress(file: CIFile, playing: MutableState, durat color = Color.White ) /*if (!soundEnabled.value) { - Icon(painterResource(R.drawable.ic_volume_off_filled), null, + Icon(painterResource(MR.images.ic_volume_off_filled), null, Modifier.padding(start = 5.dp).size(10.dp), tint = Color.White ) @@ -296,19 +296,19 @@ private fun loadingIndicator(file: CIFile?) { FileProtocol.XFTP -> progressCircle(file.fileStatus.sndProgress, file.fileStatus.sndTotal) FileProtocol.SMP -> progressIndicator() } - is CIFileStatus.SndComplete -> fileIcon(painterResource(R.drawable.ic_check_filled), MR.strings.icon_descr_video_snd_complete) - is CIFileStatus.SndCancelled -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.SndError -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.RcvInvitation -> fileIcon(painterResource(R.drawable.ic_arrow_downward), MR.strings.icon_descr_video_asked_to_receive) - is CIFileStatus.RcvAccepted -> fileIcon(painterResource(R.drawable.ic_more_horiz), MR.strings.icon_descr_waiting_for_video) + is CIFileStatus.SndComplete -> fileIcon(painterResource(MR.images.ic_check_filled), MR.strings.icon_descr_video_snd_complete) + is CIFileStatus.SndCancelled -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.SndError -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvInvitation -> fileIcon(painterResource(MR.images.ic_arrow_downward), MR.strings.icon_descr_video_asked_to_receive) + is CIFileStatus.RcvAccepted -> fileIcon(painterResource(MR.images.ic_more_horiz), MR.strings.icon_descr_waiting_for_video) is CIFileStatus.RcvTransfer -> if (file.fileProtocol == FileProtocol.XFTP && file.fileStatus.rcvProgress < file.fileStatus.rcvTotal) { progressCircle(file.fileStatus.rcvProgress, file.fileStatus.rcvTotal) } else { progressIndicator() } - is CIFileStatus.RcvCancelled -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) - is CIFileStatus.RcvError -> fileIcon(painterResource(R.drawable.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvCancelled -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) + is CIFileStatus.RcvError -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) else -> {} } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVoiceView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVoiceView.kt index 840ba7b03f..8d331c2276 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVoiceView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/CIVoiceView.kt @@ -1,6 +1,5 @@ package chat.simplex.app.views.chat.item -import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CornerSize @@ -16,12 +15,12 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.* -import chat.simplex.app.R import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.* +import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.flow.distinctUntilChanged // TODO refactor https://github.com/simplex-chat/simplex-chat/pull/1451#discussion_r1033429901 @@ -226,7 +225,7 @@ private fun PlayPauseButton( contentAlignment = Alignment.Center ) { Icon( - if (audioPlaying) painterResource(R.drawable.ic_pause_filled) else painterResource(R.drawable.ic_play_arrow_filled), + if (audioPlaying) painterResource(MR.images.ic_pause_filled) else painterResource(MR.images.ic_play_arrow_filled), contentDescription = null, Modifier.size(36.dp), tint = if (error) WarningOrange else if (!enabled) MaterialTheme.colors.secondary else MaterialTheme.colors.primary @@ -256,7 +255,7 @@ private fun VoiceMsgIndicator( if (hasText) { IconButton({ if (!audioPlaying) play() else pause() }, Modifier.size(56.dp).drawRingModifier(angle, strokeColor, strokeWidth)) { Icon( - if (audioPlaying) painterResource(R.drawable.ic_pause_filled) else painterResource(R.drawable.ic_play_arrow_filled), + if (audioPlaying) painterResource(MR.images.ic_pause_filled) else painterResource(MR.images.ic_play_arrow_filled), contentDescription = null, Modifier.size(36.dp), tint = MaterialTheme.colors.primary diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt index 6f4946064f..93a4670dfe 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview @@ -164,7 +164,7 @@ fun ChatItemView( MsgReactionsMenu() } if (cItem.meta.itemDeleted == null && !live) { - ItemAction(stringResource(MR.strings.reply_verb), painterResource(R.drawable.ic_reply), onClick = { + ItemAction(stringResource(MR.strings.reply_verb), painterResource(MR.images.ic_reply), onClick = { if (composeState.value.editing) { composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews) } else { @@ -173,7 +173,7 @@ fun ChatItemView( showMenu.value = false }) } - ItemAction(stringResource(MR.strings.share_verb), painterResource(R.drawable.ic_share), onClick = { + ItemAction(stringResource(MR.strings.share_verb), painterResource(MR.images.ic_share), onClick = { val filePath = getLoadedFilePath(cItem.file) when { filePath != null -> shareFile(cItem.text, filePath) @@ -181,7 +181,7 @@ fun ChatItemView( } showMenu.value = false }) - ItemAction(stringResource(MR.strings.copy_verb), painterResource(R.drawable.ic_content_copy), onClick = { + ItemAction(stringResource(MR.strings.copy_verb), painterResource(MR.images.ic_content_copy), onClick = { copyText(cItem.content.text) showMenu.value = false }) @@ -189,7 +189,7 @@ fun ChatItemView( val filePath = getLoadedFilePath(cItem.file) if (filePath != null) { val writePermissionState = rememberPermissionState(permission = Manifest.permission.WRITE_EXTERNAL_STORAGE) - ItemAction(stringResource(MR.strings.save_verb), painterResource(R.drawable.ic_download), onClick = { + ItemAction(stringResource(MR.strings.save_verb), painterResource(MR.images.ic_download), onClick = { when (cItem.content.msgContent) { is MsgContent.MCImage -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R || writePermissionState.hasPermission) { @@ -206,7 +206,7 @@ fun ChatItemView( } } if (cItem.meta.editable && cItem.content.msgContent !is MsgContent.MCVoice && !live) { - ItemAction(stringResource(MR.strings.edit_verb), painterResource(R.drawable.ic_edit_filled), onClick = { + ItemAction(stringResource(MR.strings.edit_verb), painterResource(MR.images.ic_edit_filled), onClick = { composeState.value = ComposeState(editingItem = cItem, useLinkPreviews = useLinkPreviews) showMenu.value = false }) @@ -214,7 +214,7 @@ fun ChatItemView( if (cItem.meta.itemDeleted != null && revealed.value) { ItemAction( stringResource(MR.strings.hide_verb), - painterResource(R.drawable.ic_visibility_off), + painterResource(MR.images.ic_visibility_off), onClick = { revealed.value = false showMenu.value = false @@ -241,7 +241,7 @@ fun ChatItemView( if (!cItem.isDeletedContent) { ItemAction( stringResource(MR.strings.reveal_verb), - painterResource(R.drawable.ic_visibility), + painterResource(MR.images.ic_visibility), onClick = { revealed.value = true showMenu.value = false @@ -342,7 +342,7 @@ fun CancelFileItemAction( ) { ItemAction( stringResource(cancelAction.uiActionId), - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), onClick = { showMenu.value = false cancelFileAlertDialog(fileId, cancelFile = cancelFile, cancelAction = cancelAction) @@ -360,7 +360,7 @@ fun ItemInfoAction( ) { ItemAction( stringResource(MR.strings.info_menu), - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), onClick = { showItemDetails(cInfo, cItem) showMenu.value = false @@ -378,7 +378,7 @@ fun DeleteItemAction( ) { ItemAction( stringResource(MR.strings.delete_verb), - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), onClick = { showMenu.value = false deleteMessageAlertDialog(cItem, questionText, deleteMessage = deleteMessage) @@ -396,7 +396,7 @@ fun ModerateItemAction( ) { ItemAction( stringResource(MR.strings.moderate_verb), - painterResource(R.drawable.ic_flag), + painterResource(MR.images.ic_flag), onClick = { showMenu.value = false moderateMessageAlertDialog(cItem, questionText, deleteMessage = deleteMessage) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/FramedItemView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/FramedItemView.kt index 52044a87f8..6dc7920235 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chat/item/FramedItemView.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.* import androidx.compose.ui.platform.UriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontStyle @@ -141,7 +141,7 @@ fun FramedItemView( ciQuotedMsgView(qi) } Icon( - if (qi.content is MsgContent.MCFile) painterResource(R.drawable.ic_draft_filled) else painterResource(R.drawable.ic_mic_filled), + if (qi.content is MsgContent.MCFile) painterResource(MR.images.ic_draft_filled) else painterResource(MR.images.ic_mic_filled), if (qi.content is MsgContent.MCFile) stringResource(MR.strings.icon_descr_file) else stringResource(MR.strings.voice_message), Modifier .padding(top = 6.dp, end = 4.dp) @@ -182,9 +182,9 @@ fun FramedItemView( PriorityLayout(Modifier, CHAT_IMAGE_LAYOUT_ID) { if (ci.meta.itemDeleted != null) { if (ci.meta.itemDeleted is CIDeleted.Moderated) { - FramedItemHeader(String.format(stringResource(MR.strings.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName), true, painterResource(R.drawable.ic_flag)) + FramedItemHeader(String.format(stringResource(MR.strings.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName), true, painterResource(MR.images.ic_flag)) } else { - FramedItemHeader(stringResource(MR.strings.marked_deleted_description), true, painterResource(R.drawable.ic_delete)) + FramedItemHeader(stringResource(MR.strings.marked_deleted_description), true, painterResource(MR.images.ic_delete)) } } else if (ci.meta.isLive) { FramedItemHeader(stringResource(MR.strings.live), false) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt index 20a3ef44ed..94f9632080 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt @@ -4,7 +4,7 @@ import android.content.res.Configuration import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -46,7 +46,7 @@ fun ChatHelpView(addContact: (() -> Unit)? = null) { ) { Text(stringResource(MR.strings.chat_help_tap_button)) Icon( - painterResource(R.drawable.ic_person_add), + painterResource(MR.images.ic_person_add), stringResource(MR.strings.add_contact), modifier = if (addContact != null) Modifier.clickable(onClick = addContact) else Modifier, ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt index 46a0bd1866..4f3294706b 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt @@ -9,14 +9,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import chat.simplex.app.R import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.chat.* @@ -192,7 +191,7 @@ fun GroupMenuItems(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, showM fun MarkReadChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.mark_read), - painterResource(R.drawable.ic_check), + painterResource(MR.images.ic_check), onClick = { markChatRead(chat, chatModel) chatModel.controller.ntfManager.cancelNotificationsForChat(chat.id) @@ -205,7 +204,7 @@ fun MarkReadChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState< fun MarkUnreadChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.mark_unread), - painterResource(R.drawable.ic_mark_chat_unread), + painterResource(MR.images.ic_mark_chat_unread), onClick = { markChatUnread(chat, chatModel) showMenu.value = false @@ -217,7 +216,7 @@ fun MarkUnreadChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableStat fun ToggleFavoritesChatAction(chat: Chat, chatModel: ChatModel, favorite: Boolean, showMenu: MutableState) { ItemAction( if (favorite) stringResource(MR.strings.unfavorite_chat) else stringResource(MR.strings.favorite_chat), - if (favorite) painterResource(R.drawable.ic_star_off) else painterResource(R.drawable.ic_star), + if (favorite) painterResource(MR.images.ic_star_off) else painterResource(MR.images.ic_star), onClick = { toggleChatFavorite(chat, !favorite, chatModel) showMenu.value = false @@ -229,7 +228,7 @@ fun ToggleFavoritesChatAction(chat: Chat, chatModel: ChatModel, favorite: Boolea fun ToggleNotificationsChatAction(chat: Chat, chatModel: ChatModel, ntfsEnabled: Boolean, showMenu: MutableState) { ItemAction( if (ntfsEnabled) stringResource(MR.strings.mute_chat) else stringResource(MR.strings.unmute_chat), - if (ntfsEnabled) painterResource(R.drawable.ic_notifications_off) else painterResource(R.drawable.ic_notifications), + if (ntfsEnabled) painterResource(MR.images.ic_notifications_off) else painterResource(MR.images.ic_notifications), onClick = { toggleNotifications(chat, !ntfsEnabled, chatModel) showMenu.value = false @@ -241,7 +240,7 @@ fun ToggleNotificationsChatAction(chat: Chat, chatModel: ChatModel, ntfsEnabled: fun ClearChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.clear_chat_menu_action), - painterResource(R.drawable.ic_settings_backup_restore), + painterResource(MR.images.ic_settings_backup_restore), onClick = { clearChatDialog(chat.chatInfo, chatModel) showMenu.value = false @@ -254,7 +253,7 @@ fun ClearChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.delete_contact_menu_action), - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), onClick = { deleteContactDialog(chat.chatInfo, chatModel) showMenu.value = false @@ -267,7 +266,7 @@ fun DeleteContactAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState fun DeleteGroupAction(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.delete_group_menu_action), - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), onClick = { deleteGroupDialog(chat.chatInfo, groupInfo, chatModel) showMenu.value = false @@ -281,7 +280,7 @@ fun JoinGroupAction(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, show val joinGroup: () -> Unit = { withApi { chatModel.controller.apiJoinGroup(groupInfo.groupId) } } ItemAction( if (chat.chatInfo.incognito) stringResource(MR.strings.join_group_incognito_button) else stringResource(MR.strings.join_group_button), - if (chat.chatInfo.incognito) painterResource(R.drawable.ic_theater_comedy_filled) else painterResource(R.drawable.ic_login), + if (chat.chatInfo.incognito) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_login), color = if (chat.chatInfo.incognito) Indigo else MaterialTheme.colors.onBackground, onClick = { joinGroup() @@ -294,7 +293,7 @@ fun JoinGroupAction(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, show fun LeaveGroupAction(groupInfo: GroupInfo, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.leave_group_button), - painterResource(R.drawable.ic_logout), + painterResource(MR.images.ic_logout), onClick = { leaveGroupDialog(groupInfo, chatModel) showMenu.value = false @@ -307,7 +306,7 @@ fun LeaveGroupAction(groupInfo: GroupInfo, chatModel: ChatModel, showMenu: Mutab fun ContactRequestMenuItems(chatInfo: ChatInfo.ContactRequest, chatModel: ChatModel, showMenu: MutableState) { ItemAction( if (chatModel.incognito.value) stringResource(MR.strings.accept_contact_incognito_button) else stringResource(MR.strings.accept_contact_button), - if (chatModel.incognito.value) painterResource(R.drawable.ic_theater_comedy_filled) else painterResource(R.drawable.ic_check), + if (chatModel.incognito.value) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_check), color = if (chatModel.incognito.value) Indigo else MaterialTheme.colors.onBackground, onClick = { acceptContactRequest(chatInfo.apiId, chatInfo, true, chatModel) @@ -316,7 +315,7 @@ fun ContactRequestMenuItems(chatInfo: ChatInfo.ContactRequest, chatModel: ChatMo ) ItemAction( stringResource(MR.strings.reject_contact_button), - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), onClick = { rejectContactRequest(chatInfo, chatModel) showMenu.value = false @@ -329,7 +328,7 @@ fun ContactRequestMenuItems(chatInfo: ChatInfo.ContactRequest, chatModel: ChatMo fun ContactConnectionMenuItems(chatInfo: ChatInfo.ContactConnection, chatModel: ChatModel, showMenu: MutableState) { ItemAction( stringResource(MR.strings.set_contact_name), - painterResource(R.drawable.ic_edit), + painterResource(MR.images.ic_edit), onClick = { ModalManager.shared.showModalCloseable(true) { close -> ContactConnectionInfoView(chatModel, chatInfo.contactConnection.connReqInv, chatInfo.contactConnection, true, close) @@ -339,7 +338,7 @@ fun ContactConnectionMenuItems(chatInfo: ChatInfo.ContactConnection, chatModel: ) ItemAction( stringResource(MR.strings.delete_verb), - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), onClick = { deleteContactConnectionAlert(chatInfo.contactConnection, chatModel) {} showMenu.value = false @@ -351,7 +350,7 @@ fun ContactConnectionMenuItems(chatInfo: ChatInfo.ContactConnection, chatModel: @Composable private fun InvalidDataView() { Row { - ProfileImage(72.dp, null, R.drawable.ic_account_circle_filled, MaterialTheme.colors.secondary) + ProfileImage(72.dp, null, MR.images.ic_account_circle_filled, MaterialTheme.colors.secondary) Column( modifier = Modifier .padding(horizontal = 8.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index 11db16e9d6..3d93cab587 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -13,16 +13,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.* import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.intl.Locale -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.* -import androidx.fragment.app.FragmentActivity import chat.simplex.app.* -import chat.simplex.app.R import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.* @@ -89,7 +86,7 @@ fun ChatListView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, stopped: backgroundColor = if (!stopped) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, contentColor = Color.White ) { - Icon(if (!newChatSheetState.collectAsState().value.isVisible()) painterResource(R.drawable.ic_edit_filled) else painterResource(R.drawable.ic_close), stringResource(MR.strings.add_contact_or_create_group)) + Icon(if (!newChatSheetState.collectAsState().value.isVisible()) painterResource(MR.images.ic_edit_filled) else painterResource(MR.images.ic_close), stringResource(MR.strings.add_contact_or_create_group)) } } } @@ -181,7 +178,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user if (chatModel.chats.size > 0) { barButtons.add { IconButton({ showSearch = true }) { - Icon(painterResource(R.drawable.ic_search_500), stringResource(MR.strings.search_verb).capitalize(Locale.current), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_search_500), stringResource(MR.strings.search_verb).capitalize(Locale.current), tint = MaterialTheme.colors.primary) } } } @@ -194,7 +191,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user ) }) { Icon( - painterResource(R.drawable.ic_report_filled), + painterResource(MR.images.ic_report_filled), generalGetString(MR.strings.chat_is_stopped_indication), tint = Color.Red, ) @@ -226,7 +223,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user Row(verticalAlignment = Alignment.CenterVertically) { if (chatModel.incognito.value) { Icon( - painterResource(R.drawable.ic_theater_comedy_filled), + painterResource(MR.images.ic_theater_comedy_filled), stringResource(MR.strings.incognito), tint = Indigo, modifier = Modifier.padding(10.dp).size(26.dp) @@ -285,7 +282,7 @@ private fun ToggleFilterButton() { val pref = remember { SimplexApp.context.chatModel.controller.appPrefs.showUnreadAndFavorites } IconButton(onClick = { pref.set(!pref.get()) }) { Icon( - painterResource(R.drawable.ic_filter_list), + painterResource(MR.images.ic_filter_list), null, tint = if (pref.state.value) MaterialTheme.colors.background else MaterialTheme.colors.primary, modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatPreviewView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatPreviewView.kt index 9059ce8be7..efa51a3790 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatPreviewView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ChatPreviewView.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight @@ -27,6 +27,7 @@ import chat.simplex.app.views.chat.ComposeState import chat.simplex.app.views.chat.item.MarkdownText import chat.simplex.app.views.helpers.* import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource @Composable fun ChatPreviewView( @@ -44,7 +45,7 @@ fun ChatPreviewView( @Composable fun groupInactiveIcon() { Icon( - painterResource(R.drawable.ic_cancel_filled), + painterResource(MR.images.ic_cancel_filled), stringResource(MR.strings.icon_descr_group_inactive), Modifier.size(18.dp).background(MaterialTheme.colors.background, CircleShape), tint = MaterialTheme.colors.secondary @@ -77,15 +78,15 @@ fun ChatPreviewView( @Composable fun VerifiedIcon() { - Icon(painterResource(R.drawable.ic_verified_user), null, Modifier.size(19.dp).padding(end = 3.dp, top = 1.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_verified_user), null, Modifier.size(19.dp).padding(end = 3.dp, top = 1.dp), tint = MaterialTheme.colors.secondary) } fun messageDraft(draft: ComposeState): Pair> { - fun attachment(): Pair? = + fun attachment(): Pair? = when (draft.preview) { - is ComposePreview.FilePreview -> R.drawable.ic_draft_filled to draft.preview.fileName - is ComposePreview.MediaPreview -> R.drawable.ic_image to null - is ComposePreview.VoicePreview -> R.drawable.ic_play_arrow_filled to durationText(draft.preview.durationMs / 1000) + is ComposePreview.FilePreview -> MR.images.ic_draft_filled to draft.preview.fileName + is ComposePreview.MediaPreview -> MR.images.ic_image to null + is ComposePreview.VoicePreview -> MR.images.ic_play_arrow_filled to durationText(draft.preview.durationMs / 1000) else -> null } @@ -106,12 +107,12 @@ fun ChatPreviewView( "editIcon" to InlineTextContent( Placeholder(20.sp, 20.sp, PlaceholderVerticalAlign.TextCenter) ) { - Icon(painterResource(R.drawable.ic_edit_note), null, tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_edit_note), null, tint = MaterialTheme.colors.primary) }, "attachmentIcon" to InlineTextContent( Placeholder(20.sp, 20.sp, PlaceholderVerticalAlign.TextCenter) ) { - Icon(if (attachment?.first != null) painterResource(attachment.first) else painterResource(R.drawable.ic_edit_note), null, tint = MaterialTheme.colors.secondary) + Icon(if (attachment?.first != null) painterResource(attachment.first) else painterResource(MR.images.ic_edit_note), null, tint = MaterialTheme.colors.secondary) } ) return text to inlineContent @@ -237,7 +238,7 @@ fun ChatPreviewView( contentAlignment = Alignment.Center ) { Icon( - painterResource(R.drawable.ic_notifications_off_filled), + painterResource(MR.images.ic_notifications_off_filled), contentDescription = generalGetString(MR.strings.notifications), tint = MaterialTheme.colors.secondary, modifier = Modifier @@ -252,7 +253,7 @@ fun ChatPreviewView( contentAlignment = Alignment.Center ) { Icon( - painterResource(R.drawable.ic_star_filled), + painterResource(MR.images.ic_star_filled), contentDescription = generalGetString(MR.strings.favorite_chat), tint = MaterialTheme.colors.secondary, modifier = Modifier @@ -294,7 +295,7 @@ fun ChatStatusImage(s: NetworkStatus?) { val descr = s?.statusString if (s is NetworkStatus.Error) { Icon( - painterResource(R.drawable.ic_error), + painterResource(MR.images.ic_error), contentDescription = descr, tint = MaterialTheme.colors.secondary, modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt index de6fe43d50..39c0b583a3 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt @@ -7,21 +7,21 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import chat.simplex.app.R import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.ProfileImage +import chat.simplex.res.MR @Composable fun ContactConnectionView(contactConnection: PendingContactConnection) { Row { Box(Modifier.size(72.dp), contentAlignment = Alignment.Center) { - ProfileImage(size = 54.dp, null, if (contactConnection.initiated) R.drawable.ic_add_link else R.drawable.ic_link) + ProfileImage(size = 54.dp, null, if (contactConnection.initiated) MR.images.ic_add_link else MR.images.ic_link) } Column( modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt index 19593dd032..3a3f929fcc 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt @@ -11,7 +11,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight @@ -83,7 +83,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState if (chatModel.chats.size >= 8) { barButtons.add { IconButton({ showSearch = true }) { - Icon(painterResource(R.drawable.ic_search_500), stringResource(MR.strings.search_verb).capitalize(Locale.current), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_search_500), stringResource(MR.strings.search_verb).capitalize(Locale.current), tint = MaterialTheme.colors.primary) } } } @@ -96,7 +96,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState ) }) { Icon( - painterResource(R.drawable.ic_report_filled), + painterResource(MR.images.ic_report_filled), generalGetString(MR.strings.chat_is_stopped_indication), tint = Color.Red, ) @@ -120,7 +120,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState ) if (chatModel.incognito.value) { Icon( - painterResource(R.drawable.ic_theater_comedy_filled), + painterResource(MR.images.ic_theater_comedy_filled), stringResource(MR.strings.incognito), tint = Indigo, modifier = Modifier.padding(10.dp).size(26.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt index 0c74769e55..5395c73f37 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.intl.Locale @@ -168,9 +168,9 @@ fun UserProfilePickerItem(u: User, unreadCount: Int = 0, padding: PaddingValues ) { UserProfileRow(u) if (u.activeUser) { - Icon(painterResource(R.drawable.ic_done_filled), null, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + Icon(painterResource(MR.images.ic_done_filled), null, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) } else if (u.hidden) { - Icon(painterResource(R.drawable.ic_lock), null, Modifier.size(20.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_lock), null, Modifier.size(20.dp), tint = MaterialTheme.colors.secondary) } else if (unreadCount > 0) { Box( contentAlignment = Alignment.Center @@ -186,7 +186,7 @@ fun UserProfilePickerItem(u: User, unreadCount: Int = 0, padding: PaddingValues ) } } else if (!u.showNtfs) { - Icon(painterResource(R.drawable.ic_notifications_off), null, Modifier.size(20.dp), tint = MaterialTheme.colors.secondary) + Icon(painterResource(MR.images.ic_notifications_off), null, Modifier.size(20.dp), tint = MaterialTheme.colors.secondary) } else { Box(Modifier.size(20.dp)) } @@ -219,7 +219,7 @@ fun UserProfileRow(u: User) { private fun SettingsPickerItem(onClick: () -> Unit) { SectionItemView(onClick, padding = PaddingValues(start = DEFAULT_PADDING + 7.dp, end = DEFAULT_PADDING), minHeight = 68.dp) { val text = generalGetString(MR.strings.settings_section_title_settings).lowercase().capitalize(Locale.current) - Icon(painterResource(R.drawable.ic_settings), text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + Icon(painterResource(MR.images.ic_settings), text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) Spacer(Modifier.width(DEFAULT_PADDING + 6.dp)) Text( text, @@ -232,7 +232,7 @@ private fun SettingsPickerItem(onClick: () -> Unit) { private fun CancelPickerItem(onClick: () -> Unit) { SectionItemView(onClick, padding = PaddingValues(start = DEFAULT_PADDING + 7.dp, end = DEFAULT_PADDING), minHeight = 68.dp) { val text = generalGetString(MR.strings.cancel_verb) - Icon(painterResource(R.drawable.ic_close), text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + Icon(painterResource(MR.images.ic_close), text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) Spacer(Modifier.width(DEFAULT_PADDING + 6.dp)) Text( text, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt index 7c2cb32506..69b8f49d1a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt @@ -17,7 +17,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import chat.simplex.app.* @@ -59,14 +59,14 @@ fun ChatArchiveLayout( AppBarTitle(title) SectionView(stringResource(MR.strings.chat_archive_section)) { SettingsActionItem( - painterResource(R.drawable.ic_ios_share), + painterResource(MR.images.ic_ios_share), stringResource(MR.strings.save_archive), saveArchive, textColor = MaterialTheme.colors.primary, iconColor = MaterialTheme.colors.primary, ) SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.delete_archive), deleteArchiveAlert, textColor = Color.Red, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt index 156c51b52d..07be9dcef7 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.* import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight @@ -291,7 +291,7 @@ fun SavePassphraseSetting( SectionItemView(minHeight = minHeight) { Row(verticalAlignment = Alignment.CenterVertically) { Icon( - if (storedKey) painterResource(R.drawable.ic_vpn_key_filled) else painterResource(R.drawable.ic_vpn_key_off_filled), + if (storedKey) painterResource(MR.images.ic_vpn_key_filled) else painterResource(MR.images.ic_vpn_key_off_filled), stringResource(MR.strings.save_passphrase_in_keychain), tint = if (storedKey) SimplexGreen else MaterialTheme.colors.secondary ) @@ -358,8 +358,8 @@ fun PassphraseField( var valid by remember { mutableStateOf(validKey(key.value)) } var showKey by remember { mutableStateOf(false) } val icon = if (valid) { - if (showKey) painterResource(R.drawable.ic_visibility_off_filled) else painterResource(R.drawable.ic_visibility_filled) - } else painterResource(R.drawable.ic_error) + if (showKey) painterResource(MR.images.ic_visibility_off_filled) else painterResource(MR.images.ic_visibility_filled) + } else painterResource(MR.images.ic_error) val iconColor = if (valid) { if (showStrength && key.value.isNotEmpty()) PassphraseStrength.check(key.value).color else MaterialTheme.colors.secondary } else Color.Red diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseView.kt index 89e685d8c4..ebb88e3e0d 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/database/DatabaseView.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight @@ -178,8 +178,8 @@ fun DatabaseLayout( SectionView(stringResource(MR.strings.chat_database_section)) { val unencrypted = chatDbEncrypted == false SettingsActionItem( - if (unencrypted) painterResource(R.drawable.ic_lock_open) else if (useKeyChain) painterResource(R.drawable.ic_vpn_key_filled) - else painterResource(R.drawable.ic_lock), + if (unencrypted) painterResource(MR.images.ic_lock_open) else if (useKeyChain) painterResource(MR.images.ic_vpn_key_filled) + else painterResource(MR.images.ic_lock), stringResource(MR.strings.database_passphrase), click = showSettingsModal() { DatabaseEncryptionView(it) }, iconColor = if (unencrypted) WarningOrange else MaterialTheme.colors.secondary, @@ -188,7 +188,7 @@ fun DatabaseLayout( AppDataBackupPreference(privacyFullBackup, initialRandomDBPassphrase) SectionDividerSpaced(maxBottomPadding = false) SettingsActionItem( - painterResource(R.drawable.ic_ios_share), + painterResource(MR.images.ic_ios_share), stringResource(MR.strings.export_database), click = { if (initialRandomDBPassphrase.get()) { @@ -202,7 +202,7 @@ fun DatabaseLayout( disabled = operationsDisabled ) SettingsActionItem( - painterResource(R.drawable.ic_download), + painterResource(MR.images.ic_download), stringResource(MR.strings.import_database), { importArchiveLauncher.launch("application/zip") }, textColor = Color.Red, @@ -215,14 +215,14 @@ fun DatabaseLayout( if (chatArchiveNameVal != null && chatArchiveTimeVal != null && chatLastStartVal != null) { val title = chatArchiveTitle(chatArchiveTimeVal, chatLastStartVal) SettingsActionItem( - painterResource(R.drawable.ic_inventory_2), + painterResource(MR.images.ic_inventory_2), title, click = showSettingsModal { ChatArchiveView(it, title, chatArchiveNameVal, chatArchiveTimeVal) }, disabled = operationsDisabled ) } SettingsActionItem( - painterResource(R.drawable.ic_delete_forever), + painterResource(MR.images.ic_delete_forever), stringResource(MR.strings.delete_database), deleteChatAlert, textColor = Color.Red, @@ -266,7 +266,7 @@ fun DatabaseLayout( @Composable private fun AppDataBackupPreference(privacyFullBackup: SharedPreference, initialRandomDBPassphrase: SharedPreference) { SettingsPreferenceItem( - painterResource(R.drawable.ic_backup), + painterResource(MR.images.ic_backup), iconColor = MaterialTheme.colors.secondary, pref = privacyFullBackup, text = stringResource(MR.strings.full_backup) @@ -331,7 +331,7 @@ fun RunChatSetting( ) { val chatRunningText = if (stopped) stringResource(MR.strings.chat_is_stopped) else stringResource(MR.strings.chat_is_running) SettingsActionItemWithContent( - icon = if (stopped) painterResource(R.drawable.ic_report_filled) else painterResource(R.drawable.ic_play_arrow_filled), + icon = if (stopped) painterResource(MR.images.ic_report_filled) else painterResource(MR.images.ic_play_arrow_filled), text = chatRunningText, iconColor = if (stopped) Color.Red else MaterialTheme.colors.primary, ) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChatInfoImage.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChatInfoImage.kt index e5c03f654e..175d27c7c4 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChatInfoImage.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.* import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp @@ -19,12 +19,13 @@ import chat.simplex.app.R import chat.simplex.app.model.ChatInfo import chat.simplex.app.ui.theme.SimpleXTheme import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource @Composable fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant) { val icon = - if (chatInfo is ChatInfo.Group) R.drawable.ic_supervised_user_circle_filled - else R.drawable.ic_account_circle_filled + if (chatInfo is ChatInfo.Group) MR.images.ic_supervised_user_circle_filled + else MR.images.ic_account_circle_filled ProfileImage(size, chatInfo.image, icon, iconColor) } @@ -32,7 +33,7 @@ fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme fun IncognitoImage(size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant) { Box(Modifier.size(size)) { Icon( - painterResource(R.drawable.ic_theater_comedy_filled), stringResource(MR.strings.incognito), + painterResource(MR.images.ic_theater_comedy_filled), stringResource(MR.strings.incognito), modifier = Modifier.size(size).padding(size / 12), iconColor ) @@ -43,14 +44,14 @@ fun IncognitoImage(size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVa fun ProfileImage( size: Dp, image: String? = null, - icon: Int = R.drawable.ic_account_circle_filled, + icon: ImageResource = MR.images.ic_account_circle_filled, color: Color = MaterialTheme.colors.secondaryVariant ) { Box(Modifier.size(size)) { if (image == null) { val iconToReplace = when (icon) { - R.drawable.ic_account_circle_filled -> AccountCircleFilled - R.drawable.ic_supervised_user_circle_filled -> SupervisedUserCircleFilled + MR.images.ic_account_circle_filled -> AccountCircleFilled + MR.images.ic_supervised_user_circle_filled -> SupervisedUserCircleFilled else -> null } if (iconToReplace != null) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChooseAttachmentView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChooseAttachmentView.kt index edbee83186..38b2f0e219 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChooseAttachmentView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ChooseAttachmentView.kt @@ -8,7 +8,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.app.R @@ -41,19 +41,19 @@ fun ChooseAttachmentView( .padding(horizontal = 8.dp, vertical = 30.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { - ActionButton(Modifier.fillMaxWidth(0.25f), null, stringResource(MR.strings.use_camera_button), icon = painterResource(R.drawable.ic_camera_enhance)) { + ActionButton(Modifier.fillMaxWidth(0.25f), null, stringResource(MR.strings.use_camera_button), icon = painterResource(MR.images.ic_camera_enhance)) { attachmentOption.value = AttachmentOption.CameraPhoto hide() } - ActionButton(Modifier.fillMaxWidth(0.33f), null, stringResource(MR.strings.gallery_image_button), icon = painterResource(R.drawable.ic_add_photo)) { + ActionButton(Modifier.fillMaxWidth(0.33f), null, stringResource(MR.strings.gallery_image_button), icon = painterResource(MR.images.ic_add_photo)) { attachmentOption.value = AttachmentOption.GalleryImage hide() } - ActionButton(Modifier.fillMaxWidth(0.50f), null, stringResource(MR.strings.gallery_video_button), icon = painterResource(R.drawable.ic_smart_display)) { + ActionButton(Modifier.fillMaxWidth(0.50f), null, stringResource(MR.strings.gallery_video_button), icon = painterResource(MR.images.ic_smart_display)) { attachmentOption.value = AttachmentOption.GalleryVideo hide() } - ActionButton(Modifier.fillMaxWidth(1f), null, stringResource(MR.strings.choose_file), icon = painterResource(R.drawable.ic_note_add)) { + ActionButton(Modifier.fillMaxWidth(1f), null, stringResource(MR.strings.choose_file), icon = painterResource(MR.images.ic_note_add)) { attachmentOption.value = AttachmentOption.File hide() } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/CustomTimePicker.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/CustomTimePicker.kt index c659353082..32c52dc1d5 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/CustomTimePicker.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/CustomTimePicker.kt @@ -8,7 +8,7 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog @@ -174,7 +174,7 @@ fun CustomTimePickerDialog( color = MaterialTheme.colors.secondary ) Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), generalGetString(MR.strings.icon_descr_close_button), tint = MaterialTheme.colors.secondary, modifier = Modifier diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt index 2ea147014f..538ce4d86a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt @@ -15,17 +15,16 @@ import androidx.compose.ui.focus.* import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.* import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import chat.simplex.app.R import chat.simplex.app.views.database.PassphraseStrength import chat.simplex.app.views.database.validKey +import chat.simplex.res.MR import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch @@ -133,8 +132,8 @@ fun DefaultConfigurableTextField( var valid by remember { mutableStateOf(validKey(state.value.text)) } var showKey by remember { mutableStateOf(false) } val icon = if (valid) { - if (showKey) painterResource(R.drawable.ic_visibility_off_filled) else painterResource(R.drawable.ic_visibility_filled) - } else painterResource(R.drawable.ic_error) + if (showKey) painterResource(MR.images.ic_visibility_off_filled) else painterResource(MR.images.ic_visibility_filled) + } else painterResource(MR.images.ic_error) val iconColor = if (valid) { if (showPasswordStrength && state.value.text.isNotEmpty()) PassphraseStrength.check(state.value.text).color else MaterialTheme.colors.secondary } else Color.Red diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt index ad2465acc7..44a56c441d 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.app.ui.theme.* @@ -48,7 +48,7 @@ fun DefaultTopAppBar( fun NavigationButtonBack(onButtonClicked: (() -> Unit)?) { IconButton(onButtonClicked ?: {}, enabled = onButtonClicked != null) { Icon( - painterResource(R.drawable.ic_arrow_back_ios_new), stringResource(MR.strings.back), tint = if (onButtonClicked != null) MaterialTheme.colors.primary else MaterialTheme.colors.secondary + painterResource(MR.images.ic_arrow_back_ios_new), stringResource(MR.strings.back), tint = if (onButtonClicked != null) MaterialTheme.colors.primary else MaterialTheme.colors.secondary ) } } @@ -57,7 +57,7 @@ fun NavigationButtonBack(onButtonClicked: (() -> Unit)?) { fun ShareButton(onButtonClicked: () -> Unit) { IconButton(onButtonClicked) { Icon( - painterResource(R.drawable.ic_share), stringResource(MR.strings.share_verb), tint = MaterialTheme.colors.primary + painterResource(MR.images.ic_share), stringResource(MR.strings.share_verb), tint = MaterialTheme.colors.primary ) } } @@ -66,7 +66,7 @@ fun ShareButton(onButtonClicked: () -> Unit) { fun NavigationButtonMenu(onButtonClicked: () -> Unit) { IconButton(onClick = onButtonClicked) { Icon( - painterResource(R.drawable.ic_menu), + painterResource(MR.images.ic_menu), stringResource(MR.strings.icon_descr_settings), tint = MaterialTheme.colors.primary, ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ExposedDropDownSettingRow.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ExposedDropDownSettingRow.kt index 9f06a9affd..eb563dbd0f 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ExposedDropDownSettingRow.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ExposedDropDownSettingRow.kt @@ -2,7 +2,7 @@ package chat.simplex.app.views.helpers import androidx.compose.foundation.layout.* import androidx.compose.material.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -51,7 +51,7 @@ fun ExposedDropDownSettingRow( ) Spacer(Modifier.size(12.dp)) Icon( - if (!expanded.value) painterResource(R.drawable.ic_expand_more) else painterResource(R.drawable.ic_expand_less), + if (!expanded.value) painterResource(MR.images.ic_expand_more) else painterResource(MR.images.ic_expand_less), generalGetString(MR.strings.icon_descr_more_button), tint = MaterialTheme.colors.secondary ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt index d35c24817d..c7c8154900 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt @@ -23,7 +23,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat @@ -247,7 +247,7 @@ fun GetImageBottomSheet( .padding(horizontal = 8.dp, vertical = 30.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { - ActionButton(null, stringResource(MR.strings.use_camera_button), icon = painterResource(R.drawable.ic_photo_camera)) { + ActionButton(null, stringResource(MR.strings.use_camera_button), icon = painterResource(MR.images.ic_photo_camera)) { when (PackageManager.PERMISSION_GRANTED) { ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) -> { cameraLauncher.launchWithFallback() @@ -258,7 +258,7 @@ fun GetImageBottomSheet( } } } - ActionButton(null, stringResource(MR.strings.from_gallery_button), icon = painterResource(R.drawable.ic_image)) { + ActionButton(null, stringResource(MR.strings.from_gallery_button), icon = painterResource(MR.images.ic_image)) { try { galleryLauncher.launch(0) } catch (e: ActivityNotFoundException) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/LinkPreviews.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/LinkPreviews.kt index e13dd83145..47efef1da3 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/LinkPreviews.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/LinkPreviews.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -113,7 +113,7 @@ fun ComposeLinkView(linkPreview: LinkPreview?, cancelPreview: () -> Unit, cancel if (cancelEnabled) { IconButton(onClick = cancelPreview, modifier = Modifier.padding(0.dp)) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.icon_descr_cancel_link_preview), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(10.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ModalView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ModalView.kt index 8fe2e05d92..724f0907fa 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ModalView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/ModalView.kt @@ -12,7 +12,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.intl.Locale diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt index 2855cd75a5..a7afb9441f 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.* import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight @@ -104,7 +104,7 @@ fun SearchTextField( searchText.value = TextFieldValue(""); onValueChange("") }) { - Icon(painterResource(R.drawable.ic_close), stringResource(MR.strings.icon_descr_close_button), tint = MaterialTheme.colors.primary,) + Icon(painterResource(MR.images.ic_close), stringResource(MR.strings.icon_descr_close_button), tint = MaterialTheme.colors.primary,) } }} else null, singleLine = true, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/Section.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/Section.kt index b61af759ea..5c7a40e282 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/Section.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/Section.kt @@ -10,15 +10,15 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* -import chat.simplex.app.R import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.ValueTitleDesc import chat.simplex.app.views.helpers.ValueTitle import chat.simplex.app.views.usersettings.SettingsActionItemWithContent +import chat.simplex.res.MR @Composable fun SectionView(title: String? = null, padding: PaddingValues = PaddingValues(), content: (@Composable ColumnScope.() -> Unit)) { @@ -67,7 +67,7 @@ fun SectionViewSelectable( SectionItemViewSpaceBetween({ onSelected(item.value) }) { Text(item.title) if (currentValue.value == item.value) { - Icon(painterResource(R.drawable.ic_check), item.title, tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_check), item.title, tint = MaterialTheme.colors.primary) } } Spacer(Modifier.padding(horizontal = 4.dp)) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SimpleButton.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SimpleButton.kt index 9ae1ff7054..6202ded6de 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SimpleButton.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/helpers/SimpleButton.kt @@ -1,11 +1,10 @@ package chat.simplex.app.ui.theme -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -16,7 +15,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import chat.simplex.app.R +import chat.simplex.res.MR @Composable fun SimpleButton(text: String, icon: Painter, @@ -93,6 +92,6 @@ fun SimpleButtonFrame(click: () -> Unit, modifier: Modifier = Modifier, disabled @Composable fun PreviewCloseSheetBar() { SimpleXTheme { - SimpleButton(text = "Share", icon = painterResource(R.drawable.ic_share), click = {}) + SimpleButton(text = "Share", icon = painterResource(MR.images.ic_share), click = {}) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt index 9a190d2750..42186f20c9 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.unit.dp import chat.simplex.app.R import chat.simplex.app.ui.theme.DEFAULT_PADDING @@ -40,9 +40,9 @@ fun PasscodeView( } PasscodeEntry(passcode, true) Row { - SimpleButton(generalGetString(MR.strings.cancel_verb), icon = painterResource(R.drawable.ic_close), click = cancel) + SimpleButton(generalGetString(MR.strings.cancel_verb), icon = painterResource(MR.images.ic_close), click = cancel) Spacer(Modifier.size(20.dp)) - SimpleButton(submitLabel, icon = painterResource(R.drawable.ic_done_filled), disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) + SimpleButton(submitLabel, icon = painterResource(MR.images.ic_done_filled), disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) } } } @@ -83,8 +83,8 @@ fun PasscodeView( Modifier.padding(start = 30.dp).height(s * 3), verticalArrangement = Arrangement.SpaceEvenly ) { - SimpleButton(generalGetString(MR.strings.cancel_verb), icon = painterResource(R.drawable.ic_close), click = cancel) - SimpleButton(submitLabel, icon = painterResource(R.drawable.ic_done_filled), disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) + SimpleButton(generalGetString(MR.strings.cancel_verb), icon = painterResource(MR.images.ic_close), click = cancel) + SimpleButton(submitLabel, icon = painterResource(MR.images.ic_done_filled), disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) } } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt index 0f6f063082..98a880b4f0 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt @@ -6,8 +6,7 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.res.painterResource -import chat.simplex.app.R +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -17,6 +16,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.* +import chat.simplex.res.MR @Composable fun PasscodeEntry( @@ -56,13 +56,13 @@ private fun BoxWithConstraintsScope.VerticalPasswordGrid(password: MutableState< DigitsRow(s, 7, 8, 9, password) Divider() Row(Modifier.requiredHeight(s)) { - PasswordEdit(s, painterResource(R.drawable.ic_close)) { + PasswordEdit(s, painterResource(MR.images.ic_close)) { password.value = "" } VerticalDivider() PasswordDigit(s, 0, password) VerticalDivider() - PasswordEdit(s, painterResource(R.drawable.ic_backspace)) { + PasswordEdit(s, painterResource(MR.images.ic_backspace)) { password.value = password.value.dropLast(1) } } @@ -76,7 +76,7 @@ private fun BoxWithConstraintsScope.HorizontalPasswordGrid(password: MutableStat Row(Modifier.height(IntrinsicSize.Min)) { DigitsRow(s, 1, 2, 3, password); VerticalDivider() - PasswordEdit(s, painterResource(R.drawable.ic_close)) { + PasswordEdit(s, painterResource(MR.images.ic_close)) { password.value = "" } } @@ -90,7 +90,7 @@ private fun BoxWithConstraintsScope.HorizontalPasswordGrid(password: MutableStat Row(Modifier.height(IntrinsicSize.Min)) { DigitsRow(s, 7, 8, 9, password) VerticalDivider() - PasswordEdit(s, painterResource(R.drawable.ic_backspace)) { + PasswordEdit(s, painterResource(MR.images.ic_backspace)) { password.value = password.value.dropLast(1) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt index 45478c3cdc..39bd6cd333 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt @@ -8,7 +8,7 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -98,7 +98,7 @@ fun ColumnScope.OneTimeLinkSection(connReq: String, share: () -> Unit, learnMore @Composable fun ShareLinkButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_share), + painterResource(MR.images.ic_share), stringResource(MR.strings.share_invitation_link), onClick, iconColor = MaterialTheme.colors.primary, @@ -109,7 +109,7 @@ fun ShareLinkButton(onClick: () -> Unit) { @Composable fun OneTimeLinkLearnMoreButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), stringResource(MR.strings.learn_more), onClick, ) @@ -126,7 +126,7 @@ fun InfoAboutIncognito(chatModelIncognito: Boolean, supportedIncognito: Boolean horizontalArrangement = if (centered) Arrangement.Center else Arrangement.Start ) { Icon( - if (supportedIncognito) painterResource(R.drawable.ic_theater_comedy_filled) else painterResource(R.drawable.ic_info), + if (supportedIncognito) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_info), stringResource(MR.strings.incognito), tint = if (supportedIncognito) Indigo else WarningOrange, modifier = Modifier.padding(end = 10.dp).size(20.dp) @@ -142,7 +142,7 @@ fun InfoAboutIncognito(chatModelIncognito: Boolean, supportedIncognito: Boolean horizontalArrangement = if (centered) Arrangement.Center else Arrangement.Start ) { Icon( - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), stringResource(MR.strings.incognito), tint = MaterialTheme.colors.secondary, modifier = Modifier.padding(end = 10.dp).size(20.dp) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddGroupView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddGroupView.kt index d0ffd05eb7..2609098ebd 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddGroupView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/AddGroupView.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -163,7 +163,7 @@ fun CreateGroupButton(color: Color, modifier: Modifier) { Surface(shape = RoundedCornerShape(20.dp), color = Color.Transparent) { Row(modifier, verticalAlignment = Alignment.CenterVertically) { Text(stringResource(MR.strings.create_profile_button), style = MaterialTheme.typography.caption, color = color, fontWeight = FontWeight.Bold) - Icon(painterResource(R.drawable.ic_arrow_forward_ios), stringResource(MR.strings.create_profile_button), tint = color) + Icon(painterResource(MR.images.ic_arrow_forward_ios), stringResource(MR.strings.create_profile_button), tint = color) } } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt index 4fae906866..15ada1e103 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt @@ -5,7 +5,7 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.sp import chat.simplex.app.R @@ -58,7 +58,7 @@ fun ConnectViaLinkView(m: ChatModel, close: () -> Unit) { text = { Text(it, fontSize = 13.sp) }, icon = { Icon( - if (ConnectViaLinkTab.SCAN.ordinal == index) painterResource(R.drawable.ic_qr_code) else painterResource(R.drawable.ic_article), + if (ConnectViaLinkTab.SCAN.ordinal == index) painterResource(MR.images.ic_qr_code) else painterResource(MR.images.ic_article), it ) }, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt index 0cd72e0472..3317472cc5 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt @@ -11,7 +11,7 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import chat.simplex.app.R @@ -123,7 +123,7 @@ private fun ContactConnectionInfoLayout( @Composable fun DeleteButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.delete_verb), click = onClick, textColor = Color.Red, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/CreateLinkView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/CreateLinkView.kt index 633b72720f..b0b7b923d7 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/CreateLinkView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/CreateLinkView.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.sp import chat.simplex.app.R @@ -79,7 +79,7 @@ fun CreateLinkView(m: ChatModel, initialSelection: CreateLinkTab) { text = { Text(it, fontSize = 13.sp) }, icon = { Icon( - if (CreateLinkTab.ONE_TIME.ordinal == index) painterResource(R.drawable.ic_repeat_one) else painterResource(R.drawable.ic_all_inclusive), + if (CreateLinkTab.ONE_TIME.ordinal == index) painterResource(MR.images.ic_repeat_one) else painterResource(MR.images.ic_all_inclusive), it ) }, diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt index 573348847d..fd7edeaa29 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -57,7 +57,7 @@ fun NewChatSheet(chatModel: ChatModel, newChatSheetState: StateFlow Unit) { fun ShareAddressButton(onClick: () -> Unit) { SimpleButtonFrame(onClick) { Icon( - painterResource(R.drawable.ic_share_filled), generalGetString(MR.strings.share_verb), tint = MaterialTheme.colors.primary, + painterResource(MR.images.ic_share_filled), generalGetString(MR.strings.share_verb), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(end = 8.dp).size(18.dp) ) Text(stringResource(MR.strings.share_verb), style = MaterialTheme.typography.caption, color = MaterialTheme.colors.primary) @@ -120,7 +120,7 @@ fun ShareAddressButton(onClick: () -> Unit) { fun ShareViaEmailButton(onClick: () -> Unit) { SimpleButtonFrame(onClick) { Icon( - painterResource(R.drawable.ic_mail), generalGetString(MR.strings.share_verb), tint = MaterialTheme.colors.primary, + painterResource(MR.images.ic_mail), generalGetString(MR.strings.share_verb), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(end = 8.dp).size(30.dp) ) Text(stringResource(MR.strings.invite_friends), style = MaterialTheme.typography.h6, color = MaterialTheme.colors.primary) @@ -129,12 +129,12 @@ fun ShareViaEmailButton(onClick: () -> Unit) { @Composable private fun ContinueButton(onClick: () -> Unit) { - SimpleButtonIconEnded(stringResource(MR.strings.continue_to_next_step), painterResource(R.drawable.ic_chevron_right), click = onClick) + SimpleButtonIconEnded(stringResource(MR.strings.continue_to_next_step), painterResource(MR.images.ic_chevron_right), click = onClick) } @Composable private fun SkipButton(onClick: () -> Unit) { - SimpleButtonIconEnded(stringResource(MR.strings.dont_create_address), painterResource(R.drawable.ic_chevron_right), click = onClick) + SimpleButtonIconEnded(stringResource(MR.strings.dont_create_address), painterResource(MR.images.ic_chevron_right), click = onClick) TextBelowButton(stringResource(MR.strings.you_can_create_it_later)) } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt index 8b828b0d60..9c47931a40 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -52,9 +52,9 @@ fun SimpleXInfoLayout( Text(stringResource(MR.strings.next_generation_of_private_messaging), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = 48.dp).padding(horizontal = 36.dp), textAlign = TextAlign.Center) - InfoRow(painterResource(R.drawable.privacy), MR.strings.privacy_redefined, MR.strings.first_platform_without_user_ids, width = 80.dp) - InfoRow(painterResource(R.drawable.shield), MR.strings.immune_to_spam_and_abuse, MR.strings.people_can_connect_only_via_links_you_share) - InfoRow(painterResource(if (isInDarkTheme()) R.drawable.decentralized_light else R.drawable.decentralized), MR.strings.decentralized, MR.strings.opensource_protocol_and_code_anybody_can_run_servers) + InfoRow(painterResource(MR.images.privacy), MR.strings.privacy_redefined, MR.strings.first_platform_without_user_ids, width = 80.dp) + InfoRow(painterResource(MR.images.shield), MR.strings.immune_to_spam_and_abuse, MR.strings.people_can_connect_only_via_links_you_share) + InfoRow(painterResource(if (isInDarkTheme()) MR.images.decentralized_light else MR.images.decentralized), MR.strings.decentralized, MR.strings.opensource_protocol_and_code_anybody_can_run_servers) Spacer(Modifier.fillMaxHeight().weight(1f)) @@ -70,7 +70,7 @@ fun SimpleXInfoLayout( .fillMaxWidth() .padding(bottom = DEFAULT_PADDING.times(1.5f), top = DEFAULT_PADDING), contentAlignment = Alignment.Center ) { - SimpleButtonDecorated(text = stringResource(MR.strings.how_it_works), icon = painterResource(R.drawable.ic_info), + SimpleButtonDecorated(text = stringResource(MR.strings.how_it_works), icon = painterResource(MR.images.ic_info), click = showModal { HowItWorks(user, onboardingStage) }) } } @@ -79,7 +79,7 @@ fun SimpleXInfoLayout( @Composable fun SimpleXLogo() { Image( - painter = painterResource(if (isInDarkTheme()) R.drawable.logo_light else R.drawable.logo), + painter = painterResource(if (isInDarkTheme()) MR.images.logo_light else MR.images.logo), contentDescription = stringResource(MR.strings.image_descr_simplex_logo), modifier = Modifier .padding(vertical = DEFAULT_PADDING) @@ -137,7 +137,7 @@ fun OnboardingActionButton( }, modifier) { Text(stringResource(labelId), style = MaterialTheme.typography.h2, color = MaterialTheme.colors.primary, fontSize = 20.sp) Icon( - painterResource(R.drawable.ic_arrow_forward_ios), "next stage", tint = MaterialTheme.colors.primary, + painterResource(MR.images.ic_arrow_forward_ios), "next stage", tint = MaterialTheme.colors.primary, modifier = Modifier.padding(start = DEFAULT_PADDING.div(4)).size(20.dp) ) } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt index 7cf67763a0..923b47eb83 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import androidx.compose.ui.res.stringResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight @@ -28,6 +28,7 @@ import chat.simplex.app.model.ChatModel import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.* import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource @Composable @@ -40,7 +41,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { fun linkButton(link: String) { val uriHandler = LocalUriHandler.current Icon( - painterResource(R.drawable.ic_open_in_new), stringResource(titleId), tint = MaterialTheme.colors.primary, + painterResource(MR.images.ic_open_in_new), stringResource(titleId), tint = MaterialTheme.colors.primary, modifier = Modifier .clickable { uriHandler.openUriCatching(link) } ) @@ -84,7 +85,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { .clickable { currentVersion.value = prev } .padding(8.dp) ) { - Icon(painterResource(R.drawable.ic_arrow_back_ios_new), "previous", tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_arrow_back_ios_new), "previous", tint = MaterialTheme.colors.primary) Text(versionDescriptions[prev].version, color = MaterialTheme.colors.primary) } } @@ -101,7 +102,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { .padding(8.dp) ) { Text(versionDescriptions[next].version, color = MaterialTheme.colors.primary) - Icon(painterResource(R.drawable.ic_arrow_forward_ios), "next", tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_arrow_forward_ios), "next", tint = MaterialTheme.colors.primary) } } } @@ -129,7 +130,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { Row(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.padding(top = DEFAULT_PADDING.div(4))) { Text(stringResource(MR.strings.whats_new_read_more), color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(v.post) }) - Icon(painterResource(R.drawable.ic_open_in_new), stringResource(MR.strings.whats_new_read_more), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_open_in_new), stringResource(MR.strings.whats_new_read_more), tint = MaterialTheme.colors.primary) } } @@ -156,7 +157,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { } private data class FeatureDescription( - val icon: Int, + val icon: ImageResource, val titleId: StringResource, val descrId: StringResource, val link: String? = null @@ -174,18 +175,18 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_verified_user, + icon = MR.images.ic_verified_user, titleId = MR.strings.v4_2_security_assessment, descrId = MR.strings.v4_2_security_assessment_desc, link = "https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html" ), FeatureDescription( - icon = R.drawable.ic_group, + icon = MR.images.ic_group, titleId = MR.strings.v4_2_group_links, descrId = MR.strings.v4_2_group_links_desc ), FeatureDescription( - icon = R.drawable.ic_check, + icon = MR.images.ic_check, titleId = MR.strings.v4_2_auto_accept_contact_requests, descrId = MR.strings.v4_2_auto_accept_contact_requests_desc ), @@ -196,22 +197,22 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20221206-simplex-chat-v4.3-voice-messages.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_mic, + icon = MR.images.ic_mic, titleId = MR.strings.v4_3_voice_messages, descrId = MR.strings.v4_3_voice_messages_desc ), FeatureDescription( - icon = R.drawable.ic_delete_forever, + icon = MR.images.ic_delete_forever, titleId = MR.strings.v4_3_irreversible_message_deletion, descrId = MR.strings.v4_3_irreversible_message_deletion_desc ), FeatureDescription( - icon = R.drawable.ic_wifi_tethering, + icon = MR.images.ic_wifi_tethering, titleId = MR.strings.v4_3_improved_server_configuration, descrId = MR.strings.v4_3_improved_server_configuration_desc ), FeatureDescription( - icon = R.drawable.ic_visibility_off, + icon = MR.images.ic_visibility_off, titleId = MR.strings.v4_3_improved_privacy_and_security, descrId = MR.strings.v4_3_improved_privacy_and_security_desc ), @@ -222,22 +223,22 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20230103-simplex-chat-v4.4-disappearing-messages.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_timer, + icon = MR.images.ic_timer, titleId = MR.strings.v4_4_disappearing_messages, descrId = MR.strings.v4_4_disappearing_messages_desc ), FeatureDescription( - icon = R.drawable.ic_pending, + icon = MR.images.ic_pending, titleId = MR.strings.v4_4_live_messages, descrId = MR.strings.v4_4_live_messages_desc ), FeatureDescription( - icon = R.drawable.ic_verified_user, + icon = MR.images.ic_verified_user, titleId = MR.strings.v4_4_verify_connection_security, descrId = MR.strings.v4_4_verify_connection_security_desc ), FeatureDescription( - icon = R.drawable.ic_translate, + icon = MR.images.ic_translate, titleId = MR.strings.v4_4_french_interface, descrId = MR.strings.v4_4_french_interface_descr ) @@ -248,33 +249,33 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_manage_accounts, + icon = MR.images.ic_manage_accounts, titleId = MR.strings.v4_5_multiple_chat_profiles, descrId = MR.strings.v4_5_multiple_chat_profiles_descr ), FeatureDescription( - icon = R.drawable.ic_edit_note, + icon = MR.images.ic_edit_note, titleId = MR.strings.v4_5_message_draft, descrId = MR.strings.v4_5_message_draft_descr ), FeatureDescription( - icon = R.drawable.ic_safety_divider, + icon = MR.images.ic_safety_divider, titleId = MR.strings.v4_5_transport_isolation, descrId = MR.strings.v4_5_transport_isolation_descr, link = "https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation" ), FeatureDescription( - icon = R.drawable.ic_task, + icon = MR.images.ic_task, titleId = MR.strings.v4_5_private_filenames, descrId = MR.strings.v4_5_private_filenames_descr ), FeatureDescription( - icon = R.drawable.ic_battery_2_bar, + icon = MR.images.ic_battery_2_bar, titleId = MR.strings.v4_5_reduced_battery_usage, descrId = MR.strings.v4_5_reduced_battery_usage_descr ), FeatureDescription( - icon = R.drawable.ic_translate, + icon = MR.images.ic_translate, titleId = MR.strings.v4_5_italian_interface, descrId = MR.strings.v4_5_italian_interface_descr, link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat" @@ -286,32 +287,32 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20230328-simplex-chat-v4-6-hidden-profiles.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_lock, + icon = MR.images.ic_lock, titleId = MR.strings.v4_6_hidden_chat_profiles, descrId = MR.strings.v4_6_hidden_chat_profiles_descr ), FeatureDescription( - icon = R.drawable.ic_flag, + icon = MR.images.ic_flag, titleId = MR.strings.v4_6_group_moderation, descrId = MR.strings.v4_6_group_moderation_descr ), FeatureDescription( - icon = R.drawable.ic_maps_ugc, + icon = MR.images.ic_maps_ugc, titleId = MR.strings.v4_6_group_welcome_message, descrId = MR.strings.v4_6_group_welcome_message_descr ), FeatureDescription( - icon = R.drawable.ic_call, + icon = MR.images.ic_call, titleId = MR.strings.v4_6_audio_video_calls, descrId = MR.strings.v4_6_audio_video_calls_descr ), FeatureDescription( - icon = R.drawable.ic_battery_3_bar, + icon = MR.images.ic_battery_3_bar, titleId = MR.strings.v4_6_reduced_battery_usage, descrId = MR.strings.v4_6_reduced_battery_usage_descr ), FeatureDescription( - icon = R.drawable.ic_translate, + icon = MR.images.ic_translate, titleId = MR.strings.v4_6_chinese_spanish_interface, descrId = MR.strings.v4_6_chinese_spanish_interface_descr, link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat" @@ -323,17 +324,17 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20230422-simplex-chat-vision-funding-v5-videos-files-passcode.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_upload_file, + icon = MR.images.ic_upload_file, titleId = MR.strings.v5_0_large_files_support, descrId = MR.strings.v5_0_large_files_support_descr ), FeatureDescription( - icon = R.drawable.ic_lock, + icon = MR.images.ic_lock, titleId = MR.strings.v5_0_app_passcode, descrId = MR.strings.v5_0_app_passcode_descr ), FeatureDescription( - icon = R.drawable.ic_translate, + icon = MR.images.ic_translate, titleId = MR.strings.v5_0_polish_interface, descrId = MR.strings.v5_0_polish_interface_descr, link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat" @@ -351,27 +352,27 @@ private val versionDescriptions: List = listOf( post = "https://simplex.chat/blog/20230523-simplex-chat-v5-1-message-reactions-self-destruct-passcode.html", features = listOf( FeatureDescription( - icon = R.drawable.ic_add_reaction, + icon = MR.images.ic_add_reaction, titleId = MR.strings.v5_1_message_reactions, descrId = MR.strings.v5_1_message_reactions_descr ), FeatureDescription( - icon = R.drawable.ic_chat, + icon = MR.images.ic_chat, titleId = MR.strings.v5_1_better_messages, descrId = MR.strings.v5_1_better_messages_descr ), FeatureDescription( - icon = R.drawable.ic_light_mode, + icon = MR.images.ic_light_mode, titleId = MR.strings.v5_1_custom_themes, descrId = MR.strings.v5_1_custom_themes_descr ), FeatureDescription( - icon = R.drawable.ic_lock, + icon = MR.images.ic_lock, titleId = MR.strings.v5_1_self_destruct_passcode, descrId = MR.strings.v5_1_self_destruct_passcode_descr ), FeatureDescription( - icon = R.drawable.ic_translate, + icon = MR.images.ic_translate, titleId = MR.strings.v5_1_japanese_portuguese_interface, descrId = MR.strings.whats_new_thanks_to_users_contribute_weblate, link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat" diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt index 2891861e8b..0c2341c69b 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -24,6 +24,7 @@ import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.* import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource import java.text.DecimalFormat @Composable @@ -272,7 +273,7 @@ fun IntSettingRow(title: String, selection: MutableState, values: List ) Spacer(Modifier.size(4.dp)) Icon( - if (!expanded.value) painterResource(R.drawable.ic_expand_more) else painterResource(R.drawable.ic_expand_less), + if (!expanded.value) painterResource(MR.images.ic_expand_more) else painterResource(MR.images.ic_expand_less), generalGetString(MR.strings.invite_to_group_button), modifier = Modifier.padding(start = 8.dp), tint = MaterialTheme.colors.secondary @@ -332,7 +333,7 @@ fun TimeoutSettingRow(title: String, selection: MutableState, values: List ) Spacer(Modifier.size(4.dp)) Icon( - if (!expanded.value) painterResource(R.drawable.ic_expand_more) else painterResource(R.drawable.ic_expand_less), + if (!expanded.value) painterResource(MR.images.ic_expand_more) else painterResource(MR.images.ic_expand_less), generalGetString(MR.strings.invite_to_group_button), modifier = Modifier.padding(start = 8.dp), tint = MaterialTheme.colors.secondary @@ -368,8 +369,8 @@ fun SettingsSectionFooter(revert: () -> Unit, save: () -> Unit, disabled: Boolea horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - FooterButton(painterResource(R.drawable.ic_replay), stringResource(MR.strings.network_options_revert), revert, disabled) - FooterButton(painterResource(R.drawable.ic_check), stringResource(MR.strings.network_options_save), save, disabled) + FooterButton(painterResource(MR.images.ic_replay), stringResource(MR.strings.network_options_revert), revert, disabled) + FooterButton(painterResource(MR.images.ic_check), stringResource(MR.strings.network_options_save), save, disabled) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt index 5047818ba3..cdf1f9900a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.* import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -186,47 +186,47 @@ fun CustomizeThemeView(editColor: (ThemeColor, Color) -> Unit) { SectionItemViewSpaceBetween({ editColor(ThemeColor.PRIMARY, currentTheme.colors.primary) }) { val title = generalGetString(MR.strings.color_primary) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.primary) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.primary) } SectionItemViewSpaceBetween({ editColor(ThemeColor.PRIMARY_VARIANT, currentTheme.colors.primaryVariant) }) { val title = generalGetString(MR.strings.color_primary_variant) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.primaryVariant) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.primaryVariant) } SectionItemViewSpaceBetween({ editColor(ThemeColor.SECONDARY, currentTheme.colors.secondary) }) { val title = generalGetString(MR.strings.color_secondary) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.secondary) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.secondary) } SectionItemViewSpaceBetween({ editColor(ThemeColor.SECONDARY_VARIANT, currentTheme.colors.secondaryVariant) }) { val title = generalGetString(MR.strings.color_secondary_variant) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.secondaryVariant) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.secondaryVariant) } SectionItemViewSpaceBetween({ editColor(ThemeColor.BACKGROUND, currentTheme.colors.background) }) { val title = generalGetString(MR.strings.color_background) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.background) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.background) } SectionItemViewSpaceBetween({ editColor(ThemeColor.SURFACE, currentTheme.colors.surface) }) { val title = generalGetString(MR.strings.color_surface) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = colors.surface) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = colors.surface) } SectionItemViewSpaceBetween({ editColor(ThemeColor.TITLE, currentTheme.appColors.title) }) { val title = generalGetString(MR.strings.color_title) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = currentTheme.appColors.title) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = currentTheme.appColors.title) } SectionItemViewSpaceBetween({ editColor(ThemeColor.SENT_MESSAGE, currentTheme.appColors.sentMessage) }) { val title = generalGetString(MR.strings.color_sent_message) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = currentTheme.appColors.sentMessage) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = currentTheme.appColors.sentMessage) } SectionItemViewSpaceBetween({ editColor(ThemeColor.RECEIVED_MESSAGE, currentTheme.appColors.receivedMessage) }) { val title = generalGetString(MR.strings.color_received_message) Text(title) - Icon(painterResource(R.drawable.ic_circle_filled), title, tint = currentTheme.appColors.receivedMessage) + Icon(painterResource(MR.images.ic_circle_filled), title, tint = currentTheme.appColors.receivedMessage) } } val isInDarkTheme = isInDarkTheme() diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt index 5a566ac480..a3e51c1dab 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt @@ -10,7 +10,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import chat.simplex.app.R import chat.simplex.app.model.ChatModel @@ -32,8 +32,8 @@ fun DeveloperView( SectionView() { InstallTerminalAppItem(uriHandler) ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential), showCustomModal { it, close -> TerminalView(it, close) })} - SettingsPreferenceItem(painterResource(R.drawable.ic_drive_folder_upload), stringResource(MR.strings.confirm_database_upgrades), m.controller.appPrefs.confirmDBUpgrades) - SettingsPreferenceItem(painterResource(R.drawable.ic_code), stringResource(MR.strings.show_developer_options), developerTools) + SettingsPreferenceItem(painterResource(MR.images.ic_drive_folder_upload), stringResource(MR.strings.confirm_database_upgrades), m.controller.appPrefs.confirmDBUpgrades) + SettingsPreferenceItem(painterResource(MR.images.ic_code), stringResource(MR.strings.show_developer_options), developerTools) } SectionTextFooter( generalGetString(if (devTools.value) MR.strings.show_dev_options else MR.strings.hide_dev_options) + " " + diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt index da055fcbee..72292d80ba 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt @@ -15,11 +15,10 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* -import androidx.compose.ui.text.font.Font -import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.* import androidx.compose.ui.text.input.* import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -167,16 +166,16 @@ fun NetworkAndServersView( ) { AppBarTitle(stringResource(MR.strings.network_and_servers)) SectionView(generalGetString(MR.strings.settings_section_title_messages)) { - SettingsActionItem(painterResource(R.drawable.ic_dns), stringResource(MR.strings.smp_servers), showCustomModal { m, close -> ProtocolServersView(m, ServerProtocol.SMP, close) }) + SettingsActionItem(painterResource(MR.images.ic_dns), stringResource(MR.strings.smp_servers), showCustomModal { m, close -> ProtocolServersView(m, ServerProtocol.SMP, close) }) - SettingsActionItem(painterResource(R.drawable.ic_dns), stringResource(MR.strings.xftp_servers), showCustomModal { m, close -> ProtocolServersView(m, ServerProtocol.XFTP, close) }) + SettingsActionItem(painterResource(MR.images.ic_dns), stringResource(MR.strings.xftp_servers), showCustomModal { m, close -> ProtocolServersView(m, ServerProtocol.XFTP, close) }) UseSocksProxySwitch(networkUseSocksProxy, proxyPort, toggleSocksProxy, showSettingsModal) UseOnionHosts(onionHosts, networkUseSocksProxy, showSettingsModal, useOnion) if (developerTools) { SessionModePicker(sessionMode, showSettingsModal, updateSessionMode) } - SettingsActionItem(painterResource(R.drawable.ic_cable), stringResource(MR.strings.network_settings), showSettingsModal { AdvancedNetworkSettingsView(it) }) + SettingsActionItem(painterResource(MR.images.ic_cable), stringResource(MR.strings.network_settings), showSettingsModal { AdvancedNetworkSettingsView(it) }) } if (networkUseSocksProxy.value) { SectionCustomFooter { Text(annotatedStringResource(MR.strings.disable_onion_hosts_when_not_supported)) } @@ -186,7 +185,7 @@ fun NetworkAndServersView( } SectionView(generalGetString(MR.strings.settings_section_title_calls)) { - SettingsActionItem(painterResource(R.drawable.ic_electrical_services), stringResource(MR.strings.webrtc_ice_servers), showModal { RTCServersView(it) }) + SettingsActionItem(painterResource(MR.images.ic_electrical_services), stringResource(MR.strings.webrtc_ice_servers), showModal { RTCServersView(it) }) } SectionBottomSpacer() } @@ -209,7 +208,7 @@ fun UseSocksProxySwitch( verticalAlignment = Alignment.CenterVertically ) { Icon( - painterResource(R.drawable.ic_settings_ethernet), + painterResource(MR.images.ic_settings_ethernet), stringResource(MR.strings.network_socks_toggle_use_socks_proxy), tint = MaterialTheme.colors.secondary ) @@ -224,7 +223,7 @@ fun UseSocksProxySwitch( } ClickableText( text, - style = TextStyle(color = MaterialTheme.colors.onBackground, fontSize = 16.sp, fontFamily = FontFamily(Font(R.font.inter_regular))), + style = TextStyle(color = MaterialTheme.colors.onBackground, fontSize = 16.sp, fontFamily = Inter, fontWeight = FontWeight.Normal), onClick = { offset -> text.getStringAnnotations(tag = "PORT", start = offset, end = offset) .firstOrNull()?.let { _ -> @@ -356,7 +355,7 @@ private fun UseOnionHosts( generalGetString(MR.strings.network_use_onion_hosts), onionHosts, values, - icon = painterResource(R.drawable.ic_security), + icon = painterResource(MR.images.ic_security), enabled = enabled, onSelected = onSelected ) @@ -381,7 +380,7 @@ private fun SessionModePicker( generalGetString(MR.strings.network_session_mode_transport_isolation), sessionMode, values, - icon = painterResource(R.drawable.ic_safety_divider), + icon = painterResource(MR.images.ic_safety_divider), onSelected = showModal { Column( Modifier.fillMaxWidth(), @@ -400,8 +399,8 @@ private fun NetworkSectionFooter(revert: () -> Unit, save: () -> Unit, revertDis horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - FooterButton(painterResource(R.drawable.ic_replay), stringResource(MR.strings.network_options_revert), revert, revertDisabled) - FooterButton(painterResource(R.drawable.ic_check), stringResource(MR.strings.network_options_save), save, saveDisabled) + FooterButton(painterResource(MR.images.ic_replay), stringResource(MR.strings.network_options_revert), revert, revertDisabled) + FooterButton(painterResource(MR.images.ic_check), stringResource(MR.strings.network_options_save), save, saveDisabled) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt index 9ca2439283..d4f8d1eccc 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt @@ -13,7 +13,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -55,7 +55,7 @@ fun PrivacySettingsView( SectionView(stringResource(MR.strings.settings_section_title_device)) { ChatLockItem(chatModel, showSettingsModal, setPerformLA) val context = LocalContext.current - SettingsPreferenceItem(painterResource(R.drawable.ic_visibility_off), stringResource(MR.strings.protect_app_screen), chatModel.controller.appPrefs.privacyProtectScreen) { on -> + SettingsPreferenceItem(painterResource(MR.images.ic_visibility_off), stringResource(MR.strings.protect_app_screen), chatModel.controller.appPrefs.privacyProtectScreen) { on -> if (on) { (context as? FragmentActivity)?.window?.setFlags( WindowManager.LayoutParams.FLAG_SECURE, @@ -69,8 +69,8 @@ fun PrivacySettingsView( SectionDividerSpaced() SectionView(stringResource(MR.strings.settings_section_title_chats)) { - SettingsPreferenceItem(painterResource(R.drawable.ic_image), stringResource(MR.strings.auto_accept_images), chatModel.controller.appPrefs.privacyAcceptImages) - SettingsPreferenceItem(painterResource(R.drawable.ic_travel_explore), stringResource(MR.strings.send_link_previews), chatModel.controller.appPrefs.privacyLinkPreviews) + SettingsPreferenceItem(painterResource(MR.images.ic_image), stringResource(MR.strings.auto_accept_images), chatModel.controller.appPrefs.privacyAcceptImages) + SettingsPreferenceItem(painterResource(MR.images.ic_travel_explore), stringResource(MR.strings.send_link_previews), chatModel.controller.appPrefs.privacyLinkPreviews) SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = { simplexLinkMode.set(it) chatModel.simplexLinkMode.value = it @@ -322,7 +322,7 @@ fun SimplexLockView( SettingsActionItemWithContent(null, null, click = openInfo) { SharedPreferenceToggleWithIcon( stringResource(MR.strings.enable_self_destruct), - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), openInfo, remember { selfDestructPref.state }.value ) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt index a14f29062a..a711275ccf 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily @@ -138,7 +138,7 @@ private fun CustomServer( } SectionView( stringResource(MR.strings.smp_servers_your_server_address).uppercase(), - icon = painterResource(R.drawable.ic_error), + icon = painterResource(MR.images.ic_error), iconTint = if (!valid.value) MaterialTheme.colors.error else Color.Transparent, ) { val testedPreviously = remember { mutableMapOf() } @@ -191,9 +191,9 @@ private fun UseServerSection( @Composable fun ShowTestStatus(server: ServerCfg, modifier: Modifier = Modifier) = when (server.tested) { - true -> Icon(painterResource(R.drawable.ic_check), null, modifier, tint = SimplexGreen) - false -> Icon(painterResource(R.drawable.ic_close), null, modifier, tint = MaterialTheme.colors.error) - else -> Icon(painterResource(R.drawable.ic_check), null, modifier, tint = Color.Transparent) + true -> Icon(painterResource(MR.images.ic_check), null, modifier, tint = SimplexGreen) + false -> Icon(painterResource(MR.images.ic_close), null, modifier, tint = MaterialTheme.colors.error) + else -> Icon(painterResource(MR.images.ic_check), null, modifier, tint = Color.Transparent) } suspend fun testServerConnection(server: ServerCfg, m: ChatModel): Pair = diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt index 13b69b6287..6443bfc3f8 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt @@ -13,7 +13,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight @@ -204,7 +204,7 @@ private fun ProtocolServersLayout( } } SettingsActionItem( - painterResource(R.drawable.ic_add), + painterResource(MR.images.ic_add), stringResource(MR.strings.smp_servers_add), addServer, disabled = testing, @@ -249,7 +249,7 @@ private fun ProtocolServerView(serverProtocol: ServerProtocol, srv: ServerCfg, s val address = parseServerAddress(srv.server) when { address == null || !address.valid || address.serverProtocol != serverProtocol || !uniqueAddress(srv, address, servers) -> InvalidServer() - !srv.enabled -> Icon(painterResource(R.drawable.ic_do_not_disturb_on), null, tint = MaterialTheme.colors.secondary) + !srv.enabled -> Icon(painterResource(MR.images.ic_do_not_disturb_on), null, tint = MaterialTheme.colors.secondary) else -> ShowTestStatus(srv) } Spacer(Modifier.padding(horizontal = 4.dp)) @@ -265,7 +265,7 @@ private fun ProtocolServerView(serverProtocol: ServerProtocol, srv: ServerCfg, s private fun HowToButton() { val uriHandler = LocalUriHandler.current SettingsActionItem( - painterResource(R.drawable.ic_open_in_new), + painterResource(MR.images.ic_open_in_new), stringResource(MR.strings.how_to_use_your_servers), { uriHandler.openUriCatching("https://simplex.chat/docs/server.html") }, textColor = MaterialTheme.colors.primary, @@ -275,7 +275,7 @@ private fun HowToButton() { @Composable fun InvalidServer() { - Icon(painterResource(R.drawable.ic_error), null, tint = MaterialTheme.colors.error) + Icon(painterResource(MR.images.ic_error), null, tint = MaterialTheme.colors.error) } private fun uniqueAddress(s: ServerCfg, address: ServerAddress, servers: List): Boolean = servers.all { srv -> diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt index e21fbda51d..f79b968b15 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt @@ -12,7 +12,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily @@ -202,7 +202,7 @@ private fun howToButton() { ) { Text(stringResource(MR.strings.how_to), color = MaterialTheme.colors.primary) Icon( - painterResource(R.drawable.ic_open_in_new), stringResource(MR.strings.how_to), tint = MaterialTheme.colors.primary, + painterResource(MR.images.ic_open_in_new), stringResource(MR.strings.how_to), tint = MaterialTheme.colors.primary, modifier = Modifier.padding(horizontal = 5.dp) ) } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index 18313e10b8..b033f69f38 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.* -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -100,7 +100,7 @@ fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit) { ) { SimpleButton( stringResource(MR.strings.auth_unlock), - icon = painterResource(R.drawable.ic_lock), + icon = painterResource(MR.images.ic_lock), click = { runAuth(title, desc, onFinishAuth) } @@ -147,29 +147,29 @@ fun SettingsLayout( ProfilePreview(profile, stopped = stopped) } val profileHidden = rememberSaveable { mutableStateOf(false) } - SettingsActionItem(painterResource(R.drawable.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped, extraPadding = true) SettingsIncognitoActionItem(incognitoPref, incognito, stopped) { showModal { IncognitoView() }() } - SettingsActionItem(painterResource(R.drawable.ic_qr_code), stringResource(MR.strings.your_simplex_contact_address), showCustomModal { it, close -> UserAddressView(it, shareViaProfile = it.currentUser.value!!.addressShared, close = close) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_qr_code), stringResource(MR.strings.your_simplex_contact_address), showCustomModal { it, close -> UserAddressView(it, shareViaProfile = it.currentUser.value!!.addressShared, close = close) }, disabled = stopped, extraPadding = true) ChatPreferencesItem(showCustomModal, stopped = stopped) } SectionDividerSpaced() SectionView(stringResource(MR.strings.settings_section_title_settings)) { - SettingsActionItem(painterResource(R.drawable.ic_bolt), stringResource(MR.strings.notifications), showSettingsModal { NotificationsSettingsView(it) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_wifi_tethering), stringResource(MR.strings.network_and_servers), showSettingsModal { NetworkAndServersView(it, showModal, showSettingsModal, showCustomModal) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_videocam), stringResource(MR.strings.settings_audio_video_calls), showSettingsModal { CallSettingsView(it, showModal) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_lock), stringResource(MR.strings.privacy_and_security), showSettingsModal { PrivacySettingsView(it, showSettingsModal, setPerformLA) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_light_mode), stringResource(MR.strings.appearance_settings), showSettingsModal { AppearanceView(it, showSettingsModal) }, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_bolt), stringResource(MR.strings.notifications), showSettingsModal { NotificationsSettingsView(it) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_wifi_tethering), stringResource(MR.strings.network_and_servers), showSettingsModal { NetworkAndServersView(it, showModal, showSettingsModal, showCustomModal) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_videocam), stringResource(MR.strings.settings_audio_video_calls), showSettingsModal { CallSettingsView(it, showModal) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_lock), stringResource(MR.strings.privacy_and_security), showSettingsModal { PrivacySettingsView(it, showSettingsModal, setPerformLA) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_light_mode), stringResource(MR.strings.appearance_settings), showSettingsModal { AppearanceView(it, showSettingsModal) }, extraPadding = true) DatabaseItem(encrypted, showSettingsModal { DatabaseView(it, showSettingsModal) }, stopped) } SectionDividerSpaced() SectionView(stringResource(MR.strings.settings_section_title_help)) { - SettingsActionItem(painterResource(R.drawable.ic_help), stringResource(MR.strings.how_to_use_simplex_chat), showModal { HelpView(userDisplayName) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_add), stringResource(MR.strings.whats_new), showCustomModal { _, close -> WhatsNewView(viaSettings = true, close) }, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_info), stringResource(MR.strings.about_simplex_chat), showModal { SimpleXInfo(it, onboarding = false) }, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_tag), stringResource(MR.strings.chat_with_the_founder), { uriHandler.openUriCatching(simplexTeamUri) }, textColor = MaterialTheme.colors.primary, disabled = stopped, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_mail), stringResource(MR.strings.send_us_an_email), { uriHandler.openUriCatching("mailto:chat@simplex.chat") }, textColor = MaterialTheme.colors.primary, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_help), stringResource(MR.strings.how_to_use_simplex_chat), showModal { HelpView(userDisplayName) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_add), stringResource(MR.strings.whats_new), showCustomModal { _, close -> WhatsNewView(viaSettings = true, close) }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_info), stringResource(MR.strings.about_simplex_chat), showModal { SimpleXInfo(it, onboarding = false) }, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_tag), stringResource(MR.strings.chat_with_the_founder), { uriHandler.openUriCatching(simplexTeamUri) }, textColor = MaterialTheme.colors.primary, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_mail), stringResource(MR.strings.send_us_an_email), { uriHandler.openUriCatching("mailto:chat@simplex.chat") }, textColor = MaterialTheme.colors.primary, extraPadding = true) } SectionDividerSpaced() @@ -181,9 +181,9 @@ fun SettingsLayout( SectionDividerSpaced() SectionView(stringResource(MR.strings.settings_section_title_app)) { - SettingsActionItem(painterResource(R.drawable.ic_restart_alt), stringResource(MR.strings.settings_restart_app), ::restartApp, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_power_settings_new), stringResource(MR.strings.settings_shutdown), { shutdownAppAlert(::shutdownApp) }, extraPadding = true) - SettingsActionItem(painterResource(R.drawable.ic_code), stringResource(MR.strings.settings_developer_tools), showSettingsModal { DeveloperView(it, showCustomModal, withAuth) }, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_restart_alt), stringResource(MR.strings.settings_restart_app), ::restartApp, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_power_settings_new), stringResource(MR.strings.settings_shutdown), { shutdownAppAlert(::shutdownApp) }, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_code), stringResource(MR.strings.settings_developer_tools), showSettingsModal { DeveloperView(it, showCustomModal, withAuth) }, extraPadding = true) AppVersionItem(showVersion) } SectionBottomSpacer() @@ -199,7 +199,7 @@ fun SettingsIncognitoActionItem( onClickInfo: () -> Unit, ) { SettingsPreferenceItemWithInfo( - if (incognito.value) painterResource(R.drawable.ic_theater_comedy_filled) else painterResource(R.drawable.ic_theater_comedy), + if (incognito.value) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_theater_comedy), if (incognito.value) Indigo else MaterialTheme.colors.secondary, stringResource(MR.strings.incognito), stopped, @@ -236,7 +236,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) { ) { Row(Modifier.weight(1f)) { Icon( - painterResource(R.drawable.ic_database), + painterResource(MR.images.ic_database), contentDescription = stringResource(MR.strings.database_passphrase_and_export), tint = if (encrypted) MaterialTheme.colors.secondary else WarningOrange, ) @@ -245,7 +245,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) { } if (stopped) { Icon( - painterResource(R.drawable.ic_report_filled), + painterResource(MR.images.ic_report_filled), contentDescription = stringResource(MR.strings.chat_is_stopped), tint = Color.Red, modifier = Modifier.padding(end = 6.dp) @@ -257,7 +257,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) { @Composable fun ChatPreferencesItem(showCustomModal: ((@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit)), stopped: Boolean) { SettingsActionItem( - painterResource(R.drawable.ic_toggle_on), + painterResource(MR.images.ic_toggle_on), stringResource(MR.strings.chat_preferences), click = if (stopped) null else ({ withApi { @@ -281,7 +281,7 @@ fun ChatLockItem( val currentLAMode = remember { chatModel.controller.appPrefs.laMode } SettingsActionItemWithContent( click = showSettingsModal { SimplexLockView(chatModel, currentLAMode, setPerformLA) }, - icon = if (performLA.value) painterResource(R.drawable.ic_lock_filled) else painterResource(R.drawable.ic_lock), + icon = if (performLA.value) painterResource(MR.images.ic_lock_filled) else painterResource(MR.images.ic_lock), text = stringResource(MR.strings.chat_lock), iconColor = if (performLA.value) SimplexGreen else MaterialTheme.colors.secondary, extraPadding = false, @@ -293,7 +293,7 @@ fun ChatLockItem( @Composable private fun ContributeItem(uriHandler: UriHandler) { SectionItemViewWithIcon({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat#contribute") }) { Icon( - painterResource(R.drawable.ic_keyboard), + painterResource(MR.images.ic_keyboard), contentDescription = "GitHub", tint = MaterialTheme.colors.secondary, ) @@ -309,7 +309,7 @@ fun ChatLockItem( } ) { Icon( - painterResource(R.drawable.ic_star), + painterResource(MR.images.ic_star), contentDescription = "Google Play", tint = MaterialTheme.colors.secondary, ) @@ -321,7 +321,7 @@ fun ChatLockItem( @Composable private fun StarOnGithubItem(uriHandler: UriHandler) { SectionItemViewWithIcon({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat") }) { Icon( - painter = painterResource(id = R.drawable.ic_github), + painter = painterResource(MR.images.ic_github), contentDescription = "GitHub", tint = MaterialTheme.colors.secondary, ) @@ -333,7 +333,7 @@ fun ChatLockItem( @Composable fun ChatConsoleItem(showTerminal: () -> Unit) { SectionItemView(showTerminal) { Icon( - painter = painterResource(id = R.drawable.ic_outline_terminal), + painter = painterResource(MR.images.ic_outline_terminal), contentDescription = stringResource(MR.strings.chat_console), tint = MaterialTheme.colors.secondary, ) @@ -345,7 +345,7 @@ fun ChatLockItem( @Composable fun InstallTerminalAppItem(uriHandler: UriHandler) { SectionItemView({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat") }) { Icon( - painter = painterResource(id = R.drawable.ic_github), + painter = painterResource(MR.images.ic_github), contentDescription = "GitHub", tint = MaterialTheme.colors.secondary, ) @@ -443,7 +443,7 @@ fun SettingsPreferenceItemWithInfo( prefState: MutableState? = null ) { SettingsActionItemWithContent(icon, null, click = if (stopped) null else onClickInfo, iconColor = iconTint, extraPadding = true,) { - SharedPreferenceToggleWithIcon(text, painterResource(R.drawable.ic_info), stopped, onClickInfo, pref, prefState) + SharedPreferenceToggleWithIcon(text, painterResource(MR.images.ic_info), stopped, onClickInfo, pref, prefState) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt index 9bbf00bbd9..2cd8484296 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt @@ -16,7 +16,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -231,7 +231,7 @@ private fun UserAddressLayout( @Composable private fun CreateAddressButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_qr_code), + painterResource(MR.images.ic_qr_code), stringResource(MR.strings.create_simplex_address), onClick, iconColor = MaterialTheme.colors.primary, @@ -242,7 +242,7 @@ private fun CreateAddressButton(onClick: () -> Unit) { @Composable private fun LearnMoreButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_info), + painterResource(MR.images.ic_info), stringResource(MR.strings.learn_more_about_address), onClick, ) @@ -251,7 +251,7 @@ private fun LearnMoreButton(onClick: () -> Unit) { @Composable fun ShareViaEmailButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_mail), + painterResource(MR.images.ic_mail), stringResource(MR.strings.invite_friends), onClick, iconColor = MaterialTheme.colors.primary, @@ -263,7 +263,7 @@ fun ShareViaEmailButton(onClick: () -> Unit) { fun ShareWithContactsButton(shareViaProfile: MutableState, setProfileAddress: (Boolean) -> Unit) { PreferenceToggleWithIcon( stringResource(MR.strings.share_with_contacts), - painterResource(R.drawable.ic_person), + painterResource(MR.images.ic_person), checked = shareViaProfile.value, ) { on -> shareViaProfile.value = on @@ -301,7 +301,7 @@ fun ShareWithContactsButton(shareViaProfile: MutableState, setProfileAd @Composable private fun AutoAcceptToggle(autoAcceptState: MutableState, saveAas: (AutoAcceptState) -> Unit) { - PreferenceToggleWithIcon(stringResource(MR.strings.auto_accept_contact), painterResource(R.drawable.ic_check), checked = autoAcceptState.value.enable) { + PreferenceToggleWithIcon(stringResource(MR.strings.auto_accept_contact), painterResource(MR.images.ic_check), checked = autoAcceptState.value.enable) { autoAcceptState.value = if (!it) AutoAcceptState() else @@ -313,7 +313,7 @@ private fun AutoAcceptToggle(autoAcceptState: MutableState, sav @Composable private fun DeleteAddressButton(onClick: () -> Unit) { SettingsActionItem( - painterResource(R.drawable.ic_delete), + painterResource(MR.images.ic_delete), stringResource(MR.strings.delete_address), onClick, iconColor = MaterialTheme.colors.error, @@ -390,7 +390,7 @@ private fun AutoAcceptSection( private fun AcceptIncognitoToggle(autoAcceptState: MutableState) { PreferenceToggleWithIcon( stringResource(MR.strings.accept_contact_incognito_button), - if (autoAcceptState.value.incognito) painterResource(R.drawable.ic_theater_comedy_filled) else painterResource(R.drawable.ic_theater_comedy), + if (autoAcceptState.value.incognito) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_theater_comedy), if (autoAcceptState.value.incognito) Indigo else MaterialTheme.colors.secondary, autoAcceptState.value.incognito, ) { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt index 3b30c42e79..ee03a689ec 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -188,7 +188,7 @@ fun EditImageButton(click: () -> Unit) { modifier = Modifier.size(30.dp) ) { Icon( - painterResource(R.drawable.ic_photo_camera), + painterResource(MR.images.ic_photo_camera), contentDescription = stringResource(MR.strings.edit_image), tint = MaterialTheme.colors.primary, modifier = Modifier.size(30.dp) @@ -200,7 +200,7 @@ fun EditImageButton(click: () -> Unit) { fun DeleteImageButton(click: () -> Unit) { IconButton(onClick = click) { Icon( - painterResource(R.drawable.ic_close), + painterResource(MR.images.ic_close), contentDescription = stringResource(MR.strings.delete_image), tint = MaterialTheme.colors.primary, ) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 0b49c2d889..49024f5977 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight @@ -159,7 +159,7 @@ private fun UserProfilesLayout( ) { if (profileHidden.value) { SectionView { - SettingsActionItem(painterResource(R.drawable.ic_lock_open), stringResource(MR.strings.enter_password_to_show), click = { + SettingsActionItem(painterResource(MR.images.ic_lock_open), stringResource(MR.strings.enter_password_to_show), click = { profileHidden.value = false } ) @@ -175,7 +175,7 @@ private fun UserProfilesLayout( } if (searchTextOrPassword.value.trim().isEmpty()) { SectionItemView(addUser, minHeight = 68.dp) { - Icon(painterResource(R.drawable.ic_add), stringResource(MR.strings.users_add), tint = MaterialTheme.colors.primary) + Icon(painterResource(MR.images.ic_add), stringResource(MR.strings.users_add), tint = MaterialTheme.colors.primary) Spacer(Modifier.padding(horizontal = 4.dp)) Text(stringResource(MR.strings.users_add), color = MaterialTheme.colors.primary) } @@ -218,30 +218,30 @@ private fun UserView( Box(Modifier.padding(horizontal = DEFAULT_PADDING)) { DefaultDropdownMenu(showMenu) { if (user.hidden) { - ItemAction(stringResource(MR.strings.user_unhide), painterResource(R.drawable.ic_lock_open), onClick = { + ItemAction(stringResource(MR.strings.user_unhide), painterResource(MR.images.ic_lock_open), onClick = { showMenu.value = false unhideUser(user) }) } else { if (visibleUsersCount > 1) { - ItemAction(stringResource(MR.strings.user_hide), painterResource(R.drawable.ic_lock), onClick = { + ItemAction(stringResource(MR.strings.user_hide), painterResource(MR.images.ic_lock), onClick = { showMenu.value = false showHiddenProfile(user) }) } if (user.showNtfs) { - ItemAction(stringResource(MR.strings.user_mute), painterResource(R.drawable.ic_notifications_off), onClick = { + ItemAction(stringResource(MR.strings.user_mute), painterResource(MR.images.ic_notifications_off), onClick = { showMenu.value = false muteUser(user) }) } else { - ItemAction(stringResource(MR.strings.user_unmute), painterResource(R.drawable.ic_notifications), onClick = { + ItemAction(stringResource(MR.strings.user_unmute), painterResource(MR.images.ic_notifications), onClick = { showMenu.value = false unmuteUser(user) }) } } - ItemAction(stringResource(MR.strings.delete_verb), painterResource(R.drawable.ic_delete), color = Color.Red, onClick = { + ItemAction(stringResource(MR.strings.delete_verb), painterResource(MR.images.ic_delete), color = Color.Red, onClick = { removeUser(user) showMenu.value = false }) diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_account_circle_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_account_circle_filled.xml deleted file mode 100644 index 3af5db1b74..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_account_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_add.xml b/apps/multiplatform/android/src/main/res/drawable/ic_add.xml deleted file mode 100644 index 4f306c05ae..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_add.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_add_link.xml b/apps/multiplatform/android/src/main/res/drawable/ic_add_link.xml deleted file mode 100644 index 0da3e849c2..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_add_link.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_add_photo.xml b/apps/multiplatform/android/src/main/res/drawable/ic_add_photo.xml deleted file mode 100644 index acbab9da1c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_add_photo.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction.xml b/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction.xml deleted file mode 100644 index 093d8fcc44..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction_filled.xml deleted file mode 100644 index 1ffc21bc28..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_add_reaction_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_all_inclusive.xml b/apps/multiplatform/android/src/main/res/drawable/ic_all_inclusive.xml deleted file mode 100644 index 08070a066c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_all_inclusive.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_back_ios_new.xml b/apps/multiplatform/android/src/main/res/drawable/ic_arrow_back_ios_new.xml deleted file mode 100644 index 8d3135bf15..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_back_ios_new.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_downward.xml b/apps/multiplatform/android/src/main/res/drawable/ic_arrow_downward.xml deleted file mode 100644 index d2cef9fe2d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_downward.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_forward_ios.xml b/apps/multiplatform/android/src/main/res/drawable/ic_arrow_forward_ios.xml deleted file mode 100644 index 1eb5f7a9fb..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_forward_ios.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_upward.xml b/apps/multiplatform/android/src/main/res/drawable/ic_arrow_upward.xml deleted file mode 100644 index 3a52b50248..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_arrow_upward.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_article.xml b/apps/multiplatform/android/src/main/res/drawable/ic_article.xml deleted file mode 100644 index 607c3d78ec..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_article.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_attach_file_filled_500.xml b/apps/multiplatform/android/src/main/res/drawable/ic_attach_file_filled_500.xml deleted file mode 100644 index f2f923b6d6..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_attach_file_filled_500.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_backspace.xml b/apps/multiplatform/android/src/main/res/drawable/ic_backspace.xml deleted file mode 100644 index b9837296dd..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_backspace.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_backup.xml b/apps/multiplatform/android/src/main/res/drawable/ic_backup.xml deleted file mode 100644 index 248404d464..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_backup.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_battery_2_bar.xml b/apps/multiplatform/android/src/main/res/drawable/ic_battery_2_bar.xml deleted file mode 100644 index cbbe134adf..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_battery_2_bar.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_battery_3_bar.xml b/apps/multiplatform/android/src/main/res/drawable/ic_battery_3_bar.xml deleted file mode 100644 index 1e60f37eb1..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_battery_3_bar.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_bolt.xml b/apps/multiplatform/android/src/main/res/drawable/ic_bolt.xml deleted file mode 100644 index 4ced77dc1d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_bolt.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_bolt_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_bolt_filled.xml deleted file mode 100644 index 64fa349468..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_bolt_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_cable.xml b/apps/multiplatform/android/src/main/res/drawable/ic_cable.xml deleted file mode 100644 index b801b36d83..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_cable.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_call.xml b/apps/multiplatform/android/src/main/res/drawable/ic_call.xml deleted file mode 100644 index c38c3fe70a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_call.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_call_500.xml b/apps/multiplatform/android/src/main/res/drawable/ic_call_500.xml deleted file mode 100644 index c53c2e6594..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_call_500.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_call_end.xml b/apps/multiplatform/android/src/main/res/drawable/ic_call_end.xml deleted file mode 100644 index f71577fa09..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_call_end.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_call_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_call_filled.xml deleted file mode 100644 index 873cc021e5..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_call_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_camera_enhance.xml b/apps/multiplatform/android/src/main/res/drawable/ic_camera_enhance.xml deleted file mode 100644 index 126527f211..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_camera_enhance.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_cancel_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_cancel_filled.xml deleted file mode 100644 index cbb3667bbb..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_cancel_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_chat.xml b/apps/multiplatform/android/src/main/res/drawable/ic_chat.xml deleted file mode 100644 index 726b53ab7b..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_check.xml b/apps/multiplatform/android/src/main/res/drawable/ic_check.xml deleted file mode 100644 index cb47d7db19..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_check.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_check_circle_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_check_circle_filled.xml deleted file mode 100644 index a1f32800fe..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_check_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_check_fill.xml b/apps/multiplatform/android/src/main/res/drawable/ic_check_fill.xml deleted file mode 100644 index da2028b14a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_check_fill.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_chevron_right.xml b/apps/multiplatform/android/src/main/res/drawable/ic_chevron_right.xml deleted file mode 100644 index 622e1984ac..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_chevron_right.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_circle.xml b/apps/multiplatform/android/src/main/res/drawable/ic_circle.xml deleted file mode 100644 index 129ad17b01..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_circle.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_circle_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_circle_filled.xml deleted file mode 100644 index fa62888802..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_code.xml b/apps/multiplatform/android/src/main/res/drawable/ic_code.xml deleted file mode 100644 index a20431beb1..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_code.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_content_copy.xml b/apps/multiplatform/android/src/main/res/drawable/ic_content_copy.xml deleted file mode 100644 index b8952b0299..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_content_copy.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_content_paste.xml b/apps/multiplatform/android/src/main/res/drawable/ic_content_paste.xml deleted file mode 100644 index 4e586dab46..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_content_paste.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_database.xml b/apps/multiplatform/android/src/main/res/drawable/ic_database.xml deleted file mode 100644 index f56547850a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_database.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_delete.xml b/apps/multiplatform/android/src/main/res/drawable/ic_delete.xml deleted file mode 100644 index 5be76620e4..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_delete.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever.xml b/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever.xml deleted file mode 100644 index a82d8de833..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever_filled.xml deleted file mode 100644 index 476b04c7bd..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_delete_forever_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_dns.xml b/apps/multiplatform/android/src/main/res/drawable/ic_dns.xml deleted file mode 100644 index 60a762908c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_dns.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_do_not_disturb_on.xml b/apps/multiplatform/android/src/main/res/drawable/ic_do_not_disturb_on.xml deleted file mode 100644 index 6ffd006109..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_do_not_disturb_on.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_done_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_done_filled.xml deleted file mode 100644 index da2028b14a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_done_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_download.xml b/apps/multiplatform/android/src/main/res/drawable/ic_download.xml deleted file mode 100644 index 92d2447b67..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_download.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_draft.xml b/apps/multiplatform/android/src/main/res/drawable/ic_draft.xml deleted file mode 100644 index 7ec25c71a9..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_draft.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_draft_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_draft_filled.xml deleted file mode 100644 index 5a99658815..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_draft_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_drive_folder_upload.xml b/apps/multiplatform/android/src/main/res/drawable/ic_drive_folder_upload.xml deleted file mode 100644 index e2f302cbc9..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_drive_folder_upload.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_edit.xml b/apps/multiplatform/android/src/main/res/drawable/ic_edit.xml deleted file mode 100644 index 4584f093bf..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_edit.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_edit_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_edit_filled.xml deleted file mode 100644 index 7041946226..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_edit_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_edit_note.xml b/apps/multiplatform/android/src/main/res/drawable/ic_edit_note.xml deleted file mode 100644 index 4c45579a89..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_edit_note.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_electrical_services.xml b/apps/multiplatform/android/src/main/res/drawable/ic_electrical_services.xml deleted file mode 100644 index 0c9da67ae6..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_electrical_services.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_error.xml b/apps/multiplatform/android/src/main/res/drawable/ic_error.xml deleted file mode 100644 index 78bb603a3b..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_error.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_error_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_error_filled.xml deleted file mode 100644 index 377c6e25e4..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_error_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_expand_less.xml b/apps/multiplatform/android/src/main/res/drawable/ic_expand_less.xml deleted file mode 100644 index cd7865710f..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_expand_less.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_expand_more.xml b/apps/multiplatform/android/src/main/res/drawable/ic_expand_more.xml deleted file mode 100644 index 2033d51bfe..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_expand_more.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_filter_list.xml b/apps/multiplatform/android/src/main/res/drawable/ic_filter_list.xml deleted file mode 100644 index c34f1d13b8..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_filter_list.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_flag.xml b/apps/multiplatform/android/src/main/res/drawable/ic_flag.xml deleted file mode 100644 index 794d8944a1..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_flag.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_flip_camera_android_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_flip_camera_android_filled.xml deleted file mode 100644 index 7325087c95..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_flip_camera_android_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_github.xml b/apps/multiplatform/android/src/main/res/drawable/ic_github.xml deleted file mode 100644 index 1c7032037a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_github.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_group.xml b/apps/multiplatform/android/src/main/res/drawable/ic_group.xml deleted file mode 100644 index 3023eaac7d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_group.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_help.xml b/apps/multiplatform/android/src/main/res/drawable/ic_help.xml deleted file mode 100644 index 7811daed24..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_help.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_image.xml b/apps/multiplatform/android/src/main/res/drawable/ic_image.xml deleted file mode 100644 index 0319f37153..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_image.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_info.xml b/apps/multiplatform/android/src/main/res/drawable/ic_info.xml deleted file mode 100644 index 49d73a35ef..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_info.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_inventory_2.xml b/apps/multiplatform/android/src/main/res/drawable/ic_inventory_2.xml deleted file mode 100644 index c76a375f2e..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_inventory_2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_ios_share.xml b/apps/multiplatform/android/src/main/res/drawable/ic_ios_share.xml deleted file mode 100644 index e7658452c0..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_ios_share.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard.xml b/apps/multiplatform/android/src/main/res/drawable/ic_keyboard.xml deleted file mode 100644 index 1b181cd9b3..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_arrow_down.xml b/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_arrow_down.xml deleted file mode 100644 index 64d16805e8..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_arrow_down.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice.xml b/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice.xml deleted file mode 100644 index 6abc105438..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice_filled.xml deleted file mode 100644 index 7b68c1c490..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_keyboard_voice_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_launcher_background.xml b/apps/multiplatform/android/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 140f829468..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_light_mode.xml b/apps/multiplatform/android/src/main/res/drawable/ic_light_mode.xml deleted file mode 100644 index 3ec23acc6e..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_light_mode.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_link.xml b/apps/multiplatform/android/src/main/res/drawable/ic_link.xml deleted file mode 100644 index 0654256956..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_link.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_lock_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_lock_filled.xml deleted file mode 100644 index 426350d6be..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_lock_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_lock_open.xml b/apps/multiplatform/android/src/main/res/drawable/ic_lock_open.xml deleted file mode 100644 index 2188d06927..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_lock_open.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_login.xml b/apps/multiplatform/android/src/main/res/drawable/ic_login.xml deleted file mode 100644 index 6cd2179c08..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_login.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_logout.xml b/apps/multiplatform/android/src/main/res/drawable/ic_logout.xml deleted file mode 100644 index 39eb443215..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_logout.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_mail.xml b/apps/multiplatform/android/src/main/res/drawable/ic_mail.xml deleted file mode 100644 index 3a063bd429..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_mail.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_manage_accounts.xml b/apps/multiplatform/android/src/main/res/drawable/ic_manage_accounts.xml deleted file mode 100644 index 0d1cc9bf77..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_manage_accounts.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_maps_ugc.xml b/apps/multiplatform/android/src/main/res/drawable/ic_maps_ugc.xml deleted file mode 100644 index 6450dd487b..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_maps_ugc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_mark_chat_unread.xml b/apps/multiplatform/android/src/main/res/drawable/ic_mark_chat_unread.xml deleted file mode 100644 index 7d41d7ef1d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_mark_chat_unread.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_menu.xml b/apps/multiplatform/android/src/main/res/drawable/ic_menu.xml deleted file mode 100644 index 81e2bfba4a..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_menu.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_mic.xml b/apps/multiplatform/android/src/main/res/drawable/ic_mic.xml deleted file mode 100644 index 6abc105438..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_mic.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_mic_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_mic_filled.xml deleted file mode 100644 index 7b68c1c490..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_mic_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_mic_off.xml b/apps/multiplatform/android/src/main/res/drawable/ic_mic_off.xml deleted file mode 100644 index 1c4870f5fe..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_mic_off.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_more_horiz.xml b/apps/multiplatform/android/src/main/res/drawable/ic_more_horiz.xml deleted file mode 100644 index db2892846d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_more_horiz.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_note_add.xml b/apps/multiplatform/android/src/main/res/drawable/ic_note_add.xml deleted file mode 100644 index 38cc20d3df..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_note_add.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_notifications.xml b/apps/multiplatform/android/src/main/res/drawable/ic_notifications.xml deleted file mode 100644 index 3cba3d1686..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_notifications.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off.xml b/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off.xml deleted file mode 100644 index da9106bff0..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off_filled.xml deleted file mode 100644 index 6f0b0b768b..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_notifications_off_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_open_in_new.xml b/apps/multiplatform/android/src/main/res/drawable/ic_open_in_new.xml deleted file mode 100644 index a9a964d5cc..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_open_in_new.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_outline_terminal.xml b/apps/multiplatform/android/src/main/res/drawable/ic_outline_terminal.xml deleted file mode 100644 index e03f112d70..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_outline_terminal.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_pause_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_pause_filled.xml deleted file mode 100644 index 3e985d21f4..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_pause_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_pending.xml b/apps/multiplatform/android/src/main/res/drawable/ic_pending.xml deleted file mode 100644 index 9cb97c8b19..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_pending.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_pending_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_pending_filled.xml deleted file mode 100644 index bf17063321..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_pending_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_person.xml b/apps/multiplatform/android/src/main/res/drawable/ic_person.xml deleted file mode 100644 index 12ca71b4f9..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_person.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_person_add.xml b/apps/multiplatform/android/src/main/res/drawable/ic_person_add.xml deleted file mode 100644 index f16ef30b2d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_person_add.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_person_add_500.xml b/apps/multiplatform/android/src/main/res/drawable/ic_person_add_500.xml deleted file mode 100644 index 9406a99761..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_person_add_500.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_phone_in_talk_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_phone_in_talk_filled.xml deleted file mode 100644 index 624d6e04a3..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_phone_in_talk_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_photo_camera.xml b/apps/multiplatform/android/src/main/res/drawable/ic_photo_camera.xml deleted file mode 100644 index e6c55dbba7..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_photo_camera.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_play_arrow_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_play_arrow_filled.xml deleted file mode 100644 index bcd917b7da..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_play_arrow_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_power_settings_new.xml b/apps/multiplatform/android/src/main/res/drawable/ic_power_settings_new.xml deleted file mode 100644 index a73a866f2e..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_power_settings_new.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_priority_high.xml b/apps/multiplatform/android/src/main/res/drawable/ic_priority_high.xml deleted file mode 100644 index b7ddf72318..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_priority_high.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_qr_code.xml b/apps/multiplatform/android/src/main/res/drawable/ic_qr_code.xml deleted file mode 100644 index 1eb7cfb059..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_qr_code.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_repeat_one.xml b/apps/multiplatform/android/src/main/res/drawable/ic_repeat_one.xml deleted file mode 100644 index 0987aadbf6..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_repeat_one.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_replay.xml b/apps/multiplatform/android/src/main/res/drawable/ic_replay.xml deleted file mode 100644 index 7a9c7d7589..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_replay.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_reply.xml b/apps/multiplatform/android/src/main/res/drawable/ic_reply.xml deleted file mode 100644 index 4a2dec582d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_reply.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_report_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_report_filled.xml deleted file mode 100644 index f1be1d2e41..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_report_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_restart_alt.xml b/apps/multiplatform/android/src/main/res/drawable/ic_restart_alt.xml deleted file mode 100644 index 92043a534d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_restart_alt.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_ring_volume.xml b/apps/multiplatform/android/src/main/res/drawable/ic_ring_volume.xml deleted file mode 100644 index a60020f3ea..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_ring_volume.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_safety_divider.xml b/apps/multiplatform/android/src/main/res/drawable/ic_safety_divider.xml deleted file mode 100644 index 8b49b2ac03..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_safety_divider.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_search.xml b/apps/multiplatform/android/src/main/res/drawable/ic_search.xml deleted file mode 100644 index a1c7c1f894..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_search.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_search_500.xml b/apps/multiplatform/android/src/main/res/drawable/ic_search_500.xml deleted file mode 100644 index 2a1d817b85..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_search_500.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_security.xml b/apps/multiplatform/android/src/main/res/drawable/ic_security.xml deleted file mode 100644 index cfe471b2ea..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_security.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_settings.xml b/apps/multiplatform/android/src/main/res/drawable/ic_settings.xml deleted file mode 100644 index a59cecf3d5..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_settings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_settings_backup_restore.xml b/apps/multiplatform/android/src/main/res/drawable/ic_settings_backup_restore.xml deleted file mode 100644 index 42e11a064d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_settings_backup_restore.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_settings_ethernet.xml b/apps/multiplatform/android/src/main/res/drawable/ic_settings_ethernet.xml deleted file mode 100644 index 0d049ce4d8..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_settings_ethernet.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_settings_phone.xml b/apps/multiplatform/android/src/main/res/drawable/ic_settings_phone.xml deleted file mode 100644 index d26a6b4e4c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_settings_phone.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_share.xml b/apps/multiplatform/android/src/main/res/drawable/ic_share.xml deleted file mode 100644 index dd674cd84b..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_share.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_share_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_share_filled.xml deleted file mode 100644 index 475cef6c18..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_share_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_shield.xml b/apps/multiplatform/android/src/main/res/drawable/ic_shield.xml deleted file mode 100644 index 27e75aab71..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_shield.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_smart_display.xml b/apps/multiplatform/android/src/main/res/drawable/ic_smart_display.xml deleted file mode 100644 index b7c815b66d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_smart_display.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_star.xml b/apps/multiplatform/android/src/main/res/drawable/ic_star.xml deleted file mode 100644 index 797b2514b7..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_star.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_star_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_star_filled.xml deleted file mode 100644 index 278b867186..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_star_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_star_off.xml b/apps/multiplatform/android/src/main/res/drawable/ic_star_off.xml deleted file mode 100644 index 8806fd1a5e..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_star_off.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_stop_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_stop_filled.xml deleted file mode 100644 index 412bcd6429..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_stop_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_supervised_user_circle_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_supervised_user_circle_filled.xml deleted file mode 100644 index 68545edc1d..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_supervised_user_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle.xml b/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle.xml deleted file mode 100644 index 9e8b59d8a2..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle_filled.xml deleted file mode 100644 index 554f616d6e..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_swap_horizontal_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_tag.xml b/apps/multiplatform/android/src/main/res/drawable/ic_tag.xml deleted file mode 100644 index a3c686ec3c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_tag.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_task.xml b/apps/multiplatform/android/src/main/res/drawable/ic_task.xml deleted file mode 100644 index 8fe57f2ee7..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_task.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy.xml b/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy.xml deleted file mode 100644 index d139cc2cef..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy_filled.xml deleted file mode 100644 index bff47ca72c..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_theater_comedy_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_timer.xml b/apps/multiplatform/android/src/main/res/drawable/ic_timer.xml deleted file mode 100644 index b29ec1a006..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_timer.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_timer_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_timer_filled.xml deleted file mode 100644 index d608045bbf..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_timer_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_toggle_on.xml b/apps/multiplatform/android/src/main/res/drawable/ic_toggle_on.xml deleted file mode 100644 index d5cd169318..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_toggle_on.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_translate.xml b/apps/multiplatform/android/src/main/res/drawable/ic_translate.xml deleted file mode 100644 index 7bd88bd420..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_translate.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_travel_explore.xml b/apps/multiplatform/android/src/main/res/drawable/ic_travel_explore.xml deleted file mode 100644 index 71c264d4be..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_travel_explore.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_upload_file.xml b/apps/multiplatform/android/src/main/res/drawable/ic_upload_file.xml deleted file mode 100644 index bc80a6e1db..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_upload_file.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_verified_user.xml b/apps/multiplatform/android/src/main/res/drawable/ic_verified_user.xml deleted file mode 100644 index 02951ba057..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_verified_user.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_videocam.xml b/apps/multiplatform/android/src/main/res/drawable/ic_videocam.xml deleted file mode 100644 index 964c287276..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_videocam.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_videocam_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_videocam_filled.xml deleted file mode 100644 index e67552c004..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_videocam_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_videocam_off.xml b/apps/multiplatform/android/src/main/res/drawable/ic_videocam_off.xml deleted file mode 100644 index d508eb273f..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_videocam_off.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_visibility.xml b/apps/multiplatform/android/src/main/res/drawable/ic_visibility.xml deleted file mode 100644 index e9f1762303..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_visibility.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_visibility_filled.xml deleted file mode 100644 index 35958c3a27..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off.xml b/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off.xml deleted file mode 100644 index 202fd6db1f..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off_filled.xml deleted file mode 100644 index 9656100328..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_visibility_off_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_volume_down.xml b/apps/multiplatform/android/src/main/res/drawable/ic_volume_down.xml deleted file mode 100644 index 6e19f180d4..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_volume_down.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_volume_up.xml b/apps/multiplatform/android/src/main/res/drawable/ic_volume_up.xml deleted file mode 100644 index 2e301273bb..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_volume_up.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_filled.xml deleted file mode 100644 index f13099ed6f..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_off_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_off_filled.xml deleted file mode 100644 index c07f49f274..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_vpn_key_off_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_warning_filled.xml b/apps/multiplatform/android/src/main/res/drawable/ic_warning_filled.xml deleted file mode 100644 index e7f71762ef..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_warning_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/android/src/main/res/drawable/ic_wifi_tethering.xml b/apps/multiplatform/android/src/main/res/drawable/ic_wifi_tethering.xml deleted file mode 100644 index 065c461542..0000000000 --- a/apps/multiplatform/android/src/main/res/drawable/ic_wifi_tethering.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 880dbf729b..092f87690b 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -96,10 +96,6 @@ kotlin { api("androidx.camera:camera-lifecycle:${camerax_version}") api("androidx.camera:camera-view:${camerax_version}") - // LALAL REPLACE IT WITH SOURCE - // Wheel picker - api("com.github.zj565061763:compose-wheel-picker:1.0.0-alpha10") - // LALAL REMOVE api("org.jsoup:jsoup:1.13.1") api("com.godaddy.android.colorpicker:compose-color-picker-jvm:0.7.0") diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png b/apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png new file mode 100644 index 0000000000..e413ad857d Binary files /dev/null and b/apps/multiplatform/common/src/androidMain/res/drawable/icon_dark_blue_round_common.png differ diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/icon_foreground_android_common.png b/apps/multiplatform/common/src/androidMain/res/drawable/icon_foreground_android_common.png new file mode 100644 index 0000000000..6ab60a3293 Binary files /dev/null and b/apps/multiplatform/common/src/androidMain/res/drawable/icon_foreground_android_common.png differ diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png b/apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png new file mode 100644 index 0000000000..755904ee8e Binary files /dev/null and b/apps/multiplatform/common/src/androidMain/res/drawable/icon_round_common.png differ diff --git a/apps/multiplatform/common/src/androidMain/res/drawable/send_msg_view_background.xml b/apps/multiplatform/common/src/androidMain/res/drawable/send_msg_view_background.xml new file mode 100644 index 0000000000..be98ce5da5 --- /dev/null +++ b/apps/multiplatform/common/src/androidMain/res/drawable/send_msg_view_background.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/apps/multiplatform/common/src/androidMain/res/raw/ring_once.mp3 b/apps/multiplatform/common/src/androidMain/res/raw/ring_once.mp3 new file mode 100644 index 0000000000..9583277336 Binary files /dev/null and b/apps/multiplatform/common/src/androidMain/res/raw/ring_once.mp3 differ diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPicker.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPicker.kt new file mode 100644 index 0000000000..a1e0b15e33 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPicker.kt @@ -0,0 +1,316 @@ +// Fork of https://github.com/zj565061763/compose-wheel-picker to make multi-platform + +package com.sd.lib.compose.wheel_picker + +import androidx.compose.animation.core.DecayAnimationSpec +import androidx.compose.animation.core.calculateTargetValue +import androidx.compose.animation.core.exponentialDecay +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection +import androidx.compose.ui.input.nestedscroll.NestedScrollSource +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.Velocity +import androidx.compose.ui.unit.dp +import kotlin.math.absoluteValue + +interface FWheelPickerContentScope { + val state: FWheelPickerState +} + +interface FWheelPickerContentWrapperScope { + val state: FWheelPickerState + + @Composable + fun content(index: Int) +} + +// LALAL: make separate repo for this + +@Composable +fun FVerticalWheelPicker( + count: Int, + state: FWheelPickerState = rememberFWheelPickerState(), + modifier: Modifier = Modifier, + key: ((index: Int) -> Any)? = null, + itemHeight: Dp = 35.dp, + unfocusedCount: Int = 1, + userScrollEnabled: Boolean = true, + reverseLayout: Boolean = false, + debug: Boolean = false, + focus: @Composable () -> Unit = { FWheelPickerFocusVertical() }, + contentWrapper: @Composable FWheelPickerContentWrapperScope.(index: Int) -> Unit = DefaultWheelPickerContentWrapper, + content: @Composable FWheelPickerContentScope.(index: Int) -> Unit, +) { + WheelPicker( + isVertical = true, + count = count, + state = state, + modifier = modifier, + key = key, + itemSize = itemHeight, + unfocusedCount = unfocusedCount, + userScrollEnabled = userScrollEnabled, + reverseLayout = reverseLayout, + debug = debug, + focus = focus, + contentWrapper = contentWrapper, + content = content, + ) +} + +@Composable +fun FHorizontalWheelPicker( + count: Int, + state: FWheelPickerState = rememberFWheelPickerState(), + modifier: Modifier = Modifier, + key: ((index: Int) -> Any)? = null, + itemWidth: Dp = 35.dp, + unfocusedCount: Int = 1, + userScrollEnabled: Boolean = true, + reverseLayout: Boolean = false, + debug: Boolean = false, + focus: @Composable () -> Unit = { FWheelPickerFocusHorizontal() }, + contentWrapper: @Composable FWheelPickerContentWrapperScope.(index: Int) -> Unit = DefaultWheelPickerContentWrapper, + content: @Composable FWheelPickerContentScope.(index: Int) -> Unit, +) { + WheelPicker( + isVertical = false, + count = count, + state = state, + modifier = modifier, + key = key, + itemSize = itemWidth, + unfocusedCount = unfocusedCount, + userScrollEnabled = userScrollEnabled, + reverseLayout = reverseLayout, + debug = debug, + focus = focus, + contentWrapper = contentWrapper, + content = content, + ) +} + +@Composable +private fun WheelPicker( + isVertical: Boolean, + count: Int, + state: FWheelPickerState, + modifier: Modifier, + key: ((index: Int) -> Any)?, + itemSize: Dp, + unfocusedCount: Int, + userScrollEnabled: Boolean, + reverseLayout: Boolean, + debug: Boolean, + focus: @Composable () -> Unit, + contentWrapper: @Composable FWheelPickerContentWrapperScope.(index: Int) -> Unit, + content: @Composable FWheelPickerContentScope.(index: Int) -> Unit, +) { + require(count >= 0) { "require count >= 0" } + require(unfocusedCount >= 1) { "require unfocusedCount >= 1" } + + state.debug = debug + LaunchedEffect(state, count) { + state.notifyCountChanged(count) + } + + val nestedScrollConnection = remember(state) { + WheelPickerNestedScrollConnection(state) + }.apply { + this.isVertical = isVertical + this.itemSizePx = with(LocalDensity.current) { itemSize.roundToPx() } + this.reverseLayout = reverseLayout + } + + val totalSize = remember(itemSize, unfocusedCount) { + itemSize * (unfocusedCount * 2 + 1) + } + + val contentWrapperScope = remember(state) { + val contentScope = WheelPickerContentScopeImpl(state) + FWheelPickerContentWrapperScopeImpl(contentScope) + }.apply { + this.content = content + } + + Box( + modifier = modifier + .nestedScroll(nestedScrollConnection) + .run { + if (totalSize > 0.dp) { + if (isVertical) { + height(totalSize).widthIn(40.dp) + } else { + width(totalSize).heightIn(40.dp) + } + } else { + this + } + }, + contentAlignment = Alignment.Center, + ) { + + val lazyListScope: LazyListScope.() -> Unit = { + repeat(unfocusedCount) { + item { + ItemSizeBox( + isVertical = isVertical, + itemSize = itemSize, + ) + } + } + + items( + count = count, + key = key, + ) { index -> + ItemSizeBox( + isVertical = isVertical, + itemSize = itemSize, + ) { + contentWrapperScope.contentWrapper(index) + } + } + + repeat(unfocusedCount) { + item { + ItemSizeBox( + isVertical = isVertical, + itemSize = itemSize, + ) + } + } + } + + if (isVertical) { + LazyColumn( + state = state.lazyListState, + horizontalAlignment = Alignment.CenterHorizontally, + reverseLayout = reverseLayout, + userScrollEnabled = userScrollEnabled, + modifier = Modifier.matchParentSize(), + content = lazyListScope, + ) + } else { + LazyRow( + state = state.lazyListState, + verticalAlignment = Alignment.CenterVertically, + reverseLayout = reverseLayout, + userScrollEnabled = userScrollEnabled, + modifier = Modifier.matchParentSize(), + content = lazyListScope, + ) + } + + ItemSizeBox( + modifier = Modifier.align(Alignment.Center), + isVertical = isVertical, + itemSize = itemSize, + ) { + focus() + } + } +} + +@Composable +private fun ItemSizeBox( + modifier: Modifier = Modifier, + isVertical: Boolean, + itemSize: Dp, + content: @Composable () -> Unit = { }, +) { + Box( + modifier + .run { + if (isVertical) { + height(itemSize) + } else { + width(itemSize) + } + }, + contentAlignment = Alignment.Center, + ) { + content() + } +} + +private class WheelPickerNestedScrollConnection( + private val state: FWheelPickerState, +) : NestedScrollConnection { + var isVertical: Boolean? = null + var itemSizePx: Int? = null + var reverseLayout: Boolean? = null + + override fun onPostScroll(consumed: Offset, available: Offset, source: NestedScrollSource): Offset { + state.synchronizeCurrentIndexSnapshot() + return super.onPostScroll(consumed, available, source) + } + + override suspend fun onPreFling(available: Velocity): Velocity { + val currentIndex = state.synchronizeCurrentIndexSnapshot() + return if (currentIndex >= 0) { + val flingItemCount = available.flingItemCount( + isVertical = isVertical!!, + itemSize = itemSizePx!!, + decay = exponentialDecay(2f), + reverseLayout = reverseLayout!!, + ) + + if (flingItemCount.absoluteValue > 0) { + state.animateScrollToIndex(currentIndex - flingItemCount) + } else { + state.animateScrollToIndex(currentIndex) + } + available + } else { + super.onPreFling(available) + } + } +} + +private fun Velocity.flingItemCount( + isVertical: Boolean, + itemSize: Int, + decay: DecayAnimationSpec, + reverseLayout: Boolean, +): Int { + if (itemSize <= 0) return 0 + val velocity = if (isVertical) y else x + val targetValue = decay.calculateTargetValue(0f, velocity) + val flingItemCount = (targetValue / itemSize).toInt() + return if (reverseLayout) -flingItemCount else flingItemCount +} + +private class WheelPickerContentScopeImpl( + override val state: FWheelPickerState, +) : FWheelPickerContentScope + +private class FWheelPickerContentWrapperScopeImpl( + private val contentScope: FWheelPickerContentScope +) : FWheelPickerContentWrapperScope { + lateinit var content: @Composable FWheelPickerContentScope.(index: Int) -> Unit + + override val state: FWheelPickerState get() = contentScope.state + + @Composable + override fun content(index: Int) { + contentScope.content(index) + } +} + +internal inline fun logMsg(debug: Boolean, block: () -> String) { + if (debug) { + println("FWheelPicker" + block()) + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerDefault.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerDefault.kt new file mode 100644 index 0000000000..ed2533b488 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerDefault.kt @@ -0,0 +1,104 @@ +package com.sd.lib.compose.wheel_picker + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +/** + * The default implementation of focus view in vertical. + */ +@Composable +fun FWheelPickerFocusVertical( + modifier: Modifier = Modifier, + dividerSize: Dp = 1.dp, + dividerColor: Color = DefaultDividerColor, +) { + Box( + modifier = modifier.fillMaxSize() + ) { + Box( + modifier = Modifier + .background(dividerColor) + .height(dividerSize) + .fillMaxWidth() + .align(Alignment.TopCenter), + ) + Box( + modifier = Modifier + .background(dividerColor) + .height(dividerSize) + .fillMaxWidth() + .align(Alignment.BottomCenter), + ) + } +} + +/** + * The default implementation of focus view in horizontal. + */ +@Composable +fun FWheelPickerFocusHorizontal( + modifier: Modifier = Modifier, + dividerSize: Dp = 1.dp, + dividerColor: Color = DefaultDividerColor, +) { + Box( + modifier = modifier.fillMaxSize() + ) { + Box( + modifier = Modifier + .background(dividerColor) + .width(dividerSize) + .fillMaxHeight() + .align(Alignment.CenterStart), + ) + Box( + modifier = Modifier + .background(dividerColor) + .width(dividerSize) + .fillMaxHeight() + .align(Alignment.CenterEnd), + ) + } +} + +/** + * Default divider color. + */ +private val DefaultDividerColor: Color + @Composable + get() = (if (isSystemInDarkTheme()) { + Color.White + } else { + Color.Black + }).copy(alpha = 0.2f) + +/** + * Default content wrapper. + */ +val DefaultWheelPickerContentWrapper: @Composable FWheelPickerContentWrapperScope.(index: Int) -> Unit + get() = { index -> + val isFocus = index == state.currentIndexSnapshot + val targetAlpha = if (isFocus) 1.0f else 0.3f + val targetScale = if (isFocus) 1.0f else 0.8f + val animateScale by animateFloatAsState(targetScale) + Box( + modifier = Modifier + .graphicsLayer { + this.alpha = targetAlpha + this.scaleX = animateScale + this.scaleY = animateScale + } + ) { + content(index) + } + } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerState.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerState.kt new file mode 100644 index 0000000000..154a91b705 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/other/wheel-picker/FWheelPickerState.kt @@ -0,0 +1,223 @@ +package com.sd.lib.compose.wheel_picker + +import androidx.compose.foundation.MutatePriority +import androidx.compose.foundation.gestures.ScrollScope +import androidx.compose.foundation.gestures.ScrollableState +import androidx.compose.foundation.interaction.InteractionSource +import androidx.compose.foundation.lazy.LazyListItemInfo +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.listSaver +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlin.coroutines.Continuation +import kotlin.coroutines.resume +import kotlin.math.absoluteValue + +@Composable +fun rememberFWheelPickerState( + initialIndex: Int = 0, +): FWheelPickerState = rememberSaveable(saver = FWheelPickerState.Saver) { + FWheelPickerState( + initialIndex = initialIndex, + ) +} + +class FWheelPickerState( + initialIndex: Int = 0, +) : ScrollableState { + + internal var debug = false + internal val lazyListState = LazyListState() + + private var _currentIndex by mutableStateOf(-1) + private var _currentIndexSnapshot by mutableStateOf(-1) + + private var _pendingIndex: Int? = initialIndex + set(value) { + field = value + if (value == null) resumeAwaitScroll() + } + private var _pendingIndexContinuation: Continuation? = null + + private var _count = 0 + set(value) { + field = value.coerceAtLeast(0) + } + + /** + * Index of picker when it is idle. + * + * Note that this property is observable and if you use it in the composable function + * it will be recomposed on every change. + */ + val currentIndex: Int + get() = _currentIndex + + /** + * Index of picker when it is idle or drag but not fling. + * + * Note that this property is observable and if you use it in the composable function + * it will be recomposed on every change. + */ + val currentIndexSnapshot: Int + get() = _currentIndexSnapshot + + val interactionSource: InteractionSource + get() = lazyListState.interactionSource + + val hasPendingScroll: Boolean + get() = _pendingIndex != null + + suspend fun animateScrollToIndex( + index: Int, + ) { + logMsg(debug) { "animateScrollToIndex index:$index" } + + val safeIndex = index.coerceAtLeast(0) + lazyListState.animateScrollToItem(safeIndex) + synchronizeCurrentIndex() + } + + suspend fun scrollToIndex( + index: Int, + pending: Boolean = true, + ) { + logMsg(debug) { "scrollToIndex index:$index pending:$pending" } + + val safeIndex = index.coerceAtLeast(0) + lazyListState.scrollToItem(safeIndex) + synchronizeCurrentIndex() + + if (pending) { + awaitScroll(safeIndex) + } + } + + private suspend fun awaitScroll(index: Int) { + if (_currentIndex == index) return + logMsg(debug) { "awaitScroll index $index start" } + + // Resume last continuation before suspend. + resumeAwaitScroll() + + _pendingIndex = index + suspendCancellableCoroutine { + _pendingIndexContinuation = it + it.invokeOnCancellation { + logMsg(debug) { "awaitScroll index $index canceled" } + _pendingIndexContinuation = null + _pendingIndex = null + + } + } + + logMsg(debug) { "awaitScroll index $index finish" } + } + + private fun resumeAwaitScroll() { + _pendingIndexContinuation?.let { + logMsg(debug) { "resumeAwaitScroll pendingIndex:$_pendingIndex" } + it.resume(Unit) + _pendingIndexContinuation = null + } + } + + internal suspend fun notifyCountChanged(count: Int) { + logMsg(debug) { "notifyCountChanged count:$count currentIndex:$_currentIndex pendingIndex:$_pendingIndex" } + + _count = count + + val maxIndex = count - 1 + if (_currentIndex > maxIndex) { + setCurrentIndexInternal(maxIndex) + } else { + _pendingIndex?.let { pendingIndex -> + if (count > pendingIndex) { + scrollToIndex(pendingIndex, pending = false) + } + } + if (_currentIndex < 0) { + synchronizeCurrentIndex() + } + } + } + + private fun synchronizeCurrentIndex() { + logMsg(debug) { "synchronizeCurrentIndex" } + val index = synchronizeCurrentIndexSnapshot() + setCurrentIndexInternal(index) + } + + private fun setCurrentIndexInternal(index: Int) { + val safeIndex = index.coerceAtLeast(-1) + if (_currentIndex != safeIndex) { + logMsg(debug) { "Current index changed $safeIndex" } + _currentIndex = safeIndex + _currentIndexSnapshot = safeIndex + if (_pendingIndex == safeIndex) { + _pendingIndex = null + } + } + } + + internal fun synchronizeCurrentIndexSnapshot(): Int { + return (mostStartItemInfo()?.index ?: -1).also { + _currentIndexSnapshot = it + } + } + + /** + * The item closest to the viewport start. + */ + private fun mostStartItemInfo(): LazyListItemInfo? { + if (_count <= 0) return null + + val layoutInfo = lazyListState.layoutInfo + val listInfo = layoutInfo.visibleItemsInfo + + if (listInfo.isEmpty()) return null + if (listInfo.size == 1) return listInfo.first() + + val firstItem = listInfo.first() + val firstOffsetDelta = (firstItem.offset - layoutInfo.viewportStartOffset).absoluteValue + return if (firstOffsetDelta < firstItem.size / 2) { + firstItem + } else { + listInfo[1] + } + } + + override val isScrollInProgress: Boolean + get() = lazyListState.isScrollInProgress + + override suspend fun scroll( + scrollPriority: MutatePriority, + block: suspend ScrollScope.() -> Unit, + ) { + lazyListState.scroll(scrollPriority, block) + } + + override fun dispatchRawDelta(delta: Float): Float { + return lazyListState.dispatchRawDelta(delta) + } + + companion object { + val Saver: Saver = listSaver( + save = { + listOf( + it.currentIndex, + ) + }, + restore = { + FWheelPickerState( + initialIndex = it[0] as Int, + ) + } + ) + } +} diff --git a/apps/multiplatform/android/src/main/res/font/inter_bold.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Bold.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_bold.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Bold.ttf diff --git a/apps/multiplatform/android/src/main/res/font/inter_italic.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Italic.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_italic.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Italic.ttf diff --git a/apps/multiplatform/android/src/main/res/font/inter_light.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Light.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_light.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Light.ttf diff --git a/apps/multiplatform/android/src/main/res/font/inter_medium.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Medium.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_medium.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Medium.ttf diff --git a/apps/multiplatform/android/src/main/res/font/inter_regular.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Regular.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_regular.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Regular.ttf diff --git a/apps/multiplatform/android/src/main/res/font/inter_semi_bold.ttf b/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Semibold.ttf similarity index 100% rename from apps/multiplatform/android/src/main/res/font/inter_semi_bold.ttf rename to apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Semibold.ttf diff --git a/apps/multiplatform/android/src/main/res/drawable-hdpi/decentralized.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1.5x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-hdpi/decentralized.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1.5x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-mdpi/decentralized.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-mdpi/decentralized.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xhdpi/decentralized.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@2x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xhdpi/decentralized.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@2x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxhdpi/decentralized.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@3x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxhdpi/decentralized.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@3x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxxhdpi/decentralized.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@4x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxxhdpi/decentralized.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@4x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-hdpi/decentralized_light.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1.5x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-hdpi/decentralized_light.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1.5x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-mdpi/decentralized_light.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-mdpi/decentralized_light.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xhdpi/decentralized_light.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@2x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xhdpi/decentralized_light.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@2x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxhdpi/decentralized_light.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@3x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxhdpi/decentralized_light.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@3x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxxhdpi/decentralized_light.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@4x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxxhdpi/decentralized_light.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_circle_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_circle_filled.svg new file mode 100644 index 0000000000..f63966fbc8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_circle_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add.svg new file mode 100644 index 0000000000..7da1daade8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_link.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_link.svg new file mode 100644 index 0000000000..6e3ec1e453 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_photo.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_photo.svg new file mode 100644 index 0000000000..3197ae8bb6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_photo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction.svg new file mode 100644 index 0000000000..62ee67166c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction_filled.svg new file mode 100644 index 0000000000..0475962f63 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_all_inclusive.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_all_inclusive.svg new file mode 100644 index 0000000000..4675bb6642 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_all_inclusive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_back_ios_new.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_back_ios_new.svg new file mode 100644 index 0000000000..6940e4d004 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_back_ios_new.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_downward.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_downward.svg new file mode 100644 index 0000000000..c09c1c4d66 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_downward.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward_ios.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward_ios.svg new file mode 100644 index 0000000000..dd07f2bad9 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward_ios.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_upward.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_upward.svg new file mode 100644 index 0000000000..88b20124f3 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_upward.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_article.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_article.svg new file mode 100644 index 0000000000..05d4d6fe6e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_article.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled.svg new file mode 100644 index 0000000000..5ff6754f22 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled_500.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled_500.svg new file mode 100644 index 0000000000..04ef1d379f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled_500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backspace.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backspace.svg new file mode 100644 index 0000000000..5bb12b42ca --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backspace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backup.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backup.svg new file mode 100644 index 0000000000..5d4b0c0dc6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_2_bar.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_2_bar.svg new file mode 100644 index 0000000000..fcdb3dfd50 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_2_bar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_3_bar.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_3_bar.svg new file mode 100644 index 0000000000..819fe590c9 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_3_bar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt.svg new file mode 100644 index 0000000000..4c686c282a --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_filled.svg new file mode 100644 index 0000000000..012a8e2a45 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cable.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cable.svg new file mode 100644 index 0000000000..1ca40515b7 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call.svg new file mode 100644 index 0000000000..19c840a5cf --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_500.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_500.svg new file mode 100644 index 0000000000..f2e1e9af6b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end.svg new file mode 100644 index 0000000000..0f21f36e83 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end_filled.svg new file mode 100644 index 0000000000..ceb32f98f5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_filled.svg new file mode 100644 index 0000000000..c0277fd5b6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_camera_enhance.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_camera_enhance.svg new file mode 100644 index 0000000000..b07fbd7a87 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_camera_enhance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cancel_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cancel_filled.svg new file mode 100644 index 0000000000..44e901ff3c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cancel_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat.svg new file mode 100644 index 0000000000..c263166229 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check.svg new file mode 100644 index 0000000000..e3d6eab069 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle_filled.svg new file mode 100644 index 0000000000..42f1a37725 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_filled.svg new file mode 100644 index 0000000000..e3d6eab069 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right.svg new file mode 100644 index 0000000000..ac6025580b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle.svg new file mode 100644 index 0000000000..d0da456188 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle_filled.svg new file mode 100644 index 0000000000..e8eebbdc7c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_close.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_close.svg new file mode 100644 index 0000000000..f3803e3cac --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_code.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_code.svg new file mode 100644 index 0000000000..8554e557b0 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_copy.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_copy.svg new file mode 100644 index 0000000000..2f4b964368 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_paste.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_paste.svg new file mode 100644 index 0000000000..84a0be536b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_paste.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_database.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_database.svg new file mode 100644 index 0000000000..8b47047b60 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete.svg new file mode 100644 index 0000000000..1709888116 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever.svg new file mode 100644 index 0000000000..519fbc87fb --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever_filled.svg new file mode 100644 index 0000000000..c8c1d4cea5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_dns.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_dns.svg new file mode 100644 index 0000000000..c1056cefc6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_dns.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_disturb_on.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_disturb_on.svg new file mode 100644 index 0000000000..9a0d038ba5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_disturb_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_done_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_done_filled.svg new file mode 100644 index 0000000000..e3d6eab069 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_done_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_download.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_download.svg new file mode 100644 index 0000000000..8d62bebda6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft.svg new file mode 100644 index 0000000000..bbe311364f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft_filled.svg new file mode 100644 index 0000000000..06140a055d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drive_folder_upload.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drive_folder_upload.svg new file mode 100644 index 0000000000..ec3d03510e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drive_folder_upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit.svg new file mode 100644 index 0000000000..400707272e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_filled.svg new file mode 100644 index 0000000000..e87e2eccaf --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_note.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_note.svg new file mode 100644 index 0000000000..0c66d1bc4d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_electrical_services.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_electrical_services.svg new file mode 100644 index 0000000000..e6ab5bb608 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_electrical_services.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error.svg new file mode 100644 index 0000000000..60296ca034 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error_filled.svg new file mode 100644 index 0000000000..6aaa01f0d3 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_less.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_less.svg new file mode 100644 index 0000000000..23a6402630 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_less.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_more.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_more.svg new file mode 100644 index 0000000000..77becd0856 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_filter_list.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_filter_list.svg new file mode 100644 index 0000000000..a54ee0dc55 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_filter_list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag.svg new file mode 100644 index 0000000000..35dd4ac780 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flip_camera_android_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flip_camera_android_filled.svg new file mode 100644 index 0000000000..da9d686ce9 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flip_camera_android_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_open.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_open.svg new file mode 100644 index 0000000000..6503f06c47 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_github.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_github.svg new file mode 100644 index 0000000000..70baacb727 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group.svg new file mode 100644 index 0000000000..74d6cdcc02 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help.svg new file mode 100644 index 0000000000..3bf2406ab8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image.svg new file mode 100644 index 0000000000..408668d204 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_info.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_info.svg new file mode 100644 index 0000000000..aa3e5a2f4e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_inventory_2.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_inventory_2.svg new file mode 100644 index 0000000000..c7e8aa21c1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_inventory_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ios_share.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ios_share.svg new file mode 100644 index 0000000000..099b5149bf --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ios_share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard.svg new file mode 100644 index 0000000000..35689927b1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_arrow_down.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_arrow_down.svg new file mode 100644 index 0000000000..c92d244c17 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_arrow_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice.svg new file mode 100644 index 0000000000..a938a4250f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice_filled.svg new file mode 100644 index 0000000000..bd28745400 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_light_mode.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_light_mode.svg new file mode 100644 index 0000000000..858ee788cf --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_light_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_link.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_link.svg new file mode 100644 index 0000000000..b8063c1c8c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock.svg new file mode 100644 index 0000000000..2bc91dde71 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_filled.svg new file mode 100644 index 0000000000..396e11fac6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_open.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_open.svg new file mode 100644 index 0000000000..bf6b7b47b4 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_login.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_login.svg new file mode 100644 index 0000000000..be56f0f451 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_logout.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_logout.svg new file mode 100644 index 0000000000..5808094655 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_logout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail.svg new file mode 100644 index 0000000000..0a4b8adbd8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_manage_accounts.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_manage_accounts.svg new file mode 100644 index 0000000000..e1cc6816b1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_manage_accounts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_maps_ugc.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_maps_ugc.svg new file mode 100644 index 0000000000..469d44a2de --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_maps_ugc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mark_chat_unread.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mark_chat_unread.svg new file mode 100644 index 0000000000..5e1e746ee9 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mark_chat_unread.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_menu.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_menu.svg new file mode 100644 index 0000000000..a192e32f34 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic.svg new file mode 100644 index 0000000000..a938a4250f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_filled.svg new file mode 100644 index 0000000000..bd28745400 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_off.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_off.svg new file mode 100644 index 0000000000..1ea755eb4e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_horiz.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_horiz.svg new file mode 100644 index 0000000000..cc4f97431d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_horiz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_vert.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_vert.svg new file mode 100644 index 0000000000..9a9c7d193b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_vert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_note_add.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_note_add.svg new file mode 100644 index 0000000000..8459292f6e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_note_add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications.svg new file mode 100644 index 0000000000..bcba2ae944 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off.svg new file mode 100644 index 0000000000..556013c364 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off_filled.svg new file mode 100644 index 0000000000..647ad7dd3d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_open_in_new.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_open_in_new.svg new file mode 100644 index 0000000000..9669ee635e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_open_in_new.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outline_terminal.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outline_terminal.svg new file mode 100644 index 0000000000..07f8078e0c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outline_terminal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pause_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pause_filled.svg new file mode 100644 index 0000000000..eaa4573780 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pause_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending.svg new file mode 100644 index 0000000000..90b9dc7204 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending_filled.svg new file mode 100644 index 0000000000..00fe0d41a7 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person.svg new file mode 100644 index 0000000000..0830a9963b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add.svg new file mode 100644 index 0000000000..4b2a249f23 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_500.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_500.svg new file mode 100644 index 0000000000..179dce95fb --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_in_talk_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_in_talk_filled.svg new file mode 100644 index 0000000000..b43c7d9c15 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_in_talk_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_camera.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_camera.svg new file mode 100644 index 0000000000..aa99ac888a --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_play_arrow_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_play_arrow_filled.svg new file mode 100644 index 0000000000..6b3ed2a581 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_play_arrow_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_power_settings_new.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_power_settings_new.svg new file mode 100644 index 0000000000..0af51ad2ab --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_power_settings_new.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_priority_high.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_priority_high.svg new file mode 100644 index 0000000000..42b93fba83 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_priority_high.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code.svg new file mode 100644 index 0000000000..d7f8763c87 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_repeat_one.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_repeat_one.svg new file mode 100644 index 0000000000..d37aa28022 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_repeat_one.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_replay.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_replay.svg new file mode 100644 index 0000000000..9f8c033f89 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_replay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_reply.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_reply.svg new file mode 100644 index 0000000000..7298dc984e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_reply.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report_filled.svg new file mode 100644 index 0000000000..914c74a40a --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_restart_alt.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_restart_alt.svg new file mode 100644 index 0000000000..a28c95673e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_restart_alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ring_volume.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ring_volume.svg new file mode 100644 index 0000000000..92bc814040 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ring_volume.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_safety_divider.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_safety_divider.svg new file mode 100644 index 0000000000..5517bcd740 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_safety_divider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search.svg new file mode 100644 index 0000000000..8a74c6d43f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search_500.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search_500.svg new file mode 100644 index 0000000000..18e56def19 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search_500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_security.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_security.svg new file mode 100644 index 0000000000..13b5c1914e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings.svg new file mode 100644 index 0000000000..04b250537d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_backup_restore.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_backup_restore.svg new file mode 100644 index 0000000000..a3cf4db7e1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_backup_restore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_ethernet.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_ethernet.svg new file mode 100644 index 0000000000..828c7b8a8b --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_ethernet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_phone.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_phone.svg new file mode 100644 index 0000000000..7280127ceb --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share.svg new file mode 100644 index 0000000000..f24d145a50 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share_filled.svg new file mode 100644 index 0000000000..16b4c0ecf2 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_shield.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_shield.svg new file mode 100644 index 0000000000..ca1ed6828c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_shield.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smart_display.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smart_display.svg new file mode 100644 index 0000000000..195c3b2bea --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smart_display.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star.svg new file mode 100644 index 0000000000..2a2733830a --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_filled.svg new file mode 100644 index 0000000000..bf9bd2b4b5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_filled.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_off.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_off.svg new file mode 100644 index 0000000000..d17a1e37d9 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_off.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_start.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_start.svg new file mode 100644 index 0000000000..42983718ac --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_start.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_stop_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_stop_filled.svg new file mode 100644 index 0000000000..0e8823dab5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_stop_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_supervised_user_circle_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_supervised_user_circle_filled.svg new file mode 100644 index 0000000000..ecfb7002a1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_supervised_user_circle_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle.svg new file mode 100644 index 0000000000..0b842e8716 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle_filled.svg new file mode 100644 index 0000000000..3509f870de --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_tag.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_tag.svg new file mode 100644 index 0000000000..4b7e39b8ec --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_tag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_task.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_task.svg new file mode 100644 index 0000000000..eab8e8f09d --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_task.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy.svg new file mode 100644 index 0000000000..24267d0fa8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy_filled.svg new file mode 100644 index 0000000000..401e9affac --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer.svg new file mode 100644 index 0000000000..e530ef1e83 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer_filled.svg new file mode 100644 index 0000000000..4e0a99775a --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toggle_on.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toggle_on.svg new file mode 100644 index 0000000000..de240dce5f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toggle_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_translate.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_translate.svg new file mode 100644 index 0000000000..8ad343c088 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_travel_explore.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_travel_explore.svg new file mode 100644 index 0000000000..023ce42a26 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_travel_explore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upload_file.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upload_file.svg new file mode 100644 index 0000000000..1840509fb1 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upload_file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_user.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_user.svg new file mode 100644 index 0000000000..cd6e89db86 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam.svg new file mode 100644 index 0000000000..9a9edf61ce --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_filled.svg new file mode 100644 index 0000000000..0606c6a06f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_off.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_off.svg new file mode 100644 index 0000000000..77c85ed987 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility.svg new file mode 100644 index 0000000000..50095bc6e5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_filled.svg new file mode 100644 index 0000000000..2bc6fbd9a5 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off.svg new file mode 100644 index 0000000000..459ea40242 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off_filled.svg new file mode 100644 index 0000000000..7269dffdd3 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_down.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_down.svg new file mode 100644 index 0000000000..44b8f89e91 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_up.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_up.svg new file mode 100644 index 0000000000..8d9f2ebecf --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_filled.svg new file mode 100644 index 0000000000..adb8814e12 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_off_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_off_filled.svg new file mode 100644 index 0000000000..6ae367024e --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_off_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning_filled.svg new file mode 100644 index 0000000000..673b7453f6 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning_filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_tethering.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_tethering.svg new file mode 100644 index 0000000000..f6007d3f02 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_tethering.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/icon_foreground_common@4x.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/icon_foreground_common@4x.png new file mode 100644 index 0000000000..6ab60a3293 Binary files /dev/null and b/apps/multiplatform/common/src/commonMain/resources/MR/images/icon_foreground_common@4x.png differ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/logo@4x.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/logo@4x.png new file mode 100644 index 0000000000..6edecb0dd9 Binary files /dev/null and b/apps/multiplatform/common/src/commonMain/resources/MR/images/logo@4x.png differ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/logo_light@4x.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/logo_light@4x.png new file mode 100644 index 0000000000..98c1f500e9 Binary files /dev/null and b/apps/multiplatform/common/src/commonMain/resources/MR/images/logo_light@4x.png differ diff --git a/apps/multiplatform/android/src/main/res/drawable-hdpi/privacy.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1.5x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-hdpi/privacy.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1.5x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-mdpi/privacy.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-mdpi/privacy.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xhdpi/privacy.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@2x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xhdpi/privacy.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@2x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxhdpi/privacy.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@3x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxhdpi/privacy.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@3x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxxhdpi/privacy.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@4x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxxhdpi/privacy.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@4x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-hdpi/shield.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1.5x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-hdpi/shield.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1.5x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-mdpi/shield.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-mdpi/shield.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xhdpi/shield.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@2x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xhdpi/shield.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/shield@2x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxhdpi/shield.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@3x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxhdpi/shield.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/shield@3x.png diff --git a/apps/multiplatform/android/src/main/res/drawable-xxxhdpi/shield.png b/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@4x.png similarity index 100% rename from apps/multiplatform/android/src/main/res/drawable-xxxhdpi/shield.png rename to apps/multiplatform/common/src/commonMain/resources/MR/images/shield@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/distribute/SimpleX.desktop b/apps/multiplatform/common/src/commonMain/resources/distribute/SimpleX.desktop new file mode 100644 index 0000000000..bcfe0c0801 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/distribute/SimpleX.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=SimpleX Chat +Comment=Private and secure open-source messenger - no user IDs (not even random numbers). +Exec=simplex +Icon=simplex.png +Categories=Messenger; diff --git a/apps/multiplatform/common/src/commonMain/resources/distribute/simplex.png b/apps/multiplatform/common/src/commonMain/resources/distribute/simplex.png new file mode 100644 index 0000000000..6ab60a3293 Binary files /dev/null and b/apps/multiplatform/common/src/commonMain/resources/distribute/simplex.png differ diff --git a/cabal.project b/cabal.project index e2edbe83eb..e7686237fe 100644 --- a/cabal.project +++ b/cabal.project @@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: fe22d9b299f106fc4a3d167e90499ddb4d3bfa26 + tag: f2657f9c0b954f952aaf381bb9b55ac34ea59ed7 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 772ef9d864..f7b224524b 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."fe22d9b299f106fc4a3d167e90499ddb4d3bfa26" = "1hk6cb7bh5nn3cj6wb38ap2kyg16ajff6mk5xj6vpjh5dgpp8hkb"; + "https://github.com/simplex-chat/simplexmq.git"."f2657f9c0b954f952aaf381bb9b55ac34ea59ed7" = "04qhadd0shs4hj5b62i78jhnq5c620b72naqavqirvjc7pymyq5g"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb"; "https://github.com/simplex-chat/direct-sqlcipher.git"."34309410eb2069b029b8fc1872deb1e0db123294" = "0kwkmhyfsn2lixdlgl15smgr1h5gjk7fky6abzh8rng2h5ymnffd"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index a42bb561dc..af0f8e31a5 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1134,6 +1134,19 @@ processChatCommand = \case connectionStats <- withAgent $ \a -> abortConnectionSwitch a connId pure $ CRGroupMemberSwitchAborted user g m connectionStats _ -> throwChatError CEGroupMemberNotActive + APISyncContactRatchet contactId force -> withUser $ \user -> do + ct <- withStore $ \db -> getContact db user contactId + cStats@ConnectionStats {ratchetSyncState = rss} <- withAgent $ \a -> synchronizeRatchet a (contactConnId ct) force + createInternalChatItem user (CDDirectSnd ct) (CISndConnEvent $ SCERatchetSync rss Nothing) Nothing + pure $ CRContactRatchetSyncStarted user ct cStats + APISyncGroupMemberRatchet gId gMemberId force -> withUser $ \user -> do + (g, m) <- withStore $ \db -> (,) <$> getGroupInfo db user gId <*> getGroupMember db user gId gMemberId + case memberConnId m of + Just connId -> do + cStats@ConnectionStats {ratchetSyncState = rss} <- withAgent $ \a -> synchronizeRatchet a connId force + createInternalChatItem user (CDGroupSnd g) (CISndConnEvent . SCERatchetSync rss . Just $ groupMemberRef m) Nothing + pure $ CRGroupMemberRatchetSyncStarted user g m cStats + _ -> throwChatError CEGroupMemberNotActive APIGetContactCode contactId -> withUser $ \user -> do ct@Contact {activeConn = conn@Connection {connId}} <- withStore $ \db -> getContact db user contactId code <- getConnectionCode (contactConnId ct) @@ -1196,6 +1209,8 @@ processChatCommand = \case SwitchGroupMember gName mName -> withMemberName gName mName APISwitchGroupMember AbortSwitchContact cName -> withContactName cName APIAbortSwitchContact AbortSwitchGroupMember gName mName -> withMemberName gName mName APIAbortSwitchGroupMember + SyncContactRatchet cName force -> withContactName cName $ \ctId -> APISyncContactRatchet ctId force + SyncGroupMemberRatchet gName mName force -> withMemberName gName mName $ \gId mId -> APISyncGroupMemberRatchet gId mId force GetContactCode cName -> withContactName cName APIGetContactCode GetGroupMemberCode gName mName -> withMemberName gName mName APIGetGroupMemberCode VerifyContact cName code -> withContactName cName (`APIVerifyContact` code) @@ -2716,7 +2731,7 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do _ -> Nothing processDirectMessage :: ACommand 'Agent e -> ConnectionEntity -> Connection -> Maybe Contact -> m () - processDirectMessage agentMsg connEntity conn@Connection {connId, viaUserContactLink, groupLinkId, customUserProfileId} = \case + processDirectMessage agentMsg connEntity conn@Connection {connId, viaUserContactLink, groupLinkId, customUserProfileId, connectionCode} = \case Nothing -> case agentMsg of CONF confId _ connInfo -> do -- [incognito] send saved profile @@ -2849,6 +2864,36 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do when (phase `elem` [SPStarted, SPCompleted]) $ case qd of QDRcv -> createInternalChatItem user (CDDirectSnd ct) (CISndConnEvent $ SCESwitchQueue phase Nothing) Nothing QDSnd -> createInternalChatItem user (CDDirectRcv ct) (CIRcvConnEvent $ RCESwitchQueue phase) Nothing + RSYNC rss cryptoErr_ cStats -> + case (rss, connectionCode, cryptoErr_) of + (RSRequired, _, Just cryptoErr) -> processErr cryptoErr + (RSAllowed, _, Just cryptoErr) -> processErr cryptoErr + (RSAgreed, Just _, _) -> do + withStore' $ \db -> setConnectionVerified db user connId Nothing + let ct' = ct {activeConn = conn {connectionCode = Nothing}} :: Contact + ratchetSyncEventItem ct' + toView $ CRContactVerificationReset user ct' + createInternalChatItem user (CDDirectRcv ct') (CIRcvConnEvent RCEVerificationCodeReset) Nothing + _ -> ratchetSyncEventItem ct + where + processErr cryptoErr = do + let e@(mde, n) = agentMsgDecryptError cryptoErr + ci_ <- withStore $ \db -> + getDirectChatItemsLast db user contactId 1 "" + >>= liftIO + . mapM (\(ci, content') -> updateDirectChatItem' db user contactId ci content' False Nothing) + . (mdeUpdatedCI e <=< headMaybe) + case ci_ of + Just ci -> toView $ CRChatItemUpdated user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) + _ -> do + toView $ CRContactRatchetSync user ct (RatchetSyncProgress rss cStats) + createInternalChatItem user (CDDirectRcv ct) (CIRcvDecryptionError mde n) Nothing + headMaybe = \case + x : _ -> Just x + _ -> Nothing + ratchetSyncEventItem ct' = do + toView $ CRContactRatchetSync user ct' (RatchetSyncProgress rss cStats) + createInternalChatItem user (CDDirectRcv ct') (CIRcvConnEvent $ RCERatchetSync rss) Nothing OK -> -- [async agent commands] continuation on receiving OK withCompletedCommand conn agentMsg $ \CommandData {cmdFunction, cmdId} -> @@ -2863,24 +2908,11 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do ERR err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () - forM_ (agentMsgDecryptError err) $ \e@(mde, n) -> do - ci_ <- withStore $ \db -> - getDirectChatItemsLast db user contactId 1 "" - >>= liftIO - . mapM (\(ci, content') -> updateDirectChatItem' db user contactId ci content' False Nothing) - . (mdeUpdatedCI e <=< headMaybe) - case ci_ of - Just ci -> toView $ CRChatItemUpdated user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) - _ -> createInternalChatItem user (CDDirectRcv ct) (CIRcvDecryptionError mde n) Nothing - where - headMaybe = \case - x : _ -> Just x - _ -> Nothing -- TODO add debugging output _ -> pure () processGroupMessage :: ACommand 'Agent e -> ConnectionEntity -> Connection -> GroupInfo -> GroupMember -> m () - processGroupMessage agentMsg connEntity conn@Connection {connId} gInfo@GroupInfo {groupId, localDisplayName = gName, groupProfile, membership, chatSettings} m = case agentMsg of + processGroupMessage agentMsg connEntity conn@Connection {connId, connectionCode} gInfo@GroupInfo {groupId, localDisplayName = gName, groupProfile, membership, chatSettings} m = case agentMsg of INV (ACR _ cReq) -> withCompletedCommand conn agentMsg $ \CommandData {cmdFunction} -> case cReq of @@ -3028,6 +3060,33 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do when (phase `elem` [SPStarted, SPCompleted]) $ case qd of QDRcv -> createInternalChatItem user (CDGroupSnd gInfo) (CISndConnEvent . SCESwitchQueue phase . Just $ groupMemberRef m) Nothing QDSnd -> createInternalChatItem user (CDGroupRcv gInfo m) (CIRcvConnEvent $ RCESwitchQueue phase) Nothing + RSYNC rss cryptoErr_ cStats -> + case (rss, connectionCode, cryptoErr_) of + (RSRequired, _, Just cryptoErr) -> processErr cryptoErr + (RSAllowed, _, Just cryptoErr) -> processErr cryptoErr + (RSAgreed, Just _, _) -> do + withStore' $ \db -> setConnectionVerified db user connId Nothing + let m' = m {activeConn = Just (conn {connectionCode = Nothing} :: Connection)} :: GroupMember + ratchetSyncEventItem m' + toView $ CRGroupMemberVerificationReset user gInfo m' + createInternalChatItem user (CDGroupRcv gInfo m') (CIRcvConnEvent RCEVerificationCodeReset) Nothing + _ -> ratchetSyncEventItem m + where + processErr cryptoErr = do + let e@(mde, n) = agentMsgDecryptError cryptoErr + ci_ <- withStore $ \db -> + getGroupMemberChatItemLast db user groupId (groupMemberId' m) + >>= liftIO + . mapM (\(ci, content') -> updateGroupChatItem db user groupId ci content' False Nothing) + . mdeUpdatedCI e + case ci_ of + Just ci -> toView $ CRChatItemUpdated user (AChatItem SCTGroup SMDRcv (GroupChat gInfo) ci) + _ -> do + toView $ CRGroupMemberRatchetSync user gInfo m (RatchetSyncProgress rss cStats) + createInternalChatItem user (CDGroupRcv gInfo m) (CIRcvDecryptionError mde n) Nothing + ratchetSyncEventItem m' = do + toView $ CRGroupMemberRatchetSync user gInfo m' (RatchetSyncProgress rss cStats) + createInternalChatItem user (CDGroupRcv gInfo m') (CIRcvConnEvent $ RCERatchetSync rss) Nothing OK -> -- [async agent commands] continuation on receiving OK withCompletedCommand conn agentMsg $ \CommandData {cmdFunction, cmdId} -> @@ -3038,35 +3097,24 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do ERR err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () - forM_ (agentMsgDecryptError err) $ \e@(mde, n) -> do - ci_ <- withStore $ \db -> - getGroupMemberChatItemLast db user groupId (groupMemberId' m) - >>= liftIO - . mapM (\(ci, content') -> updateGroupChatItem db user groupId ci content' False Nothing) - . mdeUpdatedCI e - case ci_ of - Just ci -> toView $ CRChatItemUpdated user (AChatItem SCTGroup SMDRcv (GroupChat gInfo) ci) - _ -> createInternalChatItem user (CDGroupRcv gInfo m) (CIRcvDecryptionError mde n) Nothing -- TODO add debugging output _ -> pure () - agentMsgDecryptError :: AgentErrorType -> Maybe (MsgDecryptError, Word32) + agentMsgDecryptError :: AgentCryptoError -> (MsgDecryptError, Word32) agentMsgDecryptError = \case - AGENT (A_CRYPTO RATCHET_HEADER) -> Just (MDERatchetHeader, 1) - AGENT (A_CRYPTO (RATCHET_SKIPPED n)) -> Just (MDETooManySkipped, n) - -- we are not treating this as decryption error, as in many cases it happens as the result of duplicate or redundant delivery, - -- and we don't have a way to differentiate. - -- we could store the hashes of past messages in the agent, or delaying message deletion after ACK - -- A_DUPLICATE -> Nothing - -- earlier messages may be received in case of redundant delivery, and do not necessarily indicate an error - -- AGENT (A_CRYPTO (RATCHET_EARLIER n)) -> Nothing - _ -> Nothing + DECRYPT_AES -> (MDEOther, 1) + DECRYPT_CB -> (MDEOther, 1) + RATCHET_HEADER -> (MDERatchetHeader, 1) + RATCHET_EARLIER _ -> (MDERatchetEarlier, 1) + RATCHET_SKIPPED n -> (MDETooManySkipped, n) mdeUpdatedCI :: (MsgDecryptError, Word32) -> CChatItem c -> Maybe (ChatItem c 'MDRcv, CIContent 'MDRcv) mdeUpdatedCI (mde', n') (CChatItem _ ci@ChatItem {content = CIRcvDecryptionError mde n}) | mde == mde' = case mde of MDERatchetHeader -> r (n + n') MDETooManySkipped -> r n' -- the numbers are not added as sequential MDETooManySkipped will have it incremented by 1 + MDERatchetEarlier -> r (n + n') + MDEOther -> r (n + n') | otherwise = Nothing where r n'' = Just (ci, CIRcvDecryptionError mde n'') @@ -4919,10 +4967,14 @@ chatCommandP = "/_switch @" *> (APISwitchContact <$> A.decimal), "/_abort switch #" *> (APIAbortSwitchGroupMember <$> A.decimal <* A.space <*> A.decimal), "/_abort switch @" *> (APIAbortSwitchContact <$> A.decimal), + "/_sync #" *> (APISyncGroupMemberRatchet <$> A.decimal <* A.space <*> A.decimal <*> (" force=on" $> True <|> pure False)), + "/_sync @" *> (APISyncContactRatchet <$> A.decimal <*> (" force=on" $> True <|> pure False)), "/switch #" *> (SwitchGroupMember <$> displayName <* A.space <* char_ '@' <*> displayName), "/switch " *> char_ '@' *> (SwitchContact <$> displayName), "/abort switch #" *> (AbortSwitchGroupMember <$> displayName <* A.space <* char_ '@' <*> displayName), "/abort switch " *> char_ '@' *> (AbortSwitchContact <$> displayName), + "/sync #" *> (SyncGroupMemberRatchet <$> displayName <* A.space <* char_ '@' <*> displayName <*> (" force=on" $> True <|> pure False)), + "/sync " *> char_ '@' *> (SyncContactRatchet <$> displayName <*> (" force=on" $> True <|> pure False)), "/_get code @" *> (APIGetContactCode <$> A.decimal), "/_get code #" *> (APIGetGroupMemberCode <$> A.decimal <* A.space <*> A.decimal), "/_verify code @" *> (APIVerifyContact <$> A.decimal <*> optional (A.space *> textP)), diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 08127bc66d..9784180e27 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -287,6 +287,8 @@ data ChatCommand | APISwitchGroupMember GroupId GroupMemberId | APIAbortSwitchContact ContactId | APIAbortSwitchGroupMember GroupId GroupMemberId + | APISyncContactRatchet ContactId Bool + | APISyncGroupMemberRatchet GroupId GroupMemberId Bool | APIGetContactCode ContactId | APIGetGroupMemberCode GroupId GroupMemberId | APIVerifyContact ContactId (Maybe Text) @@ -300,6 +302,8 @@ data ChatCommand | SwitchGroupMember GroupName ContactName | AbortSwitchContact ContactName | AbortSwitchGroupMember GroupName ContactName + | SyncContactRatchet ContactName Bool + | SyncGroupMemberRatchet GroupName ContactName Bool | GetContactCode ContactName | GetGroupMemberCode GroupName ContactName | VerifyContact ContactName (Maybe Text) @@ -415,6 +419,12 @@ data ChatResponse | CRGroupMemberSwitchAborted {user :: User, groupInfo :: GroupInfo, member :: GroupMember, connectionStats :: ConnectionStats} | CRContactSwitch {user :: User, contact :: Contact, switchProgress :: SwitchProgress} | CRGroupMemberSwitch {user :: User, groupInfo :: GroupInfo, member :: GroupMember, switchProgress :: SwitchProgress} + | CRContactRatchetSyncStarted {user :: User, contact :: Contact, connectionStats :: ConnectionStats} + | CRGroupMemberRatchetSyncStarted {user :: User, groupInfo :: GroupInfo, member :: GroupMember, connectionStats :: ConnectionStats} + | CRContactRatchetSync {user :: User, contact :: Contact, ratchetSyncProgress :: RatchetSyncProgress} + | CRGroupMemberRatchetSync {user :: User, groupInfo :: GroupInfo, member :: GroupMember, ratchetSyncProgress :: RatchetSyncProgress} + | CRContactVerificationReset {user :: User, contact :: Contact} + | CRGroupMemberVerificationReset {user :: User, groupInfo :: GroupInfo, member :: GroupMember} | CRContactCode {user :: User, contact :: Contact, connectionCode :: Text} | CRGroupMemberCode {user :: User, groupInfo :: GroupInfo, member :: GroupMember, connectionCode :: Text} | CRConnectionVerified {user :: User, verified :: Bool, expectedCode :: Text} @@ -719,6 +729,14 @@ data SwitchProgress = SwitchProgress instance ToJSON SwitchProgress where toEncoding = J.genericToEncoding J.defaultOptions +data RatchetSyncProgress = RatchetSyncProgress + { ratchetSyncStatus :: RatchetSyncState, + connectionStats :: ConnectionStats + } + deriving (Show, Generic) + +instance ToJSON RatchetSyncProgress where toEncoding = J.genericToEncoding J.defaultOptions + data ParsedServerAddress = ParsedServerAddress { serverAddress :: Maybe ServerAddress, parseError :: String diff --git a/src/Simplex/Chat/Messages/CIContent.hs b/src/Simplex/Chat/Messages/CIContent.hs index 030f28074a..40b139783b 100644 --- a/src/Simplex/Chat/Messages/CIContent.hs +++ b/src/Simplex/Chat/Messages/CIContent.hs @@ -29,7 +29,7 @@ import Database.SQLite.Simple.ToField (ToField (..)) import GHC.Generics (Generic) import Simplex.Chat.Protocol import Simplex.Chat.Types -import Simplex.Messaging.Agent.Protocol (MsgErrorType (..), SwitchPhase (..)) +import Simplex.Messaging.Agent.Protocol (MsgErrorType (..), RatchetSyncState (..), SwitchPhase (..)) import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (dropPrefix, enumJSON, fstToLower, singleFieldJSON, sumTypeJSON) import Simplex.Messaging.Util (safeDecodeUtf8, tshow) @@ -157,7 +157,7 @@ ciMsgContent = \case CIRcvMsgContent mc -> Just mc _ -> Nothing -data MsgDecryptError = MDERatchetHeader | MDETooManySkipped +data MsgDecryptError = MDERatchetHeader | MDETooManySkipped | MDERatchetEarlier | MDEOther deriving (Eq, Show, Generic) instance ToJSON MsgDecryptError where @@ -253,10 +253,15 @@ instance ToJSON DBSndGroupEvent where toJSON (SGE v) = J.genericToJSON (singleFieldJSON $ dropPrefix "SGE") v toEncoding (SGE v) = J.genericToEncoding (singleFieldJSON $ dropPrefix "SGE") v -data RcvConnEvent = RCESwitchQueue {phase :: SwitchPhase} +data RcvConnEvent + = RCESwitchQueue {phase :: SwitchPhase} + | RCERatchetSync {syncStatus :: RatchetSyncState} + | RCEVerificationCodeReset deriving (Show, Generic) -data SndConnEvent = SCESwitchQueue {phase :: SwitchPhase, member :: Maybe GroupMemberRef} +data SndConnEvent + = SCESwitchQueue {phase :: SwitchPhase, member :: Maybe GroupMemberRef} + | SCERatchetSync {syncStatus :: RatchetSyncState, member :: Maybe GroupMemberRef} deriving (Show, Generic) instance FromJSON RcvConnEvent where @@ -387,6 +392,16 @@ rcvConnEventToText = \case SPConfirmed -> "confirmed changing address for you..." SPSecured -> "secured new address for you..." SPCompleted -> "changed address for you" + RCERatchetSync syncStatus -> ratchetSyncStatusToText syncStatus + RCEVerificationCodeReset -> "security code changed" + +ratchetSyncStatusToText :: RatchetSyncState -> Text +ratchetSyncStatusToText = \case + RSOk -> "connection synchronized" + RSAllowed -> "decryption error (connection may be out of sync), synchronization allowed" + RSRequired -> "decryption error (connection out of sync), synchronization required" + RSStarted -> "connection synchronization started" + RSAgreed -> "connection synchronization agreed" sndConnEventToText :: SndConnEvent -> Text sndConnEventToText = \case @@ -395,6 +410,7 @@ sndConnEventToText = \case SPConfirmed -> "confirmed changing address" <> forMember m <> "..." SPSecured -> "secured new address" <> forMember m <> "..." SPCompleted -> "you changed address" <> forMember m + SCERatchetSync syncStatus m -> ratchetSyncStatusToText syncStatus <> forMember m where forMember member_ = maybe "" (\GroupMemberRef {profile = Profile {displayName}} -> " for " <> displayName) member_ @@ -413,11 +429,16 @@ msgIntegrityError = \case msgDecryptErrorText :: MsgDecryptError -> Word32 -> Text msgDecryptErrorText err n = - "decryption error, possibly due to the device change (" <> errName <> if n == 1 then ")" else ", " <> tshow n <> " messages)" + "decryption error, possibly due to the device change" + <> maybe "" (\ed -> " (" <> ed <> ")") errDesc where - errName = case err of - MDERatchetHeader -> "header" - MDETooManySkipped -> "too many skipped messages" + errDesc = case err of + MDERatchetHeader -> Just $ "header" <> counter + MDETooManySkipped -> Just $ "too many skipped messages" <> counter + MDERatchetEarlier -> Just $ "earlier message" <> counter + MDEOther -> counter_ + counter_ = if n == 1 then Nothing else Just $ tshow n <> " messages" + counter = maybe "" (", " <>) counter_ msgDirToModeratedContent_ :: SMsgDirection d -> CIContent d msgDirToModeratedContent_ = \case diff --git a/src/Simplex/Chat/Store/Direct.hs b/src/Simplex/Chat/Store/Direct.hs index 2f3344bb66..845167bdd3 100644 --- a/src/Simplex/Chat/Store/Direct.hs +++ b/src/Simplex/Chat/Store/Direct.hs @@ -627,9 +627,6 @@ getContactConnections db userId Contact {contactId} = connections [] = throwError $ SEContactNotFound contactId connections rows = pure $ map toConnection rows - - - getConnectionById :: DB.Connection -> User -> Int64 -> ExceptT StoreError IO Connection getConnectionById db User {userId} connId = ExceptT $ do firstRow toConnection (SEConnectionNotFoundById connId) $ diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index e67746a2c8..8328b1507d 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -28,7 +28,6 @@ import Data.Time (LocalTime (..), TimeOfDay (..), TimeZone (..), utcToLocalTime) import Data.Time.Calendar (addDays) import Data.Time.Clock (UTCTime) import Data.Time.Format (defaultTimeLocale, formatTime) -import Data.Word (Word32) import GHC.Generics (Generic) import qualified Network.HTTP.Types as Q import Numeric (showFFloat) @@ -86,6 +85,12 @@ responseToView user_ ChatConfig {logLevel, showReactions, testView} liveItems ts CRGroupMemberSwitchAborted {} -> ["switch aborted"] CRContactSwitch u ct progress -> ttyUser u $ viewContactSwitch ct progress CRGroupMemberSwitch u g m progress -> ttyUser u $ viewGroupMemberSwitch g m progress + CRContactRatchetSyncStarted {} -> ["connection synchronization started"] + CRGroupMemberRatchetSyncStarted {} -> ["connection synchronization started"] + CRContactRatchetSync u ct progress -> ttyUser u $ viewContactRatchetSync ct progress + CRGroupMemberRatchetSync u g m progress -> ttyUser u $ viewGroupMemberRatchetSync g m progress + CRContactVerificationReset u ct -> ttyUser u $ viewContactVerificationReset ct + CRGroupMemberVerificationReset u g m -> ttyUser u $ viewGroupMemberVerificationReset g m CRConnectionVerified u verified code -> ttyUser u [plain $ if verified then "connection verified" else "connection not verified, current code is " <> code] CRContactCode u ct code -> ttyUser u $ viewContactCode ct code testView CRGroupMemberCode u g m code -> ttyUser u $ viewGroupMemberCode g m code testView @@ -385,7 +390,6 @@ viewChatItem chat ci@ChatItem {chatDir, meta = meta, content, quotedItem, file} CIDirectRcv -> case content of CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from quote mc CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta - CIRcvDecryptionError err n -> viewRcvDecryptionError from err n ts tz meta CIRcvGroupEvent {} -> showRcvItemProhibited from _ -> showRcvItem from where @@ -402,7 +406,6 @@ viewChatItem chat ci@ChatItem {chatDir, meta = meta, content, quotedItem, file} CIGroupRcv m -> case content of CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from quote mc CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta - CIRcvDecryptionError err n -> viewRcvDecryptionError from err n ts tz meta CIRcvGroupInvitation {} -> showRcvItemProhibited from CIRcvModerated {} -> receivedWithTime_ ts tz (ttyFromGroup g m) quote meta [plainContent content] False _ -> showRcvItem from @@ -587,9 +590,6 @@ msgPreview = msgPlain . preview . msgContentText viewRcvIntegrityError :: StyledString -> MsgErrorType -> CurrentTime -> TimeZone -> CIMeta c 'MDRcv -> [StyledString] viewRcvIntegrityError from msgErr ts tz meta = receivedWithTime_ ts tz from [] meta (viewMsgIntegrityError msgErr) False -viewRcvDecryptionError :: StyledString -> MsgDecryptError -> Word32 -> CurrentTime -> TimeZone -> CIMeta c 'MDRcv -> [StyledString] -viewRcvDecryptionError from err n ts tz meta = receivedWithTime_ ts tz from [] meta [ttyError $ msgDecryptErrorText err n] False - viewMsgIntegrityError :: MsgErrorType -> [StyledString] viewMsgIntegrityError err = [ttyError $ msgIntegrityError err] @@ -968,6 +968,28 @@ viewGroupMemberSwitch g m (SwitchProgress qd phase _) = case qd of QDRcv -> [ttyGroup' g <> ": you " <> viewSwitchPhase phase <> " for " <> ttyMember m] QDSnd -> [ttyGroup' g <> ": " <> ttyMember m <> " " <> viewSwitchPhase phase <> " for you"] +viewContactRatchetSync :: Contact -> RatchetSyncProgress -> [StyledString] +viewContactRatchetSync ct@Contact {localDisplayName = c} RatchetSyncProgress {ratchetSyncStatus = rss} = + [ttyContact' ct <> ": " <> (plain . ratchetSyncStatusToText) rss] + <> help + where + help = ["use " <> highlight ("/sync " <> c) <> " to synchronize" | rss `elem` [RSAllowed, RSRequired]] + +viewGroupMemberRatchetSync :: GroupInfo -> GroupMember -> RatchetSyncProgress -> [StyledString] +viewGroupMemberRatchetSync g m@GroupMember {localDisplayName = n} RatchetSyncProgress {ratchetSyncStatus = rss} = + [ttyGroup' g <> " " <> ttyMember m <> ": " <> (plain . ratchetSyncStatusToText) rss] + <> help + where + help = ["use " <> highlight ("/sync #" <> groupName' g <> " " <> n) <> " to synchronize" | rss `elem` [RSAllowed, RSRequired]] + +viewContactVerificationReset :: Contact -> [StyledString] +viewContactVerificationReset ct = + [ttyContact' ct <> ": security code changed"] + +viewGroupMemberVerificationReset :: GroupInfo -> GroupMember -> [StyledString] +viewGroupMemberVerificationReset g m = + [ttyGroup' g <> " " <> ttyMember m <> ": security code changed"] + viewContactCode :: Contact -> Text -> Bool -> [StyledString] viewContactCode ct@Contact {localDisplayName = c} = viewSecurityCode (ttyContact' ct) ("/verify " <> c <> " ") diff --git a/stack.yaml b/stack.yaml index 07fe72bfaa..f0cc34fadd 100644 --- a/stack.yaml +++ b/stack.yaml @@ -49,7 +49,7 @@ extra-deps: # - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561 # - ../simplexmq - github: simplex-chat/simplexmq - commit: fe22d9b299f106fc4a3d167e90499ddb4d3bfa26 + commit: f2657f9c0b954f952aaf381bb9b55ac34ea59ed7 - github: kazu-yamamoto/http2 commit: b5a1b7200cf5bc7044af34ba325284271f6dff25 # - ../direct-sqlcipher diff --git a/tests/ChatTests/Direct.hs b/tests/ChatTests/Direct.hs index 941fa2aff2..beba5aeeaa 100644 --- a/tests/ChatTests/Direct.hs +++ b/tests/ChatTests/Direct.hs @@ -86,7 +86,9 @@ chatDirectTests = do it "mark contact verified" testMarkContactVerified it "mark group member verified" testMarkGroupMemberVerified describe "message errors" $ do - xit "show message decryption error and update count" testMsgDecryptError + it "show message decryption error" testMsgDecryptError + it "should report ratchet de-synchronization, synchronize ratchets" testSyncRatchet + it "synchronize ratchets, reset connection code" testSyncRatchetCodeReset describe "message reactions" $ do it "set message reactions" testSetMessageReactions @@ -1995,43 +1997,124 @@ testMsgDecryptError tmp = bob <# "alice> hi" bob #> "@alice hey" alice <# "bob> hey" - copyDb "bob" "bob_old" - withTestChat tmp "bob" $ \bob -> do - bob <## "1 contacts connected (use /cs for the list)" - alice #> "@bob hello" - bob <# "alice> hello" - bob #> "@alice hello too" - alice <# "bob> hello too" - withTestChat tmp "bob_old" $ \bob -> do - bob <## "1 contacts connected (use /cs for the list)" - alice #> "@bob 1" - bob <# "alice> decryption error, possibly due to the device change (header)" - alice #> "@bob 2" - alice #> "@bob 3" - (bob "/tail @alice 1" - bob <# "alice> decryption error, possibly due to the device change (header, 3 messages)" - bob #> "@alice 1" - alice <# "bob> decryption error, possibly due to the device change (header)" - bob #> "@alice 2" - bob #> "@alice 3" - (alice "/tail @bob 1" - alice <# "bob> decryption error, possibly due to the device change (header, 3 messages)" - alice #> "@bob 4" - bob <# "alice> decryption error, possibly due to the device change (header)" + setupDesynchronizedRatchet tmp alice withTestChat tmp "bob" $ \bob -> do bob <## "1 contacts connected (use /cs for the list)" alice #> "@bob hello again" - bob <# "alice> skipped message ID 5..8" + bob <# "alice> skipped message ID 5..7" bob <# "alice> hello again" bob #> "@alice received!" alice <# "bob> received!" + +setupDesynchronizedRatchet :: HasCallStack => FilePath -> TestCC -> IO () +setupDesynchronizedRatchet tmp alice = do + copyDb "bob" "bob_old" + withTestChat tmp "bob" $ \bob -> do + bob <## "1 contacts connected (use /cs for the list)" + alice #> "@bob hello" + bob <# "alice> hello" + bob #> "@alice hello too" + alice <# "bob> hello too" + withTestChat tmp "bob_old" $ \bob -> do + bob <## "1 contacts connected (use /cs for the list)" + bob ##> "/sync alice" + bob <## "error: command is prohibited" + alice #> "@bob 1" + bob <## "alice: decryption error (connection out of sync), synchronization required" + bob <## "use /sync alice to synchronize" + alice #> "@bob 2" + alice #> "@bob 3" + (bob "/tail @alice 1" + bob <# "alice> decryption error, possibly due to the device change (header, 3 messages)" + bob ##> "@alice 1" + bob <## "error: command is prohibited" + (alice from) (chatStoreFile $ tmp to) copyFile (agentStoreFile $ tmp from) (agentStoreFile $ tmp to) +testSyncRatchet :: HasCallStack => FilePath -> IO () +testSyncRatchet tmp = + withNewTestChat tmp "alice" aliceProfile $ \alice -> do + withNewTestChat tmp "bob" bobProfile $ \bob -> do + connectUsers alice bob + alice #> "@bob hi" + bob <# "alice> hi" + bob #> "@alice hey" + alice <# "bob> hey" + setupDesynchronizedRatchet tmp alice + withTestChat tmp "bob_old" $ \bob -> do + bob <## "1 contacts connected (use /cs for the list)" + bob ##> "/sync alice" + bob <## "connection synchronization started" + alice <## "bob: connection synchronization agreed" + bob <## "alice: connection synchronization agreed" + alice <## "bob: connection synchronized" + bob <## "alice: connection synchronized" + + bob #$> ("/_get chat @2 count=3", chat, [(1, "connection synchronization started"), (0, "connection synchronization agreed"), (0, "connection synchronized")]) + alice #$> ("/_get chat @2 count=2", chat, [(0, "connection synchronization agreed"), (0, "connection synchronized")]) + + alice #> "@bob hello again" + bob <# "alice> hello again" + bob #> "@alice received!" + alice <# "bob> received!" + +testSyncRatchetCodeReset :: HasCallStack => FilePath -> IO () +testSyncRatchetCodeReset tmp = + withNewTestChat tmp "alice" aliceProfile $ \alice -> do + withNewTestChat tmp "bob" bobProfile $ \bob -> do + connectUsers alice bob + alice #> "@bob hi" + bob <# "alice> hi" + bob #> "@alice hey" + alice <# "bob> hey" + -- connection not verified + bob ##> "/i alice" + aliceInfo bob + bob <## "connection not verified, use /code command to see security code" + -- verify connection + alice ##> "/code bob" + bCode <- getTermLine alice + bob ##> ("/verify alice " <> bCode) + bob <## "connection verified" + -- connection verified + bob ##> "/i alice" + aliceInfo bob + bob <## "connection verified" + setupDesynchronizedRatchet tmp alice + withTestChat tmp "bob_old" $ \bob -> do + bob <## "1 contacts connected (use /cs for the list)" + bob ##> "/sync alice" + bob <## "connection synchronization started" + alice <## "bob: connection synchronization agreed" + bob <## "alice: connection synchronization agreed" + bob <## "alice: security code changed" + alice <## "bob: connection synchronized" + bob <## "alice: connection synchronized" + + bob #$> ("/_get chat @2 count=4", chat, [(1, "connection synchronization started"), (0, "connection synchronization agreed"), (0, "security code changed"), (0, "connection synchronized")]) + alice #$> ("/_get chat @2 count=2", chat, [(0, "connection synchronization agreed"), (0, "connection synchronized")]) + + -- connection not verified + bob ##> "/i alice" + aliceInfo bob + bob <## "connection not verified, use /code command to see security code" + + alice #> "@bob hello again" + bob <# "alice> hello again" + bob #> "@alice received!" + alice <# "bob> received!" + where + aliceInfo :: HasCallStack => TestCC -> IO () + aliceInfo bob = do + bob <## "contact ID: 2" + bob <## "receiving messages via: localhost" + bob <## "sending messages via: localhost" + bob <## "you've shared main profile with this contact" + testSetMessageReactions :: HasCallStack => FilePath -> IO () testSetMessageReactions = testChat2 aliceProfile bobProfile $ diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 1e724ce007..1c36f7e1dc 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -56,7 +56,9 @@ chatGroupTests = do it "group link member role" testGroupLinkMemberRole it "leaving and deleting the group joined via link should NOT delete previously existing direct contacts" testGroupLinkLeaveDelete describe "group message errors" $ do - xit "show message decryption error and update count" testGroupMsgDecryptError + it "show message decryption error" testGroupMsgDecryptError + it "should report ratchet de-synchronization, synchronize ratchets" testGroupSyncRatchet + it "synchronize ratchets, reset connection code" testGroupSyncRatchetCodeReset describe "message reactions" $ do it "set group message reactions" testSetGroupMessageReactions @@ -2200,68 +2202,152 @@ testGroupMsgDecryptError tmp = [bob, cath] *<# "#team alice> hi" bob #> "#team hey" [alice, cath] *<# "#team bob> hey" - copyDb "bob" "bob_old" - withTestChat tmp "bob" $ \bob -> do - bob <## "2 contacts connected (use /cs for the list)" - bob <## "#team: connected to server(s)" - alice #> "#team hello" - [bob, cath] *<# "#team alice> hello" - bob #> "#team hello too" - [alice, cath] *<# "#team bob> hello too" - withTestChat tmp "bob_old" $ \bob -> do - bob <## "2 contacts connected (use /cs for the list)" - bob <## "#team: connected to server(s)" - alice #> "#team 1" - bob <# "#team alice> decryption error, possibly due to the device change (header)" - cath <# "#team alice> 1" - alice #> "#team 2" - cath <# "#team alice> 2" - alice #> "#team 3" - cath <# "#team alice> 3" - (bob "/tail #team 1" - bob <# "#team alice> decryption error, possibly due to the device change (header, 3 messages)" - bob #> "#team 1" - alice <# "#team bob> decryption error, possibly due to the device change (header)" - -- cath <# "#team bob> 1" - bob #> "#team 2" - cath <# "#team bob> incorrect message hash" - cath <# "#team bob> 2" - bob #> "#team 3" - cath <# "#team bob> 3" - (alice "/tail #team 1" - alice <# "#team bob> decryption error, possibly due to the device change (header, 3 messages)" - alice #> "#team 4" - (bob 4" - bob ##> "/tail #team 4" - bob - <##? [ "#team alice> decryption error, possibly due to the device change (header, 4 messages)", - "#team 1", - "#team 2", - "#team 3" - ] + setupDesynchronizedRatchet tmp alice cath withTestChat tmp "bob" $ \bob -> do bob <## "2 contacts connected (use /cs for the list)" bob <## "#team: connected to server(s)" alice #> "#team hello again" - bob <# "#team alice> skipped message ID 8..11" + bob <# "#team alice> skipped message ID 8..10" [bob, cath] *<# "#team alice> hello again" bob #> "#team received!" alice <# "#team bob> received!" - bob #> "#team 4" - alice <# "#team bob> 4" - bob #> "#team 5" - cath <# "#team bob> incorrect message hash" - [alice, cath] *<# "#team bob> 5" - bob #> "#team 6" - [alice, cath] *<# "#team bob> 6" + cath <# "#team bob> received!" + +setupDesynchronizedRatchet :: HasCallStack => FilePath -> TestCC -> TestCC -> IO () +setupDesynchronizedRatchet tmp alice cath = do + copyDb "bob" "bob_old" + withTestChat tmp "bob" $ \bob -> do + bob <## "2 contacts connected (use /cs for the list)" + bob <## "#team: connected to server(s)" + alice #> "#team hello" + [bob, cath] *<# "#team alice> hello" + bob #> "#team hello too" + [alice, cath] *<# "#team bob> hello too" + withTestChat tmp "bob_old" $ \bob -> do + bob <## "2 contacts connected (use /cs for the list)" + bob <## "#team: connected to server(s)" + bob ##> "/sync #team alice" + bob <## "error: command is prohibited" + alice #> "#team 1" + bob <## "#team alice: decryption error (connection out of sync), synchronization required" + bob <## "use /sync #team alice to synchronize" + cath <# "#team alice> 1" + alice #> "#team 2" + cath <# "#team alice> 2" + alice #> "#team 3" + cath <# "#team alice> 3" + (bob "/tail #team 1" + bob <# "#team alice> decryption error, possibly due to the device change (header, 3 messages)" where copyDb from to = do copyFile (chatStoreFile $ tmp from) (chatStoreFile $ tmp to) copyFile (agentStoreFile $ tmp from) (agentStoreFile $ tmp to) +testGroupSyncRatchet :: HasCallStack => FilePath -> IO () +testGroupSyncRatchet tmp = + withNewTestChat tmp "alice" aliceProfile $ \alice -> do + withNewTestChat tmp "cath" cathProfile $ \cath -> do + withNewTestChat tmp "bob" bobProfile $ \bob -> do + createGroup3 "team" alice bob cath + alice #> "#team hi" + [bob, cath] *<# "#team alice> hi" + bob #> "#team hey" + [alice, cath] *<# "#team bob> hey" + setupDesynchronizedRatchet tmp alice cath + withTestChat tmp "bob_old" $ \bob -> do + bob <## "2 contacts connected (use /cs for the list)" + bob <## "#team: connected to server(s)" + -- cath and bob are not fully de-synchronized + bob `send` "#team 1" + bob <## "error: command is prohibited" -- silence? + bob <# "#team 1" + (alice "#team 1" + [alice, bob] *<# "#team cath> 1" + bob `send` "#team 2" + bob <## "error: command is prohibited" + bob <# "#team 2" + cath <# "#team bob> incorrect message hash" + cath <# "#team bob> 2" + bob `send` "#team 3" + bob <## "error: command is prohibited" + bob <# "#team 3" + cath <# "#team bob> 3" + -- synchronize bob and alice + bob ##> "/sync #team alice" + bob <## "connection synchronization started" + alice <## "#team bob: connection synchronization agreed" + bob <## "#team alice: connection synchronization agreed" + alice <## "#team bob: connection synchronized" + bob <## "#team alice: connection synchronized" + + bob #$> ("/_get chat #1 count=3", chat, [(1, "connection synchronization started for alice"), (0, "connection synchronization agreed"), (0, "connection synchronized")]) + alice #$> ("/_get chat #1 count=2", chat, [(0, "connection synchronization agreed"), (0, "connection synchronized")]) + + alice #> "#team hello again" + [bob, cath] *<# "#team alice> hello again" + bob #> "#team received!" + alice <# "#team bob> received!" + cath <# "#team bob> received!" + +testGroupSyncRatchetCodeReset :: HasCallStack => FilePath -> IO () +testGroupSyncRatchetCodeReset tmp = + withNewTestChat tmp "alice" aliceProfile $ \alice -> do + withNewTestChat tmp "cath" cathProfile $ \cath -> do + withNewTestChat tmp "bob" bobProfile $ \bob -> do + createGroup3 "team" alice bob cath + alice #> "#team hi" + [bob, cath] *<# "#team alice> hi" + bob #> "#team hey" + [alice, cath] *<# "#team bob> hey" + -- connection not verified + bob ##> "/i #team alice" + aliceInfo bob + bob <## "connection not verified, use /code command to see security code" + -- verify connection + alice ##> "/code #team bob" + bCode <- getTermLine alice + bob ##> ("/verify #team alice " <> bCode) + bob <## "connection verified" + -- connection verified + bob ##> "/i #team alice" + aliceInfo bob + bob <## "connection verified" + setupDesynchronizedRatchet tmp alice cath + withTestChat tmp "bob_old" $ \bob -> do + bob <## "2 contacts connected (use /cs for the list)" + bob <## "#team: connected to server(s)" + bob ##> "/sync #team alice" + bob <## "connection synchronization started" + alice <## "#team bob: connection synchronization agreed" + bob <## "#team alice: connection synchronization agreed" + bob <## "#team alice: security code changed" + alice <## "#team bob: connection synchronized" + bob <## "#team alice: connection synchronized" + + bob #$> ("/_get chat #1 count=4", chat, [(1, "connection synchronization started for alice"), (0, "connection synchronization agreed"), (0, "security code changed"), (0, "connection synchronized")]) + alice #$> ("/_get chat #1 count=2", chat, [(0, "connection synchronization agreed"), (0, "connection synchronized")]) + + -- connection not verified + bob ##> "/i #team alice" + aliceInfo bob + bob <## "connection not verified, use /code command to see security code" + + alice #> "#team hello again" + [bob, cath] *<# "#team alice> hello again" + bob #> "#team received!" + alice <# "#team bob> received!" + (cath TestCC -> IO () + aliceInfo bob = do + bob <## "group ID: 1" + bob <## "member ID: 1" + bob <## "receiving messages via: localhost" + bob <## "sending messages via: localhost" + testSetGroupMessageReactions :: HasCallStack => FilePath -> IO () testSetGroupMessageReactions = testChat3 aliceProfile bobProfile cathProfile $