NAME
kronos — offline
timetable, task, and exam manager for Android
SYNOPSIS
kronos |
DESCRIPTION
kronos is a private, offline-first Android
application that keeps a class timetable, assignments, and exams in one
place. There is no account, backend, or network permission; everything is
stored in a local SQLite database on the device. The application id is
‘io.github.fauzymadani.kronos’. Debug
builds append ‘.debug’ to the id and
carry a ‘-debug’ version suffix, so a
debug and a release build install side by side.
Devices must run Android 8.0 (API 26) or newer. The app compiles against API 36.1 and targets API 35, and uses flat native views rather than a declarative toolkit in order to stay responsive on low-end hardware.
FEATURES
Subjects
Subjects are created once, with an optional code and color, and are referenced by timetable entries, tasks, and exams. Subject names are unique and compared case-insensitively after trimming.
Timetable
Class sessions carry a subject, day of week, start and end time, room, teacher, and week number. The timetable repeats over a rotation cycle of one to four weeks, anchored to the semester start date, so an odd and an even week can hold different sessions in the same slot. Sessions can be created quickly from configured class periods, which are named start and end time pairs edited in Settings. Views are available per week, per day, and per month.
Tasks
Tasks carry a title, due date, optional due time, priority, category, notes, lead time, and completion status. Completed tasks keep a completion timestamp rather than being deleted. Assignment type distinguishes homework from other work.
Exams
Exams carry a subject, date, start and end time, room, seat, and notes. They are shown in a month calendar with per-day cells, and optionally inside the timetable day view.
Reminders
Class, task, and exam reminders are delivered through the Android
‘AlarmManager’ with notification
channels, and require notification permission on the device. Only the next
relevant boundary is scheduled; nothing polls in the background. Pending
alarms are rebuilt after boot, a time change, or a timezone change.
Home screen widget
A timetable widget shows the current or next classes. It never polls: the update period is zero, and it refreshes when data changes or when the next class boundary passes.
Backup, restore, and CSV export
Backup writes a JSON file containing subjects, sessions, tasks, categories, exams, holidays, and settings, and restoring replaces local data from that file. The accent color is deliberately excluded, because a backup brought to another phone should not repaint that phone. Timetable data can also be exported as CSV for use elsewhere.
Appearance
The interface supports light, dark, battery-saving automatic, and pure black modes, seven accent colors, twelve and twenty-four hour time formats, and a Monday or Sunday week start. The user interface is English and Indonesian.
SETTINGS
Settings are kept in shared preferences and are reachable from the Settings screen, which has a back arrow returning to the previous screen.
theme_mode- One of ‘
light’, ‘dark’, or ‘auto_battery’, the last following the system battery saver. pure_black- Use an absolute black background in dark mode, for OLED panels.
accent_color- One of the built-in accent swatches; device-local and not exported.
time_format- ‘
24’ or ‘12’. first_day_of_week- ‘
monday’ or ‘sunday’. rotation_length- Rotation cycle in weeks, one to four.
semester_start- Anchor date for week numbering.
class_periods- Named period start and end times, used as presets in the class editor.
default_reminder_offset- Default reminder lead time in minutes.
class_reminders,task_reminders,exam_reminders- Per-category reminder switches.
exam_day_before,exam_hour_before- Optional early exam warnings.
exam_reminder_hour- Time of day at which the day-before exam warning fires.
day_view_exams- Show exams inside the timetable day view.
ENVIRONMENT
ANDROID_HOME,ANDROID_SDK_ROOT- Android SDK location. Either one takes precedence over local.properties.
BUILD_TOOLS- Overrides the automatically detected build-tools version for
‘
make apk-info’. AVD- Emulator name for ‘
make boot’; defaults to the first available emulator. JAVA_HOME- JDK 17, required to build.
FILES
- /data/data/io.github.fauzymadani.kronos/databases/kronos.db
- Room database, the single source of truth for application data. The schema is at version 10; versions 1 through 10 are upgraded by explicit migrations and there is no destructive fallback, so an older build cannot open a newer database.
- /data/data/io.github.fauzymadani.kronos/shared_prefs/kronos_settings.xml
- Preferences described under SETTINGS.
- app/schemas
- Exported Room schemas, committed so migrations can be reviewed and tested.
- app/src/main/res/raw/license.txt
- License text shown in the About dialog.
- keystore.properties
- Signing material for the release build. When absent, the release build falls back to the debug signing configuration. Never committed.
- local.properties
- Local SDK location, generated by the IDE and never committed. When
ANDROID_HOMEis unset, the Makefile reads the SDK path from this file.
EXAMPLES
Build and run a debug build, which includes LeakCanary and is not minified:
make build make install make logcat
Run the unit tests:
make test
Build a minified release and update an existing install in place.
‘adb install -r’ keeps application
data, and the version code must not decrease:
make install-release
Confirm the version in the installed package and in the built artifact:
make version make apk-info
Read this manual from the repository:
man -l kronos.1
Install it for ‘man
kronos’:
install -m 644 kronos.1 /usr/local/share/man/man1/
DIAGNOSTICS
‘make logcat’ follows logcat
for the application process, and ‘make
crash’ prints the crash buffer. ‘make
version’ prints the installed version, and
‘make apk-info’ prints the version and
signing certificate of the built release APK.
Debug builds include LeakCanary. Reports pointing at
‘DecorView’ or
‘InputMethodManager’ originate inside
the library rather than in application code.
COMPATIBILITY
Android 8.0 (API 26) and newer, with the interface localised in English and Indonesian. Release builds are minified and resource-shrunk by R8; an update that behaves differently from a debug build points at app/proguard-rules.pro.
AUTHORS
fauzy madani
Licensed under GPL-3.0; third-party libraries retain their own licenses, and the bundled notification sound is CC0 1.0 Universal.
CAVEATS
There is no synchronisation between devices; transfer data with
backup and restore. Data is only as safe as the backups you take, and
exported backups contain personal timetable data in plain text. Reminder
delivery depends on the device permitting alarms, so aggressive battery
optimisation can delay or suppress notifications. Widget updates depend on
the launcher honouring ‘RemoteViews’
refreshes and on data actually changing or a class boundary passing.