Configuration
There are some necessary configuration edits that will need to be made to get uMobile working. These can all be found in config.js, which at the time of this writing is located in <project root>/Resources/js/config.js. The required configuration edits are:
- BASE_PORTAL_URL - String. The base URL to the server with uPortal (& other services). eg:
'https://umobile.unicon.net'
- PORTAL_CONTEXT - String. The path, appended to BASE_PORTAL_URL, to access uPortal. eg:
'/uPortal'
- SERVER_SESSION_TIMEOUT - Integer. The time, in seconds, that a session will remain alive. eg:
2 * 60 * 60 //7200 seconds, or two hours
- LOGIN_METHOD - String (reference to static constant in LoginProxy). References the method used to log user's in to the application, such as CAS or LocalLogin. eg:
LoginProxy.loginMethods.LOCAL_LOGIN
- ENCRYPTION_KEY - String. Used to encrypt/decrypt user's password stored in the local sqlite database. eg:
'um0b1le'
- FORGOT_PASSWORD_URL - String. Path to direct users to in a browser to recover their password. eg:
this.BASE_PORTAL_URL + this.PORTAL_CONTEXT + '/p/forgot-password'
- MAP_SERVICE_URL - String. URL used to load map JSON data for the map module. eg:
this.BASE_PORTAL_URL + '/MapPortlet/api/locations.json'
- DIRECTORY_SERVICE_URL - String. URL used to perform searches for users from the directory module. eg:
this.BASE_PORTAL_URL + this.PORTAL_CONTEXT + '/api/people.json'
Optional parameters include:
- CAS_URL - String. URL to access cas login service. eg:
this.BASE_PORTAL_URL + '/cas'
- LOCAL_MODULES - Array. Contains objects to be included in native app that either override existing portlets, or are only available in the native app. eg:
this.LOCAL_MODULES.map = { title: 'map', iconUrl: 'icons/map.png', fname: 'map', window: 'map', doesRequireLayout: false };
doesRequireLayout indicates if it must exist in the JSON layout returned from the uPortal instance - DEFAULT_MAP_REGION - Object. Tells the map the default area to pan/zoom to when loaded. eg: {{{ latitude: 34.052819, longitude: -118.256407, latitudeDelta: 0.005, longitudeDelta: 0.005 }}}
- nativeIcons - Array. Associative array indexed by fnames of modules, to override the icons returned from the portal with local icons optimized for device resolutions. eg:
this.nativeIcons = {videos: 'icons/youtube.png'
} - directoryEmergencyContacts - Array. Contains objects containing emergency contact information to be displayed in home page of directory. eg:
this.directoryEmergencyContacts = [{ displayName:
"Westin Bonaventure Hotel and Suites"
,telephoneNumber:
'(866) 716-8137'
,postalAddress:
'404 South Figueroa Street$Los Angeles, CA 90071'
, url:
'http://www.starwoodhotels.com/westin/search/hotel_detail.html?propertyID=1004'
} - phoneDirectoryNumber - String. If defined, will display in the directory default view, and allow users to call the school's phone directory from the app. eg:
'888 555 5555'
Localization
There's a javascript file in the root called "localization.js", which contains an array called localDictionary, which is a collection of locales indexed by string (eg localDictionary['en_US']). Each locale is a dictionary object with a lower camel case english representation of each word/phrase (eg. getDirections: "Get Directions").
The locale string ("en_US") for the application is set in config.js, and can be retrieved anywhere in the application by calling Titanium.App.Properties.getString('locale'). However, for convenience, the dictionary is added to the facade which should be accessible by every controller in the application. The proper way to implement text anywhere throughout the application is to write app.localDictionary.translatedTextStringKey.
Stylizing the Application
Styling in the application is managed through a javascript file in the Resources root of the project called "style.js". The "styles" object in the file is attached to the facade that's implemented and shared in every controller in the application, so it's easy to create and implement new styles as needed.
In titanium, when creating new "View" objects, or any UI object, a 'create' method accepts an object containing style attributes (and sometimes value attributes). The style.js creates the foundation for the object to be passed into the create method, which can be appended if additional values need to be passed in at creation time. For example:
In style.js:
titleLabel: {
color: '#000'
}
In implementation:
var titleLabelOptions = app.styles.titleLabel;
var titleLabelOptions.text = "Title Text";
var titleLabel = Titanium.UI.createLabel(titleLabelOptions);
}