KDE Connect reaches 10.000 downloads in the Play Store

This is a quick post to say that, the 21st of March, KDE Connect reached the awesome number of 10.000 downloads in the Play Store! Yay! \o/

I’m very happy of this, specially because I don’t have a lot of time to put into the project at this moment, and I’m happy to see that the users and contributors of KDE Connect are keeping it alive!

And for those that can not or don’t want to use the Google Play Store, remember that KDE Connect is also available in the free store F-Droid, thanks to Daniel Martí! Also note that Blackberry 10 users can install KDE Connect on their phones this way, taking advantage of the compatibility with Android apps :)

Collaborate with KDE Connect!

I’ve been busy (and will be for some months) with my degree final thesis, and KDE Connect is suffering it with a development slow-down. However, we have received emails from people willing to help and I think that your contributions can be a good way to re-activate KDE Connect’s development. So, this post is for all of you who want to help!

First of all I want to post our own to-do list for KDE Connect, ordered by difficulty from easy to hard. Most of those items can be programmed as plugins, so code will be pretty stand-alone . Of course, if you have your own awesome idea you can also contribute it.

  • Input emulation: Use your phone as a touchpad/keyboard.
  • Answer SMS from the desktop: maybe integrating it with Telepathy.
  • Share from desktop: send files from Dolphin using a context menu service.
  • Reverse media controls:  Add remote controls to the plasmoid.
  • Sync stuff: Contacts, Wifi passwords (will need root acces), etc.
  • File browser: FUSE or KIO slave to access your phone filesystem from the desktop.
  • Call answering: I have no idea if this is possible and will probably need root access.
  • Port to other platforms: Windows (it already builds using KDE Windows!), iPhone, Blackberry, Jolla…

For now I think we can use this post comments to publicly discuss any issue and organize the development. If there is enough people involved I will set up a mailing list.

And finally I would like to explain to people not from KDE how to contribute to KDE Connect or any other KDE project. To get involved in KDE is easy: We use a tool called review board to submit patches to projects. This allows the project maintainer to review the code, ask for any modifications and finally integrate it into the development branch. After you submit a few patches and they are accepted, you can ask for a developer account so you can push your changes directly (even though you should always use the review board anyway). Remember that patches should be as atomic  as possible, and not include more than one feature.

In the KDE Projects site you will find the URIs of the different GIT repositories to grab the sources and start coding. Non-stable projects, like KDE Connect, are in the “Playground” category. And also remember that KDE Connect has two different repositories: kdeconnect-kde and kdeconnect-android.

Happy hacking!

GSOC 2013 ends, KDE Connect goes on: file transfers added

This year’s GSOC is over.  In the last 3 months KDE Connect has grown from a dream to reality. I will not take the money and run away from it now: I’m writting this post to announce that I will keep developing KDE Connect and that I hope other developers will join me to make it an awesome connectivity platfrom!

But that’s not all I want to announce, we have got new features too! The last merge to master included the promised file transfer plugin, renamed as “Share receiver plugin”. The new name makes more sense because it can not only receive files but also text and URLs from any Android app using the “Share to…” menu. For now this feature is only working from Android to KDE, but support for KDE to KDE and KDE to Android will come soon.

Here you can find a tarball for this version, tagged 0.3. We are not releasing a stable 1.0 version yet, because some things are still broken (like encryption, as you pointed me out in the comments of the last blogpost).

KDE Connect 0.3 tarball
KDE Connect Android app on Google Play
Android APK for people not using Google Play

How KDE Connect encryption works

The goal of this post is that the security experts out there find flaws in our design so we could improve the security of KDE Connect, which is an important point. Probably this will get too technical if you don’t know what RSA keys are, so proceed under your own responsibility ;).

The first thing we need in KDE Connect is the discovery of other devices. At the moment we provide a single backend that uses UDP broadcast to achieve this. When a device connects to a new network, it sends a broadcast message with its ID and name plus how to reach it (that is: IP and port). Other devices will react to that broadcast sending back their own contact information, so both devices know each other.  (Note: We tried Avahi instead of a manual UDP broadcast, but finally we didn’t use it because the Android implementation is of extreme poor quality and also multicast is sometimes blocked by routers :( ).

At this point the devices can ‘talk’ between them, but they don’t trust each other until the intervention of the user, so they will discard any incoming package that is not a pairing request.

Each device has a unique pair of RSA public and private keys. When the user decides to start the pairing process from a device, that device sends its public key to the other device. If the other device accepts the pairing (it will show a message to the user with a timeout asking to do so), it will send back its own public key, so now both devices will be able to send encrypted packages (using their peer’s public key) to each other, that only the expected recipient will be able to read.

Pairing diagram

Note that the public key can easily be retrieved from a device, just by starting the pairing process with it. So only with that key and the device ID (also public) you would be able to fake a device and send encrypted packages to any other in its name (even though you would not be able to decrypt the answer, since you don’t have the private key of the device you are faking). To solve this issue, we will require a both-way encrypted handshaking (which is not implemented yet):

  • Device 1 sends some random number encrypted with Device 2′s key
  • Device 2 decrypts the number and encrypts it again with Device 1 public key
  • Device 1 decrypts the number and checks it is the same it originally sent (so Device 2 have the correct private key to decrypt it).
  • The same happens swapping Device 1 and Device 2

Do you think that the security this provides is enough or are we missing something? Would be better to have a different pair of public/private key for each device, instead of a single one?

Thank you all and happy hacking!

Releasing KDE Connect Technology Preview

Google Summer of Code 2013 is coming to the end and we are working hard to have a stable and functional version of KDE Connect before then. To achieve this goal we are taking two actions:

  • We are beginning to distribute tarballs of the KDE client sources and we have uploaded the Android app to the Play store, so we can have more testers (links at the end of the post).
  • Since receiving bug reports in blog comments does not scale very well, we are moving KDE Connect to KDE’s playground and adding it to the KDE bug tracking system.

We will use the feedback we receive to improve the usability and fix bugs while we finish developing the file transfer feature. Note that we have disabled the battery report in this version because it required to patch kdelibs. Our plans are to just include the battery report in the plasmoid we already have to avoid that patch, but it’s not done yet.

As always, the changelog since the last blogpost follows:

  • RSA encryption (more info about this in next posts)
  • Symmetric encryption
  • New Android interface, that should be compatible with 2.3 devices

You can clone the new git repositories from these nice and short urls:

git clone git://anongit.kde.org/kdeconnect-kde
git clone git://anongit.kde.org/kdeconnect-android

And you can get the current stable version from these links:

KDE Connect 0.1 Technology Preview tarball
KDE Connect Android app on Google Play

KDE Connect: Screenshots of new functionality

Two weeks has passed since my last post about KDE Connect. This is mainly because most of the work done was on the internals of the platform and there was nothing to show until now. That why I think this is the perfect moment to put here some screenshots of a new functionality that we just pushed to GIT: Notifications sync for Android 4.3! It is still in a very early stage, but we have ambitious plans for it.

NotificationSync

And here is a a screenshot from our new and beautiful KCM that we already posted some days ago on Google+. Everything but the file transfers is already working now, so we should be in time to finish it before the end of the GSOC.

kcm

This KCM shows part of the work done in the GUI, that is being improved in both KDE and Android (and that’s the reason why we have dropped support for Androids prior to 4.0 again, sorry! we are using new GUI elements like action bars,  but we will make them optional to support 2.3+ again soon).

And last but not least I want to thank Àlex Fiestas (my mentor in this GSOC) and Aleix Pol because they are awesome, and because without their help and advice this project would not be possible. Really, thank you guys!

As always, you can grab the sources and a precompiled APK for Android from those links:

https://dl.dropboxusercontent.com/u/8820360/apks/KdeConnect.apk

git clone git://anongit.kde.org/scratch/albertvaka/kdeconnect-kded
git clone git://anongit.kde.org/scratch/albertvaka/kdeconnect-android

Stay tuned!

KDE Connect improvements

After the feedback we have received (you guys are awesome), we have made some improvements and fixes to KDEConnect. The most notable are:

  • Support for Android 2.3!
  • More reliable connection backend, using broadcast messages instead of Avahi
  • Improved MPRIS controls including volume control
  • Removed annoying connection notifications :P

We have received lots of great ideas to implement too, and that’s why we are working on a plugin system to make it really easy for any developer to implement  his/her ideas.

You can download the latest “stable” APK from the same URL as before:
https://dl.dropboxusercontent.com/u/8820360/apks/KdeConnect.apk

If you prefer to download the latest development APK, use this URL instead:

https://www.dropbox.com/sh/4fmgnssgiu9oatz/-tcd-oDD1p

Please note that if you already have the previous APK installed, you will need to manually uninstall it before being able to install this one.

And as always you can download the KDED and Android app source code from git:

git clone git://anongit.kde.org/scratch/albertvaka/kdeconnect-kded
git clone git://anongit.kde.org/scratch/albertvaka/kdeconnect-android

Have fun!