From dd7768e543ae9f9704ee40ae7a2a95cf80dbf1b5 Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Thu, 8 Oct 2026 16:32:57 +0400 Subject: [PATCH 1/8] android, desktop: upgrade moko-resources to 0.27.1 (#7661) --- apps/multiplatform/README.md | 2 +- .../main/java/chat/simplex/app/CallService.kt | 2 +- .../java/chat/simplex/app/MainActivity.kt | 2 +- .../java/chat/simplex/app/SimplexService.kt | 2 +- .../simplex/app/model/NtfManager.android.kt | 2 +- .../simplex/app/views/call/CallActivity.kt | 2 +- apps/multiplatform/build.gradle.kts | 2 +- apps/multiplatform/common/build.gradle.kts | 29 +++++------------- .../simplex/common/helpers/Permissions.kt | 2 +- .../common/platform/Cryptor.android.kt | 2 +- .../platform/PlatformTextField.android.kt | 2 +- .../common/platform/RecAndPlay.android.kt | 2 +- .../simplex/common/platform/Share.android.kt | 2 +- .../simplex/common/platform/UI.android.kt | 2 +- .../common/platform/VideoPlayer.android.kt | 2 +- .../simplex/common/ui/theme/Type.android.kt | 14 ++++----- .../views/call/CallAudioDeviceManager.kt | 2 +- .../common/views/call/CallView.android.kt | 2 +- .../common/views/chat/ComposeView.android.kt | 2 +- .../views/chat/item/CIFileView.android.kt | 2 +- .../views/chat/item/ChatItemView.android.kt | 2 +- .../chat/item/ImageFullScreenView.android.kt | 2 +- .../views/chatlist/ChatListView.android.kt | 2 +- .../views/chatlist/TagListView.android.kt | 2 +- .../DatabaseEncryptionView.android.kt | 2 +- .../helpers/ChooseAttachmentView.android.kt | 2 +- .../views/helpers/GetImageView.android.kt | 2 +- .../common/views/helpers/Utils.android.kt | 2 +- .../views/newchat/QRCodeScanner.android.kt | 2 +- .../views/onboarding/SimpleXInfo.android.kt | 2 +- .../views/usersettings/Appearance.android.kt | 2 +- .../usersettings/PrivacySettings.android.kt | 2 +- .../usersettings/SettingsView.android.kt | 2 +- .../kotlin/chat/simplex/common/App.kt | 2 +- .../kotlin/chat/simplex/common/AppLock.kt | 2 +- .../chat/simplex/common/model/ChatModel.kt | 2 +- .../chat/simplex/common/model/SimpleXAPI.kt | 2 +- .../chat/simplex/common/platform/AppCommon.kt | 2 +- .../chat/simplex/common/platform/Core.kt | 2 +- .../chat/simplex/common/platform/Files.kt | 2 +- .../simplex/common/platform/NtfManager.kt | 2 +- .../chat/simplex/common/ui/theme/Theme.kt | 2 +- .../chat/simplex/common/views/WelcomeView.kt | 2 +- .../common/views/badges/BadgeUserPreview.kt | 2 +- .../views/badges/BadgesHowItWorksView.kt | 2 +- .../common/views/badges/BadgesLedgerView.kt | 2 +- .../common/views/badges/BadgesPayView.kt | 2 +- .../views/badges/BadgesRedeemCodeView.kt | 2 +- .../views/badges/BadgesSupportSimplexView.kt | 2 +- .../views/badges/BadgesYourBadgeView.kt | 2 +- .../views/badges/BadgesYourLevelView.kt | 2 +- .../views/badges/SupportSimpleXBanner.kt | 2 +- .../views/call/IncomingCallAlertView.kt | 2 +- .../chat/simplex/common/views/call/WebRTC.kt | 2 +- .../simplex/common/views/chat/ChatInfoView.kt | 2 +- .../common/views/chat/ChatItemInfoView.kt | 2 +- .../simplex/common/views/chat/ChatView.kt | 2 +- .../common/views/chat/CommandsMenuView.kt | 2 +- .../common/views/chat/ComposeChatLinkView.kt | 2 +- ...ComposeContextContactRequestActionsView.kt | 2 +- ...ContextGroupDirectInvitationActionsView.kt | 2 +- .../ComposeContextPendingMemberActionsView.kt | 2 +- .../chat/ComposeContextProfilePickerView.kt | 2 +- .../common/views/chat/ComposeFileView.kt | 2 +- .../common/views/chat/ComposeImageView.kt | 2 +- .../simplex/common/views/chat/ComposeView.kt | 2 +- .../common/views/chat/ComposeVoiceView.kt | 2 +- .../common/views/chat/ContactPreferences.kt | 2 +- .../common/views/chat/ContextItemView.kt | 2 +- .../simplex/common/views/chat/ScanCodeView.kt | 2 +- .../views/chat/SelectableChatItemToolbars.kt | 2 +- .../simplex/common/views/chat/SendMsgView.kt | 2 +- .../common/views/chat/SimplexNameView.kt | 2 +- .../common/views/chat/TextSelection.kt | 2 +- .../common/views/chat/VerifyCodeView.kt | 2 +- .../views/chat/group/AddGroupMembersView.kt | 2 +- .../views/chat/group/AddGroupRelayView.kt | 2 +- .../views/chat/group/ChannelMembersView.kt | 2 +- .../views/chat/group/ChannelRelaysView.kt | 2 +- .../views/chat/group/ChannelWebPageView.kt | 2 +- .../views/chat/group/GroupChatInfoView.kt | 2 +- .../common/views/chat/group/GroupLinkView.kt | 2 +- .../views/chat/group/GroupMemberInfoView.kt | 2 +- .../views/chat/group/GroupMembersToolbar.kt | 2 +- .../common/views/chat/group/GroupMentions.kt | 2 +- .../views/chat/group/GroupPreferences.kt | 2 +- .../views/chat/group/GroupProfileView.kt | 2 +- .../views/chat/group/GroupReportsView.kt | 2 +- .../views/chat/group/MemberAdmission.kt | 2 +- .../views/chat/group/MemberSupportChatView.kt | 2 +- .../views/chat/group/MemberSupportView.kt | 2 +- .../views/chat/group/WelcomeMessageView.kt | 2 +- .../views/chat/item/CIBrokenComposableView.kt | 2 +- .../common/views/chat/item/CICallItemView.kt | 2 +- .../views/chat/item/CIChatLinkHeader.kt | 2 +- .../chat/item/CIFeaturePreferenceView.kt | 2 +- .../common/views/chat/item/CIFileView.kt | 2 +- .../views/chat/item/CIGroupInvitationView.kt | 2 +- .../common/views/chat/item/CIImageView.kt | 2 +- .../views/chat/item/CIInvalidJSONView.kt | 2 +- .../chat/item/CIMemberCreatedContactView.kt | 2 +- .../common/views/chat/item/CIMetaView.kt | 2 +- .../views/chat/item/CIRcvDecryptionError.kt | 2 +- .../common/views/chat/item/CIVideoView.kt | 2 +- .../common/views/chat/item/CIVoiceView.kt | 2 +- .../common/views/chat/item/ChatItemView.kt | 2 +- .../common/views/chat/item/FramedItemView.kt | 2 +- .../views/chat/item/IntegrityErrorItemView.kt | 2 +- .../views/chat/item/MarkedDeletedItemView.kt | 2 +- .../common/views/chatlist/ChatHelpView.kt | 2 +- .../views/chatlist/ChatListNavLinkView.kt | 2 +- .../common/views/chatlist/ChatListView.kt | 2 +- .../common/views/chatlist/ChatPreviewView.kt | 2 +- .../views/chatlist/ContactConnectionView.kt | 2 +- .../views/chatlist/ContactRequestView.kt | 2 +- .../common/views/chatlist/GetStakeBanner.kt | 2 +- .../views/chatlist/ServersSummaryView.kt | 2 +- .../views/chatlist/ShareListNavLinkView.kt | 2 +- .../common/views/chatlist/ShareListView.kt | 2 +- .../common/views/chatlist/TagListView.kt | 2 +- .../common/views/chatlist/UserPicker.kt | 2 +- .../views/contacts/ContactListNavView.kt | 2 +- .../views/contacts/ContactPreviewView.kt | 2 +- .../views/database/DatabaseEncryptionView.kt | 2 +- .../views/database/DatabaseErrorView.kt | 2 +- .../common/views/database/DatabaseView.kt | 2 +- .../common/views/helpers/AlertManager.kt | 2 +- .../common/views/helpers/AppBarTitle.kt | 2 +- .../common/views/helpers/ChatInfoImage.kt | 2 +- .../common/views/helpers/ChatWallpaper.kt | 2 +- .../common/views/helpers/CustomTimePicker.kt | 2 +- .../common/views/helpers/DatabaseUtils.kt | 2 +- .../views/helpers/DefaultBasicTextField.kt | 2 +- .../common/views/helpers/DefaultTopAppBar.kt | 2 +- .../helpers/ExposedDropDownSettingRow.kt | 2 +- .../common/views/helpers/LinkPreviews.kt | 2 +- .../views/helpers/LocalAuthentication.kt | 2 +- .../common/views/helpers/ProcessedErrors.kt | 2 +- .../common/views/helpers/SearchTextField.kt | 2 +- .../simplex/common/views/helpers/Section.kt | 2 +- .../common/views/helpers/SimpleButton.kt | 2 +- .../views/helpers/SubscriptionStatusIcon.kt | 2 +- .../common/views/helpers/ThemeModeEditor.kt | 2 +- .../simplex/common/views/helpers/Utils.kt | 2 +- .../common/views/localauth/LocalAuthView.kt | 2 +- .../common/views/localauth/PasscodeView.kt | 2 +- .../common/views/localauth/PasswordEntry.kt | 2 +- .../views/localauth/SetAppPasscodeView.kt | 2 +- .../views/migration/MigrateFromDevice.kt | 2 +- .../common/views/migration/MigrateToDevice.kt | 2 +- .../common/views/newchat/AddChannelView.kt | 2 +- .../views/newchat/AddContactLearnMore.kt | 2 +- .../common/views/newchat/AddGroupView.kt | 2 +- .../common/views/newchat/ConnectPlan.kt | 2 +- .../newchat/ContactConnectionInfoView.kt | 2 +- .../common/views/newchat/NewChatSheet.kt | 2 +- .../common/views/newchat/NewChatView.kt | 2 +- .../common/views/newchat/OnboardingCards.kt | 2 +- .../simplex/common/views/newchat/QRCode.kt | 2 +- .../views/onboarding/ChooseServerOperators.kt | 2 +- .../common/views/onboarding/HowItWorks.kt | 2 +- .../views/onboarding/LinkAMobileView.kt | 2 +- .../views/onboarding/OnboardingLayout.kt | 2 +- .../views/onboarding/SetNotificationsMode.kt | 2 +- .../onboarding/SetupDatabasePassphrase.kt | 2 +- .../common/views/onboarding/SimpleXInfo.kt | 2 +- .../common/views/onboarding/WhatsNewView.kt | 2 +- .../common/views/onboarding/YourNetwork.kt | 2 +- .../common/views/remote/ConnectDesktopView.kt | 2 +- .../common/views/remote/ConnectMobileView.kt | 2 +- .../common/views/usersettings/Appearance.kt | 2 +- .../common/views/usersettings/CallSettings.kt | 2 +- .../views/usersettings/DeveloperView.kt | 2 +- .../common/views/usersettings/HelpView.kt | 2 +- .../views/usersettings/HiddenProfileView.kt | 2 +- .../views/usersettings/IncognitoView.kt | 2 +- .../views/usersettings/MarkdownHelpView.kt | 2 +- .../usersettings/NotificationsSettingsView.kt | 2 +- .../common/views/usersettings/Preferences.kt | 2 +- .../views/usersettings/PrivacySettings.kt | 2 +- .../common/views/usersettings/RTCServers.kt | 2 +- .../usersettings/SetDeliveryReceiptsView.kt | 2 +- .../views/usersettings/SetSimplexNameView.kt | 2 +- .../common/views/usersettings/SettingsView.kt | 2 +- .../usersettings/UserAddressLearnMore.kt | 2 +- .../views/usersettings/UserAddressView.kt | 2 +- .../views/usersettings/UserProfileView.kt | 2 +- .../views/usersettings/UserProfilesView.kt | 2 +- .../views/usersettings/VersionInfoView.kt | 2 +- .../AdvancedNetworkSettings.kt | 2 +- .../networkAndServers/ChatRelayView.kt | 2 +- .../networkAndServers/NetworkAndServers.kt | 2 +- .../networkAndServers/NewServerView.kt | 2 +- .../networkAndServers/OperatorView.kt | 2 +- .../networkAndServers/ProtocolServerView.kt | 2 +- .../networkAndServers/ProtocolServersView.kt | 2 +- .../networkAndServers/ScanProtocolServer.kt | 2 +- .../MR => moko-resources}/ar/strings.xml | 0 .../MR => moko-resources}/az/strings.xml | 0 .../MR => moko-resources}/base/strings.xml | 0 .../MR => moko-resources}/bg/strings.xml | 0 .../MR => moko-resources}/bn/strings.xml | 0 .../MR => moko-resources}/ca/strings.xml | 0 .../MR => moko-resources}/cs/strings.xml | 0 .../MR => moko-resources}/da/strings.xml | 0 .../MR => moko-resources}/de/strings.xml | 0 .../MR => moko-resources}/el/strings.xml | 0 .../MR => moko-resources}/es/strings.xml | 0 .../MR => moko-resources}/fa/strings.xml | 0 .../MR => moko-resources}/fi/strings.xml | 0 .../fonts/Inter-Bold.ttf | Bin .../fonts/Inter-Italic.ttf | Bin .../fonts/Inter-Light.ttf | Bin .../fonts/Inter-Medium.ttf | Bin .../fonts/Inter-Regular.ttf | Bin .../fonts/Inter-Semibold.ttf | Bin .../MR => moko-resources}/fr/strings.xml | 0 .../MR => moko-resources}/hi/strings.xml | 0 .../MR => moko-resources}/hr/strings.xml | 0 .../MR => moko-resources}/hu/strings.xml | 0 .../images/badge_investor.svg | 0 .../images/badge_legend.svg | 0 .../images/badge_supporter.svg | 0 .../images/decentralized@1.5x.png | Bin .../images/decentralized@1x.png | Bin .../images/decentralized@2x.png | Bin .../images/decentralized@3x.png | Bin .../images/decentralized@4x.png | Bin .../images/decentralized_light@1.5x.png | Bin .../images/decentralized_light@1x.png | Bin .../images/decentralized_light@2x.png | Bin .../images/decentralized_light@3x.png | Bin .../images/decentralized_light@4x.png | Bin .../images/flux_logo@4x.png | Bin .../images/flux_logo_light@4x.png | Bin .../images/flux_logo_symbol@4x.png | Bin .../images/ic_account_box.svg | 0 .../images/ic_account_circle_filled.svg | 0 .../MR => moko-resources}/images/ic_add.svg | 0 .../images/ic_add_group.svg | 0 .../images/ic_add_link.svg | 0 .../images/ic_add_photo.svg | 0 .../images/ic_add_reaction.svg | 0 .../images/ic_add_reaction_filled.svg | 0 .../images/ic_all_inclusive.svg | 0 .../images/ic_alternate_email.svg | 0 .../images/ic_arrow_back_ios_new.svg | 0 .../images/ic_arrow_circle_right.svg | 0 .../images/ic_arrow_downward.svg | 0 .../images/ic_arrow_drop_down.svg | 0 .../images/ic_arrow_drop_up.svg | 0 .../images/ic_arrow_forward.svg | 0 .../images/ic_arrow_forward_ios.svg | 0 .../images/ic_arrow_outward.svg | 0 .../images/ic_arrow_upward.svg | 0 .../images/ic_arrows_left_right.svg | 0 .../images/ic_article.svg | 0 .../MR => moko-resources}/images/ic_at.svg | 0 .../images/ic_attach_file_filled.svg | 0 .../images/ic_attach_file_filled_500.svg | 0 .../images/ic_avg_pace.svg | 0 .../images/ic_back_hand.svg | 0 .../images/ic_backspace.svg | 0 .../images/ic_backup.svg | 0 .../images/ic_battery_2_bar.svg | 0 .../images/ic_battery_3_bar.svg | 0 .../images/ic_bedtime_moon.svg | 0 .../images/ic_bigtop_updates.svg | 0 .../ic_bigtop_updates_circle_filled.svg | 0 .../images/ic_bluetooth.svg | 0 .../images/ic_blur_on.svg | 0 .../MR => moko-resources}/images/ic_bolt.svg | 0 .../images/ic_bolt_filled.svg | 0 .../images/ic_bolt_off.svg | 0 .../images/ic_brand_awareness_filled.svg | 0 .../images/ic_breaking_news.svg | 0 .../MR => moko-resources}/images/ic_cable.svg | 0 .../images/ic_calendar.svg | 0 .../MR => moko-resources}/images/ic_call.svg | 0 .../images/ic_call_500.svg | 0 .../images/ic_call_end.svg | 0 .../images/ic_call_end_filled.svg | 0 .../images/ic_call_filled.svg | 0 .../images/ic_camera_enhance.svg | 0 .../images/ic_cancel_filled.svg | 0 .../MR => moko-resources}/images/ic_chat.svg | 0 .../images/ic_chat_bubble.svg | 0 .../images/ic_chat_person.svg | 0 .../MR => moko-resources}/images/ic_check.svg | 0 .../images/ic_check_circle.svg | 0 .../images/ic_check_circle_filled.svg | 0 .../images/ic_check_filled.svg | 0 .../images/ic_checklist.svg | 0 .../images/ic_chevron_down.svg | 0 .../images/ic_chevron_right.svg | 0 .../images/ic_chevron_right_2.svg | 0 .../images/ic_chevron_up.svg | 0 .../images/ic_circle.svg | 0 .../images/ic_circle_filled.svg | 0 .../MR => moko-resources}/images/ic_close.svg | 0 .../MR => moko-resources}/images/ic_code.svg | 0 .../images/ic_collapse_all.svg | 0 .../images/ic_contact_support.svg | 0 .../images/ic_content_copy.svg | 0 .../images/ic_content_paste.svg | 0 .../MR => moko-resources}/images/ic_cube.svg | 0 .../images/ic_database.svg | 0 .../images/ic_delete.svg | 0 .../images/ic_delete_forever.svg | 0 .../images/ic_delete_forever_filled.svg | 0 .../images/ic_desktop.svg | 0 .../MR => moko-resources}/images/ic_dns.svg | 0 .../images/ic_do_not_disturb_on.svg | 0 .../images/ic_do_not_touch.svg | 0 .../images/ic_done_filled.svg | 0 .../images/ic_double_check.svg | 0 .../images/ic_download.svg | 0 .../MR => moko-resources}/images/ic_draft.svg | 0 .../images/ic_draft_filled.svg | 0 .../images/ic_drag_handle.svg | 0 .../images/ic_drive_folder_upload.svg | 0 .../MR => moko-resources}/images/ic_edit.svg | 0 .../images/ic_edit_filled.svg | 0 .../images/ic_edit_note.svg | 0 .../images/ic_electrical_services.svg | 0 .../images/ic_engineering.svg | 0 .../MR => moko-resources}/images/ic_error.svg | 0 .../images/ic_error_filled.svg | 0 .../images/ic_expand_all.svg | 0 .../images/ic_filter_list.svg | 0 .../MR => moko-resources}/images/ic_flag.svg | 0 .../images/ic_flag_filled.svg | 0 .../images/ic_flip_camera_android_filled.svg | 0 .../images/ic_folder_closed.svg | 0 .../images/ic_folder_closed_filled.svg | 0 .../images/ic_folder_filled.svg | 0 .../images/ic_folder_open.svg | 0 .../images/ic_folder_pen.svg | 0 .../MR => moko-resources}/images/ic_forum.svg | 0 .../images/ic_forward.svg | 0 .../images/ic_github.svg | 0 .../MR => moko-resources}/images/ic_group.svg | 0 .../images/ic_group_filled.svg | 0 .../images/ic_group_off.svg | 0 .../images/ic_headphones.svg | 0 .../images/ic_heart@4x.png | Bin .../MR => moko-resources}/images/ic_help.svg | 0 .../images/ic_help_filled.svg | 0 .../images/ic_history.svg | 0 .../images/ic_id_card.svg | 0 .../MR => moko-resources}/images/ic_image.svg | 0 .../images/ic_image_filled.svg | 0 .../MR => moko-resources}/images/ic_info.svg | 0 .../images/ic_inventory_2.svg | 0 .../images/ic_ios_share.svg | 0 .../images/ic_keyboard.svg | 0 .../images/ic_keyboard_arrow_down.svg | 0 .../images/ic_keyboard_voice.svg | 0 .../images/ic_keyboard_voice_filled.svg | 0 .../MR => moko-resources}/images/ic_label.svg | 0 .../images/ic_label_filled.svg | 0 .../images/ic_light_mode.svg | 0 .../images/ic_lightbulb.svg | 0 .../MR => moko-resources}/images/ic_link.svg | 0 .../MR => moko-resources}/images/ic_lock.svg | 0 .../images/ic_lock_filled.svg | 0 .../images/ic_lock_open_right.svg | 0 .../MR => moko-resources}/images/ic_login.svg | 0 .../images/ic_logout.svg | 0 .../MR => moko-resources}/images/ic_mail.svg | 0 .../images/ic_mail_filled.svg | 0 .../images/ic_manage_accounts.svg | 0 .../images/ic_maps_ugc.svg | 0 .../images/ic_mark_chat_unread.svg | 0 .../images/ic_match_case.svg | 0 .../MR => moko-resources}/images/ic_menu.svg | 0 .../MR => moko-resources}/images/ic_mic.svg | 0 .../images/ic_mic_filled.svg | 0 .../images/ic_mic_off.svg | 0 .../images/ic_mobile_3.svg | 0 .../images/ic_mobile_4.svg | 0 .../images/ic_more_horiz.svg | 0 .../images/ic_more_vert.svg | 0 .../images/ic_music_note.svg | 0 .../images/ic_note_add.svg | 0 .../images/ic_notification_important.svg | 0 .../ic_notification_important_filled.svg | 0 .../images/ic_notifications.svg | 0 .../images/ic_notifications_off.svg | 0 .../images/ic_notifications_off_filled.svg | 0 .../images/ic_open_in_new.svg | 0 .../images/ic_outbound.svg | 0 .../images/ic_outline_terminal.svg | 0 .../images/ic_palette.svg | 0 .../images/ic_pause_filled.svg | 0 .../images/ic_pending.svg | 0 .../images/ic_pending_filled.svg | 0 .../images/ic_person.svg | 0 .../images/ic_person_add.svg | 0 .../images/ic_person_add_500.svg | 0 .../images/ic_person_add_filled.svg | 0 .../images/ic_person_edit.svg | 0 .../images/ic_person_filled.svg | 0 .../images/ic_person_off.svg | 0 .../images/ic_phone_bluetooth_speaker.svg | 0 .../images/ic_phone_in_talk_filled.svg | 0 .../images/ic_photo_camera.svg | 0 .../images/ic_photo_library.svg | 0 .../images/ic_photo_library_filled.svg | 0 .../images/ic_play_arrow_filled.svg | 0 .../images/ic_power_settings_new.svg | 0 .../images/ic_priority_high.svg | 0 .../images/ic_qr_code.svg | 0 .../images/ic_qr_code_scanner.svg | 0 .../images/ic_question_mark.svg | 0 .../images/ic_radio_button_unchecked.svg | 0 .../images/ic_radiowaves_up_forward_1_bar.svg | 0 .../images/ic_radiowaves_up_forward_2_bar.svg | 0 .../images/ic_radiowaves_up_forward_3_bar.svg | 0 .../images/ic_radiowaves_up_forward_4_bar.svg | 0 .../images/ic_redeem.svg | 0 .../images/ic_refresh.svg | 0 .../images/ic_repeat_one.svg | 0 .../images/ic_replay.svg | 0 .../MR => moko-resources}/images/ic_reply.svg | 0 .../images/ic_report.svg | 0 .../images/ic_report_filled.svg | 0 .../images/ic_restart_alt.svg | 0 .../images/ic_ring_volume.svg | 0 .../images/ic_safety_divider.svg | 0 .../images/ic_schedule.svg | 0 .../images/ic_schedule_filled.svg | 0 .../images/ic_search.svg | 0 .../images/ic_search_500.svg | 0 .../images/ic_security.svg | 0 .../images/ic_settings.svg | 0 .../images/ic_settings_backup_restore.svg | 0 .../images/ic_settings_ethernet.svg | 0 .../images/ic_settings_phone.svg | 0 .../MR => moko-resources}/images/ic_share.svg | 0 .../images/ic_share_filled.svg | 0 .../images/ic_shield.svg | 0 .../images/ic_simplex.svg | 0 .../images/ic_simplex_dark@4x.png | Bin .../images/ic_simplex_light@4x.png | Bin .../images/ic_simplex_tray_dot.svg | 0 .../images/ic_simplex_tray_dot_light.svg | 0 .../images/ic_simplex_tray_light.svg | 0 .../images/ic_smart_display.svg | 0 .../images/ic_smartphone.svg | 0 .../images/ic_smartphone_300.svg | 0 .../MR => moko-resources}/images/ic_star.svg | 0 .../images/ic_star_filled.svg | 0 .../images/ic_star_off.svg | 0 .../MR => moko-resources}/images/ic_start.svg | 0 .../images/ic_stop_filled.svg | 0 .../ic_supervised_user_circle_filled.svg | 0 .../images/ic_swap_horizontal_circle.svg | 0 .../ic_swap_horizontal_circle_filled.svg | 0 .../images/ic_sync_problem.svg | 0 .../MR => moko-resources}/images/ic_tag.svg | 0 .../MR => moko-resources}/images/ic_task.svg | 0 .../images/ic_theater_comedy.svg | 0 .../images/ic_theater_comedy_filled.svg | 0 .../MR => moko-resources}/images/ic_timer.svg | 0 .../images/ic_timer_filled.svg | 0 .../MR => moko-resources}/images/ic_toast.svg | 0 .../images/ic_toggle_on.svg | 0 .../images/ic_translate.svg | 0 .../images/ic_travel_explore.svg | 0 .../images/ic_upgrade.svg | 0 .../images/ic_upload_file.svg | 0 .../MR => moko-resources}/images/ic_usb.svg | 0 .../images/ic_verified.svg | 0 .../images/ic_verified_filled.svg | 0 .../images/ic_verified_missing.svg | 0 .../images/ic_verified_user.svg | 0 .../images/ic_videocam.svg | 0 .../images/ic_videocam_filled.svg | 0 .../images/ic_videocam_off.svg | 0 .../images/ic_visibility.svg | 0 .../images/ic_visibility_filled.svg | 0 .../images/ic_visibility_off.svg | 0 .../images/ic_visibility_off_filled.svg | 0 .../images/ic_volume_down.svg | 0 .../images/ic_volume_off.svg | 0 .../images/ic_volume_up.svg | 0 .../images/ic_vpn_key_filled.svg | 0 .../images/ic_vpn_key_off_filled.svg | 0 .../images/ic_warning.svg | 0 .../images/ic_warning_filled.svg | 0 .../images/ic_waving_hand.svg | 0 .../MR => moko-resources}/images/ic_wifi.svg | 0 .../images/ic_wifi_off.svg | 0 .../images/ic_wifi_tethering.svg | 0 .../MR => moko-resources}/images/ic_work.svg | 0 .../images/ic_work_filled.svg | 0 .../images/ic_work_filled_padded.svg | 0 .../images/icon_foreground_common@4x.png | Bin .../MR => moko-resources}/images/logo@4x.png | Bin .../images/logo_light@4x.png | Bin .../images/privacy@1.5x.png | Bin .../images/privacy@1x.png | Bin .../images/privacy@2x.png | Bin .../images/privacy@3x.png | Bin .../images/privacy@4x.png | Bin .../images/shield@1.5x.png | Bin .../images/shield@1x.png | Bin .../images/shield@2x.png | Bin .../images/shield@3x.png | Bin .../images/shield@4x.png | Bin .../images/wallpaper_cats@4x.png | Bin .../images/wallpaper_flowers@4x.png | Bin .../images/wallpaper_hearts@4x.png | Bin .../images/wallpaper_kids@4x.png | Bin .../images/wallpaper_school@4x.png | Bin .../images/wallpaper_travel@4x.png | Bin .../MR => moko-resources}/in/strings.xml | 0 .../MR => moko-resources}/it/strings.xml | 0 .../MR => moko-resources}/iw/strings.xml | 0 .../MR => moko-resources}/ja/strings.xml | 0 .../MR => moko-resources}/ko/strings.xml | 0 .../MR => moko-resources}/ku/strings.xml | 0 .../MR => moko-resources}/lt/strings.xml | 0 .../MR => moko-resources}/lv/strings.xml | 0 .../MR => moko-resources}/ml/strings.xml | 0 .../MR => moko-resources}/nb-rNO/strings.xml | 0 .../MR => moko-resources}/night/themes.xml | 0 .../MR => moko-resources}/nl/strings.xml | 0 .../MR => moko-resources}/pl/strings.xml | 0 .../MR => moko-resources}/pt-rBR/strings.xml | 0 .../MR => moko-resources}/pt/strings.xml | 0 .../MR => moko-resources}/ro/strings.xml | 0 .../MR => moko-resources}/ru/strings.xml | 0 .../MR => moko-resources}/sk/strings.xml | 0 .../MR => moko-resources}/sv/strings.xml | 0 .../MR => moko-resources}/th/strings.xml | 0 .../MR => moko-resources}/tr/strings.xml | 0 .../MR => moko-resources}/uk/strings.xml | 0 .../MR => moko-resources}/vi/strings.xml | 0 .../MR => moko-resources}/zh-rCN/strings.xml | 0 .../MR => moko-resources}/zh-rTW/strings.xml | 0 .../kotlin/chat/simplex/common/DesktopApp.kt | 2 +- .../kotlin/chat/simplex/common/DesktopTray.kt | 2 +- .../chat/simplex/common/SingleInstance.kt | 1 + .../common/model/NtfManager.desktop.kt | 2 +- .../common/platform/AppCommon.desktop.kt | 2 +- .../simplex/common/platform/Files.desktop.kt | 2 +- .../simplex/common/platform/Images.desktop.kt | 2 +- .../platform/PlatformTextField.desktop.kt | 2 +- .../common/platform/RecAndPlay.desktop.kt | 2 +- .../common/platform/Resources.desktop.kt | 2 +- .../simplex/common/platform/Share.desktop.kt | 2 +- .../common/platform/VideoPlayer.desktop.kt | 2 +- .../simplex/common/ui/theme/Type.desktop.kt | 26 ++++++++-------- .../common/views/call/CallView.desktop.kt | 2 +- .../views/chat/item/ChatItemView.desktop.kt | 2 +- .../views/chat/item/EmojiItemView.desktop.kt | 2 +- .../chat/item/ImageFullScreenView.desktop.kt | 2 +- .../views/chatlist/ChatListView.desktop.kt | 2 +- .../views/chatlist/TagListView.desktop.kt | 2 +- .../DatabaseEncryptionView.desktop.kt | 2 +- .../common/views/helpers/AppUpdater.kt | 2 +- .../helpers/ChooseAttachmentView.desktop.kt | 2 +- .../views/helpers/DefaultDialog.desktop.kt | 2 +- .../views/helpers/GetImageView.desktop.kt | 2 +- .../views/onboarding/SimpleXInfo.desktop.kt | 2 +- .../views/usersettings/Appearance.desktop.kt | 2 +- .../usersettings/PrivacySettings.desktop.kt | 2 +- .../usersettings/SettingsView.desktop.kt | 2 +- .../fonts/NotoColorEmoji-Regular.ttf | Bin 571 files changed, 250 insertions(+), 262 deletions(-) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ar/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/az/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/base/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/bg/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/bn/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ca/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/cs/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/da/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/de/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/el/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/es/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fa/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fi/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Bold.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Italic.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Light.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Medium.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Regular.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fonts/Inter-Semibold.ttf (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/fr/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/hi/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/hr/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/hu/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/badge_investor.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/badge_legend.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/badge_supporter.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized@1.5x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized@1x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized@2x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized@3x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized_light@1.5x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized_light@1x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized_light@2x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized_light@3x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/decentralized_light@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/flux_logo@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/flux_logo_light@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/flux_logo_symbol@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_account_box.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_account_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add_group.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add_link.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add_photo.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add_reaction.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_add_reaction_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_all_inclusive.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_alternate_email.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_back_ios_new.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_circle_right.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_downward.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_drop_down.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_drop_up.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_forward.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_forward_ios.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_outward.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrow_upward.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_arrows_left_right.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_article.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_at.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_attach_file_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_attach_file_filled_500.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_avg_pace.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_back_hand.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_backspace.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_backup.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_battery_2_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_battery_3_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bedtime_moon.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bigtop_updates.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bigtop_updates_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bluetooth.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_blur_on.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bolt.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bolt_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_bolt_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_brand_awareness_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_breaking_news.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_cable.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_calendar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_call.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_call_500.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_call_end.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_call_end_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_call_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_camera_enhance.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_cancel_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chat.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chat_bubble.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chat_person.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_check.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_check_circle.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_check_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_check_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_checklist.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chevron_down.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chevron_right.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chevron_right_2.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_chevron_up.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_circle.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_close.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_code.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_collapse_all.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_contact_support.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_content_copy.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_content_paste.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_cube.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_database.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_delete.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_delete_forever.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_delete_forever_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_desktop.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_dns.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_do_not_disturb_on.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_do_not_touch.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_done_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_double_check.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_download.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_draft.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_draft_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_drag_handle.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_drive_folder_upload.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_edit.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_edit_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_edit_note.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_electrical_services.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_engineering.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_error.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_error_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_expand_all.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_filter_list.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_flag.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_flag_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_flip_camera_android_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_folder_closed.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_folder_closed_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_folder_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_folder_open.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_folder_pen.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_forum.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_forward.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_github.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_group.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_group_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_group_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_headphones.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_heart@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_help.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_help_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_history.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_id_card.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_image.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_image_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_info.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_inventory_2.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_ios_share.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_keyboard.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_keyboard_arrow_down.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_keyboard_voice.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_keyboard_voice_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_label.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_label_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_light_mode.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_lightbulb.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_link.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_lock.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_lock_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_lock_open_right.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_login.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_logout.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mail.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mail_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_manage_accounts.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_maps_ugc.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mark_chat_unread.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_match_case.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_menu.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mic.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mic_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mic_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mobile_3.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_mobile_4.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_more_horiz.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_more_vert.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_music_note.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_note_add.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_notification_important.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_notification_important_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_notifications.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_notifications_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_notifications_off_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_open_in_new.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_outbound.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_outline_terminal.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_palette.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_pause_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_pending.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_pending_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_add.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_add_500.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_add_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_edit.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_person_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_phone_bluetooth_speaker.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_phone_in_talk_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_photo_camera.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_photo_library.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_photo_library_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_play_arrow_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_power_settings_new.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_priority_high.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_qr_code.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_qr_code_scanner.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_question_mark.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_radio_button_unchecked.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_radiowaves_up_forward_1_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_radiowaves_up_forward_2_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_radiowaves_up_forward_3_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_radiowaves_up_forward_4_bar.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_redeem.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_refresh.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_repeat_one.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_replay.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_reply.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_report.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_report_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_restart_alt.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_ring_volume.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_safety_divider.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_schedule.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_schedule_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_search.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_search_500.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_security.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_settings.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_settings_backup_restore.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_settings_ethernet.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_settings_phone.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_share.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_share_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_shield.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex_dark@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex_light@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex_tray_dot.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex_tray_dot_light.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_simplex_tray_light.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_smart_display.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_smartphone.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_smartphone_300.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_star.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_star_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_star_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_start.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_stop_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_supervised_user_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_swap_horizontal_circle.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_swap_horizontal_circle_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_sync_problem.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_tag.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_task.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_theater_comedy.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_theater_comedy_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_timer.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_timer_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_toast.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_toggle_on.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_translate.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_travel_explore.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_upgrade.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_upload_file.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_usb.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_verified.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_verified_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_verified_missing.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_verified_user.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_videocam.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_videocam_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_videocam_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_visibility.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_visibility_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_visibility_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_visibility_off_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_volume_down.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_volume_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_volume_up.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_vpn_key_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_vpn_key_off_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_warning.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_warning_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_waving_hand.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_wifi.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_wifi_off.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_wifi_tethering.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_work.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_work_filled.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/ic_work_filled_padded.svg (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/icon_foreground_common@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/logo@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/logo_light@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/privacy@1.5x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/privacy@1x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/privacy@2x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/privacy@3x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/privacy@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/shield@1.5x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/shield@1x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/shield@2x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/shield@3x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/shield@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_cats@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_flowers@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_hearts@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_kids@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_school@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/images/wallpaper_travel@4x.png (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/in/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/it/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/iw/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ja/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ko/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ku/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/lt/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/lv/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ml/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/nb-rNO/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/night/themes.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/nl/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/pl/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/pt-rBR/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/pt/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ro/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/ru/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/sk/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/sv/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/th/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/tr/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/uk/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/vi/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/zh-rCN/strings.xml (100%) rename apps/multiplatform/common/src/commonMain/{resources/MR => moko-resources}/zh-rTW/strings.xml (100%) rename apps/multiplatform/common/src/{commonMain/resources/MR => desktopMain/moko-resources}/fonts/NotoColorEmoji-Regular.ttf (100%) diff --git a/apps/multiplatform/README.md b/apps/multiplatform/README.md index 0d3c5b24f4..8fc0f701f3 100644 --- a/apps/multiplatform/README.md +++ b/apps/multiplatform/README.md @@ -101,7 +101,7 @@ Tests are in: ## Resources & Localization -- String resources: `common/src/commonMain/resources/MR/base/strings.xml` + 21 language variants +- String resources: `common/src/commonMain/moko-resources/base/strings.xml` + 21 language variants - Uses Moko Resources (`dev.icerock.moko:resources`) for cross-platform resource management - The `adjustFormatting` gradle task validates string resources during build diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/CallService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/CallService.kt index 6c3d96bebc..96403588ac 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/CallService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/CallService.kt @@ -16,7 +16,7 @@ import chat.simplex.app.views.call.CallActivity import chat.simplex.common.model.NotificationPreviewMode import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.Instant class CallService: Service() { 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 7415b6015d..d1022818ac 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 @@ -18,7 +18,7 @@ import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import java.lang.ref.WeakReference class MainActivity: FragmentActivity() { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt index 289ecc0a31..7a6d9db47a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt @@ -29,7 +29,7 @@ import chat.simplex.common.model.NotificationsMode import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* import kotlinx.coroutines.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlin.system.exitProcess diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/NtfManager.android.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/NtfManager.android.kt index 5ce69aeec2..96ebd6179a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/model/NtfManager.android.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/model/NtfManager.android.kt @@ -22,7 +22,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.call.CallMediaType import chat.simplex.common.views.call.RcvCallInvitation import kotlinx.datetime.Clock -import chat.simplex.res.MR +import chat.simplex.res.* object NtfManager { const val MessageChannel: String = "chat.simplex.app.MESSAGE_NOTIFICATION" diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallActivity.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallActivity.kt index 771ada0cd6..e1edc5ebe3 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallActivity.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/views/call/CallActivity.kt @@ -45,7 +45,7 @@ import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.* import chat.simplex.common.views.call.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.google.accompanist.permissions.rememberMultiplePermissionsState import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.launch diff --git a/apps/multiplatform/build.gradle.kts b/apps/multiplatform/build.gradle.kts index 64dd34afbf..ee64060206 100644 --- a/apps/multiplatform/build.gradle.kts +++ b/apps/multiplatform/build.gradle.kts @@ -48,7 +48,7 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:${rootProject.extra["gradle.plugin.version"]}") classpath(kotlin("gradle-plugin", version = rootProject.extra["kotlin.version"] as String)) - classpath("dev.icerock.moko:resources-generator:0.23.0") + classpath("dev.icerock.moko:resources-generator:0.27.1") // Workaround gradle sync issue: https://github.com/gmazzo/gradle-buildconfig-plugin/issues/137#issuecomment-1935739759 classpath("com.squareup:kotlinpoet:1.16.0") diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index ca19cdea3a..0ff63fa8de 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -56,11 +56,6 @@ kotlin { } val commonMain by getting { - if (hasSimplexAssets) { - resources.srcDir(simplexAssetsLocal) - } else { - resources.srcDir("src/commonMain/resources/assets/default") - } dependencies { api(compose.runtime) api(compose.foundation) @@ -78,8 +73,8 @@ kotlin { // Link Previews implementation("org.jsoup:jsoup:1.17.2") // Resources - api("dev.icerock.moko:resources:0.23.0") - api("dev.icerock.moko:resources-compose:0.23.0") + api("dev.icerock.moko:resources:0.27.1") + api("dev.icerock.moko:resources-compose:0.27.1") // Markdown implementation("com.mikepenz:multiplatform-markdown-renderer:0.27.0") @@ -95,7 +90,6 @@ kotlin { } } val androidMain by getting { - kotlin.srcDir("build/generated/moko/androidMain/src") dependencies { implementation("androidx.activity:activity-compose:1.9.1") val workVersion = "2.9.1" @@ -165,20 +159,13 @@ android { } testOptions.targetSdk = 36 lint.targetSdk = 36 - val isAndroid = gradle.startParameter.taskNames.find { - val lower = it.lowercase() - lower.contains("release") || lower.startsWith("assemble") || lower.startsWith("install") - } != null - if (isAndroid) { - // This is not needed on Android but can't be moved to desktopMain because MR lib don't support this. - // No other ways to exclude a file work, but it's large and should be excluded - kotlin.sourceSets["commonMain"].resources.exclude("/MR/fonts/NotoColorEmoji-Regular.ttf") - } } multiplatformResources { - multiplatformResourcesPackage = "chat.simplex.res" - // multiplatformResourcesClassName = "MR" + resourcesPackage.set("chat.simplex.res") + resourcesSourceSets { + getByName("commonMain").srcDirs(if (hasSimplexAssets) simplexAssetsLocal.resolve("MR") else file("src/commonMain/resources/assets/default/MR")) + } } buildConfig { @@ -286,8 +273,8 @@ afterEvaluate { } return this } - val fileRegex = Regex("MR/../strings.xml$|MR/..-.../strings.xml$|MR/..-../strings.xml$|MR/base/strings.xml$") - val tree = kotlin.sourceSets["commonMain"].resources.filter { fileRegex.containsMatchIn(it.absolutePath.replace("\\", "/")) }.asFileTree + val fileRegex = Regex("moko-resources/../strings.xml$|moko-resources/..-.../strings.xml$|moko-resources/..-../strings.xml$|moko-resources/base/strings.xml$") + val tree = fileTree("src/commonMain/moko-resources").filter { fileRegex.containsMatchIn(it.absolutePath.replace("\\", "/")) }.asFileTree val baseStringsFile = tree.firstOrNull { it.absolutePath.replace("\\", "/").endsWith("base/strings.xml") } ?: throw Exception("No base/strings.xml found") val lvStringsFile = tree.firstOrNull { it.absolutePath.replace("\\", "/").endsWith("lv/strings.xml") } ?: throw Exception("No base/strings.xml found") val treeList = ArrayList(tree.toList()) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/Permissions.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/Permissions.kt index bfb45d7413..74c9cf58a1 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/Permissions.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/Permissions.kt @@ -6,7 +6,7 @@ import android.provider.Settings import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* fun Context.openAppSettingsInSystem() { Intent().apply { diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Cryptor.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Cryptor.android.kt index b1a0307cde..73be3a203c 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Cryptor.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Cryptor.android.kt @@ -8,7 +8,7 @@ import android.security.keystore.KeyProperties import android.security.keystore.StrongBoxUnavailableException import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import java.security.KeyStore import javax.crypto.* import javax.crypto.spec.GCMParameterSpec diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt index 4f48ccca52..71d7ff3cb4 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt @@ -39,7 +39,7 @@ import chat.simplex.common.model.ChatModel import chat.simplex.common.ui.theme.CurrentColors import chat.simplex.common.views.chat.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.delay import kotlinx.coroutines.flow.filter diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt index e5dda23f0f..90fae139ce 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.* import chat.simplex.common.model.* import chat.simplex.common.platform.AudioPlayer.duration import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import java.io.* diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Share.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Share.android.kt index 79f0a8636b..6592557a7a 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Share.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/Share.android.kt @@ -15,7 +15,7 @@ import androidx.core.graphics.drawable.toBitmap import chat.simplex.common.helpers.* import chat.simplex.common.model.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import java.io.BufferedOutputStream import java.io.File import java.net.URI diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/UI.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/UI.android.kt index f6066d1624..9dbcb6d263 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/UI.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/UI.android.kt @@ -17,7 +17,7 @@ import chat.simplex.common.AppScreen import chat.simplex.common.model.clearAndNotify import chat.simplex.common.views.helpers.* import androidx.compose.ui.platform.LocalContext as LocalContext1 -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* actual fun showToast(text: String, timeout: Long) = Toast.makeText(androidAppContext, text, Toast.LENGTH_SHORT).show() diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/VideoPlayer.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/VideoPlayer.android.kt index 61b404f7d6..9949a21f6f 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/VideoPlayer.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/VideoPlayer.android.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.ImageBitmap import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.google.android.exoplayer2.* import com.google.android.exoplayer2.C.* import com.google.android.exoplayer2.audio.AudioAttributes diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/ui/theme/Type.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/ui/theme/Type.android.kt index 2e7404f241..9e44957a2a 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/ui/theme/Type.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/ui/theme/Type.android.kt @@ -1,15 +1,15 @@ package chat.simplex.common.ui.theme import androidx.compose.ui.text.font.* -import chat.simplex.res.MR +import chat.simplex.res.* actual 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) + 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) ) actual val EmojiFont: FontFamily = FontFamily.Default diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallAudioDeviceManager.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallAudioDeviceManager.kt index 0c23e95285..ff3bf11db1 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallAudioDeviceManager.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallAudioDeviceManager.kt @@ -8,7 +8,7 @@ import androidx.annotation.RequiresApi import androidx.compose.runtime.* import chat.simplex.common.platform.* import dev.icerock.moko.resources.ImageResource -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import java.util.concurrent.Executors diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt index 9ad787a6b1..dfe38f197a 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt @@ -46,7 +46,7 @@ import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.google.accompanist.permissions.* import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.compose.painterResource diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/ComposeView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/ComposeView.android.kt index 719dfeea55..95438d3d0e 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/ComposeView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/ComposeView.android.kt @@ -11,7 +11,7 @@ import androidx.core.content.ContextCompat import chat.simplex.common.helpers.toURI import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import java.net.URI @Composable diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.android.kt index e81827cb9a..b09ef7c918 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.android.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.* import chat.simplex.common.model.CryptoFile import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.DefaultDropdownMenu -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import java.net.URI diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.android.kt index b0bc6dd970..e16f99bf56 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.android.kt @@ -14,7 +14,7 @@ import chat.simplex.common.model.MsgContent import chat.simplex.common.platform.FileChooserLauncher import chat.simplex.common.platform.saveImage import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.rememberPermissionState import dev.icerock.moko.resources.compose.painterResource diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt index dad8872012..61d2f54318 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isVisible import chat.simplex.common.platform.VideoPlayer import chat.simplex.common.platform.androidAppContext -import chat.simplex.res.MR +import chat.simplex.res.* import coil.ImageLoader import coil.compose.rememberAsyncImagePainter import coil.decode.GifDecoder diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.android.kt index 8c3b161a5c..256d24a48c 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.android.kt @@ -18,7 +18,7 @@ import chat.simplex.common.model.durationText import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.call.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.delay import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/TagListView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/TagListView.android.kt index ab6d375d75..a4be67473e 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/TagListView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/TagListView.android.kt @@ -16,7 +16,7 @@ import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.android.kt index b472e6be3a..a81d9cd1ee 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.android.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import chat.simplex.common.ui.theme.SimplexGreen import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.android.kt index 3dace5f9bc..4c980acf91 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.android.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.ui.Modifier import chat.simplex.common.views.newchat.ActionButton -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/GetImageView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/GetImageView.android.kt index 1c7ba1dcf0..d499b7ab3f 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/GetImageView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/GetImageView.android.kt @@ -33,7 +33,7 @@ import chat.simplex.common.model.ChatModel import chat.simplex.common.model.json import chat.simplex.common.platform.* import chat.simplex.common.views.newchat.ActionButton -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.serialization.builtins.* import java.io.File import java.net.URI diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/Utils.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/Utils.android.kt index de6834ba41..371bd7676b 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/Utils.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/helpers/Utils.android.kt @@ -24,7 +24,7 @@ import androidx.core.text.HtmlCompat import chat.simplex.common.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import java.io.* import java.net.URI diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt index 6cf432a15f..416bd359c0 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt @@ -27,7 +27,7 @@ import boofcv.struct.image.GrayU8 import chat.simplex.common.platform.TAG import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.rememberPermissionState import com.google.common.util.concurrent.ListenableFuture diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt index a4fc74f6d4..0e1cf9472a 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import chat.simplex.common.model.SharedPreference import chat.simplex.common.model.User -import chat.simplex.res.MR +import chat.simplex.res.* @Composable actual fun OnboardingActionButton(user: User?, onboardingStage: SharedPreference, onclick: (() -> Unit)?) { diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt index c16d1ea90d..e5ae2b8a9b 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt @@ -32,7 +32,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.helpers.APPLICATION_ID import chat.simplex.common.helpers.saveAppLocale import chat.simplex.common.model.ChatController.appPrefs -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.delay diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.android.kt index 3c1771c8b3..230dee8851 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.android.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import androidx.fragment.app.FragmentActivity import chat.simplex.common.model.ChatModel -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.android.kt index 5e9706d713..4da9bf03b0 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.android.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.text.style.TextAlign import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.jakewharton.processphoenix.ProcessPhoenix import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt index 9883828950..656911443a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt @@ -37,7 +37,7 @@ import chat.simplex.common.views.localauth.VerticalDivider import chat.simplex.common.views.newchat.* import chat.simplex.common.views.onboarding.* import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/AppLock.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/AppLock.kt index c38e20aae8..9b42792e8b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/AppLock.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/AppLock.kt @@ -10,7 +10,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.localauth.SetAppPasscodeView import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* // Spec: spec/client/navigation.md#AppLock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index afad095a60..c10471317e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.migration.MigrationToDeviceState import chat.simplex.common.views.migration.MigrationToState -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index e3bea95c03..706ee713fc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -40,7 +40,7 @@ import chat.simplex.common.views.usersettings.networkAndServers.defaultCondition import chat.simplex.common.views.usersettings.networkAndServers.serverHostname import com.charleskorn.kaml.Yaml import com.charleskorn.kaml.YamlConfiguration -import chat.simplex.res.MR +import chat.simplex.res.* import com.russhwolf.settings.Settings import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt index 140c1951ee..a6ede20e41 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt @@ -6,7 +6,7 @@ import chat.simplex.common.BuildConfigCommon import chat.simplex.common.model.* import chat.simplex.common.ui.theme.DefaultTheme import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import java.util.* enum class AppPlatform { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt index ad0e9aaa5a..9d1c0b8769 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt @@ -8,7 +8,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.helpers.DatabaseUtils.ksDatabasePassword import chat.simplex.common.views.helpers.DatabaseUtils.randomDatabasePassword import chat.simplex.common.views.onboarding.OnboardingStage -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import java.io.File import java.nio.ByteBuffer diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt index cdd4140e3f..6dfbeceff8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Files.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import chat.simplex.common.model.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.charleskorn.kaml.* import kotlinx.serialization.encodeToString import java.io.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt index bf7a4c83c3..ee47403cd3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt @@ -7,7 +7,7 @@ import chat.simplex.common.views.chatlist.acceptContactRequest import chat.simplex.common.views.chatlist.openChat import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.OnboardingStage -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay enum class NotificationAction { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt index 20e0280acd..b6d6a4d771 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.helpers.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.serialization.Transient import java.util.UUID diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt index 843bacecec..e4a187783a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt @@ -45,7 +45,7 @@ import chat.simplex.common.views.onboarding.* import chat.simplex.common.views.usersettings.DeleteImageButton import chat.simplex.common.views.usersettings.EditImageButton import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgeUserPreview.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgeUserPreview.kt index 03fabf817e..0eda3cd751 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgeUserPreview.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgeUserPreview.kt @@ -15,7 +15,7 @@ import chat.simplex.common.model.LocalBadge import chat.simplex.common.platform.chatModel import chat.simplex.common.views.helpers.NameWithBadge import chat.simplex.common.views.helpers.ProfileImage -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.Instant @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt index cb300b183d..28cf4c40b5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesHowItWorksView.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.views.onboarding.ReadableTextWithLink -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun BadgesHowItWorksView() { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt index 2783727621..9420f323ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesLedgerView.kt @@ -39,7 +39,7 @@ import chat.simplex.common.views.helpers.ModalView import chat.simplex.common.views.helpers.ShareButton import chat.simplex.common.views.helpers.generalGetString import chat.simplex.common.views.helpers.withBGApi -import chat.simplex.res.MR +import chat.simplex.res.* import kotlin.math.abs @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPayView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPayView.kt index d7a10f38f7..f8fbd3a416 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPayView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPayView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.OnboardingActionButton -import chat.simplex.res.MR +import chat.simplex.res.* // TODO [badges]: replace with types produced by the badge purchase API when it lands. enum class BadgePeriod { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesRedeemCodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesRedeemCodeView.kt index 9ebaf9bcdc..62bdc2962e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesRedeemCodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesRedeemCodeView.kt @@ -32,7 +32,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCodeScanner import chat.simplex.common.views.onboarding.OnboardingActionButton import chat.simplex.common.views.onboarding.TextButtonBelowOnboardingButton -import chat.simplex.res.MR +import chat.simplex.res.* private const val badgeCodePrefix = "SB" private const val badgeCodeBodyLength = 20 diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesSupportSimplexView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesSupportSimplexView.kt index 4f1cc2ed66..a58ab552f8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesSupportSimplexView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesSupportSimplexView.kt @@ -29,7 +29,7 @@ import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.onboarding.HowItWorks import chat.simplex.common.views.onboarding.OnboardingActionButton import chat.simplex.common.views.onboarding.TextButtonBelowOnboardingButton -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun BadgesSupportSimplexView(modalManager: ModalManager) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt index c2ca7d7f10..f6f6ecb12d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourBadgeView.kt @@ -34,7 +34,7 @@ import chat.simplex.common.views.helpers.badgeTypeName import chat.simplex.common.views.helpers.openVerifiedSimplexUri import chat.simplex.common.views.usersettings.SettingsActionItem import chat.simplex.common.views.usersettings.simplexTeamUri -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun BadgesYourBadgeView(badgeState: BadgeState, modalManager: ModalManager) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourLevelView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourLevelView.kt index 161702704b..44b5de021a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourLevelView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesYourLevelView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.OnboardingActionButton import chat.simplex.common.views.onboarding.TextButtonBelowOnboardingButton -import chat.simplex.res.MR +import chat.simplex.res.* // TODO [badges]: replace with types produced by the badge purchase API when it lands. enum class BadgeLevel { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/SupportSimpleXBanner.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/SupportSimpleXBanner.kt index 47a4d3b152..2a7f1034df 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/SupportSimpleXBanner.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/SupportSimpleXBanner.kt @@ -20,7 +20,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chatlist.BannerDismissButton import chat.simplex.common.views.chatlist.bannerCard import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun SupportSimpleXBanner( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/IncomingCallAlertView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/IncomingCallAlertView.kt index 563f4c3b83..70565fedb4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/IncomingCallAlertView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/IncomingCallAlertView.kt @@ -19,7 +19,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.ProfileImage import chat.simplex.common.views.usersettings.ProfilePreview -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.Clock // Spec: spec/services/calls.md#IncomingCallAlertView diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt index 6cd0ba95ba..b761218fdc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt @@ -3,7 +3,7 @@ package chat.simplex.common.views.call import chat.simplex.common.views.helpers.generalGetString import chat.simplex.common.model.* import chat.simplex.common.platform.appPlatform -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.Instant import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt index b35e828962..9c019ad535 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt @@ -43,7 +43,7 @@ import chat.simplex.common.views.chat.group.ChatTTLOption import chat.simplex.common.views.chat.item.MarkdownText import chat.simplex.common.views.chatlist.updateChatSettings import chat.simplex.common.views.newchat.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt index 50f5e35462..e4f93a0b8a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt @@ -33,7 +33,7 @@ import chat.simplex.common.views.badges.openBadgesView import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.newchat.noShownBadge import chat.simplex.common.views.usersettings.networkAndServers.serverHostname -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import kotlinx.serialization.encodeToString diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index fc57998f1b..a4a4ddfe94 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -44,7 +44,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.platform.AudioPlayer import chat.simplex.common.views.newchat.ContactConnectionInfoView import chat.simplex.common.views.newchat.alertProfileImageSize -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/CommandsMenuView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/CommandsMenuView.kt index 26b1fce741..5f7aec3dd6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/CommandsMenuView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/CommandsMenuView.kt @@ -25,7 +25,7 @@ import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.chat.group.* import chat.simplex.common.views.chat.item.sendCommandMsg import chat.simplex.common.views.helpers.commandMenuAnimSpec -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeChatLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeChatLinkView.kt index 14edea3ed6..06a8d529a2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeChatLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeChatLinkView.kt @@ -12,7 +12,7 @@ import chat.simplex.common.model.MsgChatLink import chat.simplex.common.ui.theme.appColors import chat.simplex.common.views.helpers.ProfileImage import dev.icerock.moko.resources.compose.painterResource -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ComposeChatLinkView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextContactRequestActionsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextContactRequestActionsView.kt index 106c975226..c10e28ce11 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextContactRequestActionsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextContactRequestActionsView.kt @@ -18,7 +18,7 @@ import chat.simplex.common.platform.chatModel import chat.simplex.common.views.chatlist.acceptContactRequest import chat.simplex.common.views.chatlist.rejectContactRequest import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.delay diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextGroupDirectInvitationActionsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextGroupDirectInvitationActionsView.kt index 21799ff820..015308fe22 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextGroupDirectInvitationActionsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextGroupDirectInvitationActionsView.kt @@ -16,7 +16,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextPendingMemberActionsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextPendingMemberActionsView.kt index be82a5d2d3..8cda1226fd 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextPendingMemberActionsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextPendingMemberActionsView.kt @@ -16,7 +16,7 @@ import chat.simplex.common.platform.chatModel import chat.simplex.common.views.chat.group.removeMember import chat.simplex.common.views.chat.group.removeMemberDialog import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextProfilePickerView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextProfilePickerView.kt index b7be49055e..80940bf631 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextProfilePickerView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeContextProfilePickerView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.IncognitoOptionImage import chat.simplex.common.views.usersettings.IncognitoView -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeFileView.kt index 26e069c739..c5a21dfa37 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeFileView.kt @@ -12,7 +12,7 @@ import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.common.ui.theme.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ComposeFileView(fileName: String, cancelFile: () -> Unit, cancelEnabled: Boolean) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeImageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeImageView.kt index 97b6f9afda..c6ce37a9ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeImageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeImageView.kt @@ -14,7 +14,7 @@ import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.common.platform.base64ToBitmap -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.UploadContent diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index c81149fcb1..cd733bf275 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -42,7 +42,7 @@ import chat.simplex.common.views.newchat.RelayProgressIndicator import chat.simplex.common.views.newchat.RelayStatusIndicator import chat.simplex.common.views.newchat.noShownBadge import chat.simplex.common.views.newchat.relayDisplayName -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import kotlinx.coroutines.* import kotlinx.coroutines.flow.distinctUntilChanged diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeVoiceView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeVoiceView.kt index b070dce1d1..29c171b00f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeVoiceView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeVoiceView.kt @@ -22,7 +22,7 @@ import chat.simplex.common.model.durationText import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.platform.AudioPlayer -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.flow.distinctUntilChanged @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContactPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContactPreferences.kt index 0276727ccc..b7adec1add 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContactPreferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContactPreferences.kt @@ -21,7 +21,7 @@ import chat.simplex.common.views.usersettings.PreferenceToggle import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatModel -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt index e681c4fed7..b477f56118 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt @@ -22,7 +22,7 @@ import chat.simplex.common.views.chat.item.* import chat.simplex.common.model.* import chat.simplex.common.platform.getLoadedFilePath import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt index 428d4b1b8f..ea0ef11aef 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt @@ -9,7 +9,7 @@ import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCodeScanner -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt index 03d0b99854..3f3278ee58 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt @@ -17,7 +17,7 @@ import chat.simplex.common.platform.BackHandler import chat.simplex.common.platform.chatModel import chat.simplex.common.views.helpers.* import dev.icerock.moko.resources.compose.stringResource -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt index b116201d87..8205071225 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt @@ -24,7 +24,7 @@ import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.helpers.* import chat.simplex.common.model.ChatItem import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SimplexNameView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SimplexNameView.kt index d3e3ffbe61..7915aedca5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SimplexNameView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SimplexNameView.kt @@ -15,7 +15,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/TextSelection.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/TextSelection.kt index db31c05dce..20f5acd3e0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/TextSelection.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/TextSelection.kt @@ -39,7 +39,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.item.itemPrefixText import chat.simplex.common.views.chat.item.itemSegmentDisplayText import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt index 880c15216e..3610147804 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCode -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun VerifyCodeView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt index 7223f69f98..731b125955 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt @@ -30,7 +30,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.SettingsActionItem import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupRelayView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupRelayView.kt index 95ce003caa..f67efc0202 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupRelayView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupRelayView.kt @@ -19,7 +19,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.chatRelayDisplayName import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelMembersView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelMembersView.kt index 128747c4fa..ea841acc86 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelMembersView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelMembersView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.views.chat.ownersContributorsCountStr import chat.simplex.common.views.chat.subscriberCountStr import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ModalData.ChannelMembersView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelRelaysView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelRelaysView.kt index 60cc19bb1b..951b7b2c35 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelRelaysView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelRelaysView.kt @@ -20,7 +20,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chatlist.setGroupMembers import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelWebPageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelWebPageView.kt index 18a944f671..7f40458f42 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelWebPageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/ChannelWebPageView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index d14da9dc33..973b684d38 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -49,7 +49,7 @@ import chat.simplex.common.views.chat.item.* import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.database.TtlOptions import chat.simplex.common.views.newchat.SimpleXLinkQRCode -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupLinkView.kt index f6f19e9d72..9f02d0fefb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupLinkView.kt @@ -24,7 +24,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.* import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun GroupLinkView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt index 885d3de4e6..ac1c6915b4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt @@ -36,7 +36,7 @@ import chat.simplex.common.views.usersettings.SettingsActionItem import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.* import chat.simplex.common.views.chatlist.openDirectChat -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.datetime.Clock import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMembersToolbar.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMembersToolbar.kt index 81e7d80da3..6dcc6e9a4f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMembersToolbar.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMembersToolbar.kt @@ -16,7 +16,7 @@ import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.WarningOrange import chat.simplex.common.views.chat.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMentions.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMentions.kt index 2a5f9df8c1..5f0fed040e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMentions.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMentions.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.chatlist.setGroupMembers import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.launch import kotlin.text.CharCategory.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt index f04d63e2d2..bd3af10c37 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt @@ -21,7 +21,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatModel import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupProfileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupProfileView.kt index 6e91ad92d6..c93179edd7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupProfileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupProfileView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.views.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.ReadableText import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* import java.net.URI diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt index 2cc2402c0a..0c272ae98d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt @@ -9,7 +9,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.flow.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberAdmission.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberAdmission.kt index 544af8ed7e..ef333a8826 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberAdmission.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberAdmission.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatModel -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportChatView.kt index 0da3c46abb..8e0b3321b5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportChatView.kt @@ -16,7 +16,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportView.kt index b685d20fb9..b05d425c46 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/MemberSupportView.kt @@ -26,7 +26,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chatlist.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt index 927e9940b5..ec8b545647 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt @@ -28,7 +28,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.model.ChatModel import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* private const val maxByteCount = 1200 diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIBrokenComposableView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIBrokenComposableView.kt index d49f8526d5..1d50ba17e4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIBrokenComposableView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIBrokenComposableView.kt @@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CIBrokenComposableView(alignment: Alignment) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CICallItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CICallItemView.kt index 744bcf7b66..d3cc76fb7a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CICallItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CICallItemView.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.unit.dp import chat.simplex.common.ui.theme.* import chat.simplex.common.model.* import chat.simplex.common.views.helpers.SimpleButton -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CICallItemView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatLinkHeader.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatLinkHeader.kt index 3c3e4baf49..23fce97a6f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatLinkHeader.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatLinkHeader.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.unit.sp import chat.simplex.common.model.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.ProfileImage -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFeaturePreferenceView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFeaturePreferenceView.kt index 1a23dfc49a..27e605df4f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFeaturePreferenceView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFeaturePreferenceView.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.views.helpers.generalGetString import chat.simplex.common.model.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CIFeaturePreferenceView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt index fb4a2cdaea..a3c2b63f8f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt @@ -25,7 +25,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import java.io.File import java.net.URI diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIGroupInvitationView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIGroupInvitationView.kt index 9b8393f66a..649188502d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIGroupInvitationView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIGroupInvitationView.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.unit.sp import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt index fc1c76074d..d5ea44126b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt @@ -26,7 +26,7 @@ import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.DEFAULT_MAX_IMAGE_WIDTH import chat.simplex.common.views.chat.chatViewScrollState -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* import kotlin.math.roundToInt diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIInvalidJSONView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIInvalidJSONView.kt index d297d5ef76..391ee88e2d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIInvalidJSONView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIInvalidJSONView.kt @@ -14,7 +14,7 @@ import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.shareText import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CIInvalidJSONView(json: String) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMemberCreatedContactView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMemberCreatedContactView.kt index 2ade49b3fc..bbd7788f29 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMemberCreatedContactView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMemberCreatedContactView.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.views.helpers.generalGetString import chat.simplex.common.model.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CIMemberCreatedContactView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMetaView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMetaView.kt index 92f89ccad9..e318f406de 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMetaView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIMetaView.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.unit.sp import chat.simplex.common.model.* import chat.simplex.common.platform.appPreferences import chat.simplex.common.ui.theme.isInDarkTheme -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.Clock @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt index d58fd7553f..589b2a6fa6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt @@ -17,7 +17,7 @@ import chat.simplex.common.ui.theme.CurrentColors import chat.simplex.common.ui.theme.appColors import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.kt index 8b4756c3ad..21f406db18 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.platform.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.* -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVoiceView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVoiceView.kt index c3e1c92732..3b3c835e0a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVoiceView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVoiceView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import kotlinx.coroutines.flow.* import kotlin.math.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index c38bc1fe08..cb3a07b7f9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -34,7 +34,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.chatlist.openChat import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index e2e7f0bc69..fd422b649a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -25,7 +25,7 @@ import chat.simplex.common.views.chat.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.chatlist.openChat import chat.simplex.common.views.newchat.planAndConnect -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlin.math.ceil diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/IntegrityErrorItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/IntegrityErrorItemView.kt index 08b6520dfa..9b378ea9ea 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/IntegrityErrorItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/IntegrityErrorItemView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.model.RcvMsgError import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun IntegrityErrorItemView(msgError: MsgErrorType, ci: ChatItem, showTimestamp: Boolean, timedMessagesTTL: Int?) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt index 84bc14fee3..c488b4172b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt @@ -15,7 +15,7 @@ import chat.simplex.common.model.* import chat.simplex.common.model.ChatModel.getChatItemIndexOrNull import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatHelpView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatHelpView.kt index f36978cd3c..050843059c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatHelpView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatHelpView.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.helpers.annotatedStringResource import chat.simplex.common.views.onboarding.ReadableTextWithLink import chat.simplex.common.views.usersettings.MarkdownHelpView import chat.simplex.common.views.usersettings.simplexTeamUri -import chat.simplex.res.MR +import chat.simplex.res.* val bold = SpanStyle(fontWeight = FontWeight.Bold) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt index ca1528a3ce..5f3fa2725c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt @@ -28,7 +28,7 @@ import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.contacts.onRequestAccepted import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt index 5f296655b7..17101c35d1 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt @@ -46,7 +46,7 @@ import chat.simplex.common.views.badges.* import chat.simplex.common.views.newchat.* import chat.simplex.common.views.onboarding.* import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt index 01179f07ee..7e11fdfb97 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt @@ -33,7 +33,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.newchat.planAndConnect import chat.simplex.common.views.chat.item.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource // Spec: spec/client/chat-list.md#ChatPreviewView diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactConnectionView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactConnectionView.kt index 349f1f12d4..ddfc4b74ab 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactConnectionView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactConnectionView.kt @@ -17,7 +17,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.model.PendingContactConnection import chat.simplex.common.model.getTimestampText import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ContactConnectionView(contactConnection: PendingContactConnection) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactRequestView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactRequestView.kt index 96e7fbacd0..fb575498c7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactRequestView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ContactRequestView.kt @@ -16,7 +16,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.model.ChatInfo import chat.simplex.common.model.getTimestampText import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ContactRequestView(contactRequest: ChatInfo.ContactRequest) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/GetStakeBanner.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/GetStakeBanner.kt index d383366dd4..c740e53a17 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/GetStakeBanner.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/GetStakeBanner.kt @@ -28,7 +28,7 @@ import chat.simplex.common.views.newchat.darkStops import chat.simplex.common.views.newchat.gradientPoints import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.onboarding.GetStakeView -import chat.simplex.res.MR +import chat.simplex.res.* // Spec: spec/client/chat-list.md#GetStakeBanner @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ServersSummaryView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ServersSummaryView.kt index 1c2f34e88d..31941e1f77 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ServersSummaryView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ServersSummaryView.kt @@ -50,7 +50,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.SettingsPreferenceItem -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt index 07058b5787..b1fe42cdfc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.unit.dp import chat.simplex.common.model.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.launch @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt index 382d126db7..023aea530f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt @@ -19,7 +19,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.themedBackground import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.newchat.ActiveProfilePicker -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ShareListView(chatModel: ChatModel, stopped: Boolean) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/TagListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/TagListView.kt index fe61859937..17e288ff00 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/TagListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/TagListView.kt @@ -37,7 +37,7 @@ import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chat.item.ReactionIcon import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt index 81a6b31323..652d072c9c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt @@ -34,7 +34,7 @@ import chat.simplex.common.views.localauth.VerticalDivider import chat.simplex.common.views.remote.* import chat.simplex.common.views.usersettings.* import chat.simplex.common.views.usersettings.AppearanceScope.ColorModeSwitcher -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* import kotlinx.coroutines.flow.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactListNavView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactListNavView.kt index 371e9072ea..8c77d7560f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactListNavView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactListNavView.kt @@ -12,7 +12,7 @@ import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.ContactType import chat.simplex.common.views.newchat.chatContactType -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay fun onRequestAccepted(chat: Chat) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactPreviewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactPreviewView.kt index 524fbedb1c..a430b521c2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactPreviewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/contacts/ContactPreviewView.kt @@ -15,7 +15,7 @@ import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.* import chat.simplex.common.views.newchat.ContactType import chat.simplex.common.views.newchat.chatContactType -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun ContactPreviewView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt index ebf96a9868..ac64c93c73 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt @@ -32,7 +32,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseErrorView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseErrorView.kt index 4aeb929624..4b59dd81c9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseErrorView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseErrorView.kt @@ -22,7 +22,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.AppVersionText import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index cc782e7b48..6abbf83226 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -26,7 +26,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.datetime.* import java.io.* import java.net.URI diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt index 62ba2c10f3..9c64e7ce85 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt @@ -24,7 +24,7 @@ import chat.simplex.common.model.ChatModel import chat.simplex.common.model.LocalBadge import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt index cf2ceaf2d6..2c6eed78f7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.graphics.* import androidx.compose.ui.unit.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chatlist.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import kotlin.math.absoluteValue diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt index 91919ff0cf..036bcab68d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt @@ -38,7 +38,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.badges.openBadgesView import chat.simplex.common.views.newchat.noShownBadge -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import kotlin.math.max import kotlin.math.roundToInt diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt index c1a76d7bf8..50341761c5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt @@ -14,7 +14,7 @@ import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.ui.theme.ThemeManager.colorFromReadableHex -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlinx.serialization.SerialName diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/CustomTimePicker.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/CustomTimePicker.kt index 3c44cbb4dd..ed10c0f86f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/CustomTimePicker.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/CustomTimePicker.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import chat.simplex.common.model.CustomTimeUnit import chat.simplex.common.model.timeText -import chat.simplex.res.MR +import chat.simplex.res.* @Composable expect fun CustomTimePicker( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt index e984ddfb7b..41556236b3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt @@ -2,7 +2,7 @@ package chat.simplex.common.views.helpers import chat.simplex.common.model.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.serialization.* import java.io.File import java.security.SecureRandom diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultBasicTextField.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultBasicTextField.kt index b0366cceb3..e5feb49107 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultBasicTextField.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultBasicTextField.kt @@ -21,7 +21,7 @@ import androidx.compose.ui.text.input.* import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* import chat.simplex.common.views.database.PassphraseStrength -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultTopAppBar.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultTopAppBar.kt index 81fac40a40..1c2ef93a09 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultTopAppBar.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DefaultTopAppBar.kt @@ -17,7 +17,7 @@ import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.CenteredRowLayout -import chat.simplex.res.MR +import chat.simplex.res.* import kotlin.math.absoluteValue @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ExposedDropDownSettingRow.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ExposedDropDownSettingRow.kt index 893ff5a467..2867f6d8a3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ExposedDropDownSettingRow.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ExposedDropDownSettingRow.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.usersettings.SettingsActionItemWithContent import dev.icerock.moko.resources.ImageResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LinkPreviews.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LinkPreviews.kt index 8aea99eb4e..258fede5b4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LinkPreviews.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LinkPreviews.kt @@ -23,7 +23,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.chatViewScrollState import chat.simplex.common.views.chat.item.CHAT_IMAGE_LAYOUT_ID import chat.simplex.common.views.chat.item.imageViewFullWidth -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LocalAuthentication.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LocalAuthentication.kt index 1f2b5485f2..5e040042dd 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LocalAuthentication.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/LocalAuthentication.kt @@ -8,7 +8,7 @@ import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.BackHandler import chat.simplex.common.views.localauth.LocalAuthView import chat.simplex.common.views.usersettings.LAMode -import chat.simplex.res.MR +import chat.simplex.res.* sealed class LAResult { object Success: LAResult() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt index 3d21cfaf0f..27064b21d5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt @@ -5,7 +5,7 @@ import chat.simplex.common.platform.Log import chat.simplex.common.platform.TAG import chat.simplex.common.platform.ntfManager import chat.simplex.common.views.database.restartChatOrApp -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.Job import kotlinx.coroutines.delay diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SearchTextField.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SearchTextField.kt index cc6b1c40a4..790174eaf6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SearchTextField.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SearchTextField.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.text.input.* import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt index 5196a144b1..32370ce290 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt @@ -26,7 +26,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.SelectableCard import chat.simplex.common.views.usersettings.SettingsActionItemWithContent -import chat.simplex.res.MR +import chat.simplex.res.* val SectionCardShape = RoundedCornerShape(16.dp) val CARD_PADDING = 18.dp diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SimpleButton.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SimpleButton.kt index 1c4879dedd..d59fc1fe13 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SimpleButton.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SimpleButton.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import chat.simplex.common.platform.appPlatform import chat.simplex.common.ui.theme.SimpleXTheme -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun SimpleButton(text: String, icon: Painter, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SubscriptionStatusIcon.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SubscriptionStatusIcon.kt index e0e61b598e..7f8b902b94 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SubscriptionStatusIcon.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/SubscriptionStatusIcon.kt @@ -5,7 +5,7 @@ import androidx.compose.material.Icon import androidx.compose.ui.graphics.Color import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ThemeModeEditor.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ThemeModeEditor.kt index c8c24d918a..98ea245886 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ThemeModeEditor.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ThemeModeEditor.kt @@ -19,7 +19,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.usersettings.* import chat.simplex.common.views.usersettings.AppearanceScope.WallpaperPresetSelector import chat.simplex.common.views.usersettings.AppearanceScope.editColor -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.serialization.encodeToString diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt index 2d6e70eae9..dfe33e3595 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt @@ -13,7 +13,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.ThemeModeOverrides import chat.simplex.common.ui.theme.ThemeOverrides import chat.simplex.common.views.chatlist.connectIfOpenedViaUri -import chat.simplex.res.MR +import chat.simplex.res.* import com.charleskorn.kaml.decodeFromStream import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt index f86edb0388..04c1239d84 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt @@ -11,7 +11,7 @@ import chat.simplex.common.views.helpers.DatabaseUtils.ksAppPassword import chat.simplex.common.views.onboarding.OnboardingStage import chat.simplex.common.platform.* import chat.simplex.common.views.database.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt index 669847c3a9..957eb099d9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasscodeView.kt @@ -15,7 +15,7 @@ import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.chat.group.ProgressIndicator import chat.simplex.common.views.helpers.SimpleButton import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun PasscodeView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt index d16f0a2a38..9305e21cc4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/PasswordEntry.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.* import chat.simplex.common.platform.appPlatform -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun PasscodeEntry( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/SetAppPasscodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/SetAppPasscodeView.kt index 1d620c915f..a42949493b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/SetAppPasscodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/SetAppPasscodeView.kt @@ -7,7 +7,7 @@ import chat.simplex.common.views.helpers.DatabaseUtils import chat.simplex.common.views.helpers.DatabaseUtils.ksAppPassword import chat.simplex.common.views.helpers.DatabaseUtils.ksSelfDestructPassword import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun SetAppPasscodeView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateFromDevice.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateFromDevice.kt index 87784f009e..05c22155b8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateFromDevice.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateFromDevice.kt @@ -30,7 +30,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.LinkTextView import chat.simplex.common.views.newchat.SimpleXLinkQRCode import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt index 54b6758976..150be7ea6b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt @@ -29,7 +29,7 @@ import chat.simplex.common.views.newchat.QRCodeScanner import chat.simplex.common.views.onboarding.OnboardingStage import chat.simplex.common.views.usersettings.* import chat.simplex.common.views.usersettings.networkAndServers.OnionRelatedLayout -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddChannelView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddChannelView.kt index 639a5cc78e..7ad3076640 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddChannelView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddChannelView.kt @@ -32,7 +32,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* import chat.simplex.common.views.usersettings.networkAndServers.NetworkAndServersView import chat.simplex.common.views.chat.group.hostFromRelayLink -import chat.simplex.res.MR +import chat.simplex.res.* import java.net.URI import dev.icerock.moko.resources.compose.painterResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddContactLearnMore.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddContactLearnMore.kt index 077abd1b98..9198ec819a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddContactLearnMore.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddContactLearnMore.kt @@ -11,7 +11,7 @@ import chat.simplex.common.views.helpers.AppBarTitle import chat.simplex.common.views.helpers.KeyChangeEffect import chat.simplex.common.views.onboarding.ReadableText import chat.simplex.common.views.onboarding.ReadableTextWithLink -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun AddContactLearnMore(close: () -> Unit) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddGroupView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddGroupView.kt index 1d8da1690c..e2c89940ab 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddGroupView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/AddGroupView.kt @@ -29,7 +29,7 @@ import chat.simplex.common.views.chatlist.openGroupChat import chat.simplex.common.views.usersettings.* import androidx.compose.ui.layout.ContentScale import chat.simplex.common.BuildConfigCommon -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt index 5e5769891a..61cb73ca0b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt @@ -14,7 +14,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.subscriberCountStr import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* enum class ConnectionLinkType { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ContactConnectionInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ContactConnectionInfoView.kt index f1bd732d87..f6109778dc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ContactConnectionInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ContactConnectionInfoView.kt @@ -26,7 +26,7 @@ import chat.simplex.common.model.ChatModel import chat.simplex.common.model.PendingContactConnection import chat.simplex.common.platform.* import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatSheet.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatSheet.kt index 4d97e3a054..bdad9d19c4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatSheet.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatSheet.kt @@ -34,7 +34,7 @@ import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.contacts.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt index f3006d221b..29819f21cb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt @@ -42,7 +42,7 @@ import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* import chat.simplex.common.BuildConfigCommon -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* enum class NewChatOption { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/OnboardingCards.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/OnboardingCards.kt index 661e752751..cf708c72d8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/OnboardingCards.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/OnboardingCards.kt @@ -38,7 +38,7 @@ import chat.simplex.common.views.chatlist.openGetStake import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.crowdfundingAvailable import chat.simplex.common.views.usersettings.UserAddressView -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.launch import kotlin.math.cos import kotlin.math.sin diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCode.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCode.kt index 74c9a55ecf..7171c7475c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCode.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCode.kt @@ -16,7 +16,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.launch @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt index d11e396388..30be129aa8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt @@ -34,7 +34,7 @@ import chat.simplex.common.views.newchat.darkStops import chat.simplex.common.views.newchat.gradientPoints import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.usersettings.networkAndServers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt index 9d82395740..a205a11145 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt @@ -19,7 +19,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.MarkdownText import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt index 97dfcd34b9..5aca7a20c9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt @@ -17,7 +17,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.remote.AddingMobileDevice import chat.simplex.common.views.remote.DeviceNameField import chat.simplex.common.views.usersettings.PreferenceToggle -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt index 684bfb0053..c5361452ad 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt @@ -26,7 +26,7 @@ import chat.simplex.common.views.helpers.mixWith import chat.simplex.common.views.newchat.darkStops import chat.simplex.common.views.newchat.gradientPoints import chat.simplex.common.views.newchat.lightStops -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.compose.painterResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt index adcfb8b194..4dfd6445ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt @@ -18,7 +18,7 @@ import chat.simplex.common.model.NotificationsMode import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt index 9ef72a7f12..0d00c20591 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt @@ -19,7 +19,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.database.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt index d97d709953..41229037b5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt @@ -35,7 +35,7 @@ import chat.simplex.common.views.newchat.gradientPoints import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.migration.MigrateToDeviceView import chat.simplex.common.views.migration.MigrationToState -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlin.math.ceil import kotlin.math.floor diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt index 39a6514302..81ea810acb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt @@ -59,7 +59,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.UserAddressView import chat.simplex.common.views.usersettings.networkAndServers.UsageConditionsView import chat.simplex.common.views.usersettings.showAddShortLinkAlert -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.StringResource import kotlin.math.absoluteValue diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt index b20cfe3096..45f7927c8b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt @@ -30,7 +30,7 @@ import chat.simplex.common.views.newchat.darkStops import chat.simplex.common.views.newchat.gradientPoints import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.usersettings.changeNotificationsMode -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt index 2d2de2881f..01b054fb28 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt @@ -35,7 +35,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCodeScanner import chat.simplex.common.views.usersettings.PreferenceToggle import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt index 8caf038481..57700aeba3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt @@ -36,7 +36,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCode import chat.simplex.common.views.usersettings.* import chat.simplex.common.views.usersettings.networkAndServers.validPort -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.flow.distinctUntilChanged diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt index 93c5eb7756..a661568a0d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt @@ -40,7 +40,7 @@ import chat.simplex.common.ui.theme.ThemeManager.colorFromReadableHex import chat.simplex.common.ui.theme.ThemeManager.toReadableHex import chat.simplex.common.views.chat.item.PreviewChatItemView import chat.simplex.common.views.chat.item.msgTailWidthDp -import chat.simplex.res.MR +import chat.simplex.res.* import com.godaddy.android.colorpicker.ClassicColorPicker import com.godaddy.android.colorpicker.HsvColor import dev.icerock.moko.resources.StringResource diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/CallSettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/CallSettings.kt index 43863d5794..ca9c66df27 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/CallSettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/CallSettings.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.appPlatform -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun CallSettingsView(m: ChatModel, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt index 2c729149d0..cfdf003bc6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt @@ -15,7 +15,7 @@ import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.views.TerminalView import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun DeveloperView(withAuth: (title: String, desc: String, block: () -> Unit) -> Unit diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HelpView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HelpView.kt index aaaef31583..74afa93f06 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HelpView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HelpView.kt @@ -12,7 +12,7 @@ import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.ui.theme.SimpleXTheme import chat.simplex.common.views.chatlist.ChatHelpView import chat.simplex.common.views.helpers.AppBarTitle -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun HelpView(userDisplayName: String) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HiddenProfileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HiddenProfileView.kt index 4a3806ab89..a14dab3f1a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HiddenProfileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/HiddenProfileView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chatlist.UserProfileRow import chat.simplex.common.views.database.PassphraseField import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun HiddenProfileView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/IncognitoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/IncognitoView.kt index 6098f66941..7f1081ff3d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/IncognitoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/IncognitoView.kt @@ -12,7 +12,7 @@ import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.helpers.AppBarTitle import chat.simplex.common.views.helpers.generalGetString import chat.simplex.common.views.onboarding.ReadableTextWithLink -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun IncognitoView() { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt index ab2df2014c..2810cb02ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt @@ -14,7 +14,7 @@ import chat.simplex.common.model.Format import chat.simplex.common.model.FormatColor import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.ui.theme.SimpleXTheme -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun MarkdownHelpView() { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt index 91324bb39a..083e5a07ae 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.text.style.TextOverflow import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlin.collections.ArrayList @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt index 63f3491d80..6a06432c6d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt @@ -18,7 +18,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatModel -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt index 314537f579..1696e5f1fe 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt @@ -20,7 +20,7 @@ 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 -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.model.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.ui.theme.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/RTCServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/RTCServers.kt index 0c31b062dd..57c77df844 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/RTCServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/RTCServers.kt @@ -23,7 +23,7 @@ import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.ui.theme.* import chat.simplex.common.views.call.parseRTCIceServers import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun RTCServersView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetDeliveryReceiptsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetDeliveryReceiptsView.kt index ef4acdeac6..003300a033 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetDeliveryReceiptsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetDeliveryReceiptsView.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.ui.theme.DEFAULT_PADDING import chat.simplex.common.views.helpers.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetSimplexNameView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetSimplexNameView.kt index f2c7b02b42..fc120fb7ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetSimplexNameView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SetSimplexNameView.kt @@ -21,7 +21,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.* import chat.simplex.common.views.chat.item.openBrowserAlert import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt index 32f1b6384a..bd929bc2f7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt @@ -35,7 +35,7 @@ import chat.simplex.common.views.onboarding.SimpleXInfo import chat.simplex.common.views.onboarding.WhatsNewView import chat.simplex.common.views.onboarding.crowdfundingAvailable import chat.simplex.common.views.usersettings.networkAndServers.NetworkAndServersView -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, close: () -> Unit) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressLearnMore.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressLearnMore.kt index ea0cd4fe28..8167bae62a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressLearnMore.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressLearnMore.kt @@ -20,7 +20,7 @@ import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.* import chat.simplex.common.views.onboarding.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt index 87660c7e65..5b22d5f363 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt @@ -33,7 +33,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.newchat.* import chat.simplex.common.BuildConfigCommon -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfileView.kt index f2a4cc7dac..cc1149e44d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfileView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.ReadableText import chat.simplex.common.platform.* import chat.simplex.common.views.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.net.URI diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt index ac21fb6b23..dd1e208349 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt @@ -30,7 +30,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.CreateProfile import chat.simplex.common.views.database.* import chat.simplex.common.views.onboarding.OnboardingStage -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/VersionInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/VersionInfoView.kt index 5070c3c0aa..e297ef62a8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/VersionInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/VersionInfoView.kt @@ -18,7 +18,7 @@ import chat.simplex.common.platform.appPlatform import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.helpers.AppBarTitle -import chat.simplex.res.MR +import chat.simplex.res.* @Composable fun VersionInfoView( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt index 42746006a3..3a6fc0fb5c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt @@ -30,7 +30,7 @@ import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatModel import chat.simplex.common.views.usersettings.PreferenceToggle import chat.simplex.common.views.usersettings.SettingsPreferenceItem -import chat.simplex.res.MR +import chat.simplex.res.* import java.text.DecimalFormat @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ChatRelayView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ChatRelayView.kt index 9a2d7f8e61..f68dd0c0dd 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ChatRelayView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ChatRelayView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.PreferenceToggle -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt index 8241422d0a..92714b5910 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt @@ -43,7 +43,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.OnboardingActionButton import chat.simplex.common.views.onboarding.ReadableText import chat.simplex.common.views.usersettings.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NewServerView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NewServerView.kt index a3a843d034..6e8d919afc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NewServerView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NewServerView.kt @@ -8,7 +8,7 @@ import chat.simplex.common.model.* import chat.simplex.common.model.ServerAddress.Companion.parseServerAddress import chat.simplex.common.views.helpers.* import chat.simplex.common.platform.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt index 53277c9ccd..1e46091ea3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt @@ -31,7 +31,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.mikepenz.markdown.compose.Markdown import com.mikepenz.markdown.compose.components.markdownComponents import com.mikepenz.markdown.compose.elements.MarkdownHeader diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServerView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServerView.kt index 3c8cc9e0ce..c1c423e981 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServerView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServerView.kt @@ -27,7 +27,7 @@ import chat.simplex.common.views.newchat.QRCode import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.* import chat.simplex.common.views.usersettings.PreferenceToggle -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import kotlinx.coroutines.flow.distinctUntilChanged diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServersView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServersView.kt index 63365bd080..6e1fad133a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServersView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ProtocolServersView.kt @@ -24,7 +24,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.views.usersettings.SettingsActionItem -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt index d280773976..68242a22b1 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt @@ -7,7 +7,7 @@ import chat.simplex.common.model.UserServer import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.views.helpers.* import chat.simplex.common.views.newchat.QRCodeScanner -import chat.simplex.res.MR +import chat.simplex.res.* @Composable expect fun ScanProtocolServer(rhId: Long?, onNext: (UserServer) -> Unit) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ar/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ar/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/az/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/az/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/az/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/az/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/bg/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/bg/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/bn/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/bn/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ca/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ca/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/cs/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/cs/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/da/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/da/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/de/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/de/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/el/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/el/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/es/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/es/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/fa/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/fa/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/fi/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/fi/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Bold.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Bold.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Bold.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Bold.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Italic.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Italic.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Italic.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Italic.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Light.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Light.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Light.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Light.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Medium.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Medium.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Medium.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Medium.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Regular.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Regular.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Regular.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Regular.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Semibold.ttf b/apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Semibold.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/Inter-Semibold.ttf rename to apps/multiplatform/common/src/commonMain/moko-resources/fonts/Inter-Semibold.ttf diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/fr/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/fr/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/hi/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/hi/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/hr/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/hr/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/hu/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/hu/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/badge_investor.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/badge_investor.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/badge_investor.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/badge_investor.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/badge_legend.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/badge_legend.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/badge_legend.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/badge_legend.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/badge_supporter.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/badge_supporter.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/badge_supporter.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/badge_supporter.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1.5x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@1.5x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1.5x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@1.5x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@1x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@1x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@1x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@2x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@2x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@2x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@2x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@3x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@3x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@3x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@3x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1.5x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@1.5x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1.5x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@1.5x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@1x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@1x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@1x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@2x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@2x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@2x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@2x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@3x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@3x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@3x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@3x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/decentralized_light@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/decentralized_light@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo_light@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo_light@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo_light@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo_light@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo_symbol@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo_symbol@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/flux_logo_symbol@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/flux_logo_symbol@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_account_box.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_box.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_account_box.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_account_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_account_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_account_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_group.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_group.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_group.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_group.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_link.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_link.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_link.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_link.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_photo.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_photo.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_photo.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_photo.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_reaction.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_reaction.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_reaction_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_add_reaction_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_add_reaction_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_all_inclusive.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_all_inclusive.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_all_inclusive.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_all_inclusive.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_alternate_email.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_alternate_email.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_alternate_email.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_alternate_email.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_back_ios_new.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_back_ios_new.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_back_ios_new.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_back_ios_new.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_circle_right.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_circle_right.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_circle_right.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_circle_right.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_downward.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_downward.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_downward.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_downward.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_drop_down.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_drop_down.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_drop_down.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_drop_down.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_drop_up.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_drop_up.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_drop_up.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_drop_up.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_forward.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_forward.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward_ios.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_forward_ios.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_forward_ios.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_forward_ios.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_outward.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_outward.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_outward.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_outward.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_upward.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_upward.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrow_upward.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrow_upward.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrows_left_right.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrows_left_right.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_arrows_left_right.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_arrows_left_right.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_article.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_article.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_article.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_article.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_at.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_at.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_at.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_at.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_attach_file_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_attach_file_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled_500.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_attach_file_filled_500.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_attach_file_filled_500.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_attach_file_filled_500.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_avg_pace.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_avg_pace.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_avg_pace.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_avg_pace.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_back_hand.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_back_hand.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_back_hand.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_back_hand.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backspace.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_backspace.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backspace.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_backspace.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backup.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_backup.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_backup.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_backup.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_2_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_battery_2_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_2_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_battery_2_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_3_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_battery_3_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_battery_3_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_battery_3_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bedtime_moon.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bedtime_moon.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bedtime_moon.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bedtime_moon.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bigtop_updates.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bigtop_updates.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bigtop_updates.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bigtop_updates.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bigtop_updates_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bigtop_updates_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bigtop_updates_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bigtop_updates_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bluetooth.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bluetooth.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bluetooth.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bluetooth.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_blur_on.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_blur_on.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_blur_on.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_blur_on.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_bolt_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_bolt_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_brand_awareness_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_brand_awareness_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_brand_awareness_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_brand_awareness_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_breaking_news.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_breaking_news.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_breaking_news.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_breaking_news.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cable.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cable.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cable.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cable.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_calendar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_calendar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_calendar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_calendar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_500.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_500.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_500.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_500.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_end.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_end.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_end_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_end_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_end_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_call_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_call_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_camera_enhance.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_camera_enhance.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_camera_enhance.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_camera_enhance.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cancel_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cancel_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cancel_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cancel_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat_bubble.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat_bubble.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat_bubble.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat_bubble.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat_person.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat_person.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chat_person.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chat_person.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_circle.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_circle.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_check_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_check_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_checklist.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_checklist.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_checklist.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_checklist.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_down.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_down.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_down.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_down.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_right.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_right.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right_2.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_right_2.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_right_2.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_right_2.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_up.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_up.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_chevron_up.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_chevron_up.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_circle.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_circle.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_close.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_close.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_close.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_close.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_code.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_code.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_code.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_code.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_collapse_all.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_collapse_all.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_collapse_all.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_collapse_all.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_contact_support.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_contact_support.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_contact_support.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_contact_support.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_copy.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_content_copy.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_copy.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_content_copy.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_paste.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_content_paste.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_content_paste.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_content_paste.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cube.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cube.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_cube.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_cube.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_database.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_database.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_database.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_database.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete_forever.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete_forever.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete_forever_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_delete_forever_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_delete_forever_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_desktop.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_desktop.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_desktop.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_desktop.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_dns.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_dns.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_dns.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_dns.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_disturb_on.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_do_not_disturb_on.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_disturb_on.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_do_not_disturb_on.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_touch.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_do_not_touch.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_do_not_touch.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_do_not_touch.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_done_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_done_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_done_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_done_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_double_check.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_double_check.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_double_check.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_double_check.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_download.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_download.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_download.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_download.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_draft.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_draft.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_draft_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_draft_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_draft_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drag_handle.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_drag_handle.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drag_handle.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_drag_handle.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drive_folder_upload.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_drive_folder_upload.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_drive_folder_upload.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_drive_folder_upload.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_note.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit_note.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_edit_note.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_edit_note.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_electrical_services.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_electrical_services.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_electrical_services.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_electrical_services.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_engineering.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_engineering.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_engineering.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_engineering.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_error.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_error.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_error_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_error_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_error_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_all.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_expand_all.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_expand_all.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_expand_all.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_filter_list.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_filter_list.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_filter_list.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_filter_list.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flag.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flag.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flag_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flag_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flag_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flip_camera_android_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flip_camera_android_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_flip_camera_android_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_flip_camera_android_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_closed.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_closed.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_closed.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_closed.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_closed_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_closed_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_closed_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_closed_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_open.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_open.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_open.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_open.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_pen.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_folder_pen.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_forum.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_forum.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_forward.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_forward.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_github.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_github.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_github.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_github.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_group_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_group_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_headphones.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_headphones.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_headphones.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_headphones.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_heart@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_heart@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_heart@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_heart@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_help.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_help.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_help_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_help_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_help_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_history.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_history.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_history.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_history.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_id_card.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_id_card.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_id_card.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_id_card.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_image.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_image.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_image_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_image_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_image_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_info.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_info.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_info.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_info.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_inventory_2.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_inventory_2.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_inventory_2.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_inventory_2.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ios_share.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_ios_share.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ios_share.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_ios_share.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_arrow_down.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_arrow_down.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_arrow_down.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_arrow_down.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_voice.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_voice.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_voice_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_keyboard_voice_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_keyboard_voice_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_label.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_label.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_label.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_label.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_label_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_label_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_label_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_label_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_light_mode.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_light_mode.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_light_mode.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_light_mode.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lightbulb.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lightbulb.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_link.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_link.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_link.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_link.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_open_right.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock_open_right.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lock_open_right.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_lock_open_right.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_login.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_login.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_login.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_login.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_logout.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_logout.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_logout.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_logout.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mail.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mail.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mail_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mail_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mail_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_manage_accounts.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_manage_accounts.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_manage_accounts.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_manage_accounts.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_maps_ugc.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_maps_ugc.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_maps_ugc.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_maps_ugc.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mark_chat_unread.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mark_chat_unread.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mark_chat_unread.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mark_chat_unread.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_match_case.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_match_case.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_match_case.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_match_case.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_menu.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_menu.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_menu.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_menu.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mic_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mic_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mobile_3.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mobile_3.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mobile_3.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mobile_3.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mobile_4.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mobile_4.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_mobile_4.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_mobile_4.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_horiz.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_more_horiz.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_horiz.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_more_horiz.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_vert.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_more_vert.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_more_vert.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_more_vert.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_music_note.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_music_note.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_music_note.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_music_note.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_note_add.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_note_add.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_note_add.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_note_add.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notification_important.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notification_important.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notification_important.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notification_important.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notification_important_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notification_important_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notification_important_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notification_important_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications_off_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_notifications_off_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_notifications_off_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_open_in_new.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_open_in_new.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_open_in_new.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_open_in_new.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outbound.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_outbound.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outbound.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_outbound.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outline_terminal.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_outline_terminal.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_outline_terminal.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_outline_terminal.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_palette.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_palette.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_palette.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_palette.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pause_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pause_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pause_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pause_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pending.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pending.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pending_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_pending_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_pending_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_500.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add_500.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_500.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add_500.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_add_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_add_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_edit.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_edit.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_edit.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_edit.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_person_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_person_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_bluetooth_speaker.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_phone_bluetooth_speaker.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_bluetooth_speaker.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_phone_bluetooth_speaker.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_in_talk_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_phone_in_talk_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_phone_in_talk_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_phone_in_talk_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_camera.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_camera.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_camera.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_camera.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_library.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_library.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_library.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_library.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_library_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_library_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_photo_library_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_photo_library_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_play_arrow_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_play_arrow_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_play_arrow_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_play_arrow_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_power_settings_new.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_power_settings_new.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_power_settings_new.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_power_settings_new.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_priority_high.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_priority_high.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_priority_high.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_priority_high.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_qr_code.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_qr_code.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code_scanner.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_qr_code_scanner.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_qr_code_scanner.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_qr_code_scanner.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_question_mark.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_question_mark.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_question_mark.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_question_mark.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radio_button_unchecked.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radio_button_unchecked.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radio_button_unchecked.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radio_button_unchecked.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_1_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_1_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_1_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_1_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_2_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_2_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_2_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_2_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_3_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_3_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_3_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_3_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_4_bar.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_4_bar.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_radiowaves_up_forward_4_bar.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_radiowaves_up_forward_4_bar.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_redeem.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_redeem.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_redeem.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_redeem.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_refresh.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_refresh.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_refresh.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_refresh.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_repeat_one.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_repeat_one.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_repeat_one.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_repeat_one.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_replay.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_replay.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_replay.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_replay.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_reply.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_reply.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_reply.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_reply.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_report.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_report.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_report_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_report_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_report_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_restart_alt.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_restart_alt.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_restart_alt.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_restart_alt.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ring_volume.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_ring_volume.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_ring_volume.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_ring_volume.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_safety_divider.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_safety_divider.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_safety_divider.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_safety_divider.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_schedule.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_schedule.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_schedule.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_schedule.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_schedule_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_schedule_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_schedule_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_schedule_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_search.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_search.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search_500.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_search_500.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_search_500.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_search_500.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_security.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_security.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_security.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_security.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_backup_restore.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_backup_restore.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_backup_restore.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_backup_restore.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_ethernet.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_ethernet.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_ethernet.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_ethernet.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_phone.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_phone.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_settings_phone.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_settings_phone.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_share.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_share.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_share_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_share_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_share_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_shield.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_shield.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_shield.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_shield.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_dark@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_dark@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_dark@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_dark@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_light@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_light@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_light@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_light@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_dot.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_dot.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_dot.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_dot.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_dot_light.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_dot_light.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_dot_light.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_dot_light.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_light.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_light.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_simplex_tray_light.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_simplex_tray_light.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smart_display.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smart_display.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smart_display.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smart_display.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smartphone.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smartphone.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smartphone.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smartphone.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smartphone_300.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smartphone_300.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_smartphone_300.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_smartphone_300.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_star_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_star_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_start.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_start.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_start.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_start.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_stop_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_stop_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_stop_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_stop_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_supervised_user_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_supervised_user_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_supervised_user_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_supervised_user_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_swap_horizontal_circle.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_swap_horizontal_circle.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_swap_horizontal_circle_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_swap_horizontal_circle_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_swap_horizontal_circle_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_sync_problem.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_sync_problem.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_sync_problem.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_sync_problem.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_tag.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_tag.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_tag.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_tag.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_task.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_task.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_task.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_task.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_theater_comedy.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_theater_comedy.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_theater_comedy_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_theater_comedy_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_theater_comedy_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_timer.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_timer.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_timer_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_timer_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_timer_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toast.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_toast.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toast.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_toast.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toggle_on.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_toggle_on.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_toggle_on.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_toggle_on.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_translate.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_translate.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_translate.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_translate.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_travel_explore.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_travel_explore.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_travel_explore.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_travel_explore.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upgrade.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_upgrade.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upgrade.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_upgrade.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upload_file.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_upload_file.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_upload_file.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_upload_file.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_usb.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_usb.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_usb.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_usb.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_missing.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_missing.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_missing.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_missing.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_user.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_user.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_verified_user.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_verified_user.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_videocam_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_videocam_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_off_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_visibility_off_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_visibility_off_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_down.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_down.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_down.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_down.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_up.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_up.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_volume_up.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_volume_up.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_vpn_key_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_vpn_key_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_off_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_vpn_key_off_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_vpn_key_off_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_vpn_key_off_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_warning.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_warning.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_warning_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_warning_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_warning_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_waving_hand.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_waving_hand.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_waving_hand.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_waving_hand.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_off.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi_off.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_off.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi_off.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_tethering.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi_tethering.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_wifi_tethering.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_wifi_tethering.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work_filled.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work_filled.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg b/apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work_filled_padded.svg similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg rename to apps/multiplatform/common/src/commonMain/moko-resources/images/ic_work_filled_padded.svg diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/icon_foreground_common@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/icon_foreground_common@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/icon_foreground_common@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/icon_foreground_common@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/logo@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/logo@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/logo@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/logo@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/logo_light@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/logo_light@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/logo_light@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/logo_light@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1.5x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@1.5x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1.5x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@1.5x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@1x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@1x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@1x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@2x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@2x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@2x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@2x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@3x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@3x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@3x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@3x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/privacy@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/privacy@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1.5x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/shield@1.5x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1.5x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/shield@1.5x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/shield@1x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/shield@1x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/shield@1x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@2x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/shield@2x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/shield@2x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/shield@2x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@3x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/shield@3x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/shield@3x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/shield@3x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/shield@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/shield@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/shield@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/shield@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_cats@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_cats@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_cats@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_cats@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_flowers@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_flowers@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_flowers@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_flowers@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_hearts@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_hearts@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_hearts@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_hearts@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_kids@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_kids@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_kids@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_kids@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_school@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_school@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_school@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_school@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_travel@4x.png b/apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_travel@4x.png similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/images/wallpaper_travel@4x.png rename to apps/multiplatform/common/src/commonMain/moko-resources/images/wallpaper_travel@4x.png diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/in/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/in/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/it/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/it/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/iw/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/iw/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ja/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ja/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ko/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ko/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ku/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ku/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/lt/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/lt/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/lv/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/lv/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ml/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ml/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/nb-rNO/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/nb-rNO/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/night/themes.xml b/apps/multiplatform/common/src/commonMain/moko-resources/night/themes.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/night/themes.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/night/themes.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/nl/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/nl/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/pl/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/pl/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/pt-rBR/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/pt-rBR/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/pt/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/pt/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ro/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ro/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/ru/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/ru/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/sk/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/sk/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/sv/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/sv/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/sv/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/sv/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/th/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/th/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/tr/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/tr/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/uk/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/uk/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/vi/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/vi/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/zh-rCN/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/zh-rCN/strings.xml diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/zh-rTW/strings.xml similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml rename to apps/multiplatform/common/src/commonMain/moko-resources/zh-rTW/strings.xml diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt index 41e81a6f60..3e48621d03 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt @@ -19,7 +19,7 @@ import chat.simplex.common.ui.theme.DEFAULT_START_MODAL_WIDTH import chat.simplex.common.ui.theme.SimpleXTheme import chat.simplex.common.views.TerminalView import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.* diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopTray.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopTray.kt index 9f75e481f4..657b1d98f2 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopTray.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopTray.kt @@ -17,7 +17,7 @@ import chat.simplex.common.platform.TAG import chat.simplex.common.ui.theme.isInDarkTheme import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import java.awt.AWTException diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/SingleInstance.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/SingleInstance.kt index 19cb7aea91..4f023bd04f 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/SingleInstance.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/SingleInstance.kt @@ -3,6 +3,7 @@ package chat.simplex.common import chat.simplex.common.platform.Log import chat.simplex.common.platform.TAG import chat.simplex.common.platform.dataDir +import chat.simplex.res.* import java.io.IOException import java.nio.channels.FileChannel import java.nio.channels.FileLock diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/model/NtfManager.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/model/NtfManager.desktop.kt index ee415ae82b..0a61864294 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/model/NtfManager.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/model/NtfManager.desktop.kt @@ -6,7 +6,7 @@ import chat.simplex.common.simplexWindowState import chat.simplex.common.views.call.CallMediaType import chat.simplex.common.views.call.RcvCallInvitation import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.sshtools.twoslices.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/AppCommon.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/AppCommon.desktop.kt index d425d81875..167c3f898d 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/AppCommon.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/AppCommon.desktop.kt @@ -6,7 +6,7 @@ import chat.simplex.common.views.call.RcvCallInvitation import chat.simplex.common.views.database.deleteOldChatArchive import chat.simplex.common.views.helpers.* import java.util.* -import chat.simplex.res.MR +import chat.simplex.res.* import java.io.File actual val appPlatform = AppPlatform.DESKTOP diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt index 58260181cf..b779954efc 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Files.desktop.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.* import chat.simplex.common.* import chat.simplex.common.views.helpers.AlertManager import chat.simplex.common.views.helpers.generalGetString -import chat.simplex.res.MR +import chat.simplex.res.* import java.awt.Desktop import java.io.* import java.net.URI diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Images.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Images.desktop.kt index 0f830e7b60..9c6139b493 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Images.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Images.desktop.kt @@ -5,7 +5,7 @@ import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import boofcv.io.image.ConvertBufferedImage import boofcv.struct.image.GrayU8 -import chat.simplex.res.MR +import chat.simplex.res.* import org.jetbrains.skia.Image import java.awt.RenderingHints import java.awt.geom.AffineTransform diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/PlatformTextField.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/PlatformTextField.desktop.kt index 557dabd2e4..3e048a93d5 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/PlatformTextField.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/PlatformTextField.desktop.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import chat.simplex.common.views.chat.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.delay import java.awt.Image diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt index d59677b726..f22ed52357 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt @@ -3,7 +3,7 @@ package chat.simplex.common.platform import androidx.compose.runtime.* import chat.simplex.common.model.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import uk.co.caprica.vlcj.factory.MediaPlayerFactory import uk.co.caprica.vlcj.player.base.MediaPlayer diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Resources.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Resources.desktop.kt index 4e7594f998..062f26cfd7 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Resources.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Resources.desktop.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.* import chat.simplex.common.simplexWindowState import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import com.jthemedetecor.OsThemeDetector import com.russhwolf.settings.* import dev.icerock.moko.resources.ImageResource diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Share.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Share.desktop.kt index a10f675085..435a8891b7 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Share.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/Share.desktop.kt @@ -8,7 +8,7 @@ import chat.simplex.common.views.helpers.* import java.io.File import java.net.URI import java.net.URLEncoder -import chat.simplex.res.MR +import chat.simplex.res.* import java.awt.Desktop actual fun UriHandler.sendEmail(subject: String, body: CharSequence) { diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt index d9375f5d79..52f11de64d 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import org.jetbrains.compose.videoplayer.SkiaBitmapVideoSurface import uk.co.caprica.vlcj.media.Media diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/ui/theme/Type.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/ui/theme/Type.desktop.kt index 082036558c..7639c567d4 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/ui/theme/Type.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/ui/theme/Type.desktop.kt @@ -3,26 +3,26 @@ package chat.simplex.common.ui.theme import androidx.compose.ui.text.font.* import androidx.compose.ui.text.platform.Font import chat.simplex.common.platform.desktopPlatform -import chat.simplex.res.MR +import chat.simplex.res.* actual val Inter: FontFamily = FontFamily( - Font(MR.fonts.Inter.regular.file), - Font(MR.fonts.Inter.italic.file, style = FontStyle.Italic), - Font(MR.fonts.Inter.bold.file, FontWeight.Bold), - Font(MR.fonts.Inter.semibold.file, FontWeight.SemiBold), - Font(MR.fonts.Inter.medium.file, FontWeight.Medium), - Font(MR.fonts.Inter.light.file, FontWeight.Light) + Font(MR.fonts.inter_regular.file), + Font(MR.fonts.inter_italic.file, style = FontStyle.Italic), + Font(MR.fonts.inter_bold.file, FontWeight.Bold), + Font(MR.fonts.inter_semibold.file, FontWeight.SemiBold), + Font(MR.fonts.inter_medium.file, FontWeight.Medium), + Font(MR.fonts.inter_light.file, FontWeight.Light) ) actual val EmojiFont: FontFamily = if (desktopPlatform.isMac()) { FontFamily.Default } else { FontFamily( - Font(MR.fonts.NotoColorEmoji.regular.file), - Font(MR.fonts.NotoColorEmoji.regular.file, style = FontStyle.Italic), - Font(MR.fonts.NotoColorEmoji.regular.file, FontWeight.Bold), - Font(MR.fonts.NotoColorEmoji.regular.file, FontWeight.SemiBold), - Font(MR.fonts.NotoColorEmoji.regular.file, FontWeight.Medium), - Font(MR.fonts.NotoColorEmoji.regular.file, FontWeight.Light) + Font(MRdesktopMain.fonts.notocoloremoji_regular.file), + Font(MRdesktopMain.fonts.notocoloremoji_regular.file, style = FontStyle.Italic), + Font(MRdesktopMain.fonts.notocoloremoji_regular.file, FontWeight.Bold), + Font(MRdesktopMain.fonts.notocoloremoji_regular.file, FontWeight.SemiBold), + Font(MRdesktopMain.fonts.notocoloremoji_regular.file, FontWeight.Medium), + Font(MRdesktopMain.fonts.notocoloremoji_regular.file, FontWeight.Light) ) } diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt index bd8e0d771a..881b9ee168 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.platform.LocalUriHandler import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.datetime.Clock diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt index e6f782d816..997100246c 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt @@ -15,7 +15,7 @@ import chat.simplex.common.model.* import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.EmojiFont import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import java.io.File diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/EmojiItemView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/EmojiItemView.desktop.kt index 05ed7002e5..64dc8d61a6 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/EmojiItemView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/EmojiItemView.desktop.kt @@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import chat.simplex.common.model.MREmojiChar import chat.simplex.common.platform.desktopPlatform -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt index 9fb4afbf7d..c1d4a40dae 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.getBitmapFromByteArray -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import org.jetbrains.compose.videoplayer.SkiaBitmapVideoSurface diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.desktop.kt index 9fd65ec995..250d7ed3d9 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.desktop.kt @@ -17,7 +17,7 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.call.Call import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/TagListView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/TagListView.desktop.kt index 75a76014a9..dba5ddb9e6 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/TagListView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/TagListView.desktop.kt @@ -18,7 +18,7 @@ import chat.simplex.common.ui.theme.ThemeManager.colorFromReadableHex import chat.simplex.common.views.chat.item.isHeartEmoji import chat.simplex.common.views.chat.item.isShortEmoji import chat.simplex.common.views.helpers.toDp -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.desktop.kt index 0010d63e15..2d5f58a545 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.desktop.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import chat.simplex.common.ui.theme.WarningOrange import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/AppUpdater.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/AppUpdater.kt index e857ef91b1..306562e6ad 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/AppUpdater.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/AppUpdater.kt @@ -15,7 +15,7 @@ import chat.simplex.common.model.json import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.WarningOrange import chat.simplex.common.views.onboarding.ReadMoreButton -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.* import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.desktop.kt index d125f94e55..4ff8c552c4 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/ChooseAttachmentView.desktop.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.ui.Modifier import chat.simplex.common.views.newchat.ActionButton -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/DefaultDialog.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/DefaultDialog.desktop.kt index 79aaf5c727..4f26f1d5fe 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/DefaultDialog.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/DefaultDialog.desktop.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.* import chat.simplex.common.DialogParams import chat.simplex.common.platform.desktopPlatform -import chat.simplex.res.MR +import chat.simplex.res.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.awt.FileDialog diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/GetImageView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/GetImageView.desktop.kt index 59865dd66f..d4d9415501 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/GetImageView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/helpers/GetImageView.desktop.kt @@ -9,7 +9,7 @@ import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp import chat.simplex.common.platform.rememberFileChooserLauncher -import chat.simplex.res.MR +import chat.simplex.res.* import chat.simplex.common.views.newchat.ActionButton import java.net.URI diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.desktop.kt index 1b9582b7d2..30e1020d48 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.desktop.kt @@ -9,7 +9,7 @@ import chat.simplex.common.model.SharedPreference import chat.simplex.common.model.User import chat.simplex.common.platform.chatModel import chat.simplex.common.ui.theme.DEFAULT_PADDING -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource @Composable diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt index 6b36a3b1b2..7a48f37271 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt @@ -26,7 +26,7 @@ import chat.simplex.common.trayIsAvailable import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.delay import java.util.Locale diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.desktop.kt index a51fd20c5b..325a475218 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.desktop.kt @@ -3,7 +3,7 @@ package chat.simplex.common.views.usersettings import SectionView import androidx.compose.runtime.Composable import chat.simplex.common.model.ChatModel -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.stringResource @Composable diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.desktop.kt index 174ad63c7a..8ea4a3c5e7 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.desktop.kt @@ -6,7 +6,7 @@ import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.* -import chat.simplex.res.MR +import chat.simplex.res.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fonts/NotoColorEmoji-Regular.ttf b/apps/multiplatform/common/src/desktopMain/moko-resources/fonts/NotoColorEmoji-Regular.ttf similarity index 100% rename from apps/multiplatform/common/src/commonMain/resources/MR/fonts/NotoColorEmoji-Regular.ttf rename to apps/multiplatform/common/src/desktopMain/moko-resources/fonts/NotoColorEmoji-Regular.ttf From 0c1ffa65bc46340af0a75c8aa0c76cac0d26d36c Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 8 Oct 2026 15:06:18 +0100 Subject: [PATCH 2/8] core: group fixes/improvements (#7660) * core: group fixes/improvements * Large messages dropped by relays and hosts (the same 15602 limit was applied, without accounting for forwarding header) * Members below v18 did not receive forwarded messages or history in p2p groups. * Join confirmations near the size limit could fail. * SMP servers are limited to 2 host names each. * simplify * remove legacy forwarding and history support * only restrict p2p groups --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- apps/ios/Shared/Model/AppAPITypes.swift | 5 ++ .../chat/simplex/common/model/SimpleXAPI.kt | 4 ++ .../moko-resources/base/strings.xml | 1 + src/Simplex/Chat/Library/Internal.hs | 17 +++--- src/Simplex/Chat/Library/Subscriber.hs | 10 ++-- src/Simplex/Chat/Operators.hs | 6 +- src/Simplex/Chat/Protocol.hs | 12 +++- src/Simplex/Chat/Store/Delivery.hs | 2 +- tests/ChatTests/Direct.hs | 7 +++ tests/ChatTests/Groups.hs | 59 ++++++++++++++++++- tests/MessageBatching.hs | 7 +++ 11 files changed, 112 insertions(+), 18 deletions(-) diff --git a/apps/ios/Shared/Model/AppAPITypes.swift b/apps/ios/Shared/Model/AppAPITypes.swift index eadca9f71e..26438bc60e 100644 --- a/apps/ios/Shared/Model/AppAPITypes.swift +++ b/apps/ios/Shared/Model/AppAPITypes.swift @@ -1931,10 +1931,13 @@ enum UserServersError: Decodable { case storageMissing(protocol: ServerProtocol, user: UserRef?) case proxyMissing(protocol: ServerProtocol, user: UserRef?) case duplicateServer(protocol: ServerProtocol, duplicateServer: String, duplicateHost: String) + case tooManyHosts(protocol: ServerProtocol, tooManyHostsServer: String) case duplicateChatRelayAddress(duplicateChatRelay: String, duplicateAddress: String) var globalError: String? { switch self { + case .tooManyHosts: + return globalSMPError case let .noServers(`protocol`, _): switch `protocol` { case .smp: return globalSMPError @@ -1977,6 +1980,8 @@ enum UserServersError: Decodable { } else { return text } + case let .tooManyHosts(.smp, server): + return String.localizedStringWithFormat(NSLocalizedString("Server %@ has more than two host names.", comment: "servers error"), serverHostname(server)) default: return nil } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 706ee713fc..d879df1d27 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -4886,6 +4886,7 @@ sealed class UserServersError { @Serializable @SerialName("storageMissing") data class StorageMissing(val protocol: ServerProtocol, val user: UserRef?): UserServersError() @Serializable @SerialName("proxyMissing") data class ProxyMissing(val protocol: ServerProtocol, val user: UserRef?): UserServersError() @Serializable @SerialName("duplicateServer") data class DuplicateServer(val protocol: ServerProtocol, val duplicateServer: String, val duplicateHost: String): UserServersError() + @Serializable @SerialName("tooManyHosts") data class TooManyHosts(val protocol: ServerProtocol, val tooManyHostsServer: String): UserServersError() @Serializable @SerialName("duplicateChatRelayAddress") data class DuplicateChatRelayAddress(val duplicateChatRelay: String, val duplicateAddress: String): UserServersError() val globalError: String? @@ -4901,6 +4902,7 @@ sealed class UserServersError { is StorageMissing -> this.protocol is ProxyMissing -> this.protocol is DuplicateServer -> this.protocol + is TooManyHosts -> this.protocol is DuplicateChatRelayAddress -> null } @@ -4916,6 +4918,8 @@ sealed class UserServersError { is ProxyMissing -> this.user?.let { "${userStr(it)} ${generalGetString(MR.strings.no_message_servers_configured_for_private_routing)}" } ?: generalGetString(MR.strings.no_message_servers_configured_for_private_routing) + is TooManyHosts -> String.format(generalGetString(MR.strings.server_has_too_many_hosts), ServerAddress.parseServerAddress(this.tooManyHostsServer)?.hostnames?.firstOrNull() ?: this.tooManyHostsServer) + else -> null } } else { diff --git a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml index 8a8aad0cfa..2d0db3e038 100644 --- a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml @@ -140,6 +140,7 @@ No message servers. No servers to receive messages. No servers for private message routing. + Server %1$s has more than two host names. No media & file servers. No servers to send files. No servers to receive files. diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs index 1d4cf969a8..effa943cc7 100644 --- a/src/Simplex/Chat/Library/Internal.hs +++ b/src/Simplex/Chat/Library/Internal.hs @@ -1414,7 +1414,7 @@ sendHistory user gInfo@GroupInfo {membership} m@GroupMember {activeConn = Just c -- (regular groups only; never channels) is an authored element -- all batch together in order. let fwdEls = map (uncurry encodeFwdElement) (concat fwdMsgsByItem) welcomeEl <- welcomeElement - let (batches, dropped) = batchElements maxEncodedMsgLength (fwdEls <> maybe [] (: []) welcomeEl) + let (batches, dropped) = batchElements maxForwardBatchLength (fwdEls <> maybe [] (: []) welcomeEl) when (dropped > 0) $ toView $ CEvtChatErrors [ChatError $ CEInternalError ("sendHistory: dropped " <> show dropped <> " oversized history messages")] forM_ batches $ \body -> void $ withAgent $ \a -> sendMessages a [(aConnId conn, PQEncOff, MsgFlags False, VRValue Nothing body)] @@ -1552,9 +1552,7 @@ sendHistory user gInfo@GroupInfo {membership} m@GroupMember {activeConn = Just c pure $ map ((,) fwd) (contentVM : fileDescrVMs) memberShortenedName :: GroupMember -> ContactName -memberShortenedName GroupMember {memberProfile = LocalProfile {displayName}} - | T.length displayName <= 16 = displayName - | otherwise = T.take 16 displayName `T.snoc` '…' +memberShortenedName GroupMember {memberProfile = LocalProfile {displayName}} = fwdMemberName displayName -- the description proof travels on the last part, so that part leaves room for it badgeDescrPartSize :: Int @@ -2457,9 +2455,10 @@ compressToLimit maxLen s s' = compressedBatchMsgBody_ s compressConnInfo :: PQSupport -> MsgBody -> CM MsgBody -compressConnInfo pqSup = compressToLimit $ case pqSup of - PQSupportOn -> maxEncodedInfoLengthPQ - PQSupportOff -> maxEncodedInfoLength +compressConnInfo pqSup = compressToLimit $ e2eEncConnInfoLength pqSup - 2 - maxReplyQueueFraming + +maxReplyQueueFraming :: Int +maxReplyQueueFraming = 256 encodeConnInfo :: MsgEncodingI e => ChatMsgEvent e -> CM ByteString encodeConnInfo = encodeConnInfoPQ PQSupportOff @@ -2468,7 +2467,7 @@ encodeConnInfoPQ :: MsgEncodingI e => PQSupport -> ChatMsgEvent e -> CM ByteStri encodeConnInfoPQ pqSup chatMsgEvent = do cxt <- chatStoreCxt let info = ChatMessage {chatVRange = vr cxt, msgId = Nothing, chatMsgEvent} - case encodeChatMessage maxEncodedInfoLength info of + case encodeChatMessage maxEncodedProfileMsgLength info of ECMEncoded connInfo -> compressConnInfo pqSup connInfo ECMLarge -> throwChatError $ CEException "large info" @@ -2477,7 +2476,7 @@ encodeSignedConnInfo :: MsgEncodingI e => PQSupport -> MsgSigning -> ChatMsgEven encodeSignedConnInfo pqSup signing chatMsgEvent = do vr <- chatVersionRange let info = ChatMessage {chatVRange = vr, msgId = Nothing, chatMsgEvent} - case encodeChatMessage maxEncodedInfoLength info of + case encodeChatMessage maxEncodedProfileMsgLength info of ECMEncoded body -> compressConnInfo pqSup $ encodeBatchElement (Just $ signChatMsgBody signing body) body ECMLarge -> throwChatError $ CEException "large signed info" diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 3f0e53fd8a..304aa15500 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -3937,7 +3937,7 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag createInternalChatItem user (CDDirectRcv ct) (CIRcvConnEvent RCEVerificationCodeReset) Nothing xGrpMsgForward :: GroupInfoKeys -> Maybe GroupChatScopeInfo -> GroupMember -> GrpMsgForward -> ParsedMsg 'Json -> UTCTime -> CM () - xGrpMsgForward g@(GIK gInfo _) scopeInfo m@GroupMember {localDisplayName} GrpMsgForward {fwdSender, fwdBrokerTs = msgTs} parsedMsg@(ParsedMsg _ _ chatMsg@ChatMessage {chatMsgEvent}) brokerTs = do + xGrpMsgForward g@(GIK gInfo@GroupInfo {membership} _) scopeInfo m@GroupMember {localDisplayName} GrpMsgForward {fwdSender, fwdBrokerTs = msgTs} parsedMsg@(ParsedMsg _ _ chatMsg@ChatMessage {chatMsgEvent}) brokerTs = do unless (isMemberGrpFwdRelay gInfo m) $ throwChatError (CEGroupContactRole localDisplayName) case fwdSender of FwdMember memberId memberName -> do @@ -3945,6 +3945,8 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag let allowCreate = toCMEventTag chatMsgEvent /= XGrpLeave_ withStore (\db -> getCreateUnknownGMByMemberId db cxt user gInfo memberId memberName unknownRole allowCreate) >>= \case Just (author, unknown) + | not (useRelays' gInfo) && groupMemberId' author == groupMemberId' membership -> + messageError $ "x.grp.msg.forward: content attributed to own membership, forwarder " <> tshow (groupMemberId' m) <> ", event " <> tshow (toCMEventTag chatMsgEvent) | memberRemoved author -> logInfo $ "x.grp.msg.forward: ignoring content from removed member, group " <> tshow (groupId' gInfo) <> ", member " <> safeDecodeUtf8 (strEncode memberId) <> ", event " <> tshow (toCMEventTag chatMsgEvent) | not (useRelays' gInfo) && not (expectedForwarder author) -> @@ -4160,7 +4162,7 @@ runDeliveryTaskWorker a deliveryKey Worker {doWork} = do withStore' $ \db -> setDeliveryTaskErrStatus db (deliveryTaskId task) "relay inactive" | otherwise -> withWorkItems a doWork (withStore' $ \db -> getNextDeliveryTasks db gInfo task) $ \nextTasks -> do - let (body_, acceptedTasks, largeTasks) = batchDeliveryTasks1 (vr cxt) maxEncodedMsgLength nextTasks + let (body_, acceptedTasks, largeTasks) = batchDeliveryTasks1 (vr cxt) maxForwardBatchLength nextTasks senderGMIds = S.toList . S.fromList $ map (\MessageDeliveryTask {senderGMId} -> senderGMId) acceptedTasks withStore' $ \db -> do forM_ body_ $ \body -> createMsgDeliveryJob db gInfo jobScope senderGMIds body @@ -4290,8 +4292,8 @@ runDeliveryJobWorker a deliveryKey Worker {doWork} = do else do -- all members' profiles disseminate; privileged key/role come from the roster, not here let (encoderErrs, validLabeled) = partitionEithers [(\bs -> (s, bs)) <$> encodeMemberNew (vr cxt) gInfo s | (s, _) <- senders] - (extBody', inBody, overflowLabeled, large1) = batchProfilesWithBody maxEncodedMsgLength body validLabeled - (overflowBatches', large2) = batchProfiles maxEncodedMsgLength overflowLabeled + (extBody', inBody, overflowLabeled, large1) = batchProfilesWithBody maxForwardBatchLength body validLabeled + (overflowBatches', large2) = batchProfiles maxForwardBatchLength overflowLabeled packerErrs = [ChatError (CEInternalError $ "oversized profile element for member " <> show (groupMemberId' s)) | s <- large1 <> large2] allErrs = encoderErrs <> packerErrs unless (null allErrs) $ do diff --git a/src/Simplex/Chat/Operators.hs b/src/Simplex/Chat/Operators.hs index a216bbb1fc..9ec5d0f48d 100644 --- a/src/Simplex/Chat/Operators.hs +++ b/src/Simplex/Chat/Operators.hs @@ -525,6 +525,7 @@ data UserServersError | USEStorageMissing {protocol :: AProtocolType, user :: Maybe User} | USEProxyMissing {protocol :: AProtocolType, user :: Maybe User} | USEDuplicateServer {protocol :: AProtocolType, duplicateServer :: Text, duplicateHost :: TransportHost} + | USETooManyHosts {protocol :: AProtocolType, tooManyHostsServer :: Text} | USEDuplicateChatRelayAddress {duplicateChatRelay :: Text, duplicateAddress :: ShortLinkContact} deriving (Show) @@ -547,13 +548,16 @@ validateUserServers curr others = (currUserErrs <> concatMap otherUserErrs other noServers cond = not $ any srvEnabled $ userServers p $ filter cond uss srvEnabled (AUS _ UserServer {deleted, enabled}) = enabled && not deleted serverErrs :: (UserServersClass u, ProtocolTypeI p, UserProtocol p) => SProtocolType p -> [u] -> [UserServersError] - serverErrs p uss = mapMaybe duplicateErr_ srvs + serverErrs p uss = mapMaybe duplicateErr_ srvs <> hostsErrs where p' = AProtocolType p srvs = filter (\(AUS _ UserServer {deleted}) -> not deleted) $ userServers p uss duplicateErr_ (AUS _ srv@UserServer {server}) = USEDuplicateServer p' (safeDecodeUtf8 $ strEncode server) <$> find (`S.member` duplicateHosts) (srvHost srv) + hostsErrs = case p of + SPSMP -> [USETooManyHosts p' (safeDecodeUtf8 $ strEncode server) | AUS _ srv@UserServer {server} <- srvs, L.length (srvHost srv) > 2] + _ -> [] duplicateHosts = snd $ foldl' addDuplicate (S.empty, S.empty) allHosts allHosts = concatMap (\(AUS _ srv) -> L.toList $ srvHost srv) srvs userServers :: (UserServersClass u, UserProtocol p) => SProtocolType p -> [u] -> [AUserServer p] diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index 723f78d6db..01cb868e83 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -924,6 +924,14 @@ $(JQ.deriveJSON defaultJSON ''MsgContainer) maxEncodedMsgLength :: Int maxEncodedMsgLength = 15602 +maxForwardBatchLength :: Int +maxForwardBatchLength = maxEncodedMsgLength + 161 + +fwdMemberName :: ContactName -> ContactName +fwdMemberName displayName + | T.length displayName <= 16 = displayName + | otherwise = T.take 16 displayName `T.snoc` '…' + -- maxEncodedMsgLength - 2222, see e2eEncUserMsgLength in agent maxEncodedMsgLengthPQ :: Int maxEncodedMsgLengthPQ = 13380 @@ -965,8 +973,8 @@ rosterBlobP = do maxEncodedInfoLength :: Int maxEncodedInfoLength = 14694 -maxEncodedInfoLengthPQ :: Int -maxEncodedInfoLengthPQ = 10968 -- maxEncodedInfoLength - 3726, see e2eEncConnInfoLength in agent +maxEncodedProfileMsgLength :: Int +maxEncodedProfileMsgLength = 16384 data EncodedChatMessage = ECMEncoded ByteString | ECMLarge diff --git a/src/Simplex/Chat/Store/Delivery.hs b/src/Simplex/Chat/Store/Delivery.hs index add8c64e7f..c80264da7a 100644 --- a/src/Simplex/Chat/Store/Delivery.hs +++ b/src/Simplex/Chat/Store/Delivery.hs @@ -156,7 +156,7 @@ getMsgDeliveryTask_ db taskId = toTask ((Only taskId') :. jobScopeRow :. (senderGMId, senderMemberId, senderMemberName, brokerTs, Binary msgBody, chatBinding_, sigs_, BI showGroupAsSender)) = case (toJobScope_ jobScopeRow, J.eitherDecodeStrict' msgBody) of (Just jobScope, Right chatMsg) -> - let fwdSender = if showGroupAsSender && isNothing chatBinding_ then FwdChannel else FwdMember senderMemberId senderMemberName + let fwdSender = if showGroupAsSender && isNothing chatBinding_ then FwdChannel else FwdMember senderMemberId (fwdMemberName senderMemberName) -- Re-parsed from msg_body: validates stored content against current code. -- Signed: original bytes preserved (re-encoding would invalidate signature). -- Unsigned: re-encoded from parsed ChatMessage on forward (sanitizes content). diff --git a/tests/ChatTests/Direct.hs b/tests/ChatTests/Direct.hs index b95d738589..930a0fa22d 100644 --- a/tests/ChatTests/Direct.hs +++ b/tests/ChatTests/Direct.hs @@ -1158,6 +1158,13 @@ testGetSetSMPServers = alice <## " SMP servers" alice <## " smp://2345-w==@smp2.example.im" alice <## " smp://3456-w==@smp3.example.im:5224" + alice #$> ("/smp smp://2345-w==@smp2.example.im,smp4.example.im", id, "ok") + alice ##> "/smp smp://2345-w==@smp2.example.im,smp4.example.im,smp5.example.im" + alice <##. "bad chat command: user servers validation error(s): [USETooManyHosts" + alice ##> "/smp" + alice <## "Your servers" + alice <## " SMP servers" + alice <## " smp://2345-w==@smp2.example.im,smp4.example.im" testTestSMPServerConnection :: HasCallStack => TestParams -> IO () testTestSMPServerConnection = diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 39e50dc16b..3608e5f7e9 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -38,7 +38,7 @@ import Simplex.Chat.Messages (CIMention (..), CIMentionMember (..), ChatItemId) import Simplex.Chat.Messages.Batch (encodeBinaryBatch, encodeFwdElement) import Simplex.Chat.Messages.CIContent (publicGroupNoE2EText) import Simplex.Chat.Options -import Simplex.Chat.Protocol (ChatMessage (ChatMessage), ChatMsgEvent (XGrpMemNew, XMsgUpdate, XMsgNew, XMsgDel), FwdSender (FwdMember, FwdChannel), GrpMsgForward (GrpMsgForward), MsgContainer (..), MsgMention (..), MsgContent (..), VerifiedMsg (VMUnsigned), mcSimple, msgContentText) +import Simplex.Chat.Protocol (ChatMessage (ChatMessage), ChatMsgEvent (XGrpMemNew, XInfo, XMsgUpdate, XMsgNew, XMsgDel), FwdSender (FwdMember, FwdChannel), GrpMsgForward (GrpMsgForward), MsgContainer (..), MsgMention (..), MsgContent (..), VerifiedMsg (VMUnsigned), mcSimple, msgContentText) import Simplex.Chat.Types import Simplex.Chat.Types.MemberRelations (MemberRelation (..), getRelation, setRelation) import Simplex.Chat.Types.Shared (GroupMemberRole (..), GroupAcceptance (..)) @@ -119,6 +119,7 @@ chatGroupTests = do xit "create and join group when clients go offline" testGroupAsync describe "group links" $ do it "create group link, join via group link" testGroupLink + it "join via group link with group profile near the size limit" testGroupLinkLargeGroupProfile it "invitees were previously connected as contacts" testGroupLinkInviteesWereConnected it "all members were previously connected as contacts" testGroupLinkAllMembersWereConnected it "delete group, re-join via same link" testGroupLinkDeleteGroupRejoin @@ -176,6 +177,7 @@ chatGroupTests = do it "manually accept contact with group member incognito" testMemberContactAcceptIncognito describe "group message forwarding" $ do it "forward messages between invitee and introduced (x.msg.new)" testGroupMsgForwardMessage + it "reject forwarded content attributed to own membership" testGroupMsgForwardOwnMembershipRejected it "forward batched messages" testGroupMsgForwardBatched it "forward reports to moderators, don't forward to members (x.msg.new, MCReport)" testGroupMsgForwardReport it "deduplicate forwarded messages" testGroupMsgForwardDeduplicate @@ -3042,6 +3044,39 @@ testPlanGroupLinkLeaveRejoin = bob <## "group link: known group #team_1" bob <## "use #team_1 to send messages" +testGroupLinkLargeGroupProfile :: HasCallStack => TestParams -> IO () +testGroupLinkLargeGroupProfile = + testChatOpts2 testOptsNoFullLinks aliceProfile bobProfile $ + \alice bob -> do + threadDelay 100000 + alice ##> "/g team" + alice <## "group #team is created" + alice <## "to add members use /a team or /create link #team" + alice ##> "/set history #team off" + alice <## "updated group preferences:" + alice <## "Recent history: off" + withCCTransaction alice $ \db -> + DB.execute db "UPDATE group_profiles SET description = ? WHERE display_name = ?" (T.pack welcome, "team" :: T.Text) + alice ##> "/create link #team" + gLink <- getGroupLink_ alice "team" GRMember True + alice ("/c " <> gLink) + bob <## "connection request sent!" + alice <## "bob (Bob): accepting request to join group #team..." + concurrentlyN_ + [ alice <## "#team: bob joined the group", + do + bob <## "#team: joining the group..." + bob <## "#team: you joined the group" + ] + alice #> "#team hello" + let waitHello = do + l <- getTermLine bob + if "alice> hello" `isSuffixOf` l then pure () else waitHello + waitHello + where + welcome = unwords $ replicate 1775 "welcome" + testGroupLink :: HasCallStack => TestParams -> IO () testGroupLink = testChatOpts3 testOptsNoFullLinks aliceProfile bobProfile cathProfile $ @@ -5399,6 +5434,28 @@ testGroupMsgForwardMessage = cath <# "#team bob> hi there [>>]" cath <# "#team hey team" +testGroupMsgForwardOwnMembershipRejected :: HasCallStack => TestParams -> IO () +testGroupMsgForwardOwnMembershipRejected = + testChat2 aliceProfile bobProfile $ + \alice bob -> do + createGroup2 "team" alice bob + threadDelay 1000000 + [Only bobMemId] <- withCCTransaction bob $ \db -> + DB.query db "SELECT member_id FROM group_members WHERE member_category = ?" (Only ("user" :: T.Text)) :: IO [Only ByteString] + connId <- relayConnIdToMember alice "bob" + ts <- getCurrentTime + let ChatController {smpAgent = aliceAgent} = chatController alice + forgedProfile = (bobProfile :: Profile) {displayName = "mallory", fullName = "Mallory"} + chatMsg = ChatMessage chatInitialVRange (Just $ SharedMsgId "forged_info1") (XInfo forgedProfile Nothing) + fwd = GrpMsgForward (FwdMember (MemberId bobMemId) "bob") ts + body = encodeBinaryBatch [encodeFwdElement fwd (VMUnsigned chatMsg)] + sent <- runExceptT $ sendMessages aliceAgent [(connId, PQEncOff, MsgFlags False, vrValue body)] + either (fail . show) (const $ pure ()) sent + bob <##. "error: x.grp.msg.forward: content attributed to own membership" + bob ##> "/p" + bob <## "user profile: bob (Bob)" + bob <## "use /p [] to change it" + testGroupMsgForwardBatched :: HasCallStack => TestParams -> IO () testGroupMsgForwardBatched = testChat3 aliceProfile bobProfile cathProfile $ diff --git a/tests/MessageBatching.hs b/tests/MessageBatching.hs index 01515fb6a3..71cf2d5f49 100644 --- a/tests/MessageBatching.hs +++ b/tests/MessageBatching.hs @@ -33,6 +33,7 @@ import Simplex.Chat.Protocol GrpMsgForward (GrpMsgForward), MsgContent (MCText), VerifiedMsg (VMUnsigned), + fwdMemberName, maxBatchElementCount, maxEncodedMsgLength, mcSimple, @@ -49,6 +50,7 @@ batchingTests = describe "message batching tests" $ do it "splits a batch that exceeds the element count limit" testBatchElementCountLimit it "does not create a relay delivery body when every task is oversized" testRelayBatchAllLarge it "classifies a task that fits raw but not as a framed singleton as large" testRelayBatchSingletonOverflow + it "shortens forwarded member names" testFwdMemberName instance IsString SndMessage where fromString s = SndMessage {msgId, sharedMsgId = SharedMsgId "", msgBody = s', signedMsg_ = Nothing} @@ -190,6 +192,11 @@ testRelayBatchSingletonOverflow = do map deliveryTaskId accepted `shouldBe` [] map deliveryTaskId large `shouldBe` [1] +testFwdMemberName :: IO () +testFwdMemberName = do + fwdMemberName "sixteen_chars_ab" `shouldBe` "sixteen_chars_ab" + fwdMemberName "seventeen_chars_a" `shouldBe` "seventeen_chars_…" + runBatcherTest :: BatchMode -> Int -> [SndMessage] -> [ChatError] -> [ByteString] -> Spec runBatcherTest mode maxLen msgs expectedErrors expectedBatches = it From 96970373b03766dd7406afe9c1292c975526f4d4 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 8 Oct 2026 16:31:29 +0100 Subject: [PATCH 3/8] core: add status when switching queue (#7664) * core: add status when switching queue * fix --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- apps/ios/SimpleXChat/APITypes.swift | 1 + .../commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt | 3 ++- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat/Messages.hs | 4 ++-- src/Simplex/Chat/View.hs | 1 + 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 75d66ebb6f..ecf389563e 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -598,6 +598,7 @@ public enum RcvSwitchStatus: String, Decodable, Hashable { case sendingQADD = "sending_qadd" case sendingQUSE = "sending_quse" case receivedMessage = "received_message" + case receivedQEND = "received_qend" } public struct SndQueueInfo: Decodable, Hashable { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index d879df1d27..2672d0e996 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -7573,7 +7573,8 @@ enum class RcvSwitchStatus { @SerialName("switch_started") SwitchStarted, @SerialName("sending_qadd") SendingQADD, @SerialName("sending_quse") SendingQUSE, - @SerialName("received_message") ReceivedMessage + @SerialName("received_message") ReceivedMessage, + @SerialName("received_qend") ReceivedQEND } @Serializable diff --git a/cabal.project b/cabal.project index ed446d492c..e5f2c65eda 100644 --- a/cabal.project +++ b/cabal.project @@ -21,7 +21,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: c0a1b7bd2d79c4af5163d9a863cb0780f556d7a9 + tag: e24d537eaaa32230eec1fefcd957d474d7b8d4d5 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 1795f6e865..d6c932df39 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."c0a1b7bd2d79c4af5163d9a863cb0780f556d7a9" = "0l10gc46l1i1wwalapg4wa0y1x3j4l4465242701k9lvvgywjh9z"; + "https://github.com/simplex-chat/simplexmq.git"."e24d537eaaa32230eec1fefcd957d474d7b8d4d5" = "1ximwqi1jaiq1ml05y0mcsrgvabhp5is1ry2h91w5jjarjb1a5fj"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."2330df3dc8c4b660674d3c02d76bb86f66c2abee" = "11pfj1vqsjdl26nplkr2l6z1xj7cn153qijj5gknmlzq3krn7x1i"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 3c6dca2ac8..50035b55be 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -55,7 +55,7 @@ import Simplex.Messaging.Crypto.File (CryptoFile (..)) import qualified Simplex.Messaging.Crypto.File as CF import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, parseAll, sumTypeJSON) -import Simplex.Messaging.Protocol (BlockingInfo, MsgBody, XFTPServer) +import Simplex.Messaging.Protocol (BlockingInfo, MsgBody, XFTPServer, unMsgId) import Simplex.Messaging.Util (eitherToMaybe, safeDecodeUtf8, (<$?>)) data ChatType = CTDirect | CTGroup | CTLocal | CTContactRequest | CTContactConnection @@ -1228,7 +1228,7 @@ msgMetaToJson MsgMeta {integrity, recipient = (rcvId, rcvTs), broker = (serverId { integrity = (decodeLatin1 . strEncode) integrity, rcvId, rcvTs, - serverId = (decodeLatin1 . B64.encode) serverId, + serverId = (decodeLatin1 . B64.encode . unMsgId) serverId, serverTs, sndId } diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 1c62bc267b..aa509d49bf 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -1961,6 +1961,7 @@ viewRcvQueuesInfo = plain . T.intercalate ", " . map showQueueInfo RSSendingQADD -> "switch started" RSSendingQUSE -> "switch confirmed" RSReceivedMessage -> "switch secured" + RSReceivedQEND -> "switch completed" viewSndQueuesInfo :: [SndQueueInfo] -> StyledString viewSndQueuesInfo = plain . T.intercalate ", " . map showQueueInfo From 64d68ff7109d3f633ed8d1ebdd1833fcd3df736d Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 8 Oct 2026 17:11:46 +0100 Subject: [PATCH 4/8] core: fix test (#7666) Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- tests/ChatClient.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ChatClient.hs b/tests/ChatClient.hs index fa6d0f37d3..4a052d7da5 100644 --- a/tests/ChatClient.hs +++ b/tests/ChatClient.hs @@ -641,7 +641,7 @@ smpServerCfg p = maxJournalMsgCount = 24, maxJournalStateLines = 4, queueIdBytes = 24, - msgIdBytes = 6, + msgIdBytes = 24, serverStoreCfg = SSCMemory Nothing, -- $ Just StorePaths {storeLogFile = "tmp/smp-server-store.log", storeMsgsFile = Just "tmp/smp-server-messages.log"}, storeNtfsFile = Nothing, allowNewQueues = True, From a24a3b19116a91e51d7ba3f376b67d3dcb93f789 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 8 Oct 2026 18:10:37 +0100 Subject: [PATCH 5/8] website: redirect page (#7667) * website: redirect page * script --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- website/src/wefunder.html | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 website/src/wefunder.html diff --git a/website/src/wefunder.html b/website/src/wefunder.html new file mode 100644 index 0000000000..7fc7623d69 --- /dev/null +++ b/website/src/wefunder.html @@ -0,0 +1,23 @@ +--- +templateEngineOverride: njk +--- + + + + + + + + Invest in SimpleX Chat + + + + + + + + + + + + From 9c9c86f9c07620dab852fcac4b095846e30d3003 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 8 Oct 2026 22:53:59 +0100 Subject: [PATCH 6/8] core, ui: fix profiles, add error alerts (#7663) * core, ui: fix profiles, add error alerts * simplify * query plans --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- apps/ios/Shared/Model/ChatModel.swift | 2 + apps/ios/Shared/Model/SimpleXAPI.swift | 8 +- .../Views/UserSettings/UserAddressView.swift | 22 +++- .../Views/UserSettings/UserProfile.swift | 9 +- apps/ios/SimpleXChat/ChatTypes.swift | 3 +- .../chat/simplex/common/model/ChatModel.kt | 2 +- .../chat/simplex/common/model/SimpleXAPI.kt | 11 +- .../views/usersettings/UserAddressView.kt | 1 + .../moko-resources/base/strings.xml | 1 + src/Simplex/Chat/Core.hs | 6 +- src/Simplex/Chat/Library/Commands.hs | 59 +++++---- src/Simplex/Chat/Library/Internal.hs | 4 + src/Simplex/Chat/Store/Profiles.hs | 34 ++--- .../SQLite/Migrations/agent_query_plans.txt | 4 + .../SQLite/Migrations/chat_query_plans.txt | 34 +++-- src/Simplex/Chat/Store/Shared.hs | 9 +- tests/ChatTests/Groups.hs | 4 +- tests/ChatTests/Names.hs | 120 ++++++++++++++++++ tests/ChatTests/Profiles.hs | 115 +++++++++++++++++ tests/ValidNames.hs | 7 + 20 files changed, 382 insertions(+), 73 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 6a5b1de353..7c1e8e65ab 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -935,6 +935,8 @@ final class ChatModel: ObservableObject { func updateCurrentUser(_ newProfile: Profile, _ preferences: FullPreferences? = nil) { if let current = currentUser { currentUser?.profile = toLocalProfile(current.profile.profileId, newProfile, "") + currentUser?.profile.localBadge = current.profile.localBadge + currentUser?.profile.contactDomainVerified = current.profile.contactDomainVerified if let preferences = preferences { currentUser?.fullPreferences = preferences } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index be2cde7cd6..21335cee64 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1359,8 +1359,12 @@ func apiUpdateProfile(profile: Profile) async throws -> (Profile, [Contact])? { switch r { case .result(.userProfileNoChange): return (profile, []) case let .result(.userProfileUpdated(_, _, toProfile, updateSummary)): return (toProfile, updateSummary.changedContacts) - case .error(.errorStore(.duplicateName)): return nil; - default: throw r.unexpected + case .error(.errorStore(.duplicateName)), .error(.error(.userExists)): return nil; + default: + await MainActor.run { + showErrorAlert(r.unexpected, NSLocalizedString("Error saving profile", comment: "alert title")) + } + throw r.unexpected } } diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index 9711f3d6f8..61c808dda1 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -139,7 +139,7 @@ struct UserAddressView: View { title: Text("Share address with SimpleX contacts?"), message: Text("Add address to your profile, so that your SimpleX contacts can share it with other people. Profile update will be sent to your SimpleX contacts."), primaryButton: .default(Text("Share")) { - setProfileAddress($progressIndicator, true) + setProfileAddress($progressIndicator, true) { shareViaProfile = false } shareViaProfile = true }, secondaryButton: .cancel() ) @@ -318,7 +318,7 @@ struct UserAddressView: View { alert = .shareOnCreate progressIndicator = false } else { - setProfileAddress($progressIndicator, true) + setProfileAddress($progressIndicator, true) { shareViaProfile = false } shareViaProfile = true } } else { @@ -601,7 +601,7 @@ struct AddressSettingsState: Equatable { } } -private func setProfileAddress(_ progressIndicator: Binding, _ on: Bool) { +private func setProfileAddress(_ progressIndicator: Binding, _ on: Bool, revert: @escaping () -> Void) { progressIndicator.wrappedValue = true Task { do { @@ -613,7 +613,11 @@ private func setProfileAddress(_ progressIndicator: Binding, _ on: Bool) { await MainActor.run { progressIndicator.wrappedValue = false } } catch let error { logger.error("apiSetProfileAddress: \(responseError(error))") - await MainActor.run { progressIndicator.wrappedValue = false } + await MainActor.run { + progressIndicator.wrappedValue = false + revert() + showErrorAlert(error, NSLocalizedString("Error saving profile", comment: "alert title")) + } } } } @@ -709,7 +713,10 @@ struct UserAddressSettingsView: View { title: NSLocalizedString("Share", comment: "alert action"), style: .default, handler: { _ in - setProfileAddress($progressIndicator, on) + setProfileAddress($progressIndicator, on) { + ignoreShareViaProfileChange = true + shareViaProfile = !on + } } ) ]} @@ -731,7 +738,10 @@ struct UserAddressSettingsView: View { title: NSLocalizedString("Stop sharing", comment: "alert action"), style: .default, handler: { _ in - setProfileAddress($progressIndicator, on) + setProfileAddress($progressIndicator, on) { + ignoreShareViaProfileChange = true + shareViaProfile = !on + } } ) ]} diff --git a/apps/ios/Shared/Views/UserSettings/UserProfile.swift b/apps/ios/Shared/Views/UserSettings/UserProfile.swift index a2a62b557c..8fe8a1c45a 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfile.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfile.swift @@ -36,7 +36,7 @@ struct UserProfile: View { HStack { TextField("Enter your name…", text: $profile.displayName) .focused($focusDisplayName) - if !validDisplayName(profile.displayName) { + if !validNewProfileName { Button { alert = .invalidNameError(validName: mkValidName(profile.displayName)) } label: { @@ -147,10 +147,15 @@ struct UserProfile: View { (chatModel.currentUser?.profile.description ?? "") != description.trimmingCharacters(in: .whitespacesAndNewlines) ) && profile.displayName.trimmingCharacters(in: .whitespaces) != "" && - validDisplayName(profile.displayName) && + validNewProfileName && bioFitsLimit() } + private var validNewProfileName: Bool { + profile.displayName == chatModel.currentUser?.profile.displayName + || validDisplayName(profile.displayName) + } + private func saveProfile() { focusDisplayName = false Task { diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 9dbbffd4ce..4a95ed23eb 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -583,7 +583,8 @@ public func toLocalProfile (_ profileId: Int64, _ profile: Profile, _ localAlias contactLink: profile.contactLink, preferences: profile.preferences, peerType: profile.peerType, - localAlias: localAlias + localAlias: localAlias, + contactDomain: profile.contactDomain ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index c10471317e..c33a077ae9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1115,7 +1115,7 @@ object ChatModel { fun updateCurrentUser(rhId: Long?, newProfile: Profile, preferences: FullChatPreferences? = null) { val current = currentUser.value ?: return val updated = current.copy( - profile = newProfile.toLocalProfile(current.profile.profileId), + profile = newProfile.toLocalProfile(current.profile.profileId).copy(localBadge = current.profile.localBadge, contactDomainVerified = current.profile.contactDomainVerified), fullPreferences = preferences ?: current.fullPreferences ) val i = users.indexOfFirst { it.user.userId == current.userId && it.user.remoteHostId == rhId } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 2672d0e996..5f1603423a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -1927,8 +1927,10 @@ object ChatController { val r = sendCmd(rh, CC.ApiUpdateProfile(userId, profile)) if (r is API.Result && r.res is CR.UserProfileNoChange) return profile to emptyList() if (r is API.Result && r.res is CR.UserProfileUpdated) return r.res.toProfile to r.res.updateSummary.changedContacts - if (r is API.Error && r.err is ChatError.ChatErrorStore && r.err.storeError is StoreError.DuplicateName) { + if (r is API.Error && (r.err is ChatError.ChatErrorStore && r.err.storeError is StoreError.DuplicateName || r.err is ChatError.ChatErrorChat && r.err.errorType is ChatErrorType.UserExists)) { AlertManager.shared.showAlertMsg(generalGetString(MR.strings.failed_to_create_user_duplicate_title), generalGetString(MR.strings.failed_to_create_user_duplicate_desc)) + } else if (!(networkErrorAlert(r))) { + AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error_saving_profile), "${r.responseType}: ${r.details}") } Log.e(TAG, "apiUpdateProfile bad response: ${r.responseType} ${r.details}") return null @@ -1940,7 +1942,12 @@ object ChatController { return when { r is API.Result && r.res is CR.UserProfileNoChange -> null r is API.Result && r.res is CR.UserProfileUpdated -> r.res.user.updateRemoteHostId(rh) - else -> throw Exception("failed to set profile address: ${r.responseType} ${r.details}") + else -> { + if (!(networkErrorAlert(r))) { + apiErrorAlert("apiSetProfileAddress", generalGetString(MR.strings.error_saving_profile), r) + } + throw Exception("failed to set profile address: ${r.responseType} ${r.details}") + } } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt index 5b22d5f363..826648ddb8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt @@ -63,6 +63,7 @@ fun UserAddressView( chatModel.updateUser(u) } } catch (e: Exception) { + shareViaProfile.value = !on Log.e(TAG, "UserAddressView apiSetProfileAddress: ${e.stackTraceToString()}") } finally { progressIndicator.value = false diff --git a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml index 2d0db3e038..71831e1c89 100644 --- a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml @@ -255,6 +255,7 @@ Error opening chat Error opening group Error changing profile + Error saving profile Instant notifications diff --git a/src/Simplex/Chat/Core.hs b/src/Simplex/Chat/Core.hs index 942b07dea0..3b8ffb34bb 100644 --- a/src/Simplex/Chat/Core.hs +++ b/src/Simplex/Chat/Core.hs @@ -75,10 +75,10 @@ simplexChatCore cfg@ChatConfig {confirmMigrations, testView, chatHooks} opts@Cha noMaintenance img_ <- mapM loadImageFile userImageFile createActiveUser cc coreOptions createBot userDisplayName img_ - Just u@User {localDisplayName} -> do + Just u@User {profile = LocalProfile {displayName}} -> do forM_ userDisplayName $ \name -> - when (localDisplayName /= name) $ do - putStrLn $ "Active user display name " <> show localDisplayName <> " does not match --user-display-name " <> show name + when (displayName /= name) $ do + putStrLn $ "Active user display name " <> show displayName <> " does not match --user-display-name " <> show name exitFailure -- --user-image-file only applies when the profile is created; ignore it for an existing user forM_ userImageFile $ \_ -> diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index bf9326871b..4ffd27f428 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -174,7 +174,9 @@ checkProfileImageSize = mapM_ $ \(ImageData t) -> in when (size > maxProfileImageSize) $ throwCmdError $ "Profile image is too large " <> show size checkProfileSize :: Profile -> CM () -checkProfileSize p = checkInfoSize "Profile" (XInfo p Nothing) +checkProfileSize p@Profile {contactDomain} = checkInfoSize "Profile" (XInfo p' Nothing) + where + p' = (p :: Profile) {badge = Nothing, contactDomain = (\d -> d {proof = Nothing} :: SimplexDomainClaim) <$> contactDomain} checkGroupProfileSize :: GroupProfile -> CM () checkGroupProfileSize p = checkInfoSize "Group profile" (XGrpInfo p) @@ -454,7 +456,7 @@ processChatCommand cxt nm = \case p@Profile {displayName} <- liftIO $ maybe generateRandomProfile pure profile u <- asks currentUser users <- withFastStore' getUsers - forM_ users $ \User {localDisplayName = n, activeUser, viewPwdHash, userChatRelay = userChatRelay'} -> do + forM_ users $ \User {profile = LocalProfile {displayName = n}, activeUser, viewPwdHash, userChatRelay = userChatRelay'} -> do when (n == displayName) . throwChatError $ if activeUser || isNothing viewPwdHash then CEUserExists displayName else CEInvalidDisplayName {displayName, validName = ""} when (isTrue userChatRelay && isTrue userChatRelay') $ throwChatError CEChatRelayExists @@ -1596,8 +1598,8 @@ processChatCommand cxt nm = \case APICallStatus contactId receivedStatus -> withCurrentCall contactId $ \user ct call -> updateCallItemStatus user ct call receivedStatus Nothing $> Just call - APIUpdateProfile userId profile -> withUserId userId (`updateProfile` profile) - APISetUserDomain userId strDomain_ -> withUserId userId $ \user@User {profile = p@LocalProfile {contactLink, contactDomain}} -> do + APIUpdateProfile userId profile -> withUserProfileLock "updateProfile" $ withUserId userId (`updateProfile` profile) + APISetUserDomain userId strDomain_ -> withUserProfileLock "setUserDomain" $ withUserId userId $ \user@User {profile = p@LocalProfile {contactLink, contactDomain}} -> do let domain_ = unStrJSON <$> strDomain_ if (claimDomain <$> contactDomain) == domain_ then pure $ CRUserProfileNoChange user @@ -1637,7 +1639,7 @@ processChatCommand cxt nm = \case APISetUserUIThemes uId uiThemes -> withUser $ \user@User {userId} -> do user'@User {userId = uId'} <- withFastStore $ \db -> do user' <- getUser db uId - liftIO $ setUserUIThemes db user uiThemes + liftIO $ setUserUIThemes db user' uiThemes pure user' when (userId == uId') $ chatWriteVar currentUser $ Just (user :: User) {uiThemes} ok user' @@ -2480,12 +2482,12 @@ processChatCommand cxt nm = \case pure $ CRUserContactLinkCreated user ccLink'' CreateMyAddress ratchetKeys_ -> withUser $ \User {userId} -> processChatCommand cxt nm $ APICreateMyAddress userId Nothing ratchetKeys_ - APIDeleteMyAddress userId -> withUserId userId $ \user@User {profile = p} -> do + APIDeleteMyAddress userId -> withUserProfileLock "deleteMyAddress" $ withUserId userId $ \user@User {profile = p} -> do conn <- withFastStore $ \db -> getUserAddressConnection db cxt user withChatLock "deleteMyAddress" $ do deleteAgentConnectionAsync $ aConnId conn withFastStore' (`deleteUserAddress` user) - let p' = (fromLocalProfile p :: Profile) {contactLink = Nothing} + let p' = (fromLocalProfile p :: Profile) {contactLink = Nothing, contactDomain = Nothing} r <- updateProfile_ user p' False $ withFastStore' $ \db -> setUserProfileContactLink db user Nothing let user' = case r of CRUserProfileUpdated u' _ _ _ -> u' @@ -2503,10 +2505,10 @@ processChatCommand cxt nm = \case CRUserContactLink user <$> (withFastStore (`getUserAddress` user) >>= setMyAddressData False pqInitKeys user) APIRotateAddressRatchetKeys userId -> withUserId' userId $ \user -> CRUserContactLink user <$> (withFastStore (`getUserAddress` user) >>= setMyAddressData True (Just IKUsePQ) user) - APISetProfileAddress userId False -> withUserId userId $ \user@User {profile = p} -> do - let p' = (fromLocalProfile p :: Profile) {contactLink = Nothing} + APISetProfileAddress userId False -> withUserProfileLock "setProfileAddress" $ withUserId userId $ \user@User {profile = p} -> do + let p' = (fromLocalProfile p :: Profile) {contactLink = Nothing, contactDomain = Nothing} updateProfile_ user p' True $ withFastStore' $ \db -> setUserProfileContactLink db user Nothing - APISetProfileAddress userId True -> withUserId userId $ \user@User {profile = p} -> do + APISetProfileAddress userId True -> withUserProfileLock "setProfileAddress" $ withUserId userId $ \user@User {profile = p} -> do ucl <- withFastStore (`getUserAddress` user) -- TODO [short links] replace with short links let p' = (fromLocalProfile p :: Profile) {contactLink = Just $ profileContactLink ucl} @@ -3582,23 +3584,23 @@ processChatCommand cxt nm = \case -- after the write, so the pass it signals arms a wake for the snooze rather than raising again lift $ startBadgeWork user CRBadgeState user <$> getUserBadgeState user - SetBotCommands commands -> withUser $ \user@User {profile} -> do + SetBotCommands commands -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do let LocalProfile {preferences} = profile prefs = Just (fromMaybe emptyChatPrefs preferences :: Preferences) {commands = Just commands} p = (fromLocalProfile profile :: Profile) {preferences = prefs, peerType = Just CPTBot} updateProfile user p - UpdateProfile displayName shortDescr -> withUser $ \user@User {profile} -> do + UpdateProfile displayName shortDescr -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do let p = (fromLocalProfile profile :: Profile) {displayName, shortDescr, fullName = ""} updateProfile user p - UpdateProfileImage image -> withUser $ \user@User {profile} -> do + UpdateProfileImage image -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do let p = (fromLocalProfile profile :: Profile) {image} updateProfile user p - UpdateProfileImageFromFile path -> withUser $ \user@User {profile} -> do + UpdateProfileImageFromFile path -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do img <- readProfileImageFile path let p = (fromLocalProfile profile :: Profile) {image = Just img} updateProfile user p ShowProfileImage -> withUser $ \user@User {profile} -> pure $ CRUserProfileImage user $ fromLocalProfile profile - SetUserFeature (ACF f) allowed -> withUser $ \user@User {profile} -> do + SetUserFeature (ACF f) allowed -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do let p = (fromLocalProfile profile :: Profile) {preferences = Just . setPreference f (Just allowed) $ preferences' user} updateProfile user p SetContactFeature (ACF f) cName allowed_ -> withUser $ \user -> do @@ -3616,7 +3618,7 @@ processChatCommand cxt nm = \case case memberAdmission of Nothing -> p {memberAdmission = Just (emptyGroupMemberAdmission :: GroupMemberAdmission) {review = reviewAdmissionApplication}} Just ma -> p {memberAdmission = Just (ma :: GroupMemberAdmission) {review = reviewAdmissionApplication}} - SetUserTimedMessages onOff -> withUser $ \user@User {profile} -> do + SetUserTimedMessages onOff -> withUserProfileLock "updateProfile" $ withUser $ \user@User {profile} -> do let allowed = if onOff then FAYes else FANo pref = TimedMessagesPreference allowed Nothing p = (fromLocalProfile profile :: Profile) {preferences = Just . setPreference' SCFTimedMessages (Just pref) $ preferences' user} @@ -3685,6 +3687,7 @@ processChatCommand cxt nm = \case CLContactRequest crId -> "ContactRequest " <> tshow crId CLFile fId -> "File " <> tshow fId CLBadgeUser uId -> "BadgeUser " <> tshow uId + CLUserProfile -> "UserProfile" DebugEvent event -> toView event >> ok_ GetAgentSubsTotal userId -> withUserId userId $ \user -> do users <- withStore' $ \db -> getUsers db @@ -4009,20 +4012,29 @@ processChatCommand cxt nm = \case when (fileSize > maxSndXFTPFileSize lims now sndBadge) $ throwChatError $ CEFileSize f pure fileSize updateProfile :: User -> Profile -> CM ChatResponse - updateProfile user p' = updateProfile_ user p' True $ withFastStore $ \db -> updateUserProfile db user p' + updateProfile user@User {profile = LocalProfile {contactDomain}} p = updateProfile_ user p' True $ withFastStore $ \db -> updateUserProfile db user p' + where + p' = (p :: Profile) {contactDomain} updateProfile_ :: User -> Profile -> Bool -> CM User -> CM ChatResponse updateProfile_ user@User {profile = p@LocalProfile {displayName = n}} p'@Profile {displayName = n', image = img'} shouldUpdateAddressData updateUser | p' == fromLocalProfile p = pure $ CRUserProfileNoChange user | otherwise = do - when (n /= n') $ checkValidName n' + when (n /= n') $ do + checkValidName n' + users <- withFastStore' getUsers + forM_ users $ \User {profile = LocalProfile {displayName}, activeUser, viewPwdHash} -> + when (displayName == n') . throwChatError $ + if activeUser || isNothing viewPwdHash then CEUserExists n' else CEInvalidDisplayName {displayName = n', validName = ""} checkProfileImageSize img' checkProfileSize p' + when shouldUpdateAddressData $ do + ts <- liftIO getCurrentTime + setMyAddressData' (user :: User) {profile = updatedUserProfile user p' ts} -- read contacts before user update to correctly merge preferences contacts <- withFastStore' $ \db -> getUserContacts db cxt user user' <- updateUser asks currentUser >>= atomically . (`writeTVar` Just user') withChatLock "updateProfile" $ do - when shouldUpdateAddressData $ setMyAddressData' user' summary <- sendUpdateToContacts user' contacts pure $ CRUserProfileUpdated user' (fromLocalProfile p) p' summary where @@ -5630,7 +5642,7 @@ presentIssuedBadge user p@UserBadgePurchase {badgePurchaseId, shown} now | otherwise = do cred_ <- withStore' (`getLatestIssuedCredential` badgePurchaseId) forM_ cred_ $ \cred@(BadgeCredential _ _ _ info) -> - when (presentDue cred) $ do + when (presentDue cred) $ withUserProfileLock "presentIssuedBadge" $ do user' <- withStore $ \db -> setUserBadge db user (Just $ OwnBadge cred (mkBadgeStatus now (Just True) info)) presentUserBadgeToContacts user' where @@ -5643,7 +5655,7 @@ presentIssuedBadge user p@UserBadgePurchase {badgePurchaseId, shown} now retireExpiredBadge :: User -> UserBadgePurchase -> UTCTime -> StatementEntry -> CM Bool retireExpiredBadge user UserBadgePurchase {badgePurchaseId, shown} now balance | not (shown && L.paidThrough balance <= now) = pure False - | otherwise = do + | otherwise = withUserProfileLock "retireExpiredBadge" $ do user' <- withStore $ \db -> do liftIO $ clearShownBadge db user badgePurchaseId setUserBadge db user Nothing @@ -6678,8 +6690,11 @@ displayNameP_ = quoted '\'' <|> takeNameTill (\c -> isSpace c || c == ',') refChar c = c > ' ' && c /= '#' && c /= '@' && c /= '\'' mkValidName :: String -> String -mkValidName = dropWhileEnd isSpace . take 50 . reverse . fst3 . foldl' addChar ("", '\NUL', 0 :: Int) +mkValidName = noLdnSuffix . dropWhileEnd isSpace . take 50 . reverse . fst3 . foldl' addChar ("", '\NUL', 0 :: Int) where + noLdnSuffix s = case break (== '_') (reverse s) of + (ds@(_ : _), '_' : rest@(_ : _)) | all isDigit ds -> reverse rest <> ('-' : reverse ds) + _ -> s fst3 (x, _, _) = x addChar (r, prev, punct) c' = if validChar then (c : r, c, punct') else (r, prev, punct) where diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs index effa943cc7..4008bc2727 100644 --- a/src/Simplex/Chat/Library/Internal.hs +++ b/src/Simplex/Chat/Library/Internal.hs @@ -160,6 +160,10 @@ withFileLock :: Text -> Int64 -> CM a -> CM a withFileLock name = withEntityLock name . CLFile {-# INLINE withFileLock #-} +withUserProfileLock :: Text -> CM a -> CM a +withUserProfileLock name = withEntityLock name CLUserProfile +{-# INLINE withUserProfileLock #-} + useServerCfgs :: forall p. UserProtocol p => SProtocolType p -> RandomAgentServers -> [(Text, ServerOperator)] -> [UserServer p] -> NonEmpty (ServerCfg p) useServerCfgs p RandomAgentServers {smpServers, xftpServers} opDomains = fromMaybe (rndAgentServers p) . L.nonEmpty . agentServerCfgs p opDomains diff --git a/src/Simplex/Chat/Store/Profiles.hs b/src/Simplex/Chat/Store/Profiles.hs index c3d9f2c0bd..3b52c46fef 100644 --- a/src/Simplex/Chat/Store/Profiles.hs +++ b/src/Simplex/Chat/Store/Profiles.hs @@ -44,6 +44,7 @@ module Simplex.Chat.Store.Profiles updateUserAutoAcceptMemberContacts, updateUserAutoAcceptGroupInvitations, updateUserProfile, + updatedUserProfile, setUserBadge, setUserProfileContactLink, getUserContactProfiles, @@ -169,7 +170,7 @@ createUserRecordAt db (AgentUserId auId) userChatRelay clientService Profile {di (profileId, displayName, userId, BI True, currentTs, currentTs, currentTs) contactId <- insertedRowId db DB.execute db "UPDATE users SET contact_id = ? WHERE user_id = ?" (contactId, userId) - pure $ toUser currentTs $ (userId, auId, contactId, profileId, BI activeUser, order) :. (displayName, fullName, shortDescr, description, image, Nothing, peerType, userPreferences) :. (BI showNtfs, BI sendRcptsContacts, BI sendRcptsSmallGroups, BI autoAcceptMemberContacts, BI autoAcceptGroupInvitations, Nothing, Nothing, Nothing, BI userChatRelay, BI clientService, Nothing) :. localBadgeToRow Nothing :. (Nothing, Nothing, Nothing) + pure $ toUser currentTs $ (userId, auId, contactId, profileId, BI activeUser, order, displayName) :. (displayName, fullName, shortDescr, description, image, Nothing, peerType, userPreferences) :. (BI showNtfs, BI sendRcptsContacts, BI sendRcptsSmallGroups, BI autoAcceptMemberContacts, BI autoAcceptGroupInvitations, Nothing, Nothing, Nothing, BI userChatRelay, BI clientService, Nothing) :. localBadgeToRow Nothing :. (Nothing, Nothing, Nothing) -- TODO [mentions] getUsersInfo :: DB.Connection -> IO [UserInfo] @@ -344,21 +345,15 @@ updateUserProfile db user p' currentTs <- getCurrentTime updateUserProfileFields_' db userId profileId p' currentTs userMemberProfileUpdatedAt' <- updateUserMemberProfileUpdatedAt_ currentTs - pure user {profile = (toLocalProfile profileId p' localAlias currentTs (Just False) Nothing) {localBadge}, fullPreferences, userMemberProfileUpdatedAt = userMemberProfileUpdatedAt'} + pure user {profile = updatedUserProfile user p' currentTs, fullPreferences, userMemberProfileUpdatedAt = userMemberProfileUpdatedAt'} | otherwise = - checkConstraint SEDuplicateName . liftIO $ do + checkConstraint SEDuplicateName . ExceptT . withLocalDisplayName db userId newName $ \newLDN -> do currentTs <- getCurrentTime - -- Insert first: checkConstraint returns the violation as a value, so the - -- transaction commits, keeping whatever ran before the failing insert. - DB.execute - db - "INSERT INTO display_names (local_display_name, ldn_base, user_id, created_at, updated_at) VALUES (?,?,?,?,?)" - (newName, newName, userId, currentTs, currentTs) - DB.execute db "UPDATE users SET local_display_name = ?, updated_at = ? WHERE user_id = ?" (newName, currentTs, userId) + DB.execute db "UPDATE users SET local_display_name = ?, updated_at = ? WHERE user_id = ?" (newLDN, currentTs, userId) userMemberProfileUpdatedAt' <- updateUserMemberProfileUpdatedAt_ currentTs updateUserProfileFields_' db userId profileId p' currentTs - updateContactLDN_ db user userContactId localDisplayName newName currentTs - pure user {localDisplayName = newName, profile = (toLocalProfile profileId p' localAlias currentTs (Just False) Nothing) {localBadge}, fullPreferences, userMemberProfileUpdatedAt = userMemberProfileUpdatedAt'} + updateContactLDN_ db user userContactId localDisplayName newLDN currentTs + pure $ Right user {localDisplayName = newLDN, profile = updatedUserProfile user p' currentTs, fullPreferences, userMemberProfileUpdatedAt = userMemberProfileUpdatedAt'} where updateUserMemberProfileUpdatedAt_ currentTs | userMemberProfileChanged = do @@ -366,10 +361,14 @@ updateUserProfile db user p' pure $ Just currentTs | otherwise = pure userMemberProfileUpdatedAt userMemberProfileChanged = newName /= displayName || fn' /= fullName || d' /= shortDescr || desc' /= description || img' /= image - User {userId, userContactId, localDisplayName, profile = LocalProfile {profileId, displayName, fullName, shortDescr, description, image, localBadge, localAlias}, userMemberProfileUpdatedAt} = user + User {userId, userContactId, localDisplayName, profile = LocalProfile {profileId, displayName, fullName, shortDescr, description, image}, userMemberProfileUpdatedAt} = user Profile {displayName = newName, fullName = fn', shortDescr = d', description = desc', image = img', preferences} = p' fullPreferences = fullPreferences' preferences +updatedUserProfile :: User -> Profile -> UTCTime -> LocalProfile +updatedUserProfile User {profile = LocalProfile {profileId, localBadge, localAlias}} p' ts = + (toLocalProfile profileId p' localAlias ts (Just False) Nothing) {localBadge} + -- own profile field update; leaves the badge columns alone (the credential is owned by setUserBadge/addUserBadge) updateUserProfileFields_' :: DB.Connection -> UserId -> ProfileId -> Profile -> UTCTime -> IO () updateUserProfileFields_' db userId profileId Profile {displayName, fullName, shortDescr, description, image, contactLink, preferences, peerType} updatedAt = @@ -411,19 +410,20 @@ setUserSimplexDomain db user@User {userId, profile = p@LocalProfile {profileId}} pure (user :: User) {profile = p {contactDomain = mkDomainClaim <$> domain_}} setUserProfileContactLink :: DB.Connection -> User -> Maybe UserContactLink -> IO User -setUserProfileContactLink db user@User {userId, profile = p@LocalProfile {profileId}} ucl_ = do +setUserProfileContactLink db user@User {userId, profile = p@LocalProfile {profileId, contactDomain}} ucl_ = do ts <- getCurrentTime DB.execute db [sql| UPDATE contact_profiles - SET contact_link = ?, updated_at = ? + SET contact_link = ?, contact_domain = ?, updated_at = ? WHERE user_id = ? AND contact_profile_id = ? |] - (contactLink, ts, userId, profileId) - pure (user :: User) {profile = p {contactLink}} + (contactLink, claimDomain <$> contactDomain', ts, userId, profileId) + pure (user :: User) {profile = p {contactLink, contactDomain = contactDomain'}} where contactLink = profileContactLink <$> ucl_ + contactDomain' = if isJust contactLink then contactDomain else Nothing -- only used in tests getUserContactProfiles :: DB.Connection -> User -> IO [Profile] diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt index 7c2e56c2b7..00886165b5 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt @@ -1391,6 +1391,10 @@ Query: SELECT conn_id FROM connections WHERE user_id = ? Plan: SEARCH connections USING COVERING INDEX idx_connections_user (user_id=?) +Query: SELECT conn_id FROM rcv_queues WHERE switch_status = ? AND deleted = 0 +Plan: +SCAN rcv_queues + Query: SELECT conn_id, rc_verify_code_ad, rc_verify_code_pq, CASE WHEN rc_verify_code_ad IS NULL THEN ratchet_state END FROM ratchets WHERE conn_id = ? Plan: SEARCH ratchets USING PRIMARY KEY (conn_id=?) diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt index c169b95d9a..7b76c06527 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt @@ -5344,7 +5344,7 @@ SEARCH connections_sync USING INTEGER PRIMARY KEY (rowid=?) Query: UPDATE contact_profiles - SET contact_link = ?, updated_at = ? + SET contact_link = ?, contact_domain = ?, updated_at = ? WHERE user_id = ? AND contact_profile_id = ? Plan: @@ -6365,7 +6365,7 @@ Plan: SEARCH server_operators USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6378,7 +6378,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6392,7 +6392,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6406,7 +6406,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6421,7 +6421,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6435,7 +6435,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6449,7 +6449,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6463,7 +6463,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6477,7 +6477,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -6490,7 +6490,7 @@ SEARCH uct USING INTEGER PRIMARY KEY (rowid=?) SEARCH ucp USING INTEGER PRIMARY KEY (rowid=?) Query: - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -7632,6 +7632,10 @@ Query: SELECT member_id FROM group_members WHERE local_display_name = ? Plan: SCAN group_members +Query: SELECT member_id FROM group_members WHERE member_category = ? +Plan: +SCAN group_members + Query: SELECT member_id FROM group_members WHERE member_role = ? LIMIT 1 Plan: SCAN group_members @@ -7908,6 +7912,10 @@ Query: UPDATE contact_profiles SET contact_domain = ?, updated_at = ? WHERE user Plan: SEARCH contact_profiles USING INTEGER PRIMARY KEY (rowid=?) +Query: UPDATE contact_profiles SET contact_domain_verified = NULL WHERE user_id = ? AND contact_profile_id = ? +Plan: +SEARCH contact_profiles USING INTEGER PRIMARY KEY (rowid=?) + Query: UPDATE contact_profiles SET image = ? WHERE display_name = ? Plan: SEARCH contact_profiles USING INDEX contact_profiles_index (display_name=?) @@ -8100,6 +8108,10 @@ Query: UPDATE group_members SET xgrplinkmem_received = ?, updated_at = ? WHERE g Plan: SEARCH group_members USING INTEGER PRIMARY KEY (rowid=?) +Query: UPDATE group_profiles SET description = ? WHERE display_name = ? +Plan: +SCAN group_profiles + Query: UPDATE group_relays SET relay_status = ?, updated_at = ? WHERE group_relay_id = ? Plan: SEARCH group_relays USING INTEGER PRIMARY KEY (rowid=?) diff --git a/src/Simplex/Chat/Store/Shared.hs b/src/Simplex/Chat/Store/Shared.hs index c3d42de3d1..908d5a823b 100644 --- a/src/Simplex/Chat/Store/Shared.hs +++ b/src/Simplex/Chat/Store/Shared.hs @@ -74,6 +74,7 @@ data ChatLockEntity | CLContactRequest Int64 | CLFile Int64 | CLBadgeUser Int64 -- one signed badge request per profile in flight + | CLUserProfile deriving (Eq, Ord) -- These error type constructors must be added to mobile apps @@ -558,7 +559,7 @@ toContactRequest now ((contactRequestId, localDisplayName, agentInvitationId, co userQuery :: Query userQuery = [sql| - SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, + SELECT u.user_id, u.agent_user_id, u.contact_id, ucp.contact_profile_id, u.active_user, u.active_order, u.local_display_name, ucp.display_name, ucp.full_name, ucp.short_descr, ucp.description, ucp.image, ucp.contact_link, ucp.chat_peer_type, ucp.preferences, u.show_ntfs, u.send_rcpts_contacts, u.send_rcpts_small_groups, u.auto_accept_member_contacts, u.auto_accept_group_invitations, u.view_pwd_hash, u.view_pwd_salt, u.user_member_profile_updated_at, u.is_user_chat_relay, u.client_service, u.ui_themes, ucp.badge_proof, ucp.badge_pres_header, ucp.badge_expiry, ucp.badge_type, ucp.badge_verified, ucp.badge_extra, ucp.badge_master_key, ucp.badge_signature, ucp.badge_key_idx, ucp.contact_domain, ucp.contact_domain_proof, ucp.contact_domain_verified FROM users u @@ -566,9 +567,9 @@ userQuery = JOIN contact_profiles ucp ON ucp.contact_profile_id = uct.contact_profile_id |] -toUser :: UTCTime -> (UserId, UserId, ContactId, ProfileId, BoolInt, Int64) :. (ContactName, Text, Maybe Text, Maybe Text, Maybe ImageData, Maybe ConnLinkContact, Maybe ChatPeerType, Maybe Preferences) :. (BoolInt, BoolInt, BoolInt, BoolInt, BoolInt, Maybe B64UrlByteString, Maybe B64UrlByteString, Maybe UTCTime, BoolInt, BoolInt, Maybe UIThemeEntityOverrides) :. BadgeRow :. ContactDomainRow -> User -toUser now ((userId, auId, userContactId, profileId, BI activeUser, activeOrder) :. (displayName, fullName, shortDescr, description, image, contactLink, peerType, userPreferences) :. (BI showNtfs, BI sendRcptsContacts, BI sendRcptsSmallGroups, BI autoAcceptMemberContacts, BI autoAcceptGroupInv, viewPwdHash_, viewPwdSalt_, userMemberProfileUpdatedAt, BI userChatRelay, BI clientService, uiThemes) :. badgeRow :. domainRow) = - User {userId, agentUserId = AgentUserId auId, userContactId, localDisplayName = displayName, profile, activeUser, activeOrder, fullPreferences, showNtfs, sendRcptsContacts, sendRcptsSmallGroups, autoAcceptMemberContacts, autoAcceptGroupInvitations, viewPwdHash, userMemberProfileUpdatedAt, userChatRelay = BoolDef userChatRelay, clientService = BoolDef clientService, uiThemes} +toUser :: UTCTime -> (UserId, UserId, ContactId, ProfileId, BoolInt, Int64, ContactName) :. (ContactName, Text, Maybe Text, Maybe Text, Maybe ImageData, Maybe ConnLinkContact, Maybe ChatPeerType, Maybe Preferences) :. (BoolInt, BoolInt, BoolInt, BoolInt, BoolInt, Maybe B64UrlByteString, Maybe B64UrlByteString, Maybe UTCTime, BoolInt, BoolInt, Maybe UIThemeEntityOverrides) :. BadgeRow :. ContactDomainRow -> User +toUser now ((userId, auId, userContactId, profileId, BI activeUser, activeOrder, localDisplayName) :. (displayName, fullName, shortDescr, description, image, contactLink, peerType, userPreferences) :. (BI showNtfs, BI sendRcptsContacts, BI sendRcptsSmallGroups, BI autoAcceptMemberContacts, BI autoAcceptGroupInv, viewPwdHash_, viewPwdSalt_, userMemberProfileUpdatedAt, BI userChatRelay, BI clientService, uiThemes) :. badgeRow :. domainRow) = + User {userId, agentUserId = AgentUserId auId, userContactId, localDisplayName, profile, activeUser, activeOrder, fullPreferences, showNtfs, sendRcptsContacts, sendRcptsSmallGroups, autoAcceptMemberContacts, autoAcceptGroupInvitations, viewPwdHash, userMemberProfileUpdatedAt, userChatRelay = BoolDef userChatRelay, clientService = BoolDef clientService, uiThemes} where profile = LocalProfile {profileId, displayName, fullName, shortDescr, description, image, contactLink, contactDomain = rowToContactDomain domainRow, contactDomainVerified = rowToDomainVerified domainRow, peerType, localBadge = rowToBadge now badgeRow, preferences = userPreferences, localAlias = ""} fullPreferences = fullPreferences' userPreferences diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 3608e5f7e9..e349a71f0a 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -8036,8 +8036,8 @@ testForwardQuoteMention = bob <# "alice> -> forwarded" bob <## " hello @alice @cath" -- member renamed to duplicate name - cath ##> "/p alice_1" - cath <## "user profile is changed to alice_1 (your 1 contacts are notified)" + cath ##> "/p alice" + cath <## "user profile is changed to alice (your 1 contacts are notified)" alice <## "contact cath changed to alice_1" alice <## "use @alice_1 to send messages" -- mention changed in quoted mentions diff --git a/tests/ChatTests/Names.hs b/tests/ChatTests/Names.hs index 6421459124..29a8c00c4f 100644 --- a/tests/ChatTests/Names.hs +++ b/tests/ChatTests/Names.hs @@ -16,6 +16,9 @@ import Test.Hspec hiding (it) chatNamesTests :: SpecWith TestParams chatNamesTests = do it "connect by resolved name" testConnectByName + it "profile update without the name keeps the name" testUpdateProfileKeepsName + it "stopping address sharing removes the name" testAddressSharingOffRemovesName + it "deleting the address removes the name" testAddressDeleteRemovesName it "connect by name not claimed in link profile is rejected" testConnectByNameNotClaimed it "connect by name to a known contact not claimed in profile is rejected" testConnectByNameKnownContactNotClaimed it "connect by unregistered name fails to resolve" testConnectByNameNotFound @@ -62,6 +65,123 @@ testConnectByName ps = withSmpServerAndNames ps $ \reg -> _ <- getTermLine bob pure () +testUpdateProfileKeepsName :: HasCallStack => TestParams -> IO () +testUpdateProfileKeepsName ps = withSmpServerAndNames ps $ \reg -> + testChat2 aliceProfile bobProfile (test reg) ps + where + aliceName = SimplexNameInfo NTContact (SimplexDomain TLDSimplex "alice" []) + test reg alice bob = do + mapM_ enableNamesRole [alice, bob] + alice ##> "/ad" + (shortLink, _) <- getContactLinks alice True + registerName reg aliceName (contactNameRecord "alice.simplex" (T.pack shortLink)) + alice ##> "/_set domain 1 alice.simplex" + alice <## "new contact address set" + bob ##> "/c @alice.simplex" + bob <## "alice: connection started" + alice <## "bob (Bob) wants to connect to you!" + alice <## "to accept: /ac bob" + alice <## "to reject: /rc bob (the sender will NOT be notified)" + alice ##> "/ac bob" + alice <## "bob (Bob): accepting contact request, you can send messages to contact" + concurrently_ + (bob <## "alice (Alice): contact is connected") + (alice <## "bob (Bob): contact is connected") + alice ##> ("/_profile 1 {\"displayName\": \"alice\", \"fullName\": \"\", \"shortDescr\": \"new bio\", \"contactLink\": \"" <> shortLink <> "\"}") + alice <## "user bio changed to new bio (your 1 contacts are notified)" + bob <## "contact alice updated bio: new bio" + bob ##> "/i alice" + bob <## "contact ID: 2" + bob <## "receiving messages via: localhost" + bob <## "sending messages via: localhost" + _ <- getTermLine bob + bob <## "SimpleX name: @alice.simplex (verified)" + bob <## "you've shared main profile with this contact" + bob <## "connection not verified, use /code command to see security code" + bob <## "quantum resistant end-to-end encryption" + _ <- getTermLine bob + pure () + +testAddressSharingOffRemovesName :: HasCallStack => TestParams -> IO () +testAddressSharingOffRemovesName ps = withSmpServerAndNames ps $ \reg -> + testChat2 aliceProfile bobProfile (test reg) ps + where + aliceName = SimplexNameInfo NTContact (SimplexDomain TLDSimplex "alice" []) + test reg alice bob = do + mapM_ enableNamesRole [alice, bob] + alice ##> "/ad" + (shortLink, _) <- getContactLinks alice True + registerName reg aliceName (contactNameRecord "alice.simplex" (T.pack shortLink)) + alice ##> "/_set domain 1 alice.simplex" + alice <## "new contact address set" + bob ##> "/c @alice.simplex" + bob <## "alice: connection started" + alice <## "bob (Bob) wants to connect to you!" + alice <## "to accept: /ac bob" + alice <## "to reject: /rc bob (the sender will NOT be notified)" + alice ##> "/ac bob" + alice <## "bob (Bob): accepting contact request, you can send messages to contact" + concurrently_ + (bob <## "alice (Alice): contact is connected") + (alice <## "bob (Bob): contact is connected") + alice ##> "/pa off" + alice <## "contact address removed" + bob <## "alice removed contact address" + checkNoName bob + alice ##> "/pa on" + alice <## "new contact address set" + bob <## "alice set new contact address, use /info alice to view" + bob ##> "/i alice" + bob <## "contact ID: 2" + bob <## "receiving messages via: localhost" + bob <## "sending messages via: localhost" + _ <- getTermLine bob + bob <## "you've shared main profile with this contact" + bob <## "connection not verified, use /code command to see security code" + bob <## "quantum resistant end-to-end encryption" + _ <- getTermLine bob + pure () + +testAddressDeleteRemovesName :: HasCallStack => TestParams -> IO () +testAddressDeleteRemovesName ps = withSmpServerAndNames ps $ \reg -> + testChat2 aliceProfile bobProfile (test reg) ps + where + aliceName = SimplexNameInfo NTContact (SimplexDomain TLDSimplex "alice" []) + test reg alice bob = do + mapM_ enableNamesRole [alice, bob] + alice ##> "/ad" + (shortLink, _) <- getContactLinks alice True + registerName reg aliceName (contactNameRecord "alice.simplex" (T.pack shortLink)) + alice ##> "/_set domain 1 alice.simplex" + alice <## "new contact address set" + bob ##> "/c @alice.simplex" + bob <## "alice: connection started" + alice <## "bob (Bob) wants to connect to you!" + alice <## "to accept: /ac bob" + alice <## "to reject: /rc bob (the sender will NOT be notified)" + alice ##> "/ac bob" + alice <## "bob (Bob): accepting contact request, you can send messages to contact" + concurrently_ + (bob <## "alice (Alice): contact is connected") + (alice <## "bob (Bob): contact is connected") + alice ##> "/da" + alice <## "Your chat address is deleted - accepted contacts will remain connected." + alice <## "To create a new chat address use /ad" + bob <## "alice removed contact address" + checkNoName bob + +checkNoName :: HasCallStack => TestCC -> IO () +checkNoName bob = do + bob ##> "/i alice" + bob <## "contact ID: 2" + bob <## "receiving messages via: localhost" + bob <## "sending messages via: localhost" + bob <## "you've shared main profile with this contact" + bob <## "connection not verified, use /code command to see security code" + bob <## "quantum resistant end-to-end encryption" + _ <- getTermLine bob + pure () + testConnectByNameNotClaimed :: HasCallStack => TestParams -> IO () testConnectByNameNotClaimed ps = withSmpServerAndNames ps $ \reg -> testChat2 aliceProfile bobProfile (test reg) ps diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 31ca1bae73..06b85fdb72 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -46,6 +46,10 @@ chatProfileTests :: SpecWith TestParams chatProfileTests = do describe "user profiles" $ do it "update user profile and notify contacts" testUpdateProfile + it "profile is not saved when its address data upload fails" testUpdateProfileAddressDataError + it "profile name used by a contact gets a local name with suffix" testUpdateProfileNameUsedByContact + it "profile name used by another user is rejected, names with _N suffix are invalid" testUpdateProfileNameUsedByUser + it "profile name used by a hidden user is rejected" testUpdateProfileNameUsedByHiddenUser it "profile description round-trips and shows in contact info" testProfileDescriptionShown it "member profile description is redacted for members without a direct contact" testMemberDescriptionRedacted it "update user profile with image" testUpdateProfileImage @@ -210,6 +214,117 @@ testUpdateProfile = bob <## "use @cat to send messages" ] +testUpdateProfileAddressDataError :: HasCallStack => TestParams -> IO () +testUpdateProfileAddressDataError ps = do + let cfg' = testCfg {agentConfig = testAgentCfg {persistErrorInterval = 0}} + withNewTestChatCfgOpts ps cfg' opts' "alice" aliceProfile $ \alice -> + withNewTestChatCfgOpts ps cfg' opts' "bob" bobProfile $ \bob -> do + withSmpServer' serverCfg' $ do + connectUsers alice bob + alice ##> "/ad" + _ <- getContactLinks alice True + pure () + alice <## "disconnected 2 connections on server localhost" + bob <## "disconnected 1 connections on server localhost" + alice ##> "/p alisa" + alice <##. "smp agent error: BROKER" + alice ##> "/p" + alice <## "user profile: alice (Alice)" + alice <## "use /p [] to change it" + withSmpServer' serverCfg' $ do + alice <## "subscribed 2 connections on server localhost" + bob <## "subscribed 1 connections on server localhost" + alice ##> "/p alisa" + alice <## "user profile is changed to alisa (your 1 contacts are notified)" + bob <## "contact alice changed to alisa" + bob <## "use @alisa to send messages" + alice <## "disconnected 2 connections on server localhost" + bob <## "disconnected 1 connections on server localhost" + where + serverCfg' = + (smpServerCfg ps) + { transports = [(smpTestPort2 ps, transport @TLS, False)], + serverStoreCfg = persistentServerStoreCfg (tmpPath ps) + } + opts' = + testOpts + { coreOptions = + testCoreOpts + { smpServers = ["smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=:server_password@localhost:7003"] + } + } + +testUpdateProfileNameUsedByContact :: HasCallStack => TestParams -> IO () +testUpdateProfileNameUsedByContact = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + alice ##> "/ad" + (shortLink, _) <- getContactLinks alice True + alice ##> "/p bob" + alice <## "user profile is changed to bob (your 1 contacts are notified)" + bob <## "contact alice changed to bob_1" + bob <## "use @bob_1 to send messages" + alice ##> "/p" + alice <## "user profile: bob" + alice <## "use /p [] to change it" + alice ##> "/users" + alice <## "bob_1 (active)" + alice #> "@bob hi" + bob <# "bob_1> hi" + cath ##> ("/_connect plan 1 " <> shortLink) + cath <## "contact address: ok to connect" + sLinkData <- getTermLine cath + sLinkData `shouldContain` "\"displayName\":\"bob\"" + alice ##> "/p alice" + alice <## "user profile is changed to alice (your 1 contacts are notified)" + bob <## "contact bob_1 changed to alice" + bob <## "use @alice to send messages" + alice ##> "/users" + alice <## "alice (active)" + +testUpdateProfileNameUsedByHiddenUser :: HasCallStack => TestParams -> IO () +testUpdateProfileNameUsedByHiddenUser = + testChat aliceProfile $ + \alice -> do + alice ##> "/create user alisa" + showActiveUser alice "alisa" + alice ##> "/hide user my_password" + alice <## "current user alisa:" + alice <## "messages are hidden (use /tail to view)" + alice <## "profile is hidden" + alice ##> "/user alice" + showActiveUser alice "alice (Alice)" + alice ##> "/p alisa" + alice <## "invalid display name: alisa" + +testUpdateProfileNameUsedByUser :: HasCallStack => TestParams -> IO () +testUpdateProfileNameUsedByUser = + testChat2 aliceProfile bobProfile $ + \alice bob -> do + connectUsers alice bob + alice ##> "/create user alisa" + showActiveUser alice "alisa" + alice ##> "/user alice" + showActiveUser alice "alice (Alice)" + alice ##> "/p alisa" + alice <## "user with the name alisa already exists" + alice ##> "/p alisa_1" + alice <## "invalid display name: alisa_1" + alice <## "you could use this one: alisa-1" + alice ##> "/p alisa-1" + alice <## "user profile is changed to alisa-1 (your 1 contacts are notified)" + bob <## "contact alice changed to alisa-1" + bob <## "use @alisa-1 to send messages" + alice ##> "/create user alisa-1" + alice <## "user with the name alisa-1 already exists" + alice ##> "/create user bob_2" + alice <## "invalid display name: bob_2" + alice <## "you could use this one: bob-2" + alice ##> "/users" + alice <## "alisa" + alice <## "alisa-1 (active)" + -- Profile.description survives the connect-time round-trip and is shown in the contact /i view. testProfileDescriptionShown :: HasCallStack => TestParams -> IO () testProfileDescriptionShown = diff --git a/tests/ValidNames.hs b/tests/ValidNames.hs index dd8433d231..a69f897516 100644 --- a/tests/ValidNames.hs +++ b/tests/ValidNames.hs @@ -57,3 +57,10 @@ testMkValidName = do mkValidName "123 alice" `shouldBe` "123 alice" mkValidName "01234567890123456789012345678901234567890123456789extra" `shouldBe` "01234567890123456789012345678901234567890123456789" mkValidName "0123456789012345678901234567890123456789012345678 extra" `shouldBe` "0123456789012345678901234567890123456789012345678" + mkValidName "alice_1" `shouldBe` "alice-1" + mkValidName "alice_bob_12" `shouldBe` "alice_bob-12" + mkValidName "alice _1" `shouldBe` "alice -1" + mkValidName "alice_" `shouldBe` "alice_" + mkValidName "alice_bob" `shouldBe` "alice_bob" + mkValidName "alice_1b" `shouldBe` "alice_1b" + mkValidName (mkValidName "alice_1") `shouldBe` "alice-1" From f2b3fe385cecddaa1a9ede2e6ed8dfdb63cee51f Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 9 Oct 2026 07:00:27 +0100 Subject: [PATCH 7/8] core: remove legacy field to support contact connections in groups (#7671) Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- apps/ios/SimpleXChat/ChatTypes.swift | 1 + docs/protocol/simplex-chat.schema.json | 3 --- src/Simplex/Chat/Library/Subscriber.hs | 20 ++++++--------- src/Simplex/Chat/Store/Groups.hs | 34 ++------------------------ src/Simplex/Chat/Types.hs | 3 +-- src/Simplex/Chat/protocol.md | 6 ++--- tests/ProtocolTests.hs | 12 +++------ 7 files changed, 17 insertions(+), 62 deletions(-) diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 4a95ed23eb..a8c5de3672 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -133,6 +133,7 @@ public struct Profile: Codable, NamedChat, Hashable { self.image = image self.contactLink = contactLink self.preferences = preferences + self.peerType = peerType self.contactDomain = contactDomain } diff --git a/docs/protocol/simplex-chat.schema.json b/docs/protocol/simplex-chat.schema.json index 8a71e715db..a2400e9947 100644 --- a/docs/protocol/simplex-chat.schema.json +++ b/docs/protocol/simplex-chat.schema.json @@ -325,9 +325,6 @@ "introInvitation": { "properties": { "groupConnReq": {"ref": "connReqUri"} - }, - "optionalProperties": { - "directConnReq": {"ref": "connReqUri"} } }, "groupMemberRole": { diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 304aa15500..4ff32429b9 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -774,7 +774,7 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag hostConnId <- withStore $ \db -> do liftIO $ setConnConnReqInv db user connId cReq getHostConnId db user groupId - sendXGrpMemInv hostConnId Nothing XGrpMemIntroCont {groupId, groupMemberId, memberId, groupConnReq} + sendXGrpMemInv hostConnId XGrpMemIntroCont {groupId, groupMemberId, memberId, groupConnReq} _ -> throwChatError $ CECommandError "unexpected cmdFunction" CRContactUri _ _ -> throwChatError $ CECommandError "unexpected ConnectionRequestUri type" CONF confId _pqSupport _ connInfo -> do @@ -3304,10 +3304,10 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag withAgent $ \a -> createConnectionAsync a (aCorrId cmdId) connId (chatHasNtfs chatSettings) SCMInvitation CR.IKPQOff True subMode _ -> messageError "x.grp.mem.intro can be only sent by host member" - sendXGrpMemInv :: Int64 -> Maybe ConnReqInvitation -> XGrpMemIntroCont -> CM () - sendXGrpMemInv hostConnId directConnReq XGrpMemIntroCont {groupId, groupMemberId, memberId, groupConnReq} = do + sendXGrpMemInv :: Int64 -> XGrpMemIntroCont -> CM () + sendXGrpMemInv hostConnId XGrpMemIntroCont {groupId, groupMemberId, memberId, groupConnReq} = do hostConn <- withStore $ \db -> getConnectionById db cxt user hostConnId - let msg = XGrpMemInv memberId IntroInvitation {groupConnReq, directConnReq} + let msg = XGrpMemInv memberId IntroInvitation {groupConnReq} void $ sendDirectMemberMessage hostConn msg groupId withStore' $ \db -> updateGroupMemberStatusById db userId groupMemberId GSMemIntroInvited @@ -3321,7 +3321,7 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag _ -> messageError "x.grp.mem.inv can be only sent by invitee member" xGrpMemFwd :: GroupInfo -> GroupMember -> MemberInfo -> IntroInvitation -> CM () - xGrpMemFwd gInfo@GroupInfo {membership, chatSettings} m memInfo@(MemberInfo memId memRole memChatVRange _ _) IntroInvitation {groupConnReq, directConnReq} = do + xGrpMemFwd gInfo@GroupInfo {membership, chatSettings} m memInfo@(MemberInfo memId memRole memChatVRange _ _) IntroInvitation {groupConnReq} = do let GroupMember {memberId = membershipMemId} = membership checkHostRole m memRole toMember <- withStore $ \db -> do @@ -3341,20 +3341,16 @@ processAgentMessageConn cxt user@User {userId} entity gks_ corrId agentConnId ag liftIO $ updateGroupMemberStatus db userId toMember newMemberStatus pure toMember subMode <- chatReadVar subscriptionMode - -- [incognito] send membership incognito profile, create direct connection as incognito + -- [incognito] send membership incognito profile membershipProfile <- presentUserBadge user (incognitoMembershipProfile gInfo) $ redactedMemberProfile gInfo membership $ fromLocalProfile $ memberProfile membership dm <- encodeConnInfo $ XGrpMemInfo membershipMemId membershipProfile -- [async agent commands] no continuation needed, but commands should be asynchronous for stability let enableNtfsGrp = chatHasNtfs chatSettings groupConnIds@(gCmdId, gAcId) <- prepareAgentJoin user Nothing enableNtfsGrp groupConnReq - directConnIds <- mapM (prepareAgentJoin user Nothing True) directConnReq - let customUserProfileId = localProfileId <$> incognitoMembershipProfile gInfo - mcvr = maybe chatInitialVRange fromChatVRange memChatVRange + let mcvr = maybe chatInitialVRange fromChatVRange memChatVRange chatV = vr cxt `peerConnChatVersion` mcvr - withStore' $ \db -> createIntroToMemberContact db user m toMember chatV mcvr groupConnIds directConnIds customUserProfileId subMode + withStore' $ \db -> createIntroToMemberContact db user m toMember chatV mcvr groupConnIds subMode joinAgentConnectionAsync gCmdId False gAcId enableNtfsGrp groupConnReq dm subMode - forM_ ((,) <$> directConnIds <*> directConnReq) $ \((dCmdId, dAcId), dcr) -> - joinAgentConnectionAsync dCmdId False dAcId True dcr dm subMode -- rollback defense (channels): apply an owner-signed role/removal only at a version >= the persisted -- roster_version (not the batch-constant gInfo, which a relay can stale by reordering events in one diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index 66a5dc7783..a376ee7ca5 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -2645,42 +2645,12 @@ createIntroReMemberConn liftIO $ setCommandConnId db user groupCmdId groupConnId pure (reMember :: GroupMember) {activeConn = Just conn} -createIntroToMemberContact :: DB.Connection -> User -> GroupMember -> GroupMember -> VersionChat -> VersionRangeChat -> (CommandId, ConnId) -> Maybe (CommandId, ConnId) -> Maybe ProfileId -> SubscriptionMode -> IO () -createIntroToMemberContact db user@User {userId} GroupMember {memberContactId = viaContactId, activeConn} _to@GroupMember {groupMemberId, localDisplayName} chatV mcvr (groupCmdId, groupAgentConnId) directConnIds customUserProfileId subMode = do +createIntroToMemberContact :: DB.Connection -> User -> GroupMember -> GroupMember -> VersionChat -> VersionRangeChat -> (CommandId, ConnId) -> SubscriptionMode -> IO () +createIntroToMemberContact db user@User {userId} GroupMember {memberContactId = viaContactId, activeConn} _to@GroupMember {groupMemberId} chatV mcvr (groupCmdId, groupAgentConnId) subMode = do let cLevel = 1 + maybe 0 (\Connection {connLevel} -> connLevel) activeConn currentTs <- getCurrentTime Connection {connId = groupConnId} <- createMemberConnection_ db userId groupMemberId groupAgentConnId chatV mcvr viaContactId cLevel currentTs subMode setCommandConnId db user groupCmdId groupConnId - forM_ directConnIds $ \(directCmdId, directAgentConnId) -> do - Connection {connId = directConnId} <- createConnection_ db userId ConnContact Nothing directAgentConnId ConnNew chatV mcvr viaContactId Nothing customUserProfileId cLevel currentTs subMode PQSupportOff - setCommandConnId db user directCmdId directConnId - contactId <- createMemberContact_ directConnId currentTs - updateMember_ contactId currentTs - where - createMemberContact_ :: Int64 -> UTCTime -> IO Int64 - createMemberContact_ connId ts = do - DB.execute - db - [sql| - INSERT INTO contacts (contact_profile_id local_display_name, user_id, created_at, updated_at, chat_ts) - SELECT contact_profile_id, ?, ?, ?, ?, ? - FROM group_members - WHERE group_member_id = ? - |] - (localDisplayName, userId, ts, ts, ts, groupMemberId) - contactId <- insertedRowId db - DB.execute db "UPDATE connections SET contact_id = ?, updated_at = ? WHERE connection_id = ?" (contactId, ts, connId) - pure contactId - updateMember_ :: Int64 -> UTCTime -> IO () - updateMember_ contactId ts = - DB.execute - db - [sql| - UPDATE group_members - SET contact_id = ?, updated_at = ? - WHERE group_member_id = ? - |] - (contactId, ts, groupMemberId) createMemberConnection_ :: DB.Connection -> UserId -> Int64 -> ConnId -> VersionChat -> VersionRangeChat -> Maybe Int64 -> Int -> UTCTime -> SubscriptionMode -> IO Connection createMemberConnection_ db userId groupMemberId agentConnId chatV peerChatVRange viaContact connLevel currentTs subMode = diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index ce5879538b..cea169a4a4 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -1085,8 +1085,7 @@ data MemberIdRole = MemberIdRole deriving (Eq, Show) data IntroInvitation = IntroInvitation - { groupConnReq :: ConnReqInvitation, - directConnReq :: Maybe ConnReqInvitation + { groupConnReq :: ConnReqInvitation } deriving (Eq, Show) diff --git a/src/Simplex/Chat/protocol.md b/src/Simplex/Chat/protocol.md index 33161a45a7..06b34d92eb 100644 --- a/src/Simplex/Chat/protocol.md +++ b/src/Simplex/Chat/protocol.md @@ -197,8 +197,7 @@ Events: { "memberId": "", "memberIntro": { - "groupConnReq": "", - "directConnReq": "" + "groupConnReq": "" } } @@ -214,8 +213,7 @@ Events: }, }, "memberIntro": { - "groupConnReq": "", - "directConnReq": "" + "groupConnReq": "" } } diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index e341a210a7..2d9842e9ee 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -369,17 +369,11 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"9\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberRestrictions\":{\"restriction\":\"blocked\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile, memberKey = Nothing} (Just MemberRestrictions {restriction = MRSBlocked}) it "x.grp.mem.inv" $ - "{\"v\":\"9\",\"event\":\"x.grp.mem.inv\",\"params\":{\"memberId\":\"AQIDBA==\",\"memberIntro\":{\"directConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"}}}" - #==# XGrpMemInv (MemberId "\1\2\3\4") IntroInvitation {groupConnReq = testConnReq, directConnReq = Just testConnReq} - it "x.grp.mem.inv w/t directConnReq" $ "{\"v\":\"9\",\"event\":\"x.grp.mem.inv\",\"params\":{\"memberId\":\"AQIDBA==\",\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"}}}" - #==# XGrpMemInv (MemberId "\1\2\3\4") IntroInvitation {groupConnReq = testConnReq, directConnReq = Nothing} - it "x.grp.mem.fwd" $ - "{\"v\":\"9\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"directConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" - #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile, memberKey = Nothing} IntroInvitation {groupConnReq = testConnReq, directConnReq = Just testConnReq} - it "x.grp.mem.fwd with member chat version range and w/t directConnReq" $ + #==# XGrpMemInv (MemberId "\1\2\3\4") IntroInvitation {groupConnReq = testConnReq} + it "x.grp.mem.fwd with member chat version range" $ "{\"v\":\"9\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-4%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"9-21\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" - #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile, memberKey = Nothing} IntroInvitation {groupConnReq = testConnReq, directConnReq = Nothing} + #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile, memberKey = Nothing} IntroInvitation {groupConnReq = testConnReq} it "x.grp.mem.info" $ "{\"v\":\"9\",\"event\":\"x.grp.mem.info\",\"params\":{\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}" #==# XGrpMemInfo (MemberId "\1\2\3\4") testProfile From f924d233e45623028e2aaabc8eb5855bd338b0ae Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 9 Oct 2026 07:48:04 +0100 Subject: [PATCH 8/8] core: fix encoding for name proof (#7672) Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- src/Simplex/Chat/Badges.hs | 8 +++++++- tests/BadgeTests.hs | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Simplex/Chat/Badges.hs b/src/Simplex/Chat/Badges.hs index 62683788d5..f34ba8ef93 100644 --- a/src/Simplex/Chat/Badges.hs +++ b/src/Simplex/Chat/Badges.hs @@ -295,7 +295,13 @@ data ProofPresHeader | PHFileDescr {chatBinding :: ByteString, fileSize :: Int64, descrHash :: ByteString, fileExpires :: Maybe UTCTime} | PHUnknown Char ByteString deriving (Eq, Show) - deriving (ToJSON, FromJSON) via (StrJSON "ProofPresHeader" ProofPresHeader) + +instance ToJSON ProofPresHeader where + toJSON = toJSON . BBSPresHeader . strEncode + toEncoding = toEncoding . BBSPresHeader . strEncode + +instance FromJSON ProofPresHeader where + parseJSON v = parseJSON v >>= \(BBSPresHeader ph) -> either fail pure $ strDecode ph instance StrEncoding ProofPresHeader where strEncode = \case diff --git a/tests/BadgeTests.hs b/tests/BadgeTests.hs index bd8f62d3fd..ced51a5bbf 100644 --- a/tests/BadgeTests.hs +++ b/tests/BadgeTests.hs @@ -51,6 +51,7 @@ badgeTests = do it "should accept unknown badge types" testUnknownBadgeType it "credential serializes to a paste-able token and back" testCredentialSerialization it "presentation headers encode and decode" testPresHeaderEncoding + it "presentation headers with binary bytes round-trip through JSON" testPresHeaderJSON it "should reject a proof presented under another chat binding" testOtherChatBinding describe "redemption codes" $ do it "a generated code reads back" testCodeRoundTrip @@ -209,6 +210,21 @@ testPresHeaderEncoding = PHUnknown 'Z' "payload" ] +testPresHeaderJSON :: IO () +testPresHeaderJSON = + mapM_ + ( \ph -> do + J.eitherDecode (J.encode ph) `shouldBe` Right ph + J.toJSON ph `shouldBe` J.toJSON (BBSPresHeader $ strEncode ph) + ) + [ PHChat binaryBytes, + PHFileInv {chatBinding = binaryBytes, fileSize = 139737}, + PHFileDescr {chatBinding = binaryBytes, fileSize = 139737, descrHash = binaryBytes, fileExpires = Just futureTime}, + PHUnknown 'Z' binaryBytes + ] + where + binaryBytes = "\0\1\31\34\92\127\128\195\255" + testOtherChatBinding :: IO () testOtherChatBinding = do let ph = PHFileInv {chatBinding = aliceBinding, fileSize = 139737}