Red Moon

Blue light may suppress the production of melatonin, the sleep hormone. Red Moon filters out blue light and dims your screen below the normal minimum, so you can use your phone comfortably at night.

  • Schedule Red Moon to run from sunset to sunrise, or at custom times.
  • Use the default color profiles, or set custom color, intensity, and dim levels.
  • Automatically pause in apps secured against overlays, or those you choose.
  • Quickly start, stop, and switch profiles via notification, tile (Android 7.0+), or widget.

Do your part — participate in the community

Communities keep software projects alive. Without them, projects usually fade
into obscurity when the primary developer loses interest or becomes busy in
other parts of their life. That's where you come in! You can:

  • Read through the [issues] and give a ? to the ones you care about most.
  • Open [new issues] with feedback, feature requests, or bug reports.
  • Help translate using [Weblate].

Screenshots & translation stats

68747470733a2f2f686f737465642e7765626c6174652e6f72672f776964676574732f7265642d6d6f6f6e2f656e2f737472696e67732f6d756c74692d6175746f2e737667

Screenshots are slightly out of date.

6

7

2

1

Development

Building

To build the app on GNU+Linux, clone the repository, then, from the root directory, run

./gradlew build

To install the app on a connected device or running emulator, run

./gradlew installFdroidDebug or ./gradlew installPlaystoreDebug

Pull requests

  • We're happy to answer questions if you reach out via an issue, the chat room(s), or email.
  • If your change makes the UI more complicated, we suggest checking if we're
    interested before you implement it.
  • Please keep code and translations in separate PRs.

Style

Prioritize legibility over dogmatism. That said, consistency is nice, so
here's a short list of what I've been doing.

  • 100 characters per line; 80 if you can.
  • Indent 4 spaces, or 8 spaces if the previous line ends with =.
  • CONSTANTS and ENUMS use all caps, variableNames use camelCase.
  • Form suggests function: Group and align similar actions, and don't align dissimmilar ones, even if you could.
  • Good comments explain why something is done; if you find yourself describing what the code does, consider:
    • Refactoring into smaller functions with descriptive names
    • Converting comments to logs. Code that requires comments probably also requires good logs to debug.
  • Always use curly braces with if (except short val/var one-liners: val x = if (a) b else c)

GitHub