When the device is offline the widget fails to log in into the sdk and throws a LoginException not handled before during calendar colors update attempt. This was preventing the cache fallback.
- Remove legacy plan selector
- Add new business plan selector
- Update personal plan selector for discounts, promotions, referrals
- Show discount percentage on iOS for introductory offer
- Update personal plan selector to use new colors
- Refactor / reorganize util classes
- Refactor plan selector elements into reusable components
- Fix paywall behaviour of the email import
Co-authored-by: toj <toj@tutao.de>
Co-authored-by: yoy <yoy@tutao.de>
Co-authored-by: arm <arm@tutao.de>
When adding a guest to an event that already had guests, creating the calendar
invitation draft on mobile could throw an exception.
The issue occurred because each draft email attached an .ics file by creating
a temp file, uploading it, and then deleting it. Multiple drafts ran in
parallel, causing two drafts to attempt deleting the same file — the second one
always failing.
This commit fixes the problem by deferring file deletion until after the promise
completes and ensuring these operations run sequentially (invite, cancellation
and update of an event).
Co-authored-by: Murilo Pereira <34790144+murilopereirame@users.noreply.github.com>
Some providers require that we provide a valid User-Agent to
be able to fetch ics content. This commit injects the current
User-Agent from the WebView in the fetch request to solve this
problem.
Also fix tap on event by correctly assigning EventRow clickable modifier
Co-authored-by: Murilo Pereira <34790144+murilopereirame@users.noreply.github.com>
Changes the event iteration filtering out if there is any date before today at midnight;
Also fixes the day/event/card tap that was opening a wrong day depending on users timezone.
Co-authored-by: Murilo Pereira <34790144+murilopereirame@users.noreply.github.com>
Workaround Column limitations of 10 items and show all events of a day sorted by starting time.
Correctly handles tap action.
Increase refresh frequency to 1hr
Co-authored-by: Murilo Pereira <34790144+murilopereirame@users.noreply.github.com>
This commit fixes events from other days not appearing and
also ensures that the mapping is done using device's local
timezone to avoid showing events on the wrong day.
Co-authored-by: and <and@tutao.de>
This commit modifies the list-unsubscribe flow for unsubscription from
newsletters, with the following scenarios:
- Link with POST: The mail has a link and a List-Unsubscribe-Post header
to allow one-click unsubscribe. In that case, we send the POST request
from the client for the Desktop, iOS, and Android app. For the web app,
we send the link to the server and do a ListUnsubscribeService request.
- Link with GET: The mail has a link but does not allow one-click
unsubscribe. In this case, we show a dialog which has the option to open
the link in the browser.
- Link with mailto: The mail does not have a http link in the
list-unsubscribe header, but it has a mailto link for unsubscription.
In this case, we show a dialog which has the option to open a new mail
dialog which uses the mailto link.
Co-authored-by: das <das@tutao.de>
Co-authored-by: jomapp <17314077+jomapp@users.noreply.github.com>
Co-authored-by: sug <sug@tutao.de>
Co-authored-by: kib <104761667+kibibytium@users.noreply.github.com>
Implement suspension handler on Android so that we can have a shared
suspension state.
Switch to downloading missed notification async so that it can be
used with suspension handler.
#9613
Co-authored-by: ivk <ivk@tutao.de>
If the user disables biometrics on their phone but the app’s
`appLockMethod` is still set to biometrics, login attempts result in a
`CredentialAuthenticationException`. This happens because the app still
tries to use biometrics, which are no longer available.
Fixed by detecting `BiometricAuthenticationError` which clear stored
credentials and setting appLockMethod to None to allow fallback
authentication.
Close#9064
The widget configuration activity was failing when encountering color strings
with only three characters (e.g., shorthand hex codes like #FFF).
This was due to the absence of a proper color parsing function.
This commit updates the config activity to use parseColor,
ensuring consistent and reliable color handling.
This commit address:
- All day events with wrong times
- Showing all day events at wrong day
- Fixes event generation skipping events with week start rule
Co-authored-by: and <and@tutao.de>