I didn’t change any settings and had this enabled.
I mean remote images (that can be used as trackers) not normal trackers. Those are still blocked.
Oh, my apologies. Remote images are indeed loaded by default now. I believe they made this to align with the web client, not sure if all client block trackers the same way though.
They sould have at least warned people. And no reason for apologies, I wasn’t clear.
1 Like
Just tested and sent a link on an email. Completely mess up the link and adds thing like div after the original link (not visible on paste, but send then click on it and you will see).
Rushed update it seems. Do they not know what alphas and beta are for ?
Quantum
September 27, 2025, 1:04am
26
Just updated and damn. It’s really good. Finally a Proton app that feels fully modern and smooth. Also the design language is pretty clearly a clone of the GMAIL app….and that’s a good thing.
Well done Proton!
1 Like
Call me crazy, but I swear I was able to swipe between emails on the iOS app before this update was rolled out? Now it is an option in the settings and when you try and turn it on it says something like “feature coming soon…”
Previously, I wasn’t able to utilise the AOSP client:
opened 11:59AM - 15 Jan 25 UTC
#### Causes
- 1. Switched to a filter view for a specific tag.
1. Switched t… o a different application.
1. Switched back to PM.
1. Swiped downward to refresh the mailbox.
- Switched to archive.
- Applied tags to a message.
All of these common actions have caused this.
#### Environment
1. #### Application
Utilising:
~~~sh
#!/usr/bin/env sh
adb shell dumpsys package 'ch.protonmail.android' | grep -e 'versionName'
~~~
...I've confirmed that this reproduces on the undermentioned versions:
`versionName` | `versionCode`
-|-
4.5.1 | 10709
4.6.0 |
4.10.1 |
4.15.0 | 11782
It's from [`play.google.com/store/apps/details?id=ch.protonmail.android&hl=en_GB`](https://play.google.com/store/apps/details?id=ch.protonmail.android&hl=en_GB#:~:text=Icon%20image-,Proton%20Mail,-:%20Encrypted%20Email).
1. #### Device
[Fairphone 5](https://www.wikidata.org/w/index.php?title=Q122070914&oldid=2278534168#Statements:~:text=Random%20Lexeme-,Fairphone%205,-(Q122070914))
1. #### OS
> ~~~YAML
> [ro.build.display.id]: [FP5.UT2H.B.088.20241122]
> ~~~
#### Reproductions
As caught by `com.f0x1d.logfox/.presentation.ui.activity.MainActivity` of [`f-droid.org/repo/com.f0x1d.logfox_66.apk`](https://f-droid.org/repo/com.f0x1d.logfox_66.apk):
1. #### Crash Trace
<blockQuote>
~~~YAML
FATAL EXCEPTION: main
Process: ch.protonmail.android, PID: 11703
java.lang.IllegalArgumentException: Key "9" was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(Unknown Source:154)
at ch.protonmail.android.maillabel.presentation.ui.LabelsListKt$$ExternalSyntheticLambda0.invoke(Unknown Source:457)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(Unknown Source:71)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.foundation.layout.WrapContentNode.measure-3p2s80s(Unknown Source:56)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.OffsetKt.measure(Unknown Source:94)
at androidx.compose.foundation.layout.RowMeasurePolicy.measure-3p2s80s(Unknown Source:45)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Unknown Source:96)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.compose.foundation.layout.PaddingNode.measure-3p2s80s(Unknown Source:32)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.OffsetKt.measure(Unknown Source:94)
at androidx.compose.foundation.layout.ColumnMeasurePolicy.measure-3p2s80s(Unknown Source:45)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.foundation.layout.PaddingNode.measure-3p2s80s(Unknown Source:32)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.OffsetKt.measure(Unknown Source:94)
at androidx.compose.foundation.layout.RowMeasurePolicy.measure-3p2s80s(Unknown Source:45)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Unknown Source:96)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.compose.foundation.layout.PaddingNode.measure-3p2s80s(Unknown Source:32)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.OffsetKt.measure(Unknown Source:94)
at androidx.compose.foundation.layout.RowMeasurePolicy.measure-3p2s80s(Unknown Source:45)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.foundation.layout.OffsetPxNode.measure-3p2s80s(Unknown Source:0)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.BoxMeasurePolicy.measure-3p2s80s(Unknown Source:256)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.BoxMeasurePolicy.measure-3p2s80s(Unknown Source:84)
at androidx.paging.HintHandler$forceSetHint$2.invoke(Unknown Source:2006)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(Unknown Source:71)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.layout.BoxMeasurePolicy.measure-3p2s80s(Unknown Source:84)
at androidx.paging.HintHandler$forceSetHint$2.invoke(Unknown Source:2006)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(Unknown Source:71)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:55)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(Unknown Source:92)
at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(Unknown Source:55)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1.getAndMeasure-0kLqBqw(Unknown Source:20)
at androidx.compose.material3.CardKt$Card$4.invoke(Unknown Source:780)
at androidx.paging.HintHandler$forceSetHint$2.invoke(Unknown Source:1814)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(Unknown Source:71)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(Unknown Source:37)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(Unknown Source:0)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Unknown Source:96)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(Unknown Source:10)
at androidx.paging.PagingDataPresenter$1.invoke(Unknown Source:544)
at androidx.compose.runtime.snapshots.SnapshotIdSetKt.observe(Unknown Source:113)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(Unknown Source:51)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(Unknown Source:131)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:2)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(Unknown Source:130)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(Unknown Source:16)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(Unknown Source:2)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout-0kLqBqw(Unknown Source:105)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout-0kLqBqw(Unknown Source:7)
at androidx.compose.ui.node.LayoutNode.forceRemeasure(Unknown Source:38)
at androidx.collection.ObjectList$toString$1.invoke(Unknown Source:1502)
at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy(Unknown Source:16)
at androidx.compose.foundation.gestures.ScrollingLogic.access$performScroll-3eAAhYA(Unknown Source:64)
at androidx.compose.foundation.AndroidEdgeEffectOverscrollEffect.applyToScroll-Rhakbz0(Unknown Source:251)
at androidx.compose.animation.core.Transition$animateTo$1$1.invoke(Unknown Source:841)
at androidx.compose.foundation.gestures.DragGestureNode$startListeningForEvents$1$1.invokeSuspend(Unknown Source:58)
at androidx.compose.foundation.gestures.DragGestureNode$startListeningForEvents$1$1.invoke(Unknown Source:12)
at androidx.compose.foundation.gestures.ScrollableNode$drag$2$1.invokeSuspend(Unknown Source:41)
at androidx.compose.foundation.gestures.ScrollableNode$drag$2$1.invoke(Unknown Source:12)
at androidx.compose.foundation.gestures.ScrollingLogic$scroll$2.invokeSuspend(Unknown Source:38)
at androidx.compose.foundation.gestures.ScrollingLogic$scroll$2.invoke(Unknown Source:12)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2$1.invokeSuspend(Unknown Source:43)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2$1.invoke(Unknown Source:12)
at androidx.compose.foundation.MutatorMutex$mutateWith$2.invokeSuspend(Unknown Source:134)
at androidx.compose.foundation.MutatorMutex$mutateWith$2.invoke(Unknown Source:12)
at io.sentry.util.Objects.startUndispatchedOrReturn(Unknown Source:4)
at kotlinx.coroutines.JobKt.coroutineScope(Unknown Source:9)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2.invokeSuspend(Unknown Source:52)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2.invoke(Unknown Source:12)
~~~
</blockQuote>
2. #### ANR
1. #### Demonstration Screencast
[`youtu.be/4xday1LPa0U?si=KJAVwBdFsel5HGWh`](https://youtu.be/4xday1LPa0U?si=KJAVwBdFsel5HGWh)
1. #### Trace
<blockQuote>
~~~YAML
ANR in ch.protonmail.android (ch.protonmail.android/.MainActivity)
PID: 18552
Reason: Input dispatching timed out (768d00b ch.protonmail.android/ch.protonmail.android.MainActivity (server) is not responding. Waited 5001ms for MotionEvent)
Parent: ch.protonmail.android/.MainActivity
ErrorId: 81c67b10-4d02-4ca0-ae48-05878515aeaa
Frozen: false
Load: 4.9 / 2.57 / 2.31
----- Output from /proc/pressure/memory -----
some avg10=1.41 avg60=1.90 avg300=0.69 total=621084137
full avg10=0.21 avg60=0.35 avg300=0.12 total=201570131
----- End output from /proc/pressure/memory -----
----- Output from /proc/pressure/cpu -----
some avg10=19.24 avg60=20.03 avg300=10.61 total=8830630858
----- End output from /proc/pressure/cpu -----
----- Output from /proc/pressure/io -----
some avg10=4.32 avg60=4.93 avg300=1.77 total=2252950051
full avg10=1.05 avg60=1.22 avg300=0.50 total=1428804016
----- End output from /proc/pressure/io -----
CPU usage from 191887ms to -1ms ago (2025-01-15 12:33:31.303 to 2025-01-15 12:36:43.191):
22% 1208/surfaceflinger: 16% user + 6.2% kernel / faults: 1027 minor 63 major
22% 1488/system_server: 12% user + 9.1% kernel / faults: 223566 minor 3428 major
18% 18552/ch.protonmail.android: 13% user + 4.2% kernel / faults: 227043 minor 886 major
10% 23210/com.google.android.googlequicksearchbox:trusted_disable_art_image_:com.google.android.apps.gsa.hot: 7.8% user + 2.9% kernel / faults: 2203 minor 9 major
9.6% 2594/com.android.systemui: 7.2% user + 2.3% kernel / faults: 60714 minor 1902 major
9.4% 1100/vendor.qti.hardware.display.composer-service: 6.3% user + 3.1% kernel / faults: 862 minor 55 major
7.1% 24664/com.f0x1d.logfox: 4.7% user + 2.3% kernel / faults: 93374 minor 1168 major
6.7% 12396/com.google.android.gms.persistent: 4.3% user + 2.4% kernel / faults: 43802 minor 2621 major
4.3% 25025/bitpit.launcher: 2.5% user + 0.7% kernel / faults: 13073 minor 1680 major
2.7% 1059/android.hardware.audio.service: 0.6% user + 2.1% kernel / faults: 35 minor 26 major
28% TOTAL: 15% user + 10% kernel + 0.7% iowait + 1.3% irq + 0.5% softirq
CPU usage from 33ms to 430ms later (2025-01-15 12:36:43.223 to 2025-01-15 12:36:43.620):
117% 1488/system_server: 51% user + 65% kernel / faults: 3626 minor 158 major
45% 1593/Signal Catcher: 28% user + 17% kernel
40% 23660/AnrAuxiliaryTas: 11% user + 28% kernel
8.5% 2460/CachedAppOptimi: 2.8% user + 5.7% kernel
5.7% 1923/android.display: 2.8% user + 2.8% kernel
2.8% 1488/system_server: 0% user + 2.8% kernel
2.8% 1921/android.ui: 2.8% user + 0% kernel
2.8% 2479/InputReader: 0% user + 2.8% kernel
28% 1208/surfaceflinger: 22% user + 5.6% kernel
19% 1208/surfaceflinger: 14% user + 5.6% kernel
8.5% 1361/RenderEngine: 5.6% user + 2.8% kernel
2.8% 1409/TimerDispatch: 2.8% user + 0% kernel
2.8% 1997/binder:1208_4: 2.8% user + 0% kernel
14% 1100/vendor.qti.hardware.display.composer-service: 8.4% user + 5.6% kernel / faults: 6 minor
16% 1364/HwBinder:1100_1: 11% user + 5.6% kernel
17% 18552/ch.protonmail.android: 14% user + 3.5% kernel / faults: 454 minor 41 major
24% 18555/Signal Catcher: 17% user + 7.1% kernel
9.6% 3670/kswapd0:1: 0% user + 9.6% kernel
5.2% 358/crtc_commit:113: 0% user + 5.2% kernel
8.4% 23210/com.google.android.googlequicksearchbox:trusted_disable_art_image_:com.google.android.apps.gsa.hot: 4.2% user + 4.2% kernel / faults: 3 minor
5.2% 23328/soda_process: 4.2% user + 0% kernel
2.5% 1/init: 0% user + 2.5% kernel
5% 1/init: 2.5% user + 2.5% kernel
2.5% 39/rcuog/4: 0% user + 2.5% kernel
2.5% 46/rcuop/5: 0% user + 2.5% kernel
2.5% 58/rcuop/7: 0% user + 2.5% kernel
2.5% 196/kgsl_worker_thr: 0% user + 2.5% kernel
3% 1973/irq/316-goodix_: 0% user + 3% kernel
3.5% 14707/kworker/u16:10-kverityd: 0% user + 3.5% kernel
3.8% 21072/kworker/u16:13-memlat_wq: 0% user + 3.8% kernel
4.1% 22675/com.google.android.apps.photos:mediametadataservice: 0% user + 4.1% kernel / faults: 5 minor 3 major
4.2% 24664/com.f0x1d.logfox: 4.2% user + 0% kernel / faults: 41 minor
4.2% 24704/com.f0x1d.logfox:service: 4.2% user + 0% kernel
4.4% 30244/kworker/u16:9-ufs_clkscaling_0: 0% user + 4.4% kernel
32% TOTAL: 14% user + 14% kernel + 1.6% iowait + 0.9% irq + 0.3% softirq
Completed ANR of ch.protonmail.android in 1912ms, latency 0ms
~~~
</blockQuote>
These occur constantly:

#### Tasks
1. [ ] Wait for [`protonmail.uservoice.com/forums/945460-general-ideas/suggestions/50436528`][bugs] to be implemented, so that this can be filed as a bug via the correct avenue.
[bugs]: https://protonmail.uservoice.com/forums/945460-general-ideas/suggestions/50436528-provide-public-bug-trackers-for-all-projects
However, the new version appears to remediate the constant crashes!