Sonith Manakkat

Privacy policy

Privacy Policy: Shift Roster to Calendar

Effective date: 2026-10-16 App: Shift Roster to Calendar (com.sonith.shiftroster), version 0.1.0 Developer: Sonith Contact: sonythm@gmail.com

Summary

The app does not collect your data. It has no account, no analytics, no advertising and no servers. It makes no network calls. The Android internet permission is blocked in the app, so it cannot connect to any host. The app does write shifts to your phone's calendar, but only when you tell it to.

What is stored on your device

  • Roster photos. The app keeps a reference to the image file, not a copy. The image is the one you took with the camera, picked in the gallery or shared to the app. VERIFY ON DEVICE: whether the image is still there after the original is deleted or the cache is cleared.
  • The table the app read from the photo: the day numbers and every row of it. This includes the names of the other people on the roster and their shift codes, not only your own row.
  • Your name as you typed it, the row you chose, the month and the workplace you entered.
  • Your shifts: date, shift type, any note, and the id of the calendar event the app made for it.
  • A swap note, for example "Swapped with <colleague's name>: M to N", and the colleague's name.
  • Shift types: code, name, start and end time, colour, reminder lead time.
  • Settings: chosen calendar, notification choices (reminder, evening note, next-month nudge, times, quiet hours), demo mode.

This is a work schedule, so it is personal data. It is kept in a local database in the app's private storage. It is not sent anywhere by the app. A roster photo can show other people's names, so keep that in mind before you share the phone or an export.

Data types, in plain terms

| Data | Collected by the developer | Shared | Processed on device | Optional | You can delete it | | --- | --- | --- | --- | --- | --- | | Roster photos (reference) and text read from them | No | No | Yes | Yes | Yes, delete the roster, or Delete all | | Names and shift times | No | No (only if you share an .ics file) | Yes | Yes | Yes | | Calendar events the app creates | No (written to your own calendar) | No | Yes | Yes | Yes | | Settings | No | No | Yes | Yes | Yes | | Location, contacts, audio, device IDs, advertising ID | Not accessed | No | n/a | n/a | n/a |

Network calls

None. The app declares no internet access. Text recognition runs on the phone using Google ML Kit text recognition. The recognition models are bundled in the app, so nothing is downloaded. Fonts are bundled.

Permissions

  • Camera: to photograph your roster. Optional. You can pick an image from the gallery instead. The app does not record video or audio.
  • Calendar (read and write): to add your shifts as events in a calendar you choose, to find events that overlap a new shift so you can keep or replace them, to update or delete the events the app made when you edit a shift or re-import a month, and to list your writable calendars. The app reads existing events only in the date range of the roster you are importing, to check for overlaps. It does not store them.
  • Notifications (POST_NOTIFICATIONS): to show the reminders you switch on. If you refuse, the app works without app notifications.
  • Run at start-up (RECEIVE_BOOT_COMPLETED, added by the notifications library): so reminders come back after the phone restarts.
  • Vibrate and wake lock: added by libraries for notifications.
  • Photos: the app uses the Android photo picker when you choose a gallery image. It reads only the image you select. It does not ask for access to all your photos.
  • Share target: the app appears in the share sheet for images, so you can send it a roster from another app such as WhatsApp. It receives only what you share.

The app does not use the internet, location, contacts, microphone or SMS. VERIFY ON DEVICE: Android Settings, Apps, Shift Roster, Permissions shows Camera, Calendar and Notifications only, with no microphone entry, in the release build.

Calendar events

When you tap Add to calendar, the app creates one event per working day in the calendar you pick. Each event has:

  • a title such as "Morning shift", the start and end time, and the workplace as location;
  • a reminder if the shift type has one;
  • notes: any note you added (for example "Swapped with <name>: M to N"), plus the line "Created by Shift Roster" and an internal tag with the roster id. The tag lets the app find its own events later.

Off days get no event. If you pick a calendar that syncs to an online account, for example Google Calendar, your phone and that provider sync the events under their own policy. The app does not do this.

Notifications

Notifications are made on the phone. Nothing comes from a server. They can show:

  • Before a shift: the shift name and start time, the workplace, the time range, and how long until it starts. For example "Night shift at 21:00" and "ICU, 21:00-07:00, in 2 h".
  • The evening before a shift, at the time you set (20:00 by default): "Tomorrow: <shift name> shift", the time range and the workplace.
  • On the 25th at 18:00, if next month has no roster yet: "Next month's roster?"

Shift details can appear on your lock screen. Change this in Android notification settings. The app plans notifications for about the next 14 days, at most 40 at a time. Turning notifications off, or Delete all, cancels all of them.

Sharing

Data leaves your phone only when you use Share as .ics and choose an app yourself. The file has your shift titles, times, workplace and notes. The app first saves it in its cache, then opens the Android share sheet. Once you share it, that app's own policy applies. Calendar sync is described above.

Backups

The app asks Android not to back up its data (allowBackup is false in the app configuration). VERIFY ON DEVICE: the release build's merged manifest has allowBackup="false". Your calendar events are not part of this. They are in your calendar app and follow its own backup and sync.

Security

Data is kept in the app's private storage, which other apps cannot read under normal Android rules. The app adds no encryption of its own. Nothing is transmitted.

Analytics and ads

None. No advertising, tracking, analytics or crash-report libraries.

Deleting your data

  • Delete a roster in the app. This removes its shifts from the app and deletes the calendar events the app made for that roster.
  • Settings, Delete all rosters and events I made, then confirm. This does the following:
  • For each roster, it looks for the calendar events carrying the app's tag for that roster, in the calendar you used and in the roster's date range, and deletes them.
  • It deletes all rosters, shifts, shift types and settings from the app's database, and cancels all scheduled notifications. Shift types go back to the defaults (M, E, N, O).
  • It does not delete events that you moved out of that range or whose notes you changed to remove the tag, events you made yourself, or events the app could not reach (for example if calendar permission was turned off). Delete those in your calendar app.
  • It does not delete image files that are outside the app, such as photos in your gallery. VERIFY ON DEVICE: whether a camera photo or an exported .ics file stays in the app's cache after Delete all. Uninstalling removes the cache.
  • Demo data can be switched off in Settings. This removes the demo roster and shifts.
  • Uninstalling the app removes everything the app stored. Events already in your calendar stay there until you delete them in your calendar app.

Because the developer holds no copy, there is nothing to request from the developer.

Children

The app is a work-schedule tool for adults. It is not directed at children, and it collects no personal information from anyone.

Changes

If this policy changes, the new version will be posted at the same address with a new effective date.

Contact

Sonith, sonythm@gmail.com

Privacy policy URL: https://sonythm.github.io/sonith-apps/shift-roster/ Source code: https://github.com/sonythm/sonith-apps