Farhan App

Background:

No mater where i look there is always someone busy with their phone, in fact i myself spent a lot of time on social media apps on my phone everyday.

I came across the idea of apps that help users brake phone addiction when i was searching for a solution to my addiction and i ended up downloading and using some of these apps, each app had its own approach to help the user decrease their screen time and some of them where more effective than others.

Problem:

  • Installing multiple apps to use the tools i need.
  • Most alternatives are closed source.
  • Most alternatives are paid or have paid features.
  • Almost all apps connect to the internet & since these apps get access to sensitive permissions you never know if your data is sent to some server on the cloud.
  • Most alternatives only offer setting a time limit you can spend on these apps each day and you get locked out of the app if the daily limit is reached.

Solution:

Apps and services on your phone use manipulative methods that exploit the brain reward system to keep the user using them for as long as possible.

Farhan mitigates these methods by:

  • Filtering notifications and storing them within the application environment, user can view filtered notifications anytime form within the app.
  • Stripping the screen of colors that act as a visual factor to grab the user’s attention.
  • Alert the user in case they fall into a vicious circle of continuous scrolling for a specified period.

And most importantly its:

  • Free and open source.
  • It does not have any permissions to access the Internet.

Challenges


Single Accessibility Service in multiple Modules

Farhan is modularized by feature meaning that every feature has its own module that cannot access or be accessed by other features, this has so many benefits and makes the project easily scalable.

However when it comes to Accessibility Service in android users have to enable these services manually from the accessibility screen in system settings

Since Farhan needs accessibility service in more than one feature this means i had to create multiple Accessibility Services and users will have to enable an Accessibility Service for every feature this might confuse a lot of users and end up creating a bad UX.

Accessibility Settings screen in Android.

To maintain a good UX i created a single accessibility service in the app module and inject it with required use cases from other modules.

Simplify granting Secure Settings permission

Farhan needs Secure Settings permission to grayscale the screen for the user, granting this permission can be a complicated process involving a PC and executing some commands via ADB.

a much simpler and faster solution was implemented that uses root to execute the required commands on behalf of the user, if the user have a rooted device Farhan will detect that provide the user with a button to grant the permission once root access is granted.

App rejection in Google Play

Farhan was rejected form the Play Store multiple times because the prominent disclosure design was not following all of the strict rules that Google Play store enforces on all apps that have an accessibility service.

this was fixed by replacing the buttons on the screen with a more clear actions that the user can take like below

Tech Stack


  • Kotlin
  • Jetpack Compose
  • Multi-Module architecture
  • Clean architecture
  • Dagger Hilt
  • Unit Tests
  • End to End Tests
  • Room database
  • Git
  • Accessibility API