SolarGamma Privacy Policy
Effective date: 16 October 2026
SolarGamma is a blue-light screen filter for Android, developed and published by Eveningside. This policy explains what the app can access, what it stores on your device, and what (if anything) ever leaves it.
The short version: nothing leaves your device unless you send it
SolarGamma collects no personal data, shares nothing with anyone, and works
entirely offline. It does not request Android’s INTERNET permission, so the
operating system will not let it open a network connection at all.
This is enforced rather than promised. Android grants network access only to an
app that declares the INTERNET permission, and the permissions an app declares
are published on its Play Store listing. SolarGamma declares none that would
give it network access.
One thing the app holds can leave, and only if you send it: the crash report, if there is one, which you can email to us from your own email app or copy to the clipboard. The app still cannot transmit it, or anything else.
What the app stores
Everything SolarGamma records lives in the app’s private storage on your own device:
- Your filter settings. Colour temperature, intensity, dimming, schedule times, presets and theme.
- Schedule coordinates. A latitude and longitude, used only to work out sunrise and sunset times, and only if you use the schedule. They come either from numbers you type in or from a foreground location read (see below).
- A local crash report. If the app ever crashes, it writes the error to a file on your device so you can read it. It is never sent automatically, and the app cannot send it. It reaches us only if you send it yourself, by email from your own email app or by copying it into a message.
- Your Pro purchase receipt, if you buy Pro. This is the receipt Google Play signs, kept so the app can check the signature and unlock what you bought. It is never sent anywhere.
Uninstalling the app, or clearing its data from Android’s system settings, deletes all of it.
Location
If you turn on the sunrise and sunset schedule, the app needs coordinates to compute solar times. You can type them in, leave them unset, or tap “Use my location”.
- If you tap “Use my location”, the app reads the device location once, in the foreground, while you are looking at the app.
- The app also reads it by itself when you open it or return to it, if the schedule follows the sun, you have granted location access and the device’s location switch is on, and either no location has been set yet or the one in use came from the device and the location switch has just been turned back on. This is also a single read, made while the app is on screen. Coordinates you typed in are never replaced this way; only you change them.
- The app never requests background location and cannot read your location while it is closed.
- Sunrise and sunset are computed on the device. There is no geocoding service, no weather service and no server involved.
- The nearest-city label shown beside your coordinates comes from a fixed city list bundled inside the app, not from a lookup.
- Your coordinates stay in the app’s private settings and go nowhere else.
The accessibility service
SolarGamma’s recommended filtering method uses Android’s AccessibilityService API. This is the only API that lets an app apply its color filter over system surfaces: the status bar, the notification panel and the lock screen. An ordinary app window is not allowed to cover them, and a filter that stops at the edge of the status bar does not do its job.
The service is configured as narrowly as Android allows:
- It is told which app is in the foreground. One event type
(
typeWindowStateChanged). From each event it reads two things: the package name of the app in front, and the class name of its window, which it uses only to tell an on-screen keyboard apart from the app beneath it. When the service starts it also asks Android for the list of keyboards enabled on the device, for the same reason: a keyboard coming up is not a different app. This supports exactly one feature: your app exclusions list, so the filter can lift itself for apps you choose. Nothing else in the event is read, and none of it is stored. - It cannot read screen content. The service does not declare
canRetrieveWindowContentand never requests window content. - It cannot watch what you type. No key-event flags are declared.
- It cannot take screenshots and cannot perform gestures. Neither capability is declared.
Android tells you what an accessibility service has asked for before you turn it on: the system’s confirmation dialog names the capabilities the service declared, and this one declares only what it needs to observe which app is in front.
There is a plain-language walkthrough of this permission, including the service’s complete configuration file as it ships in the APK, at About the accessibility permission.
Other permissions the app requests
Everything else in the permission list, and the single feature each one serves:
| Permission | What it is for |
|---|---|
SYSTEM_ALERT_WINDOW |
The alternative filtering method, which covers apps but not system surfaces. Used only if you choose that method over the accessibility service. |
WRITE_SETTINGS |
The optional Backlight feature, which sets your screen brightness alongside the filter. It changes screen brightness and nothing else. |
POST_NOTIFICATIONS |
The ongoing notification that keeps the filter running and lets you turn it off. |
FOREGROUND_SERVICE |
Keeps the filter alive while you use other apps. |
FOREGROUND_SERVICE_SPECIAL_USE |
Android 14 and later require every foreground service to declare a type. A screen filter matches none of the named ones, so it declares “special use”. Same service as the row above; no extra access. |
RECEIVE_BOOT_COMPLETED |
Restores the filter after a restart, if you have asked it to. |
ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION |
The one-time foreground location read described above. Optional; the schedule works with typed coordinates instead. |
com.android.vending.BILLING |
Buying Pro through Google Play. See “Buying Pro” below. |
The app reads the list of apps that appear in your launcher, so you can pick which ones pause the filter. It does not request Android’s broad “query all packages” access.
No internet permission, and no trackers
Because SolarGamma’s manifest does not declare INTERNET, Android structurally
prevents the app from opening a network connection. This is an
operating-system-level restriction rather than a policy we are asking you to
believe.
The app also contains:
- no analytics,
- no advertising SDKs,
- and no crash-reporting services.
The app includes these libraries, and no others:
- Kotlin’s standard library, the programming language’s own runtime.
- Google’s Play Billing Library, which is how Pro is sold.
- The libraries the Billing Library needs to run: parts of Android Jetpack (AndroidX core, activity, lifecycle, saved state, collection, annotation, tracing, interpolator and versioned parcelable support), Google’s data transport libraries with the Firebase encoders they use, Guava’s ListenableFuture and javax.inject.
None of them is an analytics, advertising or crash-reporting library. The data transport libraries are how the Billing Library would send usage reports to Google if it could, but sending needs the internet permission the app does not have, so it cannot. The build removes whatever code of these the app does not use.
Buying Pro
Buying Pro is a transaction with Google, made in Google Play’s own payment screen. Google keeps a record of it in your Google account, and Google’s privacy policy covers that record. The Play Store app handles the purchase over its own connection. SolarGamma does not.
What SolarGamma keeps is the purchase receipt described under “What the app stores”. Uninstalling the app deletes it, and the next install asks Google Play for it again.
Data collection and sharing summary
| Question | Answer |
|---|---|
| Data collected | None |
| Data shared with third parties | None |
| Data sold | None |
| Data transmitted off the device | None (no internet permission) |
| Data you can send yourself | A crash report, if there is one: by email from your own email app, or copied to the clipboard |
| Account or sign-in required | No |
Children
The app collects no data from anyone, including children.
Changes to this policy
If a future version of the app changes what it stores or what it accesses, this page will be updated before that version is released, and the effective date at the top will change.
Contact
Questions about this policy can be sent to support@eveningside.dev.