4 * Nokia Web Runtime Service API emulation
\r
7 * Copyright 2009 Nokia Corporation. All rights reserved.
\r
13 var provider = 'Service.AppManager',
\r
14 Interface = 'IAppManager';
\r
17 * AppManager service
\r
19 var AppManagerService = function(){
\r
20 this.GetList = __GetList;
\r
21 this.LaunchApp = __LaunchApp;
\r
22 this.LaunchDoc = __LaunchDoc;
\r
23 this.Cancel = __Cancel;
\r
26 device.implementation.extend(provider, Interface, new AppManagerService() );
\r
29 /******************************************************/
\r
30 /******************************************************/
\r
31 /******************************************************/
\r
33 var context = device.implementation.context,
\r
40 * AppManager: GetList
\r
41 * @param {Object} criteria
\r
43 function __GetList(criteria){
\r
44 if ((result = validator.apply('GetList', arguments)) !== false)
\r
47 if (typeof criteria.Type == 'undefined')
\r
48 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
\r
50 if (!/^(Application|UserInstalledPackage)$/i.test(criteria.Type))
\r
51 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
\r
53 // check if a callback was provided
\r
54 if (arguments.length > 1)
\r
55 return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badAsync);
\r
58 filter = criteria.Filter || null;
\r
60 DBase = context.getData(provider);
\r
62 if (criteria.Filter)
\r
63 context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));
\r
65 // Type = UserInstalledPackage
\r
66 if (!/UserInstalledPackage/i.test(criteria.Type)){
\r
68 returnValue = context.Iterator( DBase[criteria.Type] || [] );
\r
71 // Type = Application
\r
72 // @todo: apply filter criteria
\r
74 returnValue = context.Iterator( DBase[criteria.Type] || [] );
\r
77 return context.Result(returnValue);
\r
81 * AppManager: LaunchApp
\r
82 * @param {Object} criteria
\r
83 * @param {function} callback function for async call (optional)
\r
85 function __LaunchApp(criteria, callback){
\r
87 if ((result = validator.apply('LaunchApp', arguments)) !== false)
\r
90 if (typeof criteria.ApplicationID == 'undefined')
\r
91 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingAppID);
\r
93 // app id must be in the form "s60uid://<appid>" where <appid> is
\r
94 // what is returned by GetList.
\r
95 var appId = criteria.ApplicationID;
\r
97 if (!/^s60uid:\/\/0x/i.test(appId))
\r
98 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
\r
100 if (criteria.CmdLind)
\r
101 context.notify(_t('%s:: LaunchApp : CmdLine not implemented in preview').arg(provider));
\r
103 if (criteria.Options)
\r
104 context.notify(_t('%s:: LaunchApp : Options not implemented in preview').arg(provider));
\r
107 if (typeof callback == 'function') {
\r
108 return context.callAsync(this, arguments.callee, criteria, callback);
\r
111 appId = appId.replace(/^s60uid:\/\//i, '');
\r
112 DBase = context.getData(provider);
\r
114 for(var type in DBase){
\r
115 for(var i in DBase[type]) {
\r
116 var item = DBase[type][i];
\r
117 if (item.Uid == appId) {
\r
119 context.notify(_t('%s:: LaunchApp : application found & launched : id=%s').arg(provider, appId));
\r
120 return context.ErrorResult(device.implementation.ERR_SUCCESS);
\r
125 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
\r
129 * AppManager: LaunchDoc
\r
130 * @param {Object} criteria
\r
131 * @param {function} callback function for async call (optional)
\r
133 function __LaunchDoc(criteria, callback){
\r
135 if ((result = validator.apply('LaunchDoc', arguments)) !== false)
\r
138 if (typeof criteria.Document == 'undefined' && typeof criteria.MimeType == 'undefined')
\r
139 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDoc);
\r
141 if (typeof criteria.Document != 'undefined' && !criteria.Document.DocumentPath)
\r
142 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
\r
144 if (criteria.Options)
\r
145 context.notify(_t('%s:: LaunchDoc : Options not implemented in preview').arg(provider));
\r
147 if (typeof callback == 'function') {
\r
148 return context.callAsync(this, arguments.callee, criteria, callback);
\r
151 // nothing to launch in emulation, just notify user
\r
152 context.notify(_t('%s:: LaunchDoc : document launched').arg(provider));
\r
154 if (criteria.Document)
\r
156 return context.ErrorResult(device.implementation.ERR_SUCCESS);
\r
158 // for mimetype, return value name of document
\r
159 return context.Result('', device.implementation.ERR_SUCCESS);
\r
165 * AppManager: Cancel
\r
166 * @param {Object} criteria
\r
168 function __Cancel(criteria){
\r
170 if (!criteria || !criteria.TransactionID)
\r
171 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
\r
173 clearTimeout(criteria.TransactionID);
\r
174 return context.ErrorResult(device.implementation.ERR_SUCCESS);
\r
179 /*******************************
\r
181 *******************************/
\r
183 function error(code, msg /*, args...*/){
\r
185 var args = ['AppManager',method].concat([].slice.call(arguments,2));
\r
186 msg = msg ? _t().arg.apply(msg,args) : undefined;
\r
187 return context.ErrorResult(code, msg);
\r
191 * validate common input arguments
\r
192 * 'this' is string (object) name of calling function
\r
194 * @param {arguments} arguments of calling function
\r
195 * @return {Result} Result object if error, false if no error.
\r
197 function validator() {
\r
199 var failed = false,
\r
200 criteria = arguments[0] || false;
\r
202 if (!criteria || typeof criteria != 'object')
\r
203 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
\r
210 * order of %s args: Service name, method name, parameter name
\r
213 missingType : '%s:%s:Content Type Missing',
\r
214 badAsync : 'AppManger:GetList:Asynchronous version of API is not supported', // typo on device!
\r
215 missingAppID : '%s:%s:Application ID Missing', // double space between ID & missing!!
\r
216 missingDoc : '%s:%s:Document/MimeType Missing/value more than expected length ',
\r
217 missingTID : '%s:Incorrect TransactionID',
\r
218 is_invalid : '%s:%s:%s is invalid'
\r