**You are asked to develop a simple text editor web service for Android. It has 4 steps:**
**1. a simple editor**
**- There are many open source applications for that. You can get one and do some simple modifications.**
**- You display a standard soft keyboard on the bottom half of the screen and take the top half as text editing area.**
**- Whenever user touches on the soft keyboard, you get touch point and convert it to a letter to be entered into the text area.**
**- You just need to implement some simple editing functions.**
**- Note: you are NOT allowed to use any Android system input method.**
**- Note: you are NOT asked to make this 'input method' into Android system. Rather, please simply keep it as a simple Android application.**
**2. A simple web service**
**- You can also start with a simple open source project.**
**- Adding to the above editor, you send each and every user touch event to a server with known IP address through UDP. Actual packet format will be given separately.**
**- You setup the web service on a Ubuntu Linux server which logs all UDP packets from phone.**
**- You write a daemon on the server to take all the UDP packets, then do the same thing as on the phone to convert touch points to letters, then convert lowercase to upper and upper to lower, then send back to phone using UDP.**
**- Whenever user hits the SPACE BAR, on phone, you replace the current word with the word from server. This is to prove that the whole path is working.**
**- The daemon must be written in ANSI C (NOT C++, NOT Java) and must be reside in memory all the time. If you do want to use C++/Java, you shall also be responsible for integrating with our ANSI-C based library, AND you shall prove to us that the overhead (especially to latency and CPU load) is really small.**
**- There are some simple handshaking and initial config settings to be done to make the whole thing work anywhere. But we don't need any fancy UI, as long as it works.**
See below for step-3 and step-4.**
**3. Simple enhancement to the phone editor
- basically we want to display some candidates and let user to select. We will provide details separately as this requires some drawing.
- As mentioned above, you convert when you press SPACE BAR. In above we only do lower case to upper case. Now we want you to show 2 words above and 2 words below the main word inline (ie., in editing place).
- Furthermore, you need to implement 4 selection gestures to select them.
- If user keep typing, you simply take the primary one as is.**
**4. Simple enhancement to the web service
- We want to log time. So each and every packet shall carry time stamp at millisecond resolution.
- We want to minimize latency. That's why we use UDP instead of TCP. That's also why we need you to keep the server as daemon running in memory all the time and written in ANSI C.
- We need to minimize packet size. That means we need to have some simple packet packing/unpacking. No fancy compression. Just some simple bit operations, such as store each point (id, x, y) as a single 32-bit integer with id taking 8 bits, x and y each taking 12 bits.
- UDP packets may get lost. We need to add some redundancy and some error checking. Again, no fancy stuff but some very simple ones such as sending each and every packet twice and always send the latest three data points instead of only the current one.
- To reduce traffic we will send meaningful input actions instead of raw touch points. For example, no need to send ACTION_MOVE. But this improvement has to be done at a later stage to make sure we have everything right.
- We will put some additional time on further reducing overall input latency (which is the most notable issue with web based input).
- Plus a few other fairly simple improvements.**