As I mentioned at the start of the year I am working on bringing Unread to the Mac. I recently implemented Unread’s caching options on macOS. Like on iOS, paid subscribers to Unread will be able to cache webpage text, images, or both. Unread’s caching makes the display of articles very fast because all the information needed to display an article is on the device. It also allows customers to read articles from summary-only feeds and view embedded images when no network connection is available.
I wanted to share my experience implementing the user interface to setting these caching options on macOS. It is an interesting and somewhat comical example of how building a user interface that seems simple can require several iterations.
On iOS the caching options are simple. There is a Webpage Text caching option and an Images caching option. Each can be set to “Always”, “Wi-Fi Only”, or “Never”. The only caveat is that one cannot choose to cache images without caching webpage text. Unread needs the webpage text to determine the set of images embedded in an article from a summary-only feed.
Initially I thought this was very straightforward, I just needed the same two options on macOS as pop-up buttons. But there were some issues.
What About Ethernet?
The first adjustment I needed to make was accounting for Ethernet. When using an Ethernet connection, caching works as if the device is using a Wi-Fi connection. The settings interface needs to be clear about this.
Technically an iOS device could also be connected via Ethernet, but that is very rare. I would rather the iOS interface stay simple and just say “Wi-Fi Only”. On macOS the situation is different. Ethernet is common enough that the interface should be clear about it.
Therefore the pop-up button options needed to be “Always”, “Wi-Fi or Ethernet Only”, or “Never”. That was a little wordy, but it accounted for Ethernet.
What Is the Difference Between “Always” and “Wi-Fi or Ethernet Only”?
On iOS it is clear that “Always” includes when using a cellular connection, “Wi-Fi Only” does not.
While no current Mac has cellular hardware, a Mac can use Personal Hotspot from an iPhone or iPad. Considering Personal Hotspot is important. I anticipate that some customers will need caching to happen when connected via Personal Hotspot, and other customers will need to minimize their cellular data usage. The ability to treat Personal Hotspot differently needed to stay, but there was still a problem. A Mac user who does not often use Personal Hotspot might look at “Wi-Fi or Ethernet Only” and “Always” and think what else is there besides Wi-Fi and Ethernet, and why is that a different option?
I needed to clarify the options. I could make options for each of the two pop-up buttons any one of the following:
- “Enabled”, “Enabled except when using Personal Hotspot”, or “Never”
- “Enabled”, “Enabled even when using Personal Hotspot”, or “Never”
- “Personal Hotspot, Wi-Fi, or Ethernet”, “Wi-Fi or Ethernet Only”, or “Never”
Each of these is clear, but none would look right as pop-up button or radio options.
I needed to rethink how to present these options on macOS, ignoring how they are presented on iOS. Connecting via Personal Hotspot from a Mac is a somewhat exceptional case, unlike being connected via cellular network when using an iPhone. It needed to be treated as such.
That lead me to think there should be two pop-up buttons: a general purpose Cache pop-up button that could be set to “Nothing”, “Webpage Text”, or “Webpage Text and Images”, and a When Connected via Personal Hotspot pop-up button with the same set of options.
This was a little better.
Even More Simplicity
I was still not happy with the When Connected via Personal Hotspot pop-up button. The name was long, and it felt like overkill.
I ended up removing that pop-up button and replacing it with a checkbox that disables caching when using Personal Hotspot. The checkbox is disabled when Cache is set to “Nothing”. The disadvantage of this approach is that the customer cannot choose to cache both webpage text and images when connected using Ethernet or Wi-Fi, but only cache webpage text when using Personal Hotspot. While that disadvantage is significant, I believe it is the right trade-off on the Mac where connecting via Personal Hotspot is an exceptional case. It keeps Unread’s presentation of options simple.
What About Cellular Devices Other Than Personal Hotspot?
Ideally a setting for Personal Hotspot would apply to any device that provides a similar function, such as hotspot functionality in an Android phone or a dedicated hotspot device.
I would like the setting to do that. Perhaps it does, but I cannot promise this. Apple’s API documentation only promises that the relevant API call applies to Personal Hotspot.
Even if I could confirm that the setting applied to most Android phones or most hotspots, it is likely that there is an exception to this. I need to err on the side of underpromising what the “Disable when connected via Personal Hotspot” checkbox does. Therefore the wording around this setting will refer only to Personal Hotspot.
How Is Unread for the Mac Coming Along?
I have been using Unread on my Mac for months. Functionality that has been implemented works well, but I am not ready for anyone else to use it — even as a beta. I am hesitant to provide an estimate. However this is an incomplete list of functionality that I have implemented and that works well now in Unread for the Mac:
- Adding accounts of all supported types (Unread Cloud, Local, Feedbin, Feedly, Fever, Inoreader, and NewsBlur)
- Syncing with accounts of all supported types
- Showing subscriptions, article lists, and articles
- The Subscribe in Unread and Save to Unread share extensions
- Toggling the read/unread status of an article
- Toggling the starred/saved/read later status of an article
- Mark Above Read, Mark Below Read, Mark All Read
- Mark Read on Scroll
- Hide Read Items
- Article list options for showing thumbnails, authors, and summaries
This is an incomplete list of functionality that I still need to implement in Unread for the Mac:
- Adding, editing, and removing feed subscriptions from inside the app
- Article actions (saving to services such as Instapaper and Pocket)
- Handoff between devices
- Changing the dock icon
- Importing and exporting of subscriptions
- Account-specific settings around retention of old articles
Things are coming along, but I still have a lot of work to do.