--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/AppManager.js Wed Jan 20 16:51:26 2010 -0800
@@ -0,0 +1,223 @@
+/**
+ * AppManager.js
+ *
+ * Nokia Web Runtime Service API emulation
+ * WRT v1.1
+ *
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+
+(function(){
+
+ var provider = 'Service.AppManager',
+ Interface = 'IAppManager';
+
+ /**
+ * AppManager service
+ */
+ var AppManagerService = function(){
+ this.GetList = __GetList;
+ this.LaunchApp = __LaunchApp;
+ this.LaunchDoc = __LaunchDoc;
+ this.Cancel = __Cancel;
+ }
+
+ device.implementation.extend(provider, Interface, new AppManagerService() );
+
+
+ /******************************************************/
+ /******************************************************/
+ /******************************************************/
+
+ var context = device.implementation.context,
+ _t = context._t,
+ method = '',
+ result = false,
+ DBase = null;
+
+ /**
+ * AppManager: GetList
+ * @param {Object} criteria
+ */
+ function __GetList(criteria){
+ if ((result = validator.apply('GetList', arguments)) !== false)
+ return result;
+
+ if (typeof criteria.Type == 'undefined')
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+ if (!/^(Application|UserInstalledPackage)$/i.test(criteria.Type))
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+
+ // check if a callback was provided
+ if (arguments.length > 1)
+ return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badAsync);
+
+ var returnValue,
+ filter = criteria.Filter || null;
+
+ DBase = context.getData(provider);
+
+ if (criteria.Filter)
+ context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));
+
+ // Type = UserInstalledPackage
+ if (!/UserInstalledPackage/i.test(criteria.Type)){
+
+ returnValue = context.Iterator( DBase[criteria.Type] || [] );
+
+ } else {
+ // Type = Application
+ // @todo: apply filter criteria
+
+ returnValue = context.Iterator( DBase[criteria.Type] || [] );
+ }
+
+ return context.Result(returnValue);
+ }
+
+ /**
+ * AppManager: LaunchApp
+ * @param {Object} criteria
+ * @param {function} callback function for async call (optional)
+ */
+ function __LaunchApp(criteria, callback){
+
+ if ((result = validator.apply('LaunchApp', arguments)) !== false)
+ return result;
+
+ if (typeof criteria.ApplicationID == 'undefined')
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingAppID);
+
+ // app id must be in the form "s60uid://<appid>" where <appid> is
+ // what is returned by GetList.
+ var appId = criteria.ApplicationID;
+
+ if (!/^s60uid:\/\/0x/i.test(appId))
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+
+ if (criteria.CmdLind)
+ context.notify(_t('%s:: LaunchApp : CmdLine not implemented in preview').arg(provider));
+
+ if (criteria.Options)
+ context.notify(_t('%s:: LaunchApp : Options not implemented in preview').arg(provider));
+
+
+ if (typeof callback == 'function') {
+ return context.callAsync(this, arguments.callee, criteria, callback);
+ }
+
+ appId = appId.replace(/^s60uid:\/\//i, '');
+ DBase = context.getData(provider);
+
+ for(var type in DBase){
+ for(var i in DBase[type]) {
+ var item = DBase[type][i];
+ if (item.Uid == appId) {
+ // found!
+ context.notify(_t('%s:: LaunchApp : application found & launched : id=%s').arg(provider, appId));
+ return context.ErrorResult(device.implementation.ERR_SUCCESS);
+ }
+ }
+ }
+ // if not found
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+ }
+
+ /**
+ * AppManager: LaunchDoc
+ * @param {Object} criteria
+ * @param {function} callback function for async call (optional)
+ */
+ function __LaunchDoc(criteria, callback){
+
+ if ((result = validator.apply('LaunchDoc', arguments)) !== false)
+ return result;
+
+ if (typeof criteria.Document == 'undefined' && typeof criteria.MimeType == 'undefined')
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDoc);
+
+ if (typeof criteria.Document != 'undefined' && !criteria.Document.DocumentPath)
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+
+ if (criteria.Options)
+ context.notify(_t('%s:: LaunchDoc : Options not implemented in preview').arg(provider));
+
+ if (typeof callback == 'function') {
+ return context.callAsync(this, arguments.callee, criteria, callback);
+ }
+
+ // nothing to launch in emulation, just notify user
+ context.notify(_t('%s:: LaunchDoc : document launched').arg(provider));
+
+ if (criteria.Document)
+ // return success
+ return context.ErrorResult(device.implementation.ERR_SUCCESS);
+ else
+ // for mimetype, return value name of document
+ return context.Result('', device.implementation.ERR_SUCCESS);
+ }
+
+
+
+ /**
+ * AppManager: Cancel
+ * @param {Object} criteria
+ */
+ function __Cancel(criteria){
+ method = 'Cancel';
+ if (!criteria || !criteria.TransactionID)
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+
+ clearTimeout(criteria.TransactionID);
+ return context.ErrorResult(device.implementation.ERR_SUCCESS);
+ }
+
+
+
+ /*******************************
+ * helper functions
+ *******************************/
+
+ function error(code, msg /*, args...*/){
+
+ var args = ['AppManager',method].concat([].slice.call(arguments,2));
+ msg = msg ? _t().arg.apply(msg,args) : undefined;
+ return context.ErrorResult(code, msg);
+ }
+
+ /**
+ * validate common input arguments
+ * 'this' is string (object) name of calling function
+ *
+ * @param {arguments} arguments of calling function
+ * @return {Result} Result object if error, false if no error.
+ */
+ function validator() {
+ method = ''+this;
+ var failed = false,
+ criteria = arguments[0] || false;
+
+ if (!criteria || typeof criteria != 'object')
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+ return failed;
+ }
+
+ /**
+ * error messages
+ * order of %s args: Service name, method name, parameter name
+ */
+ var msg = {
+ missingType : '%s:%s:Content Type Missing',
+ badAsync : 'AppManger:GetList:Asynchronous version of API is not supported', // typo on device!
+ missingAppID : '%s:%s:Application ID Missing', // double space between ID & missing!!
+ missingDoc : '%s:%s:Document/MimeType Missing/value more than expected length ',
+ missingTID : '%s:Incorrect TransactionID',
+ is_invalid : '%s:%s:%s is invalid'
+ };
+
+
+}) ()
+