Light Theme
Home Blog About Me Contact Clipboard Everywhere

Clipboard Everywhere 3.0: New UI, Windows Clipboard Formats, and Android 10

Friday, March 13, 2020

This release primarily brings a new, more performant UI to Windows, as well as more advanced Clipboard functionality. The Windows release has diverged from Android due to new restrictions added in Android 10.

Windows Clipboard Formats

The Windows clipboard supports formats - this means that when data is added to the clipboard, it has a specified format, e.g. plain text. Data can be added once in plain text, again in rich text, again in application specific formats; and these formats all exist simultaneously on the Windows clipboard. These are added by the application that you copy from.

The purpose of these formats is to enable rich data exchange. For example, when you copy text from a webpage in Google Chrome or Microsoft Edge, and then paste into OneNote, a link to the source webpage will be pasted into OneNote along with the text you copied. This is possible because the browsers not only copy the plain text to the clipboard, but they copy other formats with additional data, such as a link to the source webpage. When you paste into an application, the receiving application reads the clipboard and can see the available formats, so it then chooses the preferred format.

Previously, Clipboard Everywhere would only copy the plain text, but now it will copy all available text formats on the clipboard. This means that formats will now be synced between your Windows devices, and will be re-applied to the Windows clipboard when copying from your clipboard history. Previously, if you had copied formatted text from OneNote - such as headings, highlighted words, e.t.c. - then copied something else, and re-copied this first item from your clipboard history, the formatting would have been lost. Now, the formatting is preserved.

Windows UI

The Windows app is now using a different UI framework. This is partly because I was not satisfied with UI performance under WPF, which is known to have an abysmally performing animation pipeline; but more driven by my desire to support additional desktop platforms.

The Windows app now runs with Electron, meaning the UI runs in a Chromium window. All application logic still runs in .NET, achieved through using Electron.NET. Use of Chromium brings increased memory usage, though not as bad as full electron since all logic is still in C#, now running with .NET Core 3. Use of Chromium has allowed me to create much nicer, much more performant animations, which I am happy about.

Unix-based Desktop Platforms

As the UI is running in Chromium with Electron, and the application logic in .NET Core 3, the new app is almost entirely workable on macOS and presumably some Linux distros. All of the clipboard functionality is nicely sectioned off from the main app, pretty much as a plugin. To function on other operating systems, it would require a new clipboard plugin for any new operating system, and minor changes to the main application code.

I have tried getting the new app to work on macOS, but I've been experiencing strange networking issues. I did develop a clipboard plugin for macOS, which functions correctly. At this point, I don't know if this is a problem with .NET Core 3 on macOS, or with my macOS virtual machine. Either way, this networking issue is critical and is why the macOS app cannot be released at the moment, aside from it otherwise being complete. Developing for macOS has been very difficult without owning a mac, as Apple does not support the virtualization of macOS on non-macOS hosts; unlike Linux distributions and Windows, which are very well supported for virtualization. Due to this problem, I'd like to instead look at a linux distro like Ubuntu, which should virtualize correctly on a Windows host.

Android 10

With the latest few main Android releases, Google has enjoyed taking functionality away from Android users. We have lost our ability to use call recording apps, and apps have lost the ability to send SMS messages. Google always paints this as a privacy benefit, to put an end to malicious apps - but they don't give us a choice in making decisions for ourselves.

The latest such feature loss is clipboard monitoring.

Google has added a permission for monitoring the clipboard from the background - an entirely reasonable thing to do, which I would support fully. The problem is that, again, Google has not allowed users to decide which apps can be granted this permission. Who decides which apps can be granted the clipboard monitoring permission? Google and device manufacturers, because apparently they know better than their customers when it comes to what each app should and shouldn't be able to do. Only system apps, and the default keyboard, can use this permission. As Clipboard Everywhere is not made by a device manufacturer, and is not a keyboard app, it can no longer monitor the clipboard on Android 10. SuperDrop and Backgrounds functionality should still work.

Due to this change, Clipboard Everywhere will not receive the 3.0 treatment on Android, and will remain on version 2. The app will function fully on Android 9 and below, and you can still consume the clipboard history on Android 10, but on Android 10, you cannot add to that clipboard history. As Google has disabled the core functionality of the app on new Android versions, the Android app is now in maintenance only and will not receive new features. I have no plans to drop support for the Android app, and will ensure it continues to function as-is for Android 9 and lower.

As a final note on the Android app, it has been removed from Google Play due to me not seeing an email where Google asked me to specifiy the target audience of the app. I am fine with this as I wanted to remove it from Google Play anyway, though as a developer this is not something we I am allowed to do. I feel that keeping it on Google Play would attract negative reviews due to this change made by Google, which I unfortunately have no control over. The app will continue to be available at clipboardeverywhere.com.

Back to Blog