- Designate master as the release branch and create a dev branch
- Follow steps in the Publishing Overview, where the app needs to remove debugging related features.
- Test the software on at least:
- Api Level 10 Phone (Gingerbread)
- Api Level 19 Phone (Kitkat)
- High resolution Formulize Icon? Ideally resolutions in:
- 512 x 512 icon for Play store is required
- Guidelines
- We don't have to put it up on the Play store, we could load the .api to the Freeform.
- Screen shots, promotional graphics for the Play store
-
On every activity, when the application is
onPause()
, save the current activity to the preferences, along with the current connection being used. -
ScreenListActivity needs to be refactored so it doesn't take in a
FormulizeApplicaiton
object. Instead it should be just taking the ConnectionInfo, and application ID -
applist.php
needs to take additional parameters to just return the screen of a specific application. -
A launcher activity should be added to read from the current preferences, so it returns the proper activity and connection that the user last opened.
-
For connections where the username and password are NOT saved, the user should be returned to the connection list when the application has been destroyed
- Create Handler class that Activities could pass themselves into
- Handlers can be passed to asynchronous calls, so once they are complete, they could pass the results into handlers
- Handlers will basically handle the message and manipulate the activity context as needed
- When the user logs in, it should first query the contents of the cache for the list of applications
- Then retrieve the results from network asynchronously, and update the list if there are changes compared to the cache.
Take advantage of Fragments in Android to show a side bar of applications in the screen view on tablets?
- Have a activity for setting up multiple Formulize sites:
- URL
- Name
- Options
- Usernames, Passwords
- If this happens, politely escort them back to the connection menu, and ask them to contact the webmaster.
- Log out the user
- Create a new Runnable that sends
op=logout
touser.php
. - Start it on a separate thread and then go back to the ConnectionActivity screen.
- Try showing the username, and URL of the connection in addition to the name
- Implement Method to retrieve connections selected from the list
- When there is now username specified in the login connection, ask for login
- Otherwise login automatically
- If there is a bad password/username, prompt for login credentials again
Create a new PHP file, a new GET handler that returns a JSON/XML representation of the application information on the server.
- This is done with the
app_list.php
file on the server side code. - The file uses the application_handler object, it basically strips out the unnecessary information from xoops objects and encodes it in JSON.
In the first Prototype, this was done by using a WebView
. However, this shouldn't be done anymore since we don't need to load an entire web browser to log in users.
Simpler HTTP Requests should be made instead. This way it also allows us to get the session token more easily, and detect whether a login has been successful or not.
In Android HttpURLConnection
is used to make network requests.
HttpUrlConnection
's CookieManager
stores any cookies given by the response header at Login (given by Set-Cookie
header). When a WebView
is initiated in the ScreenWebActivity
, it takes all the cookies collected by HttpUrlConnection
and transfers it to WebView
's own CookieManager
. That way WebView
would have the session cookies to access the screens requested by the user.
- Is there an alternative entry point that mobile devices could use to login and get a token from the Formulize server?
- How to deal with network that redirect users to a sign-in page?
- Currently all testing is done on Formulize running on ICMS, does the sign in process need to change on Joomla, Wordpress etc.?
- It seems like ICMS sets a ICMSSESSION cookie even when the user is not logged in. When I login directly with
HttpURLConnection
, there's I get twoICMSSESSION
cookies, presumably one for the login, the other for the "unlogged" one. - When should the list be refreshed once retrieved?
To handle asynchronous tasks such as network calls, Android encourages the use of AsyncTask
in its library. However, the Android Application Lifecycle does not automatically preserve asynchronous tasks when an activity is destroyed (e.g. when the user changes screen orientantion) hence AsyncTask
objects need to be attached to Android Fragments. Android allows some Fragments to be retained so it can bypass Android's destroy-create cycle, so AsyncTasks can be preserved by being attached to them. (Source)
LoginTask
should be implemented under this fashion. Currently if you rotate the screen while the system is logging in, the application will crash!
- Async Login Woes
- Do not access the UI toolkit outside of the UI thread!
- How do persist an AsyncTask when there is a runtime configuration change (e.g. screen orientation changed)?
In Android versions 3.0 or later, the use of the contextual action bar is encouraged when the users need to be able to perform actions on particular objects in the application. For our case, that would be editing or deleting connections from a list. However, I realized that Android does not support these feature in their APIs before version 3.0. Since Android 2.2, 2.3 still has ~30% of the Android market share, we should still support these older versions.
One way is to use ActionBarSherlock. It is an external library that backports some features in newer Android versions. I don't know how much time and effort it may take to use this external library though.