Skip to content

About

Combination of a beautiful clock with widget, alarm, stopwatch & timer, no ads

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

Fossify Clock

Logo

Get it on Google Play Get it on F-Droid Get it on IzzyOnDroid

Introducing Fossify Clock – the ultimate timekeeping companion designed to enhance your daily routines and promote better sleep habits. With a multitude of functions tailored to your needs, Fossify Clock seamlessly integrates into your life, offering unparalleled convenience and versatility.

⌚ MULTIFUNCTIONAL TIMEKEEPING:
Experience the power of versatile time management with Fossify Clock. From serving as a clock widget to functioning as an alarm clock and stopwatch, this app is your go-to tool for regulating your daily activities and improving your overall lifestyle.

⏰ FEATURE-RICH ALARM:
Wake up refreshed with Fossify Clock's comprehensive alarm features. Set multiple alarms with options like day selection, vibration toggle, custom labels and ringtone customization. Enjoy gradual volume increase and a customizable snooze button for a pleasant waking experience. With a user-friendly interface, setting up alarms has never been easier.

⏱️ CONVENIENT STOPWATCH:
Track your activities with precision using Fossify Clock's stopwatch function. Measure longer periods or individual laps effortlessly. You can also sort your laps in ascending or descending order.

⏳ PRECISE TIMER FUNCTIONALITY:
Stay on top of your tasks with Fossify Clock's versatile timer feature. Customize ringtone preferences, toggle vibrations, and pause countdowns to suit your needs. Whether you're timing cooking intervals, managing study sessions, or ensuring timely breaks, Fossify Clock has you covered with precision and ease.

🌈 CLOCK WIDGET WITH CUSTOMIZABLE FEATURES:
Transform your home screen with Fossify Clock's customizable clock widget. Adjust text color, background color, and transparency. Choose between analog or digital clock to suit your style and easily access essential time information at a glance.

🎨 CUSTOMIZABLE INTERFACE AND THEMES:
Enjoy a personalized experience with Fossify Clock's material design and dark theme options. Tailor the app to your preferences with customizable colors and themes, enhancing usability and reducing eye strain, especially in low-light environments.

🔒 PRIVACY-FIRST APPROACH:
Rest assured knowing your privacy is protected with Fossify Clock's offline operation. Experience maximum privacy, security, and stability without sacrificing functionality or convenience.

🌐 AD-FREE & OPEN-SOURCE:
Say goodbye to intrusive ads and unnecessary permissions. Fossify Clock is ad-free, fully open-source, and grants you complete control over your timekeeping experience.

Upgrade your time management skills, optimize your routines, and prioritize better sleep with Fossify Clock. Download now and take control of your time like never before.

➡️ Explore more Fossify apps: https://www.fossify.org
➡️ Open-Source Code: https://www.github.com/FossifyOrg
➡️ Join the community on Reddit: https://www.reddit.com/r/Fossify
➡️ Connect on Telegram: https://t.me/Fossify

App image App image App image

Fork changes (Yet-Another-Clock)

  • Removed dead, inapplicable XML attributes on the analog clock widgets. Both widget_analogue.xml (the actual home screen widget) and widget_config_analogue.xml (its config-screen preview) declared an <AnalogClock> view carrying attributes that only exist on TextClock/ TextView - format12Hour, format24Hour, all four autoSize* attributes, gravity, includeFontPadding, maxLines, shadowColor/ shadowDy/shadowRadius, and textSize. AnalogClock is a plain View that draws a clock face with hands - it has no text and doesn't recognize any of these; they were inert. Strong signs this was copy-pasted from the digital widget's TextClock declaration with only the class name changed. The home screen widget's clock also had a leftover, actively misleading id (widget_text_clock on a view that isn't a text clock) - confirmed no Kotlin code referenced it before renaming to widget_analog_clock. Purely a cleanup - nothing here changed runtime behavior (Android's inflater silently ignores attributes a view doesn't declare, so this wasn't causing a crash), but it's exactly the kind of leftover cruft worth clearing out.

  • Investigated and ruled out, no changes needed: the ViewPager tab architecture (real Fragments via FragmentStatePagerAdapter, correctly paired onCreate/onDestroy EventBus registration - not the same leak found in Yet-Another-Voice-Recorder's custom View-based pseudo-fragments), the timer countdown (uses Android's real CountDownTimer, not a naive postDelayed loop - no drift bug), alarm scheduling (correctly uses setAlarmClock()/setExactAndAllowWhileIdle(), the Doze-aware APIs, for the right cases), and the digital widget's date/time text (both native TextClock views that auto-update correctly on their own, including midnight rollover - not the manual-refresh staleness bug that pattern usually hides).

Beautify pass (Yet-Another-Clock)

  • Gloss highlight overlay on all three FABs (Alarm, Clock/timezone, Timer "add" buttons). Material's FloatingActionButton (which MyFloatingActionButton extends) manages its background, elevation, shadow, and ripple tightly via backgroundTintList - a flat ColorStateList, no gradient support - so overriding its actual background drawable risks breaking that built-in behavior in ways that can't be verified without a device. Tested the alternative first with a PIL render simulation before writing any XML: a flat-colored circle plus a small separate translucent highlight convincingly reads as glossy on its own, without touching the FAB's own rendering at all.

    Implemented by wrapping each FAB in a FrameLayout (previously a direct CoordinatorLayout/ConstraintLayout child) and adding a small non-interactive View on top using a new radial-gradient drawable (fab_gloss_highlight.xml) - clickable="false", focusable="false", and importantForAccessibility="no" so it can't intercept touches or clutter screen-reader navigation. Confirmed each FAB is referenced only by its own id in Kotlin (alarmFab/clockFab/timerAdd, all via simple .setOnClickListener), so wrapping its parent doesn't affect anything code-side. The Timer fragment's FAB lives in a ConstraintLayout rather than CoordinatorLayout like the other two - moved its layout_constraintBottom_toBottomOf/layout_constraintEnd_ toEndOf/margin onto the new wrapper and left the FAB's own backgroundTint/rippleColor attributes on the FAB itself, unchanged.

    Not verified on a real device - the underlying highlight-over-flat- color technique was verified via render simulation (not just reasoned about), but the actual FAB elevation/shadow interaction with the overlay hasn't been checked on a live render.

About

Combination of a beautiful clock with widget, alarm, stopwatch & timer, no ads

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages