# Code Style Guidelines for Kiwix-Android

Our code style guidelines is based on the [Square's Android Style Guide](https://github.com/square/java-code-styles/blob/master/configs/codestyles/SquareAndroid.xml).

Download the xml file and [import it](https://user-images.githubusercontent.com/1624385/37678878-9b61b562-2c7f-11e8-9733-d1d593f0aa67.png) in IntelliJ/Android Studio.

### For XML files

Kiwix follows `2 spaces` for the `Indent` and `4 spaces` for the `Continuous Indent` values. (Same as that in Square's Style Guide) You can update these values using following steps:

- Go to **Settings** -> **Editor** -> **Code Style** -> **XML**
- Update the respective values under the **Tabs and Indents** tab

After changing the values, one can simply select the files to indent, `Right click` -> `Reformat Code` -> Check `Rearrange entries` -> `OK`.

### Only a few extra rules

- Line length is 120 characters
- FIXME must not be committed in the repository use TODO instead. FIXME can be used in your own local repository only.

You can run a checkstyle with most rules via a gradle command:

```
$ ./gradlew checkstyle
```

It generates a HTML report in `build/reports/checkstyle/checkstyle.html`.

Try to remove as much warnings as possible, It's not completely possible to remove all the warnings, but over a period of time, we should try to make it as complete as possible.

### Some **DONT's**

- Don't use Hungarian Notation like `mContext` `mCount` etc
- Don't use underscores in variable names
- All constants should be CAPS. e.g `MINIMUM_TIMEOUT_ERROR_EXTERNAL`
- Always use `Locale.ENGLISH` when using `String.format()` unless the format itself is locale dependent e.g. `String query = String.format(Locale.ENGLISH,...`
- Never concat `null` with `""` (Empty String). It will become `"null"` e.g. `String.equals("" + null, "null") == TRUE`
