NLAP.APP ("we", "us", or "our") operates the Bloom mobile application ("the App"). This Privacy Policy explains what information is collected, how it is used, and your choices.
In short: Bloom does not collect or transmit any personal data of its own. The only network activity initiated by the App is ad requests to Google AdMob (banner + rewarded video), governed by Google's consent flow (UMP) in GDPR regions. All app settings remain on your device.
| Category | Data | Collected By | Purpose |
|---|---|---|---|
| Advertising | Advertising ID, device info, IP address, approximate location (country-level) | Google AdMob | Serve banner and rewarded video ads |
| GDPR consent | Consent string (TCF v2 format), stored via Google UMP SDK | Google UMP (on-device) | Regulatory compliance in EEA, UK, Switzerland |
| Crash diagnostics | Crash logs, stack traces, device info (model, OS version, memory), anonymous installation ID | Sentry (Functional Software Inc.) | App stability monitoring and bug fixing |
| App settings | Sticker configuration, floating button position, theme choice, PRO expiry timestamp, onboarding state | Stored locally on device (SharedPreferences) |
App functionality |
| Address geocoding (optional, only when adding a navigation destination) | Address or place name you type → coordinates. Routed by your chosen default app: Korean apps (Kakao Navi/Map, Naver Map, TMAP) use Kakao Local REST API; other apps (Google Maps, Waze, HERE WeGo, etc.) try HERE Geocoding & Search API first (when configured) and fall back to Android Geocoder (Google Play Services). Resulting coordinates and label are stored locally only | Kakao Corp (Local API) for Korean apps · HERE Global B.V. (Geocoding API) and/or Google Play Services for other apps | Convert your typed address into latitude/longitude for one-tap navi launch |
| Saved navigation destinations | User-chosen label (e.g. "Home"), coordinates from geocoding, default app id (kakaonavi/google_maps/etc.) | Stored locally on device (SharedPreferences) |
1-tap navigation launch |
We do not collect or transmit:
canRetrieveWindowContent="false"NotificationListenerService is registered solely for the Do Not Disturb (DND) toggle and its onNotificationPosted/onNotificationRemoved callbacks are empty (see Section 3 below)Bloom uses Android's AccessibilityService for a narrow set of features:
The accessibility service is configured with canRetrieveWindowContent="false" and canPerformGestures="false". Bloom cannot read the content of other apps' screens, intercept or record keystrokes, or perform gestures on behalf of the user. Its authority is limited to firing the global system actions listed above when you tap a sticker.
Read more about the accessibility usage rationale on the How it works page.
Bloom registers an Android NotificationListenerService (BloomNotificationListenerService) exclusively for the Do Not Disturb (DND) toggle sticker. On some OEM devices (e.g. Samsung One UI), the standard NotificationManager.setInterruptionFilter() call is silently overridden by the OEM's own DND scheduler. The notification listener registration is therefore the sole mechanism Bloom uses for DND toggling — without this permission, the DND sticker simply prompts you to grant the permission and is otherwise inactive.
What Bloom never does with this permission:
onNotificationPosted and onNotificationRemoved callbacks are intentionally empty — no notification data is processed at any timeThe permission is requested at first use of the DND sticker via a prominent disclosure screen. You can revoke it at any time via Settings → Notifications → Notification access → Bloom DND Toggle. After revocation, the next tap on the DND sticker simply re-shows the disclosure screen — there is no silent fallback or alternate behaviour.
Bloom includes optional Vision stickers that read the screen or use the camera to provide accessibility-oriented utilities. All processing is performed on-device using ML Kit and AndroidX libraries — no images, text, or video ever leave your device.
Three input sources, selected by the user from a mode sheet on each tap:
AccessibilityService.takeScreenshot() API. No MediaProjection, no system consent dialog per capture, no foreground service notification, no background recording. The accessibility permission you already granted to Bloom is the only authorisation needed; FLAG_SECURE windows (banks, password managers) are blocked by the OS itself.
READ_EXTERNAL_STORAGE permission needed.
What Bloom never does in the Vision pipeline:
You can revoke camera permission at any time via System Settings → Apps → Bloom → Permissions → Camera. Screen capture authorisation is the same as the accessibility permission Bloom already needs for its overlay — you can revoke it via System Settings → Accessibility → Installed apps → Bloom, which disables both the floating overlay and the screen-capture Vision stickers at once.
Bloom displays ads from Google AdMob in two places:
MainActivity) and the settings screen (SettingsActivity). No banner appears while the Voronoi bloom is open.Google AdMob may collect device information and advertising identifiers to serve personalized ads. In the EEA, UK, and Switzerland, Bloom uses Google's User Messaging Platform (UMP) SDK to collect GDPR consent before any ad request is made. You can manage your consent at any time from Bloom → Settings → Manage privacy preferences (shown only where GDPR applies).
You can opt out of personalized advertising in your device settings under Settings > Google > Ads.
For more information, see Google's Privacy Policy.
All app settings are stored locally on your device only using Android SharedPreferences. This includes:
This data is:
Bloom is a general-purpose accessibility tool. It is not directed to children under 13 and does not knowingly collect information from children. COPPA compliance: tagForChildDirectedTreatment is set to FALSE in our AdMob request configuration, and the App does not advertise to children.
| Service | Purpose | Privacy Policy |
|---|---|---|
| Google AdMob | Advertising (banner + rewarded video) | Link |
| Google User Messaging Platform (UMP) | GDPR / US state-law consent collection | Link |
| Sentry | Crash reporting & diagnostics | Link |
| Google Play Services | App distribution, signing, Geocoder backend (global geocoding) | Link |
| Kakao Corp (Local REST API) | Korean address / POI geocoding when adding a destination for a Korean navi app (Kakao Navi/Map, Naver Map, TMAP). Only invoked on user-initiated search. | Link |
| HERE Global B.V. (Geocoding & Search API) | Global address / POI geocoding when adding a destination for a non-Korean navi app (Google Maps, Waze, HERE WeGo, etc.). Only invoked on user-initiated search and only when an API key is configured by the operator. | Link |
If you choose to add a navigation destination sticker (e.g. "Home", "Office") via Settings → Stickers → Destinations → + Add, the following happens:
dapi.kakao.com) over HTTPS. Your typed query is sent to Kakao Corp servers; only the query and a server-side API key are transmitted (no device id, no IP-based account lookup beyond standard HTTPS).geocode.search.hereapi.com) over HTTPS for better global coverage. If HERE is not configured or returns no results, Bloom falls back to Android's built-in Geocoder, which forwards the query to Google Play Services. Only the typed query and the server-side API key are transmitted; no device id is sent by Bloom.SharedPreferences. Nothing is uploaded to our servers (NLAP.APP).Bloom never accesses GPS / device location for this feature — destinations are derived from the text you type, not from where you currently are.
Bloom uses Sentry for crash and stability monitoring. The data sent on a crash is limited to:
Bloom configures Sentry with isSendDefaultPii = false and isAttachScreenshot = false, so email addresses, account identifiers, advertising IDs, and screenshots are never transmitted. Identical errors are deduplicated with a 1-hour cooldown to avoid noise. Sentry retention is 90 days. You can opt out by clearing app data (which regenerates the installation ID) or uninstalling the App.
We do not collect or store personal data on our own servers. Crash diagnostic data sent to Sentry is retained for 90 days and does not contain personally identifiable information. All locally stored data can be cleared at any time by uninstalling the App or clearing app data in your device settings. In GDPR jurisdictions, you can withdraw or update your advertising consent at any time through Bloom → Settings → Manage Privacy Options, and you can open this policy at any time via Bloom → Settings → Privacy Policy.
We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated effective date. Continued use of the App after changes constitutes acceptance of the revised policy.
If you have questions about this Privacy Policy, contact us at: