Cid is an open source Android PDF reader (I am making a web version too) able to share realtime interaction online. It is created to help Networked Music students and performers to interact on music sheet on a distance or locally. Works with UDP sockets and on any modern android tablet.
How to use:
- Choose a document you want to open by the app main page (currently showing only the Downloads Folder) or with the "Open With" options in your Android File Manager
- Drag your finger on a page to draw, if the other device has the app open, annotation data and current page will be synchronized
How to connect
- When viewing a document, open the menu by clicking the top right menu icon in the action menu
- Type the address you would like to connect to and click "ADD TO CONNECTIONS".
- Close the menu, all your interactions are now synchronized
Video example for a CidReader-PDF session
Trello board with tasks and useful info
-
CidReaderPDF is based on the MuPDF renderer by Artifex: In particular the version development started from, is the Mupdf Android Mini Viewer
-
Currently used colorpicker for annotations:
-
Annotation layer is based on Ssaurel's FingerPath object to store touch data and draw strokes
Right now Cid features:
- Connectivity with other users through UDP sockets
- PDF, XPS, OpenXPS, CBZ, EPUB, and FictionBook 2 rendering
- Syncronized annotations to highlight or draw with a finger or a smart pen
- Syncronized page turning
- Color picker
- Hide/show annotations easily
- A menu of connected users
- Fast rendering, works on old devices
- Save/Load annotation files
- Easy to use multi-node connections
- Update new users by sending them all annotations at realtime
- Platform: Android
Being planned:
- A Web Version using WebRTC + Pdf.js
- Customizable permissions systems for mutliple groups of users
What is missing but would be great:
- A simple way for NAT traversal
- File transfer (at the moment you HAVE to have the PDF file in your download folder to be able to see it) (it's easy to implement but laws are pretty strict on this and before implementing this I would like to be sure we are not breaking any copyright by simply allowing FTP)
While the NAT traversal solution is discussed, a simple way to connect through NATs that has been tested it by using ZeroTier (open source Hamachi-like app with an android app port). It adds some latency but it's acceptable for common uses.
Contributing, main pieces of code:
MainActivity.java is the main menu, this is where you setup connection and scroll documents.
DocumentActivity.java is the main document part of code. Here you manage document, annotaion, touch, global variables, instances of paintviews with connections ( .
PageView.java is where PDF pages are managed (slightly edited version of the original from MuPDF mini).
PaintView is the annotation class, it stores strokes for each page. Each user owns an instance of PaintView in DocumentActivity (each user has a layer to draw on).
This project was possible thanks to the "Orio Carlini" Scholarships from Consortium GARR and hosted by Conservatorio Giuseppe Verdi di Milano
License
Following MuPDF license, this project must be under the AGPL License.
"If your software is open source, you may use MuPDF under the terms of the GNU Affero General Public License. This means that all of the source code for your complete app must be released under a compatible open source license! It also means that you may not use any proprietary closed source libraries or components in your app. This includes (but is not limited to) Google Play Services, Google Mobile Services, AdMob by Google, Crashlytics, Answers, etc. Just because a library ships with Android or is made by Google does not make it AGPL compatible! If you cannot or do not want to comply with these restrictions, you must acquire a commercial license instead."