# PrivacyCentralApp An app to let you control and protect your privacy. # Features The following features are currently part of PrivacyCentral app. 1. Centralized overview dashboard. 2. Fake location. 3. Hiding IP address. 4. Manage granular permissions. 5. Control trackers across apps. # Technologies - Kotlin as main language - Kotlin coroutines and flow for asynchronous code - AndroidX (core-ktx, fragment-ktx, and lifecycle etc.) - Google Material Design component for UI elements - Timber for logging - Room for database (may use datastore too) - Hilt for DI - MapBox for map support - LeakCanary for keeping an eye on memory leaks. - Junit for unit testing - Espresso for integration testing. - # Flavours This app comes in two flavours, one for /e/OS and second one for other android (where app doesn't have system access). For more information refer to [Architecture Guide](DEVELOPMENT.md) # Testing Need to write test and add code coverage. # Development ## Setup You can use any latest stable version of android studio to be able to build this app. ## Supported Versions - Minimum SDK: 24 (Android N) - Compile SDK: 30 (Android R) - Target SDK: 30 (Android R) ## API Keys This project uses [Mapbox](https://docs.mapbox.com/android/maps/guides/install/) sdk for displaying maps. To download and use the mapbox sdk, you need to supply API key and secret and set them as follows: ### For local build You can set them in local.properties ``` MAPBOX_KEY= MAPBOX_SECRET_KEY= ``` **IMP: Never add this file to version control.** ### For CI build When building in CI environment, we don't have local.properties file. So the following environment variables must be set: ``` export MAPBOX_KEY= export MAPBOX_SECRET_KEY= ``` ## Code Style and Quality This project uses [ktlint](https://github.com/pinterest/ktlint), provided via the [spotless](https://github.com/diffplug/spotless) gradle plugin. To maintain the same code style, all the codestyle configuration has been bundled into the project. To check for any codestyle related error, `./gradlew spotlessCheck`. Use `./gradlew spotlessApply` to autoformat in order to fix any code quality related issues. ### Setting up pre-commit hooks To strictly enforce the code quality, this project has a pre-commit hook which is triggered everytime before you commit any changes (only applies to *.kt, *.gradle, *.md and *.gitignore). You must setup the pre-commit hook before doing any changes to the project. For that, this project has a script which can executed as follows: ```bash hooks/pre-commit ``` ## Build If you'd like to build PrivacyCentral locally, you should be able to just clone and build with no issues. For building from CLI, you can execute this command: ```bash ./gradlew build ``` ## How to use PrivacyCentral apk You can build the apk locally by using above instructions or you can download the latest stable apk from `master` branch pipeline. ### To run apk on /e/OS devices PrivacyCentral needs to be installed as system app and whitelisting in order to grant some system specific permissions. Follow these steps to make it work properly on /e/OS 1. Sign the apk with platform certificate. You can use this command to do that -> `apksigner sign --key --cert --out PrivacyCentral.apk ` 2. Install apk as system app and push permissions whitelist with following commands: ```bash adb root && adb remount adb shell mkdir system/priv-app/PrivacyCentral adb push PrivacyCentral.apk system/priv-app/PrivacyCentral ``` 3. To push permissions whitelist, you can use the following command. It requires the whitelisting [privapp-permissions-foundation.e.privacycentralapp.xml](privapp-permissions-foundation.e.privacycentralapp.xml) file that can be found in the project repository. ```bash adb push privapp-permissions-foundation.e.privacycentralapp.xml /system/etc/permissions/ # Now reboot the device adb reboot ``` ### To run apk on stock android devices You can simply install the apk. Keep in that mind all features won't be available on stock android devices. > Volla!!!, PrivacyCentral is installed successfully in your device. # Distribution This project can be distributed as prebuilt apk with /e/OS or it can be published on other app stores for non /e/OS devices. # For developers and contributers Please refer to [Development Guide](DEVELOPMENT.md) for detailed instructions about project structure, architecture, design patterns and testing guide. # License ``` Copyright (C) 2021 E FOUNDATION This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. ```