FairEmail stopping development after Google falsely flags app as spyware
I just commented on the reddit post about this but I&#x27;ll bring it in here too:<p>The app implementation is out of touch with modern Google Play privacy requirements and APIs.<p>I read through his code, starting with the Main Activity: <a href="https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;master&#x2F;app&#x2F;src&#x2F;main&#x2F;java&#x2F;eu&#x2F;faircode&#x2F;email&#x2F;ActivityMain.java" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;master&#x2F;app&#x2F;src&#x2F;main&#x2F;j...</a><p>1. He&#x27;s using <i>ancient</i> APIs. All written in Java with Activities instead of Kotlin with a single Activity and many Fragments. There are some fragments but it&#x27;s definitely an old writing style<p>2. He&#x27;s using Tasks for multithreading&#x2F;event handling<p>3. Using Handlers &amp; runnables is a terrible idea and intrinsically fragile<p>4. The way he&#x27;s handling synchro (persistent foreground service) is _explicitly something Google is targeting for battery issues_<p>5. This code is entirely unmaintainable. He&#x27;s got a 3k line service file here: <a href="https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;maser&#x2F;app&#x2F;src&#x2F;main&#x2F;java&#x2F;eu&#x2F;faircode&#x2F;email&#x2F;ServiceSynchronize.java" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;maser&#x2F;app&#x2F;src&#x2F;main&#x2F;ja...</a>, nested deeply with multiple different handlers running.<p>I&#x27;m not even going to discuss the fact that he has Logging statements peppered throughout the code etc.<p>This app looks like a 5+ year old code base, not something persistently maintained.<p>He also does not appear to use any modern Android APIs that Google requires, despite declaring the following restricted permissions:<p>1. READ_CONTACTS
2. READ_EXTERNAL_STORAGE<p>In fact I see him explicitly calling deprecated methods that Google has declared off limits: Line 474 of <a href="https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;master&#x2F;app&#x2F;src&#x2F;main&#x2F;java&#x2F;eu&#x2F;faircode&#x2F;email&#x2F;FragmentSetup.java" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;M66B&#x2F;FairEmail&#x2F;blob&#x2F;master&#x2F;app&#x2F;src&#x2F;main&#x2F;j...</a> `requestPermissions` is an illegal call, which he has documented as throwing an exception that he can&#x27;t figure out.<p>That&#x27;s absolutely a smoking gun and potentially the reason Google would ban him. ActivityResultLauncher is required for permissions grants.<p>My summary of this is: This is what bitrot looks like and what happens when you don&#x27;t manage app scope to handle tech debt. It got too big to maintain.