{"id":26385155,"url":"https://github.com/danwallach/calwatch","last_synced_at":"2025-10-17T19:00:09.276Z","repository":{"id":23144526,"uuid":"26499738","full_name":"danwallach/CalWatch","owner":"danwallach","description":"Android WearOS watch face app, displays your day's events on your wrist","archived":false,"fork":false,"pushed_at":"2022-07-12T20:34:53.000Z","size":93121,"stargazers_count":26,"open_issues_count":2,"forks_count":6,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-03T03:13:00.038Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.cs.rice.edu/~dwallach/calwatch/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danwallach.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-11T19:07:15.000Z","updated_at":"2024-07-21T10:34:31.000Z","dependencies_parsed_at":"2022-07-14T01:30:34.988Z","dependency_job_id":null,"html_url":"https://github.com/danwallach/CalWatch","commit_stats":null,"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/danwallach/CalWatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danwallach%2FCalWatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danwallach%2FCalWatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danwallach%2FCalWatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danwallach%2FCalWatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danwallach","download_url":"https://codeload.github.com/danwallach/CalWatch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danwallach%2FCalWatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279401644,"owners_count":26163293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-17T02:00:07.504Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-17T07:39:58.165Z","updated_at":"2025-10-17T19:00:09.169Z","avatar_url":"https://github.com/danwallach.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"![CalWatch2](images/feature-graphic-sm.png)\n\n* Copyright © 2014-2022 by Dan S. Wallach\n* Home page: http://www.cs.rice.edu/~dwallach/calwatch/\n* Licensing: http://www.cs.rice.edu/~dwallach/calwatch/licensing.html\n* On the Google Play Store: https://play.google.com/store/apps/details?id=org.dwallach.calwatch2\n\n\n## tl;dr\n\nCalWatch2 is an open-source WearOS watchface, compatible with WearOS 1.x and 2.x, that reads your calendar\nand renders the next twelve hours of your schedule around the face of the watch. CalWatch2\nis mostly implemented in the Kotlin programming language.\n\n## What's where\n\n* notes.txt -- ongoing work, notes, to-do items, etc.\n\n* /images -- screen dumps and assorted graphics\n\n    * note: \"resample.csh\", at the top level, starts from a\n      high-resolution screen dump and generates preview images at all\n      the correct resolutions; these downstream dependencies are all\n      checked in, so unless you're changing the the icon, you don't\n      need to rerun this csh script. Also note that you'll need the\n      Imagemagick package installed to run it.)\n\n    * For most things, I'm now using the vector / scalable image types\n      supported by Android. You'll find PDFs (drawn in Illustrator) here,\n      and SVG output from that, which is then digestible by Android Studio.\n\n* /app -- the unifed app that runs on Wear watches\n    * src/androidTest/java/ -- some old unit tests for event layout\n    * src/main/kotlin/ -- CalWatch source-code files\n        * org.dwallach.calwatch2/ -- CalWatch Kotlin files\n        * org.dwallach.complications/ -- based on the Android sample code and heavily modified\n\n    * src/main/java/EDU.Washington.grad.gjb.cassowary -- the Cassowary linear constraint solver\n        * The code here is essentially unchanged from the original\n          (http://sourceforge.net/projects/cassowary/), but with\n          tweaks to compile under newer Java versions, including\n          updates to use the newer parametric HashMap versus the\n          older non-parametric Hashtable.\n\n\n## History\nThe original version of CalWatch was engineered for the original version of Android Wear, which\noriginally shipped without any documented support for Android Wear watchfaces. You can see\nthis in the [release1 code](https://github.com/danwallach/CalWatch/tree/release1) from November 2014.\n\nThen, Google announced decent APIs for building watchfaces, which did all the hard work for you.\nThis allowed [release2](https://github.com/danwallach/CalWatch/tree/release2) to simplify many things.\n\nFor [release3](https://github.com/danwallach/CalWatch/tree/release3), I added in support for an\nexternal stopwatch and timer app that would send messages to CalWatch to display their state on the\nwatchface. (This was before Android Wear supported complications.) Also, in the earlier versions\nI was reading calendar events on the phone and sending them over to the watch. By this time, the watch\nfinally had a working local calendar database, greatly simplifying things.\n\nFor [release4](https://github.com/danwallach/CalWatch/tree/release4), I ported everything to\nKotlin. I wrote up [the engineering process](https://discuss.kotlinlang.org/t/experience-porting-an-android-app-to-kotlin/1399)\non the Kotlin discussion board.\n\nFor [release5](https://github.com/danwallach/CalWatch/tree/release5), I rewrote the phone-side\nconfiguration panel, using all the newest Material Design style.\n\nShortly thereafter, at Google I/O 2016, Google announced WearOS 2 which, of course,\ncompletely changed how the phone and the watch relate to one another,\nmaking it easier for a WearOS watch to interoperate with an iOS phone, but killing off the\nidea that every Wear app is embedded in an Android phone app. Fast forward to I/O 2017 and\nGoogle announced they were providing sample code and libraries to make it much easier to support\ncomplications, plus they began rolling out Wear 2 to more watches. If you rummage through the\ncommit history, you'll see that I had the watch running with complications, but without a particularly\nusable configuration UI on the watch.\n\nI finally got everything working and pushed proper Wear1.x and 2.x-compatible APKs to the Play Store\nin December 2018/January 2019. The current release also uses the latest\nKotlin coroutine support to do the expensive calendar processing asynchronously, and has\na bunch of other small tweaks to use more of the Kotlin stdlib features that didn't exist\nin earlier Kotlin releases. There seems to be [a bug in how we get notified about calendar\nchanges](https://issuetracker.google.com/issues/122149553) that impacts the Android 8.1 Oreo variant\nof WearOS that's running on WearOS devices, but it seems to be fixed in the \"Wear H\" variant\nbased on Android 9.0.\n\nOtherwise, what's notable about *release6* relative to earlier releases is how much code is now gone.\nWith the new complication support, I threw out CalWatch's support for external stopwatches and timers,\nsince you can just connect to those things using WearOS complications. I similarly threw out the\nstep-count complication for the same reasons. I did keep my battery gauge dot in the center of the\nwatch and my day/date rendering on the left -- both because I felt I could render those better with\ncustom code than the general-purpose complication libraries do.\n\n\n## Credit where credit is due:\n\n* Cassowary linear constraint solver by Greg J. Badros and Alan Borning\n  https://constraints.cs.washington.edu/cassowary/\n\n* \"Unavailable calendar\" icon by Björn Andersson\n  http://www.flaticon.com/authors/google\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanwallach%2Fcalwatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanwallach%2Fcalwatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanwallach%2Fcalwatch/lists"}