===============[ Skills & achievements in Lab 2 ]=============== NOTE: In this lab, you may lose points for crashes or regressions. See "Lost Points" below. - Implementing a Tabbed UI - Constructing a UI out of several Fragments - Changing visible Fragments in response to events - Use of Tab Layout, ActionBar menu, or equivalent - Implementing sliding screens with a ViewPager (or equivalent) - Use of PreferenceFragment to display user profile information - UX design - Implementing a reasonable flow of sign-up, profile data generation, uploading (saving) the data to the server as well as saving it locally, local deletion of data on sign-out, and, optionally, retrieval of data from the server on sign-in after a sign-out. - Extra credit: updating the data in the Preferences tab and uploading the update to the server (we'll require this in the next lab) - Android threading model - Executing tasks off the UI thread (by any mechanism) - Communicating with the UI thread from a worker thread - Using post(), Handler, AsyncTask, or equivalent API - Networking - Sending a GET request with parameters, receiving and displaying server's response - Sending a POST request with a non-empty body - Controlling headers of an HTTP request - Handling a JSON response - Parsing JSON with a library (no ad-hoc parsing except to debug!) - Handling network error conditions gracefully (e.g., your app should not crash when attempting to connect a non-existent host or address) - Consistent handling of network state (has a connection been made? has the data been uploaded? has the upload been ack-ed by the server? etc.) Each one of these 16 items earns 2 points if done correctly, 1 point if buggy but generally working, 0 if not attempted or never functional. Additional 8 points are assigned for style (2 each, as above): - use of git for source control - meaningful commenting - consistent indentation - consistent use of Java facilities (constants, private, annotations, etc.) Overall: 16*2 + 8 = 40 points Lost points for regressions and crashing: Up to 3 points can be subtracted if an app crashes or some of the functionality implemented in Lab 1 stops working (a regression). Specifically, 1 point will be subtracted if a crash occurs under some unusual circumstances, 2 if it occurs sporadically, and 3 if it occurs reproducibly on every launch. Extra credit: 2 extra points for profile update functionality working, 1 point for semi-working. 2 extra points for meaningful reporting of upload progress (say, of profiles that include thumbnail images). PLEASE do NOT upload full-size images yet! Total: 40 + 4 = 44 maximum, BUT, TAs will assign up to 4 extra points for innovative solutions, research (e.g., of bugs), or design.