User:Cognifloyd/LDSTools for Android Architecture
Why am I doing this? I'm Assistant Stake Clerk / Stake Website Administrator in a YSA Stake. I've got to train the leaders in the stake on how to use all of these great tools - but they don't work right. And, as YSA units seem to be low on the priority list for the LDSTools for Android devs, I'm trying to figure out how I can help resolve issues for YSA stakes/wards like mine. Don't get me wrong - handling Households and Pictures are much more universally helpful features. I don't want to discourage anyone from working on them. I would like to encourage work on issues that help me, and those I serve, fulfill our callings. :D
External libraries reside in /libs/, but are defined in pom.xml. In trunk (no /libs/ in 1.1.0), LDS Tools for Android is using the following (added in Rev 1872 & Rev 1912. Verified accurate as of Rev 1950.):
|In pom.xml?||Library Name||Purpose||File in trunk||Version in trunk|
|yes||RoboGuice|| Google Guice on Android - "smoothes out some of the wrinkles in your Android development experience and makes things simple and fun."
This depends on Google Guice and compatibility (see below)
| Dev SNAPSHOTS:
2.0.20111219 (old) 2.0.20120209
|Google Guice|| Provides CDI (Contextual Dependency Injection)
Guice 3.0 without AOP, suitable for Android - Needed by RoboGuice (above)
|yes||Compatibility Library V4||Provides newer Android API for older devices that don't have the necessary API calls. Needed by RoboGuice (above)||compatibility-v4-r6.jar||r6|
|@inject||I'm not sure why this one is in here. Perhaps because Guice doesn't have the aop parts.||javax.inject-1.jar||1|
|aopalliance||I'm not sure why this one's here... Perhaps because Guice doesn't have the aop parts.||aopalliance-1.0.jar||1.0|
|yes||SQLCipher||Open Source Full Database Encryption for SQLite.|| sqlcipher-1.1.jar
ameabi/lib*.so (native code libs)
|yes||Apache Commons Codec||Required by SQLCipher for decode/encode of db||commons-codec-1.6.jar||1.6|
|yes||Google Guava Libraries||Required by SQLCipher. "The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth."||guava-11.0.1.jar||11.0.1|
|yes||FlurryAgent Analytics|| Analytics Agent Utility used to send analytics to a server from the mobile device.
Currently integrated with www.flurry.com. Flurry handles all of the threading to keep this work off of the UI Thread.
|yes||Mockito||A mocking framework to make testing easier||test/mockito-core-1.9.0.jar||1.9.0|
General presentation resources including: colors, strings, gui stuff, templates. Also has xml files for integrating with Android services.
- /value/ contains strings in English, as well as some style and color stuff to be used across the app
- value-* contains translation strings (da-rDK, pt, pt-rBR)
- /color/ has a file about colors in the tabs - not sure why it's not in values.
- /drawable-*dpi/ contains gui elements for specific resolutions: high mid low
- /layout/ contains the overall visual templates for the app in an xml format
- /menu/ contains the xml templates for the menu pages in the app
- /xml/ files that help integrate LDS Tools data with Android (eg Shared Preferences, Accounts, Sync Adapter and Contacts)
/test/ is exactly what it sounds like: contains test stuff.
/main/ contains the meat of the app.
- /scripts/ has a python script to find untranslated strings
- /database/ is the domain definition. This is used to generate everything in /java/org/lds/ldstools/domain/. (How do you regenerate?)
- /java/org/lds/ldstools/ This is the heart and soul of LDS Tools
- Main java files
- /domain/ is generated by /main/database/ (see above).
- View (ish)
- /menu/ Builds the menus ("Interface for managing the items in a menu.")
- /activity/ Builds the various screens in the app ("An activity is a single, focused thing that the user can do")
- /adapter/ Loads data into lists of Households, Individuals, Callings, or Units ("the ListAdapter binds the ListView to the data")
- Controller (ish)
- /api/ This is the lds.org web services for retrieving info about members, callings, etc.
- /sync/ Uses the api (above) to sync member and calling info to the database
- /task/ Has some tasks that help in downloading Individual/Household images (also via api), and updating the cache when they're done downloading.
- /service/ Contains the CallerIDService which searches the LDSTools contacts when someone calls and displays a little popup to say who's calling.
- /listener/ Event handlers that run the CallerIDService on incoming calls according to the user's preferences
- /util/ Misc utils that didn't fit elsewhere
- AUU is the Analytics Agent Utility. This uses the Flurry Agent to send Analytics data to Flurry.com to see how most people use LDSTools
- EncryptUtil deals with encrypting the stored LDSAccount Password
- ImageUtil deals with saving images locally on the device
- SdCardUtil deals with getting locations to stored data. We prefer to store data on the SD Card otherwise, use /data/data/org.lds.ldssa/databases directory
- ServiceUtil provides isServiceRunning()
- SubmitBugReport deals with sending bug reports to the devs
- /util/ Misc utils that didn't fit elsewhere
- Is there a standard way to run PMD & FindBugs?
- Why is javax.inject in there with guice?
- Is aopalliance a dep of something?
- How do you regenerate the domain files after doing something to the xml domain def in /database/?
- Is there a plan to move from /res/ to /src/main/resources/?
Issue: Out-of-unit leaders
The big issue facing me right now, is out-of-unit members in leadership positions.
- Out-of-unit leaders should show up in Leader lists (eg Bishopric in a YSA ward)
- Out-of-unit leaders should be able to see the stake/ward over which they have stewardship (eg Stake Presidency + Clerks in a YSA stake)
It looks like the issue might be in one or more of these places:
- Can the domain handle out-of-unit leaders?
- Is sync getting the out-of-unit leaders? Is it dropping them?
- Is the adapter not including them in a the list?
- Are any of the other views killing the data?