Skip to content

dfyockey/RomanDigital

Repository files navigation

Banner image : RomanDigital clock displayed on a phone resting horizontally on a black Lego stand to the left of a Lego Botanicals bonsai tree

RomanDigital

Android Digital Clock App and Widget with Roman Numeral Display

Get it on F-Droid
F-Droid Version


Get it at IzzyOnDroid
IzzyOnDroid Version


Get the latest apk on GitHub
GitHub Release

Description

RomanDigital is a digital clock app that displays the current time in Roman numerals. It can be used to repurpose an old Android device that's sitting around collecting dust, or to provide a clock of unique style on a current phone or tablet.

Landscape screenshot of phone showing RomanDigital app displaying time as VIII:LVII

RomanDigital also includes a widget that can be added to a device's Home screen.

Portion of a portrait screenshot of a phone Home page showing RomanDigital widget displaying time as XVII:XV, the screenshot portion having a torn-paper-effect bottom edge

Features

RomanDigital includes several common clock app features, including:

  • Choice of 12 or 24 hour display
  • Centered display
  • Option to keep display on when app is in foreground
  • Display in either portrait or landscape
  • Tap on screen displays app and system controls:

Landscape screenshot of phone showing system bars and RomanDigital app displaying time as IV:XIV with toolbar containing gear and info icons

RomanDigital further includes:

  • Choice between centered display and display aligned with a fixed divider
  • AM/PM indicator integrated into the time display, such that the divider is displayed as "·" for AM and ":" for PM:

Landscape screenshot of phone showing RomanDigital app displaying time as XI·XXXIV

  • Option to only keep display on when device is charging
  • Adaptive display providing the largest possible monospace text for the device screen width (excepting a narrow margin)
  • Choice of app clock display color by selecting RGB values or by entering a hex code:

Portrait screenshot of phone cropped to show a Time Color dialog enabling setting of app display color by 6-character hex code or by setting red, green, and blue sliders, and including a clock display preview

  • Choice of app and widget clock display typefaces between monospace, sans-serif, and serif:

Three partial phone home screen diagonally-overlapping screenshots, each including a RomanDigital widget showing the time XII:LVIII in different one of monospace, sans-serif, or serif typeface

  • Widget time displays are automatically sized to fit the widget dimensions rather than number of screen cells the widget occupies.

  • Independent setting of widget background transparency, time zone, and other settings:

Portrait screenshot of a second phone Home screen showing four RomanDigital widgets with center-aligned Continental U.S. time zone times, time zone labels below times, and different transparency backgrounds Portrait screenshot of a third phone Home screen showing six RomanDigital widgets with fixed-divider-aligned international location time zone times and time zone labels above times

  • And... RomanDigital is Apache-2.0-licensed open source 🙂

Requirements

RomanDigital requires Android 5.0 or greater and is designed to run on a phone or tablet.

Widget Settings

When the widget is added to the Home screen, an activity is displayed to allow selection of settings. This activity can be accessed later in one of two ways depending on the Android version. On Android 11 and earlier, a tap on the widget brings up the activity. On Android 12 and later, the activity is accessed by a long press on the widget and a tap on the settings or reconfigure button in the normal manner for the particular Android version.

Permissions

The FOREGROUND_SERVICE and FOREGROUND_SERVICE_SPECIAL_USE permissions are set by this app. These permissions are required to enable running the TimeTickRelay foreground service that prompts the widgets to update each minute in response to receipt of Android's ACTION_TIME_TICK intent, which the widgets are unable to receive directly.

The POST_NOTIFICATIONS permission is set by this app. This permission is necessary for Android 13 and later to allow the TimeTickRelay service to display a notification indicating that it is running if the user so chooses in the system settings; unless the user so chooses, the notification will not be displayed on these Android versions.

The RECEIVE_BOOT_COMPLETED permission is set by this app. This permission is necessary for the app to restart the service on receipt of notification that the device has just finished booting.

In addition, net.diffengine.romandigitalclock.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION is set by this app. This was set during the app build process by use of a particular Android library required to enable the app to function as expected on versions of Android 12 and earlier (i.e. prior to API 33). It cannot be disabled without modifying the source code. As noted in an fdroidserver commit, "it's basically just an internal hack, rather than a real permission." For a more technical explanation of this "permission", see the full commit message at https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1336/diffs?commit_id=71697f9c88ec73980f63be5955f36cdc3ba7a02c

Known Issues

Widgets will likely stop running after an update because the update stops the TimeTickRelay service (see Permissions above). They can be restarted easily by just opening the main app or any widget settings activity, which may be closed at any time thereafter.

After rebooting a device, the widget(s) will not start running until the app finishes restarting the relay service and then receives an ACTION_TIME_TICK from the system, which may be a couple of minutes. This delay is normal.

Text of a widget rotated between portrait and landscape may not be incorrectly sized until the next widget update, which may be up to a minute after the rotation. This is not an issue for devices that do not support home screen rotation or that are set not to rotate the home screen. It is also not an issue for any device having a UI/launcher rendering the device's home screen on which the widget is installed that notifies widgets when the device is rotated (e.g. Samsung One UI 6.1 and 7.0).

Also, text of a widget may appear incorrectly sized until the next widget update if a widget's settings screen is open while the device is rotated and closed after rotation.

On Android 5.0, the widget(s) typeface cannot be changed.

The 'Align to Divider' option does not correctly align the display when a variable width font is used.

FAQ (Foremost Anticipated Questions)

Q: "I just updated RomanDigital and now the widget doesn't work! How do I get it running again?"

A: Open the main app or any widget settings activity to restart the relay service and thereby restart the widgets.

Q: "Why does the position of the divider change when 'Align to Divider' is selected? Isn't it supposed to stay in one place?"

A: Yes, it's supposed to stay in one place, but the positioning was designed with the expectation of using a monospace font. Shortsighted of me, I know, but implementation for variable width fonts would be really hard. If you've changed a device setting effecting the font used, e.g. your system-wide font, to something that doesn't provide for monospace, then the calculated display position based on expected equal-width characters, and thus the divider position, will unfortunately be off.

Q: "Will there ever be an alarm feature?"

A: Maybe, but it's quite low on the priority list at this point.

Q: "Why can't I change the font/text color/background color/widget corner curvature/etc?"

A: App text color can be changed; widget background transparency can be changed, with background fully white/black for 100% opacity in light/dark mode; and both app and widget(s) clock display typeface can be changed. As for other stylistic changes, I haven't gotten to them yet.

Q: "Why no seconds?"

A: They would crowd the display and look inelegant. Besides, most people (myself included) would likely have trouble reading a lengthy Roman numeral within a second.

Q: "Why no date?"

A: Because it's just intended to be a clock, and a date would crowd the display and look inelegant. But maybe an option someday? Maybe.

Q: "I want to change widget time zone labels to particular place names. Is there any way to do this?"

A: Not right now, but it should be added at some point since I'd like having that option myself and it should be easy to implement.

Q: "Can I put the widget on my phone's lock screen?"

A: Maybe. I was able to on my Samsung Galaxy A14 5G by purchasing the awkwardly-named Lockscreen Widgets and Drawer app for the low, low price of $1.49. YMMV. Here's what my lock screen looks like:

Portrait screenshot of phone lock screen showing RomanDigital widget

Note:

  • I get nothing if you click on the "Lock Screen Widgets and Drawer" link and/or buy the app, and my purchase and use of it are not meant as an endorsement. There may be other such apps that would work as well or better.
  • This didn't work so well with RomanDigital 2.x on Android 15 and its more aggressive power management 🙁 But with RomanDigital 3.0.0's overhauled widget updating code, it works great. 🙂

Q: "Why no version specifically for a watch?"

A: Because I don't have one to test on. Yet. I'd rather not rely entirely on virtual devices for testing.

Q: "Will it work on a watch or a TV?"

A: It might — haven't tried — but if it did, it would likely result in a time display that's "unoptimized for the given device's screen size." In other words, "too large" or "too small".

About

Android Digital Clock App and Widget with Roman Numeral Display

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors

Languages