Skip to content

About

A full-screen digital clock and dock screensaver for Android, built for old devices first(Android 2.3~).

Resources

Stars

18 stars

Watchers

2 watching

Forks

Latest commit

 

History

272 Commits

Folders and files

Repository files navigation

한국어 | English — reteclock v0.58.0 — APK(Android 2.3+) · F-Droid
Is your phone's web browser too old to download files from GitHub? Try ReteGet, a file and APK downloader for old Android phones.

reteclock

Turn an old Android phone into a bedside or desk clock.

Plug the phone into its charger, stand it up, and reteclock fills the screen with the time in big digits, along with the weekday and the date. It keeps the screen on while it runs, rearranges itself when you turn the phone sideways, and quietly shifts what it draws by a pixel now and then so the numbers never burn into an OLED screen.

There is nothing to sign up for and nothing to configure. It needs no account, no network and no Play Store, so it still works on phones that can no longer install anything else. It is small — about 699 KB — and asks for five normal permissions, all granted at install: one to keep the screen awake, one to vibrate, which only the timer and the bells use, one for a foreground service — while a timer runs, an alarm rings, or the web administrator runs in the background because you chose that — and one that only Alarms (experimental) uses, starting after a restart, which stays unused until you turn that page's switch on. The fifth, INTERNET, serves the optional local web administrator, which is off until you turn it on; the app never opens a connection of its own.

If the clock does not answer your touch, it is not the clock. Android does not pass touches to a screensaver (Daydream) or to anything showing over the lock screen — the first touch wakes the phone or dismisses the screensaver instead, and the app never hears it. So the menu, the timer's buttons, the calendar's arrows and the saying all do nothing there. To have a clock you can actually touch, run it as an app and turn on Stay unlocked in the settings: the screen stays on, the lock screen never covers it, and no screensaver takes over — and every touch reaches the clock.

Download

⬇ Get it on F-Droid — recommended.

⬇ Download reteclock-0.58.0.apk — 699 KB, installs on Android 2.3 and newer. This is the file itself, so an old browser that cannot render GitHub's release page can still fetch it.

The newest release is always at releases/latest, and every release is listed on the Releases page.

Setting it up, step by step

  1. Install it. In F-Droid, search for reteclock and tap Install. If you downloaded the APK instead, open the file on the phone and confirm. On Android 4.4 and similar versions you may first have to allow installs from unknown sources, under Settings > Security.
  2. Open it from the app list. The settings open first, with Start the clock at the top — there is nothing you have to set. If you would rather the button went straight to the clock, there is a switch for that on the same card.
  3. Press and hold the clock whenever you want the settings again: colours, fonts, what is shown, and how large the time should be.
  4. Leave it on a stand, plugged in. If you turn on Start when the charger is connected, the clock will come up by itself every time you plug the phone in.

To stop it, press Back or Home as with any app.

Why F-Droid is the safer place to get it

You do not have to read this part to use the app — but if you have ever wondered whether an APK from the internet is safe, here is the honest answer.

Downloading an APK from anywhere means trusting whoever built it. Nothing inside a finished APK proves it was really made from the source code you can read here, and nothing proves that the account which uploaded it had not been taken over by someone else.

F-Droid takes that trust out of the equation. Its listing is a reproducible build: F-Droid fetches this repository onto its own server, compiles it there, and compares the result byte for byte with the APK published above. It offers the app only if the two match. So the file F-Droid hands you is one an independent party has confirmed came from the source in front of you — not merely one that somebody with access to this repository uploaded. The F-Droid app also checks the signature on every update.

Both places serve the very same signed file, so you can move between them without uninstalling anything.

The one cost is time. F-Droid rebuilds and republishes on its own schedule, so its copy is sometimes a release or two behind this page. That wait is what you trade for having somebody else check the build. If you are ever unsure about the download here, use F-Droid.

How the build recipe works and how it is verified: docs/fdroid/README.md.

What it looks like

Screenshots taken on Android 4.4.2.

Landscape (wide) Portrait (tall)
Landscape: a large bold HH:MM across the screen, with the weekday, date, year and seconds on one line underneath Portrait: bold hour and minute stacked, then the weekday with the date, then the year and the seconds

The hour and the minute take every pixel the other lines do not need, and those lines are then sized to whatever is left, so nothing is ever cut off, whatever phone you run it on. The text and background colours are yours to choose. Boldness is one of the decorations you set line by line: the hour and the minute start out bold, and you can turn that off.

Every line can be drawn in a font of your own, each with its own bold, italic, underline and outline. In the picture below, the hour uses a TrueType font, the minute a font collection and the weekday and date an OpenType one; the year is italic and the seconds are underlined. Every size was worked out by the app.

Portrait clock with a different user font on the hour, the minute and the date line, an italic year and underlined seconds

You can also put your own pictures behind the clock — several take turns, and animated GIFs play — fill the digits themselves with a picture, and decide how much of the screen the time should take. It is all in Settings.

The timer

Switched on, an interval timer runs beside the clock — a pomodoro, a round of tabata, three minutes for tea. The strip carries the whole preset: each interval takes the share of the length its duration is worth, and wears one colour before the bar reaches it and another after, so the shape of the session is there at a glance. The three times inside the bar are the current interval's length, how far into it you are, and what is left of it.

Landscape (wide) Portrait (tall)
Landscape: the timer strip down the left, its running interval part orange for the time already spent, a green interval above it, and the clock beside it with the date on one line underneath Portrait: the timer strip across the top reading 25:00, 8:21 and 16:39, with the bar part filled, above the clock

Eight minutes into a twenty-five minute stretch of work, with five minutes of rest waiting behind it. Switched off, the clock is exactly as it was: no strip, no controls, nothing extra drawn.

What it is for

An old Android phone in a drawer is still a perfectly good screen with a perfectly good clock inside it. This app is for exactly that: stand the phone up, plug in the charger, and let it be a bedside or desk clock.

Old phones are hard to use for much else nowadays. Google has been retiring old Android versions step by step — signing in to a Google account stopped working on Android 2.3.7 and older in September 2021, Google Play services stopped being updated for Android 4.4 KitKat in 2023, and most apps in the Play Store now require a far newer Android. But a phone that can no longer install anything can still show you the time.

So reteclock asks for nothing: no Play Store, no Google account, no network, and no permission it needs beyond keeping the screen awake. Copy the APK to the phone, open it, and the phone has a job again.

Which phones it runs on

Published on F-Droid; the latest release is 0.58.0.

Oldest Android 2.3 Gingerbread (2010)
Built and tested on Android 4.4 KitKat (2013) — the reference platform
Newest no limit — current Android versions (14, 15, 16 …) install it happily

The settings screen shows this same range on the phone itself, next to the Android version it is running, so you never have to guess.

Settings

Press and hold the clock to open the main menu, which is where the settings divide up: General settings, Timer settings, Time and date settings, Fonts, Pictures, Sounds and bells and Import / Export, each its own screen — and Close the clock, for phones driven by gestures where a full-screen app is otherwise awkward to leave. The general settings do not link to the others — one list of where things are is enough, and it is the main menu.

A tap stops a ringing bell — a bell, an alarm rung on the clock's screen, or a timer's sound — and otherwise does nothing it was not asked to, so a hand reaching for the clock in the dark changes nothing else. To darken the screen for the night, use Sleep mode below; to have a tap say what time it is, see Tapping the clock below. On a phone that still has a physical Menu key, that key opens the general settings directly. The clock names both gestures once when you first open it, and stops mentioning them after you have been there — and it never mentions them when the charger started the clock, so it stays quiet on a bedside stand.

The home-screen button opens the clock, and long-pressing the icon offers Settings on Android 7.1 and newer. A full-screen clock has no controls on its face, so if a picture or a font you added ever makes it unusable, the next start leaves your images and fonts out, says so, and opens the settings by itself — which is the way back in.

Sunrise and sunset — main menu → Sunset/sunrise settings. Set a place once — a city picked by region, country and city, or a latitude and longitude — and any bell can ring at one of the day's eight solar moments: dawn, sunrise, solar noon, the afternoon shadow, sunset, the evening, dusk, or the night's middle, up to three hours before or after and worked out again every day. The page lists all eight for today, so they can be compared with a timetable you trust. No network and no location permission.

Religious settings — main menu. Several traditions read the day from the sun and each takes a few conventions: how far below the horizon dawn and dusk are taken to be, whether the afternoon shadow is once or twice a thing's height, and what to do in the far north where the sun never sinks that far. They are chosen here, as numbers or as one of the ten sets recognised bodies publish — the Muslim World League, ISNA, the Egyptian General Authority of Survey, Umm al-Qura, Karachi's University of Islamic Sciences, Tehran's Institute of Geophysics, Shia Ithna-Ashari, Muslims of France, the Spiritual Administration of Muslims of Russia, and the Islamic Religious Council of Singapore. Choosing one writes its numbers out on the page; change any of them and the choice becomes Custom. The numbers are carried for convenience, not as a ruling, and have not been checked against each body's own publication — compare them once with a timetable you trust. With a set chosen, the name it uses for each moment is shown beside the app's own — Dusk · Isha — and that can be switched off.

Speech settings — main menu → Speech settings (since 0.51.0; before it the tap switch, the two fixed styles and the voice were on General settings → Tapping the clock). Everything the app says aloud is on this page. A tap on the clock stops whatever is ringing, and it can also say the time: turn on Say the time when the clock is tapped and the phone reads it through its speech engine. How the time is read offers three ways: as written ("1:05"), numbers only ("1 5", and a round hour the hour alone, "14" — some engines read a written time character by character, and bare numbers are what those read as a time), or your own sentence — text with fields in braces, {hour} {min} {sec} {ampm} {year} {month} {date} {day}, such as It is {hour} {min} {ampm} or {day}, {month} {date}, written in whatever language your voice speaks. Numbers go in bare, month and weekday names are said in full in the voice's language and the date in the calendar the clock shows; a line under the field shows what would be said now, and one button brings back the default sentence. Under Spoken names you can say any month or weekday your own way, per calendar and apart from the names the clock writes; a switch turns your names on and off without losing them. Under Voice for the time and the timer you pick one voice from a list of every installed one — each language on each speech engine on the phone — and try it with Say the time now; the timer's spoken messages use it too. Off until you turn it on, silent on the tap that stopped a sound, and it follows this app's clock, including your 12- or 24-hour setting and any AM/PM words of your own. A phone with no speech engine or no voice for the language says nothing, and the page says what it found. Say the time on the hour (since 0.54.0, off until you turn it on) says it the same way as each hour turns, while the clock or the screensaver is showing — not in sleep mode, not while a timer counts or a bell rings, and not with the screen off.

Sleep mode — General settings → Sleep mode. For the night: the screen darker (1 % by default), the background and the timer put away, without changing your own settings. Press the moon — at the end of the timer's strip opposite the hourglass, or in that corner with the timer off — or let it fall asleep by itself on chosen days between two times. The moon wakes it again. The brightness while asleep is one of the quick choices or any whole per cent you type.

Layout slides — main menu → Layout slides, beside Layout. Several of your layouts take turns, top to bottom and round again, each for its own time (ten seconds to a day), and each row has its own Show a background switch — a monthly calendar on a plain ground, then a photo, for instance. Upright and sideways have their own lists. The show keeps time with the clock, so opening the menu does not start it over.

Each way up takes one of three turns: No turns (the layout chosen on Layout), Swipe turns or Timed turns (the list above). With Swipe turns, swipe the clock from right to left for the next layout of a list of its own and from left to right for the one before, round and round in the order you set. The layout you swipe to becomes the chosen one, so the clock keeps it after a restart. The screensaver does not take swipes.

The settings page: Start the clock, the switch that keeps the clock up past the lock screen, the home-screen button choice, and the screensaver row The Fonts page: the font library with each font's size and the total, then each field on two lines — its name with bold, italic, underline and outline, and its font — including AM / PM and the calendar's three parts

In the order they appear on the screen.

What is shown

  • Show seconds — on or off. With the seconds off, the hour and minute grow into the space they leave behind.
  • Date format — Jul 12 (short month name) or 07-12 (numbers).
  • 12 hours, with AM and PM — seven in the evening reads 7:19 rather than 19:19 (issue #24). Where the hour and the minute share a line, the marker sits small just after the minute on the same baseline; where they are stacked, it takes a line of its own under the minute: 12 over 03 over AM. Either way the layout keeps room for it, so nothing shifts when AM becomes PM.
  • Show AM / PM — off, the clock still reads in twelve hours but writes no marker at all, on every screen it has: with the date, with a calendar, and with the time alone. The time takes the room the marker was keeping.
  • What the marker says — AM and PM are Latin abbreviations, and much of the world does not write them in Latin. Write your own for before noon, after noon, noon itself and midnight — 오전 and 오후, 午前 and 午後, a dot, an arrow, nothing at all. Nothing is checked, so a long marker takes room from the time and a missing glyph comes out as a box. Blank means the built-in AM, PM, NN or MN; noon and midnight follow the after-noon and before-noon markers unless given their own; and the 00:43 reading stays bare whatever is typed. The options below are labelled with the reading your markers produce.
  • Noon is written / Midnight is written — the one thing a twelve-hour clock cannot say plainly. AM means before midday and PM after it, so noon is neither, and midnight belongs to two days at once; American standards go as far as calling 12 a.m. and 12 p.m. ambiguous. Every clock uses them anyway and so does this one by default, but the alternatives are here because they are all in real use somewhere: 12:43 NN and 12:43 MN (the Philippines), 0:43 PM and 0:43 AM (Japan, where the twelfth hour is written zero), and for midnight simply 00:43, the 24-hour way. Each choice is shown as the reading it produces, and applies to that hour only.
  • Let the clock wander, to spare the screen — on unless you turn it off. Everything drifts a few pixels at a time around a circle it takes hours to complete, so no bright shape sits on the same pixels all day; it never leaves the margin, so nothing is clipped. Leave it on for a phone left showing the time, since an OLED that has drawn the same numerals in the same place for months keeps them faintly forever. Turn it off if you would rather the clock held still — an LCD has nothing to burn in.
  • Screen orientation — follow the phone (the usual answer), follow the sensor, lying down, or standing up. For a screen that cannot be turned, or a device with no rotation sensor: a reader or a tablet on a wall. The screensaver and the settings pages follow the phone as before.
  • OLED care: spare the screen as much as possible — off unless you turn it on. Your layout stays as it is; only the drawing changes: black behind everything, the writing in one dim warm colour in the system's thinnest face, no pictures, the colon blinking and the wander always on, and the writing dimming for a moment around each minute so the wander's step is not seen. Nothing you chose is changed: switch it off and your colours, fonts and pictures come back.
  • A different picture every morning — set the pictures to shuffled, a new order each day and the hold to a day, and the clock shows one of them from midnight to midnight and another tomorrow. The shuffle is decided by the date rather than by chance, so it survives a restart and the settings list shows what the clock is actually showing. Asked for in issue #26, and done this way because the alternative — reading a folder of yours — would mean a storage permission this app does not ask for; the pictures come in through Import / Export instead, a zip at a time.
  • Colours — a text colour and a background colour, each chosen from a palette. The two can never be the same (a clock in its own background colour would be no clock at all), and the background colour shows wherever no picture covers it, including the bars at the edges when a picture is fitted whole.

Fonts

  • Font — the clock uses the phone's own font until you add one of your own. Add a font from a file opens the usual file picker. The file is copied into the app, which is why reteclock never has to ask for permission to your storage, and why your font keeps working even if you later move or delete the original. TrueType (.ttf), OpenType (.otf) and font collections (.ttc) all work — the collection was really tried on Android 4.4 rather than assumed — and anything the phone cannot read is refused straight away instead of sitting broken in the list. The list shows how much space each font takes and the total, and any of them can be deleted.
  • Each line: font and decoration — the hour, the minute, the seconds, the weekday, the month and day, and the year each choose their own font and their own Bold, Italic and Underline. The hour and minute begin bold; turn it off if you prefer. Sizes remain the app's job. If you delete a font that a line was using, that line simply goes back to the phone's font. A font file holds one weight and one slant, so bold and italic are drawn from it.

Size

  • Room for the time — two sliders, one for each way you hold the phone: how much of the width the hour and minute take beside a calendar when it lies sideways, and how much of the height when it stands upright. Everything else sizes itself to fill its share, and stops growing before it would no longer fit.
  • Landscape — the line under the clock — sideways, with the calendar off, the clock has the whole width and the weekday, the date, the year and the seconds are one line underneath. Each of the four has an arrow either side of it; move them into the order you read a date in. The month and the day move together, written the way the date style says.

Pictures

  • The phone's wallpaper — Show the phone's wallpaper behind the clock (since 0.54.0, off until you turn it on): your home screen's wallpaper, live ones included, shows behind the clock wherever it has no writing, with no permission needed. Your pictures and colour are kept for when it is off. The clock only, not the screensaver.
  • Images — one pool holds every picture, brought in the same permission-free way as the fonts. Each picture has two ticks, and only one of them can be on: BG puts it behind the clock, and Text shows it inside the digits, so the numbers become a window onto the picture. With neither ticked it is simply kept, unused, until you want it. Each tick column has a select-all, and the first column is for picking several pictures to delete at once. Background pictures take turns: an animated GIF plays through once, a still picture stays for a time you choose (5 seconds to 5 minutes), each one cross-fades into the next unless you turn the fade off, and six fit modes between them handle any shape of picture. The pictures inside the digits cycle by the same rules. You can sort the pool by name or by the date each file was added, in either direction, arrange it by hand with the arrows, or tap a name to rename it — naming them 001 …, 002 … turns the A-to-Z sort into your own order. If you import a file the pool already has, it is recognised and not stored twice.

Timer

The clock can also run an interval timer — a pomodoro, a round of tabata, three minutes for tea. It is off until you ask for it, and with it off the clock is exactly as it was: no strip, no controls, nothing extra drawn.

  • Presets — a preset is a named list of intervals. Each interval has its own length, typed in hours, minutes and seconds; two colours; a message spoken aloud at its beginning, if the phone has a speech engine; and a warning so many seconds before it ends. A preset can be told to repeat forever, which is what turns twenty seconds of work and ten of rest into a tabata.
  • On the clock face — a strip runs down the left of the screen, or across the top when the phone stands upright. It carries the whole preset at once: each interval takes the share of the strip its length is worth, drawn in its own two colours — one for before the bar has reached it, one for after — so the shape of the session is there at a glance. Either colour may be left empty, and then the clock shows through. Three times are written inside the bar, all about the interval you are in: its length, how far into it you are, and what is left of it.
  • Counting in — pressing play starts the preset three seconds later, with a low beep on each of those three seconds and a high one landing exactly on the start, so you can put the phone down and begin on the beat.
  • Sound, vibration or silence — set on Sounds and bells → Volume, separately for a phone that is ringing, on vibrate and on silent (since 0.52.0; before it, one setting on Timer settings). By default the timer sounds on a ringing phone and vibrates on a vibrating one. Whatever you choose, the end of each interval also flashes the screen three times.
  • With the screen off — a running timer keeps sounding when the screen goes off or the phone locks: every cue, its spoken messages and vibration, under a notification that names the interval and when it ends, with Pause and Stop. At the finish it plays the finish and leaves the screen off. On unless you turn off Timer settings → Keep sounding with the screen off. (Since 0.53.0.) From the next version one background service plays every cue for the whole run — on the clock, in the settings, in another app, with the screen off — and an alarm wakes the phone for each, so Doze, a battery saver or a closed app no longer lose them and the count-in is never heard twice. The timer then sounds on the alarm volume, from the phone's speaker even with a headset connected; on vibrate it buzzes, on silent it only shows, and at the finish a notification says it finished. The status bar shows the alarm icon while a timer runs. Timer settings → Battery saving (Android 6 and newer) says whether battery optimisation may hold the app back and opens its settings.
  • The finish — the tune at the end of a preset is the theme from the fourth movement of Schubert's Trout Quintet, which the phone plays from the notes rather than from a recording.
  • Putting it away — the hourglass at the end of the strip opens the list of presets, and the first item there hides the timer. The strip empties, leaving the hourglass where it was, and the clock keeps exactly the shape and size it had. A timer that is running keeps running and keeps sounding; the same first item brings it back mid-count.
  • A running timer blinks — the hourglass goes on and faint, once a second, for as long as something is counting. It blinks whether the strip is showing or put away, so a countdown somebody else started on a clock left on a shelf says so from across the room. Paused, it holds steady.
  • Switching the timer off stops it, rather than parking it — turning off Show the timer on the clock takes the hourglass off the screen, and a countdown nobody can see is a countdown nobody can stop. So the run is ended and forgotten, not paused: switching the timer back on finds it at the beginning, not still going.
  • Keys — a remote's centre key or Enter starts and pauses the timer, and the media keys do what their labels say. Since 0.51.0, Timer settings → Keys lets you choose keys of your own for Start / pause and for Stop — an e-reader's page buttons, a keyboard's space bar, a headset button, a phone's volume keys: press + Add a key, then the key. Any key the device sends to apps works, a keyboard's and the device's own buttons alike; Home, the power key and the app switcher never reach an app, Back is kept for leaving, and an on-screen keyboard sends no keys. Off until you switch it on, and then Page Up and Page Down start and pause until you change them.

Sounds and bells

Its own screen, reached from the main menu.

The Volume card: Mute all sounds, the Sound, Vibrate and Silent tabs with the phone's own mode marked, and a level, Mute, Vibrate and Test for timer sounds, timer messages, the spoken time and bells

  • Bring in sounds of your own — the same way fonts and pictures arrive: the phone's own file picker hands the file over, and the app keeps a copy of it. No storage permission is asked for, on any version of Android, and a sound that is in stays in — nothing can take it away later.
  • What will play — .mp3 on every phone this app runs on, and beside it M4A/MP4, Ogg, 3GP, AMR, MIDI and WAV; FLAC and Opus on newer phones. The screen names the ones your phone can play. A file is opened as it comes in and one this phone will not play is refused there and then, rather than at the moment you needed it.
  • How each sound plays — press Clip… to set where it starts and where it stops, in seconds to one decimal, and whether it plays once or over and over until it is stopped. Four seconds out of the middle of a song is four seconds, everywhere that song is used.
  • Bells — a sound at a time of day, on the weekdays you choose. A bell only plays: touch the screen while one is ringing and it fades out and stops, and that touch does nothing else. Bells ring while the clock or the screensaver is showing.
  • Alarms (experimental) — main menu → Alarms (experimental), off unless you turn it on. With its switch on, a bell you tick there is handed to Android's alarm scheduler, so it rings with the phone asleep and the app closed, on the alarm volume, with a card over the lock screen: Ring again in N min or Stop. It is set again after a restart. The page keeps a record of what each alarm did. No guarantee is given that an alarm rings — not if the phone is off, the app was force-stopped, or a battery saver stops it. For an alarm you cannot afford to miss, use the phone's own clock app.
  • Volume — how loud each kind of sound is: the timer's sounds, its spoken messages, the time spoken on a tap, bells and wake bells, each from 0 to 100 % of its usual loudness, with a mute, a vibrate switch and a Test button. There is a tab for each mode of the phone — ringing, vibrate, silent — and the one the phone is in is marked ● and is the one that plays. Out of the box a phone on vibrate or silent stays quiet, except the wake bells; a sound you turn on there is marked with a warning. Mute all sounds silences everything except the wake bells, and keeps your levels for when you turn it off. (Since 0.52.0.)
  • The timer can use them too — in Timer settings, each preset has a sound for its start and one for its finish, and each interval has one for its beginning and one for its warning. A message you set is still spoken: the sound and the words share the moment. A slot with no sound, or one whose file you deleted, beeps exactly as it always did.
  • A whole folder of sounds travels in the zip on the Import / Export page, like fonts and pictures.

Import / Export

Its own screen, reached from the main menu.

  • Export — two buttons, because there are two errands. A settings file (.txt) is plain text, one key to a line, in sections that match the settings pages: read it, edit it, hand it to another program, keep it as a backup. A package (.zip) is that same file with the fonts, the pictures and the sounds beside it under fonts/, img/ and sounds/ — what you want when the other phone has none of them. Either way you tick which pages to carry first, and the package has its own three ticks for the fonts, the pictures and the sounds.
  • Import — all or nothing (since 0.55.0): a line that is not a setting, a setting given twice, a value that is not allowed or an unsafe file refuses the whole import, changes nothing, and tells you which line, setting or file it was. Begin a note of your own with #. Settings this version does not know are passed over. Otherwise the file is read first and applied second. You are shown what is in it — how many settings for each page, which fonts and pictures came along, and anything that could not be understood — and you tick what to bring in. What it shows is not the file's own text but the file as this app read it: rebuilt from what was understood, with values in the form they will be stored in, keys under the page they really belong to, and anything unreadable left out and listed separately. Your own comments are kept, above the lines they stood above. A zip written here, a zip you built by hand, or a bare settings.ini all work, and so does the tab-separated file older versions wrote.
  • What is refused, and why. Names inside a package come from another machine, so they are checked before a byte of the file is read: at most 127 bytes, letters of any script, digits, _, -, . and the plain space, at most two combining marks in a row, and nothing invisible — no control or formatting characters, no bidi overrides (the trick that makes evil‮gnp.ttf read as a picture), no annotation characters, no enclosing marks or variation selectors, none of the letters that draw nothing at all (the Hangul fillers, the Khmer inherent vowels), and nothing outside fonts/ and img/. Two marks is what Vietnamese needs and what the wall of dripping accents does not get. A name that fails is refused whole and named on screen with the reason. Neither direction asks for a storage permission.

Time and date — its own screen, reached from the main menu.

  • Count the date in — the calendar the clock counts in. Fourteen of them, listed below. The choice changes every date the app shows: the month grid, the date beside the time, and the screensaver. The names that ship are Latin letters and ordinary digits throughout — and every month and weekday can be renamed to whatever you like, in any language, under Your own names on the same screen.
  • Show the Gregorian date as a small badge — with another calendar counting, the Gregorian month and day appear as 08.15 reversed out of a small box at the lower left of the date, and in the corner of every square of the month grid, which is where the translation is most wanted: it answers "and which day of my own month is that" for the whole month at once. Off by default, and never shown when the Gregorian calendar is the one counting.
  • Shift the Islamic date by — −2 to +2 days. An Islamic month begins when the new crescent is seen, so no computation is the announcement; set this once to match your own community and every date after it is right for you.
  • Show a calendar on the clock — the month under the time, drawn as the clock's own writing: it takes the text colour, and the picture filling the digits fills it too. The month and a pair of arrows are on the first row, three-letter weekdays on the second, and six week rows always, so paging through the months does not make the grid breathe. Today is knocked out of a filled box — the numerals are cleared from the colour rather than painted over it, so a picture behind the clock shows through the digits themselves. The arrows page back and forth, and it returns to this month whenever the clock is opened again.
  • The months are spelled / The weekdays are written — where a calendar is read by people who spell its months differently, both spellings are offered rather than one being picked as correct: Cairo's Baramhat beside the liturgy's Paremhat, Jakarta's Zulkaedah beside Cairo's Dhu al-Qidah, India's Ashwin beside the scholarly Asvina. The choices are shown as the abbreviations themselves. The weekdays stay English unless you ask for the calendar's own — Yek Dos Ses Cha Pan Jom Sha for the Persian calendar, CN T2 T3 T4 T5 T6 T7 for the Vietnamese one, which is what Vietnam writes.
  • Your own names — write your own name for any month or any weekday. No length limit and no alphabet limit: what ships is three or four Latin characters because that is what fits the grid on a small old screen, not because somebody else's language has to live under it. Past four characters the grid crowds and the lines shrink to fit, and a letter your chosen font has no glyph for comes out as a box. Leave one blank for the built-in name; each calendar keeps its own set.
  • The week starts on — Sunday, Monday or Saturday. Iran and Israel begin the week on Saturday.
  • The month is written as — Aug 2026 or 2026-08.
  • The clock takes its time from — the phone, or an offset you set. Android carries its own table of time zone rules, and on an old phone that table is frozen: in every country that has changed or abolished summer time since — Brazil, Mexico, Iran, Turkey, Jordan, Egypt and others — the phone is an hour out for part of the year, and no app can correct it from the outside. Setting the offset here goes round it. The clock then asks the phone only what moment it is, which is a number that owes nothing to the zone table, and works out the rest itself. There is a list of places to pick an offset from, quarter-hour steps for the ones that are not whole hours (+5:30, +5:45, +12:45), a summer-time rule — none, Europe, United States and Canada, southern hemisphere, or your own dates — and, at the foot, both readings side by side so you can check them against your watch.

The calendars

Every one of these is right for every day from 1 January 1900 to 31 December 2200, which is the span the app promises. Outside it, and at the two edges where a calendar has nothing to say, the clock shows the Gregorian date rather than a guess, and the paging arrows stop.

Calendar Where it is used, and roughly how many people Kind
Gregorian worldwide civil
Islamic ~2.0 billion Muslims religious, civil
Islamic Umm al-Qura Saudi Arabia and much of the Gulf — the reckoning most printed Hijri dates follow religious, civil
Islamic MABIMS Malaysia, Indonesia, Brunei and Singapore — around 300 million, from 2021 onward religious, civil
Chinese lunar China ~1.4 billion, and the diaspora cultural
Indian (Saka) India ~1.4 billion — the official civil calendar civil
Japanese Japan ~123 million civil
Ethiopian Ethiopia ~130 million civil
Vietnamese lunar Vietnam ~100 million cultural
Persian Iran ~92 million civil
Korean lunar South Korea ~52 million, North Korea ~26 million cultural
Thai Buddhist Thailand ~72 million civil
Minguo Taiwan ~23 million civil
Julian the Orthodox churches that keep it — Russian, Serbian, Georgian, Jerusalem religious
Coptic Egypt's Copts ~10–15 million, and the Coptic Orthodox Church religious
Hebrew Israel ~10 million, and the Jewish diaspora ~6 million civil, religious

A few things worth knowing about particular ones:

  • The Chinese, Korean and Vietnamese calendars are three tables, not one. They are the same system computed at three different meridians, and that is enough to make them disagree: the same new moon at 00:12 in Seoul is the previous evening in Beijing, so Korea's new year falls a day after China's in 2027 and again in 2028. Vietnam's Tet fell a day before the Chinese new year in 2007 for the same reason. A month in these calendars has a number rather than a name, and a leap month repeats the number before it: M6 is the sixth month and L6 the leap sixth.
  • The Ethiopian and Coptic calendars have thirteen months, twelve of thirty days and a short one of five or six. The Hebrew calendar has twelve or thirteen depending on the year, and the lunisolar ones have a leap month that can fall anywhere.
  • The Japanese calendar cannot be computed forward. An era ends when a reign does, on a date nobody can know in advance, so the app counts Reiwa onward from 2019 — an assumption, not a calculation. The dates before it are the real eras: Meiji, Taisho, Showa, Heisei.
  • The Julian calendar drifts by design. It is thirteen days behind now, fourteen from 1 March 2100 and fifteen from 2200, all of it inside the guaranteed span.
  • Minguo has no year before 1912, when the Republic was founded, so earlier dates read Gregorian.

Not included, and why. These were looked at and left out rather than forgotten:

  • Bikram Sambat (Nepal, ~30 million) — its month lengths follow solar transitions and are published year by year rather than derivable from a rule. It can be added the day authoritative data for the whole span can be obtained and checked; guessing at it would be worse than not having it.

  • Hindu Panchang (India, regionally) — not one calendar but many, varying by region and school, each astronomical. There is no single answer to compute.

  • Sighting-based Hijri — the date depends on an observation that has not happened yet. The Islamic calendar above, with the offset, is the honest substitute.

  • The Turkish (Diyanet) reckoning — measured, and still out, but not by much. Diyanet computes its calendar rather than sighting it, so it ought to be reproducible. Against 38 month starts taken from Diyanet's own pages (2023–2026): the local rule — conjunction before sunset and moonset after sunset, reckoned for Ankara — gets 34, a day late on four by a quarter of an hour of moonset margin; the 2016 congress rule — a crescent 8° from the sun and 5° up seen anywhere on Earth — gets 32, a day early on six; Umm al-Qura, which this app already ships, gets 35.

    Those counts flatter the rules, because they ask the easy question: was the criterion met on the evening before a date somebody else already told us about. A calendar cannot be built that way — it has to be walked, month after month, each one deciding where the next begins — and walking the local rule from its own beginning reproduces only 29 of the 38, including Ramazan 1447 a day early. Errors do not stay put: a month that ends a day late moves the evening the next month is judged on.

    So Turkey stays out, and the generator that would have baked the table refuses to write one while a Ramazan is wrong. Umm al-Qura, which this app already ships, is the closest thing available — 35 of 38 — and with the ±2 day offset it is what a Turkish user should reach for meanwhile.

Prayer times — yes; the direction of Mecca — not, with my apologies. A prayer timetable is worked out for the exact place you are standing, for that day's sun, and by a calculation convention: the twilight angles that fix Fajr and Isha differ between the recognised authorities, Asr depends on which school's shadow length is followed, and the far north and south need further conventions again. This app now does that work. Set your place once on Sunset/sunrise settings — a city from the list or a latitude and longitude, with no location permission and no network — and choose a convention on Religious settings, one of the ten published sets or your own numbers. The page then lists the day's times — dawn (Fajr), sunrise, solar noon (Dhuhr), the afternoon shadow (Asr), sunset, the evening (Maghrib), dusk (Isha) and the night's middle — worked out afresh every day, and any bell can ring at one of them, before or after by up to three hours. Please compare them once with a timetable you trust: the sets' numbers are carried for convenience and not as a ruling, and a mosque's own timetable may add minutes of its own.

The direction of Mecca is still not here. It is a bearing from where you stand to the Kaaba, and for a phone to point at it the compass has to be read and corrected for magnetic declination. This app uses no sensors, and the old phones it is built for often have no magnetometer worth trusting; a quietly wrong direction would cost the person praying, not the app. The apps built for the purpose do it properly, and pointing at them is more use than doing it badly here.

Alongside the prayer times, the app carries three Hijri reckonings — the arithmetic one, Umm al-Qura, and MABIMS — and a two-day offset either way, for the months where the announcement and the calculation part company. My thanks for your understanding.

Landscape (wide) Portrait (tall)
Landscape: the hour and minute reading down the left with the seconds smaller beneath, the month filling the right-hand column, and a saying along the foot — all of it filled with a picture Portrait: the time on one line, the month beneath it, the seconds, and a saying at the foot, over a picture background with a second picture filling the digits

Both shots have a picture behind the clock and a second picture filling the writing, which is why the numerals are orange over blue — and why today's date shows the background through the digits rather than a colour.

If the clock looks a little off-centre in these, that is on purpose and not a slip. Everything on the screen drifts very slowly — a few pixels at a time, around a circle it takes a long while to complete — so that no bright shape sits on the same pixels for hours. It is why a phone can be left showing this for years without the numbers etching themselves into the panel. The drift never leaves the margin, so nothing is ever clipped. That slow wandering is the app looking after your display.

With the calendar on, the clock rearranges itself around it. Sideways, the time reads down the left — hour, minute, and the seconds smaller beneath — and the calendar takes the right of the screen. Upright, the time becomes one line above the grid. Either way the weekday, the date and the year go: the calendar says them better. The slider that decides how much room the time takes still decides it — that arrangement is the one it applies to.

A saying

  • Show a saying along the bottom — on the Layout page, with the automatic arrangement's other settings (a layout you draw shows one wherever you put a saying box). A thin strip under the clock, about as deep as the timer's, carrying one saying and who said it. One a day, the same one all day, since a clock that changed what it said while you looked at it would be a thing that moves. Touch it for another. It wraps to one, two or three lines depending on how long it is and how much room the strip has, and it chooses its own font and decoration in the list of fields like every other line does.

    There are 6,678 of them, drawn from three nineteenth-century collections and all in the public domain by age:

    • Clouston, W. A., comp. Book of Wise Sayings: Selected Largely from Eastern Sources. London: Hutchinson & Co., 1893. 289 sayings, from eighty-three named hands — Sa'dí, Firdausí, the Dhammapada, the Hitopadesa, Goethe among them.
    • [Preston, Thomas], comp. A Dictionary of English Proverbs and Proverbial Phrases. London: Whittaker & Co., [n.d.]. 1,334 English proverbs. The title page names neither author nor year; the attribution is Project Gutenberg's.
    • Bohn, Henry G., comp. A Polyglot of Foreign Proverbs. London: Henry G. Bohn, 1857. 5,055 proverbs in English rendering, marked by the language they came from — Spanish, Italian, French, Danish, Dutch and Portuguese.

    All three were published before 1900 and their compilers are long dead, so the texts are in the public domain worldwide. The transcriptions came from Project Gutenberg (ebooks 21130, 39281 and 51090) with that project's header, footer and licence removed and its trademark unused, so nothing here carries any licence but this app's. They are all in src/android/res/raw/quotes.txt, one saying to a line, should you want to read them or replace them. The same citations are in LICENSE, and on the Layout page under the switch that turns them on.

Starting

  • Start when the charger is connected — on or off. See below for what to do on newer Android.
  • Stay unlocked — keeps the clock up past the lock screen: the screen never sleeps, the lock screen never covers it, and no screensaver takes over. Off by default, since showing over a lock screen is not something to do to somebody unasked.

How to start it

  • From the app list, like any other app.
  • Automatically when you plug in the charger — switch this on in the settings. Android 10 and newer do not let an app open itself this way, so on those phones use the app list or the screensaver instead.
  • As the system screensaver (Android calls it Daydream) on Android 4.2 and newer: Settings > Display > Daydream > reteclock.
  • From a desk dock, if the phone reports being docked.

For developers

Nothing below is needed to use the app.

Stack

Java and the Android framework, nothing else. Built with the Android SDK command-line tools (aapt2, javac, d8, zipalign, apksigner) driven by POSIX shell scripts. No Gradle. No AndroidX, no support library, no Kotlin runtime and no third-party dependency — a single classes.dex and an APK of about 699 KB. It is signed with the v1 (JAR) scheme so old phones accept it, plus v2 and v3 for current ones, and it holds five normal permissions (WAKE_LOCK, VIBRATE for the timer, FOREGROUND_SERVICE for the timer with the screen off and for the experimental alarms, INTERNET for optional local web administration, and RECEIVE_BOOT_COMPLETED for those alarms, whose components ship disabled), all granted at install and never requested at runtime.

Build

When this checkout sits in a workspace that has a sibling usr/ directory, scripts/build.sh picks up the shared JDK and Android SDK from it by itself. Anywhere else, point it at your tools:

export JAVA_HOME=/path/to/jdk-21              # only --release insists on this exact major version
export ANDROID_SDK_ROOT=/path/to/android-sdk   # build-tools 35.0.0 + platforms;android-19,34

scripts/build.sh             # dist/reteclock-<version>-debug.apk, signed with a local dev key
scripts/build.sh --release   # signed with your own release key (RETECLOCK_KEYSTORE)
scripts/build.sh --unsigned  # dist/reteclock-<version>-unsigned.apk, for F-Droid to sign

scripts/build.sh runs aapt2 → javac (source 8, against the API 19 platform) → d8 (--min-api 9) → zipalign → apksigner (v1 + v2 + v3). It needs a JDK, the Android SDK command-line tools, and Python 3. Any JDK will do for a debug build; --release requires JDK 21, because F-Droid rebuilds the app and compares the result against the published APK, and different javac versions do not produce identical bytecode. Nothing else — no Gradle, no downloads, no dependencies. Every variable it reads is listed in scripts/env.sh.

This repository publishes only what is needed to build the app, plus this README with its screenshots and the F-Droid submission material (fastlane/, docs/fdroid/). Working notes, plans and test scaffolding are deliberately kept out of it.

The name

rete is Latin for net, and -clock is just a clock.

The intended pronunciation is the Latin one: RAY-teh (two syllables, rē-te; the first vowel is the long e of they, and the final e is pronounced, never silent).

If you would rather say it the way English usually treats this word, that is fine too. English borrowed rete as an anatomical term and pronounces it REE-tee, so "REE-tee-clock" is a perfectly good reading. Say it however you like; the clock does not mind.

License

MIT. See LICENSE.

Web administration (experimental)

Since 0.55.0, off until you turn it on. A browser on the same local network can change the clock's settings and move files in and out, which is easier than a small touch screen for a long list of bells or a layout.

On the clock In the browser
The Web administration page on the device: the warning, the addresses to open with a Copy button each, and the notes on http://, when the server runs and keeping one address The login page in a browser: administrator ID and password, with the note that HTTP does not encrypt
The administration page in a browser after login: the settings pages along the top and the General settings below

Setting it up. Long-press the clock and open Web administration (experimental). Set an administrator ID, a dedicated password (8–128 UTF-8 bytes) and a port (8080 by default), switch it on and save. The top of the page then lists the addresses to open from another device, each with a Copy button (since 0.55.1), and you log in there.

Type http://, not https://. The address is plain HTTP. Chrome and other current browsers try https:// by themselves, so type the whole address into the address bar, http:// included — http://192.168.1.20:8080/, not 192.168.1.20:8080.

When it runs. Only while ReteClock is on the screen, with the screen on: the clock, the screensaver or one of the app's settings pages. Switching to another app or letting the screen go off stops the server within a second, and a browser then cannot connect (connection refused); coming back starts it again. That is the default, and the Web administration page has a choice, When the server runs, of two others. Only while this page is on the screen (since 0.55.1) narrows it: the server is then up only while that page itself is showing, and not behind the clock. In the background too (since 0.56.0) widens it — see the next paragraph. The clock and the Web administration page keep the screen on. Unless it runs in the background, a browser on the same device pushes the app off the screen and can reach the server only in split screen, at http://127.0.0.1:8080/. It listens only on Wi-Fi, Ethernet and the phone's own hotspot — never on mobile data or a VPN — and answers only devices on that same network.

In the background (since 0.56.0). Chosen, the server keeps answering while you use other apps, and a notification says so for as long as it does: it shows the address, opens the Web administration page when tapped, and has a Stop web administration button that switches the server off. It needs no new permission. With the screen off the phone is kept awake for it only while it is on its charger; on battery it may stop answering until the screen is on again, and some phones' battery savers stop background apps whatever an app asks. Ending the app — swiping it out of the recent apps — ends the server, and it does not start by itself after the phone restarts: open ReteClock once. Nothing starts at boot. Remember that this leaves a plain-HTTP server reachable on your network all day; choose it on a network you trust.

Keeping the same address. On an ordinary home router the phone's local address changes from time to time, and the address to open changes with it. To reach the clock at the same address every time, give the phone a fixed one. There are two ways: set a static IP in the phone's own network settings, or have the router's DHCP always give the same address to the phone's MAC address (a "DHCP reservation"). Android 10 and newer show each Wi-Fi network a MAC address of its own, so reserve the one shown in that network's details on the phone.

What it does. Every user setting, including bells, timer presets, layouts, slides, calendar names, typography and the experiments; the stored fonts, pictures and sounds; importing settings files and font, theme and settings ZIPs; exporting them and the timer log. Higher image quality still needs the trial on the device.

The layout editor in the browser (since 0.56.0). The Layouts page draws each layout on the clock's own screen, to scale, as the editor on the device does. Drag a box to move it and a corner to resize it; a timer strip or a saying strip takes the edge you drop it nearest. The numbers of the box you last touched are beside the canvas — what it shows, what it is measured from, its place and size in per cent, where its writing sits, whether it is shown or locked — and Undo takes back the last change, also after saving. A new layout starts from what the clock would draw by itself. Behind the boxes stands the background the clock would show — the layout's own picture if it carries one, or else the first of your pictures — small and a little darkened so the outlines can be read; Show the background takes it away. Beside the canvas the clock says what it thinks of the arrangement as you draw it, as the editor on the device does: a box that overlaps another, one too small for its writing and how far the writing shrinks, or that nothing would be drawn at all. Nothing reaches the clock until you press Save changed settings.

Imports are all or nothing, here and on the device alike. A line that is not a setting, a setting given twice, a value its setting does not take or an unsafe file refuses the whole import, changes nothing, and says which line, setting or file it was, so you can correct it and try again. Settings this version does not know are passed over. An import stops a running timer and merges incoming layouts with the ones you have. The limits are 64 MiB for an upload, 32 MiB a media file, 256 KiB a text file, 128 MiB unpacked and 500 entries in a ZIP, and there must be room on the device. The administrator's account never travels in a settings file or an Android backup.

If the address does not open. Look at the bottom of the Web administration page on the clock (since 0.55.1): it names the last device that connected and what became of it. If the browser says the connection was refused, the app was not on the screen at that moment — see When it runs. No device has connected yet means the browser's request never reached the clock, and the network is where to look — both devices on the same Wi-Fi or hotspot, a network that does not keep its devices apart ("client isolation", usual on guest networks), no VPN at either end, and http://, not https://, in front of the address. Refused says why, and the browser is told the same. Android needs no further permission for this and has no firewall of its own in the way.

How the login works. The password is turned into a key in the browser and never sent. Each login answers a single-use challenge, and every request after it is signed and single-use, so nothing captured can be replayed and a session ID alone opens nothing. Sessions end after 10 idle minutes or 30 minutes in all, on logout, when the server stops and when the account changes; reloading the page asks for the login again. Five wrong passwords from one device make that device wait half a minute; they do not lock anybody else out.

What it does not protect. Plain HTTP does not encrypt your settings and cannot stop the login page being altered by somebody who controls the network. Captured logins cannot be reused, but a weak password can be guessed from one, offline. Use it on a network you trust, with a strong password used for nothing else, and never forward the port to the Internet. With the switch off — as it is until you turn it on — the app opens no connection and listens on nothing.

About

A full-screen digital clock and dock screensaver for Android, built for old devices first(Android 2.3~).

Resources

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages