Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
160 lines
5 KiB
JavaScript
Executable file
160 lines
5 KiB
JavaScript
Executable file
/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
|
|
|
'use strict';
|
|
/* global Applications, applications*/
|
|
/** Application module handles the information of apps on behalf of other
|
|
* modules
|
|
* @class Applications
|
|
*/
|
|
(function(exports) {
|
|
function Applications() {
|
|
}
|
|
|
|
Applications.prototype = {
|
|
/**
|
|
* The installed APPs list
|
|
* @access public
|
|
* @type {Object}
|
|
* @memberof Applications.prototype
|
|
*/
|
|
installedApps: {},
|
|
|
|
/**
|
|
* The statuts about get all installed Apps by mozApps API.
|
|
* @access public
|
|
* @type {boolean}
|
|
* @memberof Applications.prototype
|
|
*/
|
|
ready: false,
|
|
|
|
/**
|
|
* Stop the Applications services,
|
|
* un-register apps.mgmt.oninstall and apps.mgmt.uninstall handler.
|
|
* @memberof Applications.prototype
|
|
*/
|
|
stop: function a_stop() {
|
|
this.ready = false;
|
|
this.installedApps = {};
|
|
navigator.mozApps.mgmt.getAll().onsuccess = null;
|
|
navigator.mozApps.mgmt.oninstall = null;
|
|
navigator.mozApps.mgmt.onuninstall = null;
|
|
},
|
|
|
|
/**
|
|
* Start the Applications to get all installed Apps and
|
|
* register apps.mgmt.oninstall and apps.mgmt.uninstall handler.
|
|
* @memberof Applications.prototype
|
|
*/
|
|
start: function a_start() {
|
|
var self = this;
|
|
var apps = navigator.mozApps;
|
|
|
|
var getAllApps = function getAllApps() {
|
|
navigator.mozApps.mgmt.getAll().onsuccess = function mozAppGotAll(evt) {
|
|
var apps = evt.target.result;
|
|
apps.forEach(function(app) {
|
|
self.installedApps[app.manifestURL] = app;
|
|
// TODO Followup for retrieving homescreen & comms app
|
|
});
|
|
|
|
self.ready = true;
|
|
self.fireApplicationReadyEvent();
|
|
};
|
|
};
|
|
|
|
// We need to wait for the chrome shell to let us know when it's ok to
|
|
// launch activities. This prevents race conditions.
|
|
// The event does not fire again when we reload System app in on
|
|
// B2G Desktop, so we save the information into sessionStorage.
|
|
if (window.sessionStorage.getItem('webapps-registry-ready')) {
|
|
getAllApps();
|
|
} else {
|
|
window.addEventListener('mozChromeEvent', function mozAppReady(event) {
|
|
if (event.detail.type != 'webapps-registry-ready') {
|
|
return;
|
|
}
|
|
|
|
window.sessionStorage.setItem('webapps-registry-ready', 'yes');
|
|
window.removeEventListener('mozChromeEvent', mozAppReady);
|
|
|
|
getAllApps();
|
|
});
|
|
}
|
|
|
|
apps.mgmt.oninstall = function a_install(evt) {
|
|
var newapp = evt.application;
|
|
self.installedApps[newapp.manifestURL] = newapp;
|
|
|
|
self.fireApplicationInstallEvent(newapp);
|
|
};
|
|
|
|
apps.mgmt.onuninstall = function a_uninstall(evt) {
|
|
var deletedapp = evt.application;
|
|
delete self.installedApps[deletedapp.manifestURL];
|
|
|
|
self.fireApplicationUninstallEvent(deletedapp);
|
|
};
|
|
},
|
|
|
|
/**
|
|
* Get App by ManifestURL.
|
|
* @memberof Applications.prototype
|
|
*/
|
|
getByManifestURL: function a_getByManifestURL(manifestURL) {
|
|
if (manifestURL in this.installedApps) {
|
|
return this.installedApps[manifestURL];
|
|
}
|
|
|
|
return null;
|
|
},
|
|
|
|
/**
|
|
* Broadcast ApplicationReadyEvent when mozApps.mgmt.getAll() done.
|
|
* @memberof Applications.prototype
|
|
*/
|
|
|
|
fireApplicationReadyEvent: function a_fireAppReadyEvent() {
|
|
var evt = new CustomEvent('applicationready',
|
|
{ bubbles: true,
|
|
cancelable: false,
|
|
detail: { applications: this.installedApps } });
|
|
window.dispatchEvent(evt);
|
|
},
|
|
|
|
/**
|
|
* Broadcast ApplicationInstallEvent when apps.mgmt.oninstall occured.
|
|
* We need to dispatch the following events because
|
|
* mozApps is not doing so right now.
|
|
* ref: @link https://bugzilla.mozilla.org/show_bug.cgi?id=731746
|
|
* @memberof Applications.prototype
|
|
*/
|
|
|
|
fireApplicationInstallEvent: function a_fireApplicationInstallEvent(app) {
|
|
var evt = new CustomEvent('applicationinstall',
|
|
{ bubbles: true,
|
|
cancelable: false,
|
|
detail: { application: app } });
|
|
window.dispatchEvent(evt);
|
|
},
|
|
|
|
/**
|
|
* Broadcast ApplicationUninstallEvent when apps.mgmt.onuninstall occured.
|
|
* @memberof Applications.prototype
|
|
*/
|
|
|
|
fireApplicationUninstallEvent:
|
|
function a_fireApplicationUninstallEvent(app) {
|
|
var evt = new CustomEvent('applicationuninstall',
|
|
{ bubbles: true,
|
|
cancelable: false,
|
|
detail: { application: app } });
|
|
window.dispatchEvent(evt);
|
|
}
|
|
};
|
|
|
|
exports.Applications = Applications;
|
|
}(window));
|
|
|
|
window.applications = new Applications();
|
|
applications.start();
|