SayWhen
Your routines, spoken at the time you set.
SayWhen speaks the reminders, countdowns, checklists, the time and a morning briefing that you set up, at the times you choose, using the speech engine installed on your phone. Your routines, settings and history stay on your phone.
SayWhen has no internet permission, so it cannot send anything anywhere. There is no account, no sign-in and no server of ours. There is no analytics and no crash reporting.
INTERNET permission open network connections. You can confirm the permission list on the Play listing, or by inspecting the APK yourself.SayWhen does not contain its own voice. To speak, it hands the words to the text-to-speech engine you have selected in Android settings (for example the engine that came with your phone). That engine is another app with its own privacy terms.
| What | When | What happens to it |
|---|---|---|
| Names and birthday dates from your contacts (only the contact's display name and the date of a birthday entry) | Only if you turn on "Include contact birthdays" and allow the contacts permission. Read when a birthday announcement or briefing is spoken and when you open the Birthdays screen | Spoken aloud or shown on screen. Held in memory only; never written to SayWhen's storage, never put in a backup file |
| Today's calendar events: title, start and end time, and whether the event lasts all day, from calendars that are set to visible | Only if you turn on "Include today's calendar" and allow the calendar permission. Read when the briefing is spoken and when you open the Briefing screen | Spoken aloud or shown on screen. Held in memory only; never stored. SayWhen never changes your calendar |
| The time of the next alarm set on the phone, as Android reports it | When the morning briefing is spoken | Spoken aloud. Not stored. This can be one of SayWhen's own announcements, because Android lists them as alarms |
| The phone's sound state: ringer mode (sound, vibrate or silent) and whether Do Not Disturb is on | Right before an announcement | Used to decide whether a Normal announcement stays silent. Not stored |
| Permission and battery state: whether exact alarms and notifications are allowed and whether battery optimization applies to SayWhen | While SayWhen's screens are open | Shown in the app and in Diagnostics. Not stored |
| The voices your speech engine offers for the nine supported languages | While Diagnostics is open and before speaking | Used to pick an installed offline voice and to show which languages are ready. Not stored |
Everything below lives in SayWhen's private app storage, which other apps cannot read.
| What | Why | How to remove it |
|---|---|---|
| Your routines: name, the words to speak, type, schedule (time, days, date or interval), countdown warnings, checklist steps, Normal or Must hear, volume, number of readings, chime, on or off, group, speaking language, and a marker if you skipped the next one | So SayWhen can speak them | Delete the routine in the app; Backup & restore › Delete all app data; uninstall |
| Settings: theme, language, whether you finished the introduction, quiet hours, a pause end time, groups you turned off, whether contact birthdays and the calendar are switched on, and whether the Family hub keeps the screen on | So your choices stay chosen | Change them in the app; Delete all app data; uninstall |
| Birthdays you entered yourself: name, month and day | For birthday announcements and the briefing | Delete them in the app; Delete all app data; uninstall |
| Delivery history, up to 1,024 entries: which routine, the planned time, when the alarm arrived, when speaking started and ended, and the result (for example spoken, stopped, muted, missed) | So Diagnostics can show whether announcements arrived on time and why one was not heard | Oldest finished entries are removed first; Delete all app data; uninstall |
| Bookkeeping: the list of announcements already handled (so none is spoken twice), the alarm that is currently scheduled, and how far you got in today's checklists | So delivery survives restarts and app updates without repeats | Removed with Delete all app data and by uninstalling |
| The app language you chose, a second time in a small separate file | So the screen opens in your language before the main storage has loaded | Change the language; uninstall |
SayWhen keeps no audio recordings and does not use the microphone. It does not keep a copy of your contacts or calendar.
Backup & restore can write a backup file to a place you choose through Android's file picker, and read one back.
SayWhen tells Android not to copy its data anywhere:
android:allowBackup="false". On Android 8 to 11 this turns off both Google cloud backup and device-to-device transfer of SayWhen's data. On Android 12 and later it turns off cloud backup.A new phone or a reinstall therefore starts empty unless you restore a backup file you made yourself.
| Permission | Why | Without it | How to withdraw it |
|---|---|---|---|
Alarms & reminders (SCHEDULE_EXACT_ALARM). Special access on Android 12 and later; SayWhen opens the settings screen only when you tap its button | To speak at the exact minute you set | SayWhen keeps your routines but does not speak them, and says so on the home screen | Android settings › Apps › Special app access › Alarms & reminders |
Notifications (POST_NOTIFICATIONS). Android 13 and later; asked only when you tap the button in Diagnostics | The Stop button while speaking and the checklist notification | Announcements still play; you stop them from the app | Android settings › Apps › SayWhen › Notifications |
Contacts (READ_CONTACTS). Asked only after you turn on contact birthdays and read the explanation | To read names and birthday dates for birthday announcements and the briefing | Birthdays you enter yourself still work | Turn the switch off, or Android settings › Apps › SayWhen › Permissions |
Calendar (READ_CALENDAR). Asked only after you turn on today's calendar in the briefing and read the explanation | To read today's event titles and times for the briefing | The rest of the briefing still works | Turn the switch off, or Android settings › Apps › SayWhen › Permissions |
FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACK. Granted at install | Speaking runs as a visible media task with a notification, so Android does not cut the voice off when the screen is off. It ends when the announcement ends | Announcements could be cut off | Tap Stop; uninstall |
WAKE_LOCK. Granted at install | Keeps the processor awake for the few seconds between the alarm and the start of speech, and while speaking (at most two minutes per announcement) | Announcements could stop halfway with the screen off | Uninstall |
RECEIVE_BOOT_COMPLETED. Granted at install | After a restart, an app update, a clock or time-zone change, or a change of the alarms access, SayWhen sets its alarms again. It never speaks at that moment | Announcements would stay unscheduled until you open SayWhen | Uninstall |
DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION (SayWhen's own) | Added by the AndroidX library; it only stops other apps from sending SayWhen's internal broadcasts | — | — |
SayWhen holds no internet, location, microphone, camera, storage, phone, SMS or accounts permission. It does not ask for Do Not Disturb access, display over other apps, or a battery-optimization exemption; if an announcement was missed or late, Diagnostics can open the battery settings for you to decide. The only other apps SayWhen asks Android to see are installed speech engines.
SayWhen is a tool for households and daily routines; it is not designed for children to use on their own. It collects nothing from anyone.
Because nothing is collected or transmitted to basilbase, there is nothing held about you to request, correct or export from us. Everything SayWhen stores is on your own phone.
If you write to contact@basilbase.com, we receive what you send, including your e-mail address, and use it only to answer you. The Contact button only opens your own e-mail app; nothing is sent until you send it.
The Privacy policy button opens this page in your browser. The page is hosted on GitHub Pages; your browser's request goes to that host, not through SayWhen.
If this policy changes, the date at the top changes with it, and the updated text is published at the same address before the change reaches a released version of the app.