310 Commits

Author SHA1 Message Date
Serdar Ozturk 911860cf55 Cache large message bodies as content Uri via FileProvider
- Persist large bodies into app cache and expose via FileProvider content Uri
    - Keep small bodies inline as Text
    - Apply height restriction style before Text/File branching so both inline and file-backed bodies
      receive identical HTML preparation
    - Fallback to Text if cache write or Uri generation fails
    - Register body_cache in file_paths.xml to support content Uri generation

ET-6187
2026-05-08 14:57:57 +00:00
Serdar Ozturk b751ec59b4 Integrate category view with Rust and domain layers
- Enables fetching category view data from Rust layer.
  - Add category view domain models (CategoryLabel, CategoryViewStatus)
  - Map Rust category data to domain models
  - Extend conversation/message repositories to expose category view
  - Propagate CategoryViewChanged updates

ET-6046
2026-05-05 09:49:10 +01:00
Niccolò Forlini 352d71a702 Render contact groups as single chip in Composer
When seleting a contact group from the suggestions or prefilling the draft recipients, do not add individual contacts from the group but rather the group as a whole.

ET-5846
2026-03-19 12:05:32 +00:00
Niccolò Forlini 8d7f4a6d5c Bump Rust SDK to 0.164.1
NOJIRA
2026-03-11 10:54:30 +00:00
Niccolò Forlini edce018fd3 Bump Rust SDK to 0.164.0
NOJIRA
2026-03-11 10:54:30 +00:00
Stefanija Boshkovska ad0b70c532 Bump Rust lib version to 0.161.21 2026-02-02 08:49:44 +00:00
Stefanija Boshkovska 00067767a0 Add domain auth failed banner
ET-5766
2026-01-29 15:04:11 +01:00
Niccolò Forlini 75f806efe7 Propagate PrivacyInfo to recipients models
ET-5535
2026-01-19 13:34:51 +00:00
Niccolò Forlini c0b12d7cc1 Bump Rust to 0.161.6
NOJIRA
2026-01-19 13:11:27 +00:00
Serdar Ozturk 4554299b8d Sidebar unread counters: Show capped numbers
-  Show empty for null and zero values
  - Show exact count for 1..99 and display 99+ for >= 100

ET-5616
2026-01-06 09:49:18 +00:00
Niccolò Forlini 12f3916e44 Fix opening location from Search mode
ET-5371
2025-12-04 11:28:55 +01:00
Niccolò Forlini bcfd113ce0 Retrieve draft content by using composerContent
The draft wrapper was migrated from using primarily  `body()` to fetch the draft body to retrieve both the head content to decorate the webview and the body to populate composer.

ET-5486
2025-12-03 14:20:53 +00:00
Seren 71c28a0a15 Rename attachments in message to reflect its limitation (10)
ET-5525
2025-12-03 09:54:51 +00:00
Seren 84582936de Fix attachments limited to 10, get attachments from decryptedMessageBody
ET-5525
2025-12-03 09:54:51 +00:00
Stefanija Boshkovska 4a65f95300 Create EntireMessageBodyViewModel
ET-5233
2025-12-01 15:10:12 +01:00
Niccolò Forlini 41fbdbd9ab Do not instantiate observers to resolve message/conversation subject
When displaying the "More" actions bottomsheet, we show the subject at the top of the component. The information is currently retrieved by observing and capturing the first data event emitted by observeMessage/observeConversation, which instantiate a whole watcher and subsequent callbacks.

ET-5458
2025-11-25 09:35:47 +00:00
Niccolò Forlini eea14b5852 Update Rust to 0.158.0
NOJIRA
2025-11-21 15:33:50 +00:00
Stefanija Boshkovska cac3f26d44 Handle the "Load images" click on the "Images failed to load" banner
ET-5026
2025-11-21 15:47:02 +01:00
Stefanija Boshkovska 8be093a783 Show the "images failed to load" banner
This banner should be shown in case the ProxyFailed error is returned when loading images.

ET-5026
2025-11-21 15:11:08 +01:00
Seren 4ea7d42e6d Fix existing tests for enable/ disable selection mode
ET-5377
2025-11-17 08:49:11 +00:00
Serdar Ozturk 398cd9af2b Add Block Sender confirmation dialog
- If the sender is a contact, then the title changes to Block this contact
 - Implemented dialog state and reducer
 - Added view actions for the dialog

ET-5145
2025-11-03 14:36:58 +00:00
Niccolò Forlini 0497aa1595 Update GetOnboardingPlanUpgrades
Ensure that non BF-eligible users are still offered upselling during onboarding

NOJIRA
2025-10-31 15:14:29 +01:00
Niccolò Forlini 253ee344a6 Improve Plan Upgrades mapping
Allow offers to have both intro + BF while keeping the entry points consistent throughout all the flows.

ET-5064
2025-10-31 11:40:45 +00:00
Niccolò Forlini dcfd5cb8c1 Update discount rate and yearly saving UC
ET-5064
2025-10-31 11:40:45 +00:00
Niccolò Forlini 98b182fa9d Add BF2025 use cases for eligibility
Related to:
- IAN enabled
- Get current BF phase
- Is user eligible for BF

ET-5064
2025-10-30 10:34:23 +00:00
Marino Meneghel a73feb7548 Bump rust lib to 0.154.3
NOJIRA
2025-10-28 10:10:12 +01:00
Stefanija Boshkovska 3ab9409742 Add "hiddenMessagesBanner" to Conversation domain model
ET-4991
2025-10-21 17:57:07 +02:00
Niccolò Forlini 95e872dd4f Merge branch 'hotfix/7.0.15'
# Conflicts:
#	.gitlab-ci.yml
#	mail-composer/data/src/main/kotlin/ch/protonmail/android/composer/data/local/RustAttachmentDataSource.kt
#	mail-composer/domain/src/main/kotlin/ch/protonmail/android/mailcomposer/domain/repository/AttachmentRepository.kt
#	mail-composer/presentation/src/main/kotlin/ch/protonmail/android/mailcomposer/presentation/reducer/modifications/effects/ErrorEffectsStateModification.kt
#	mail-mailbox/presentation/src/test/kotlin/ch/protonmail/android/mailmailbox/presentation/MailboxViewModelTest.kt
#	mail-message/data/src/main/kotlin/ch/protonmail/android/mailmessage/data/local/RustMessageDataSourceImpl.kt
2025-10-20 10:38:05 +02:00
Niccolò Forlini 8eea0feba9 Bump Rust to 0.149.13
NOJIRA
2025-10-14 13:02:11 +00:00
Serdar Ozturk 9aa45621e8 Do not present block/unblock sender options for the primary user
- Contact Actions sheet can also be opened when clicked on
TO address field.
 - We should not present block/unblock options for the primary user

ET-4976
2025-10-14 08:47:54 +00:00
Serdar Ozturk daf136e7f1 Update Contact Action UI model
- We need to show different menu item for contacts
and non-contacts
 - Include both block and unblock menu options
 - Updated reducer accordingly
 - Updated samples

ET-4976
2025-10-14 08:47:54 +00:00
Niccolò Forlini d770f809c1 Update Kotlin deps
- Kotlin to 2.2.20
- KSP tot 2.2.20-2.0.3
- kotlinx.datatime to 0.7.1
- kotlinx.serialization to 1.9.0

NOJIRA
2025-10-13 11:24:35 +00:00
Marino Meneghel e4d65f41df Display warning when sending message with expiration to external recipients
ET-4311
2025-10-03 08:59:12 +00:00
Marino Meneghel 2d4e106ca4 Display warning when sending message with expiration to external recipients
ET-4311
2025-09-24 11:27:51 +02:00
Stefanija Boshkovska b6a36b8d39 Show an attachment icon when item has attachments but none are shown in the preview
ET-4500
2025-09-04 13:46:52 +00:00
Serdar Ozturk 39b44778c2 Rust ShowImages has been deprecated
- In order to map remote image and embedded image settings we should be
using hideRemoteImages and hideEmbeddedImages

ET-4479
2025-08-27 09:57:07 +00:00
Stefanija Boshkovska 1bbd31708d Remove "Add contact" and "Block" actions from the ContactActionsBottomSheet
ET-4497
2025-08-26 18:01:29 +00:00
Stefanija Boshkovska 6c29cb404a Show the "Unsubscribe from newsletter" banner
ET-587
2025-08-26 17:34:09 +00:00
Niccolò Forlini bfe856688d Refactor onboarding plan mappings
Moved extension func around, added yearlySaving into the mix.

ET-4366
2025-08-26 08:16:22 +00:00
Niccolò Forlini dd4bdd1138 Add createdAtUtc to User
ET-4366
2025-08-25 16:51:21 +00:00
Marino Meneghel 42196bbdf3 Replacing participant with draft recipient between data and presentation layers
This will enable introducing rust-driven recipients validation as well as
displaying chips for contact groups in the UI.
At this stage, the UI model is unchanged and doesn't map this new data yet.
Validation is also still only performed on UI side.

ET-2160
2025-08-25 07:51:04 +00:00
Yoann Goular d337a3f70b expose usagePercent and maxStorageInGib from User class 2025-08-21 07:41:07 +02:00
Marino Meneghel 5da0c09d63 Add draft mime type to domain and ui models and on state when draft ready
ET-4304
2025-08-21 07:41:06 +02:00
Marino Meneghel 25d330e354 Add rust defined local mime type to Local Draft
ET-4304
2025-08-21 07:41:06 +02:00
Seren 67aa9bfaea UI for snooze message banner
ET-3986
2025-08-13 12:09:39 +00:00
Seren f3c7f43202 Display Snoozed time as orange
ET-1521
2025-08-11 13:57:00 +02:00
Stefanija Boshkovska e410342cbc Bump Rust lib to version 0.120.0
NOJIRA
2025-08-08 11:32:49 +02:00
Stefanija Boshkovska c832d07bc5 Remove OpenInProtonCalendarBanner
ET-3977
2025-08-08 08:21:58 +00:00
Stefanija Boshkovska c5b57f804f Add a field to DecryptedMessageBody that indicates whether the message contains a calendar invite
ET-3977
2025-08-08 08:21:58 +00:00
Niccolò Forlini 0326733cfd Add Upsell FF
ET-4103
2025-08-07 11:53:00 +00:00