As I mentioned I'm planning to do, I'm finally now releasing the source code and assets for the Touchpad app and related server code. I've received some interest and feedback that I'm just not finding the time for myself to implement. I built the app primarily to solve a problem that I had, and now that the problem is pretty much solved for my needs, I've mostly stopped working on it. That said, I'd like to enable others to make improvements!
The source is available on GitHub. The code and assets are released under the MIT license; however, my hope is that if there is interest in working on the app, that contributors will issue pull requests on GitHub and I can release updates with your improvements to all the current Touchpad users. Of course, Touchpad will always be completely free and never include ads: I won't be profiting from anyone's work on this project. Anyone contributing a change that is released with the Touchpad app on Google Play will of course be credited.
Here is a rough outline of where the project is at:
- Probably the highest priority issue to fix is connection stability issues. I personally have not been able to reproduce these problems on my network/device with rare exceptions (once a week at most), but many users have reported this as a much more frequent issue in comments here and on Google Play. This is almost certainly due to the lack of multithreading in the Android app. On my network, I seemed to just be able to get away with using a non-annoying timeout period for TCP socket operations (the Timeout option in Preferences), but clearly this isn't cutting it for many users. I believe the server app is solid here, I'm much more experienced with C++/Windows and was comfortable using a separate thread for network operations. The real solution to this problem would likely be to implement multithreading for network communication in the Android app.
- I've included all the resources used to build the app: both SVG files created with Inkscape, and rendered PNG files. One thing on my to-do list was to automate the rendering of the SVG files into PNG. The reason this is tricky is it made a lot of sense to use one SVG file to render several of the interface assets, by turning various layers on/off. I didn't dig into Inkscape/SVG files enough to figure out how to automate this process, and I wasn't changing these assets frequently enough to justify that investment.
- Had I known that it was practical to use the VNC protocol as a means of controlling the computer without involving the remote viewing capabilities of VNC, I would have used it instead of building my own protocol and server app. This would be much better because users would not have to worry about installing a native windows application on their computer, not to mention a native app that has the ability to listen for commands from the internet and control their machines! Additionally, any platform with a VNC server application available could be controlled by Touchpad, instead of just windows. This would be a fantastic improvement, but a challenging one.
- There is a difference between the code released on GitHub and the latest version on Google Play. I began implementing a system for saving favorite servers by adjusting the menu hierarchy and some other small changes, but I never finished this feature.
Hopefully, this isn't starting the open source life of this project off too terribly! My hesitation in doing this so far has simply been that I have little experience with open source projects. If you see me doing something stupid, please don't hesitate to tell me!