mirror of
https://github.com/apache/cordova-android.git
synced 2025-05-15 00:01:29 +08:00
Allow features/modules to initialize code before deviceready fires. CupcakeLocalStorage uses this capability to delay deviceready until local storage has been read and inited.
This commit is contained in:
parent
8d513e2765
commit
023df10f31
@ -136,8 +136,14 @@ PhoneGap.Channel.join = function(h, c) {
|
|||||||
var f = function() {
|
var f = function() {
|
||||||
if (!(--i)) h();
|
if (!(--i)) h();
|
||||||
}
|
}
|
||||||
for (var j=0; j<i; j++) {
|
var len = i;
|
||||||
(!c[j].fired?c[j].subscribeOnce(f):i--);
|
for (var j=0; j<len; j++) {
|
||||||
|
if (!c[j].fired) {
|
||||||
|
c[j].subscribeOnce(f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
i--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!i) h();
|
if (!i) h();
|
||||||
};
|
};
|
||||||
@ -238,6 +244,39 @@ if (typeof _nativeReady !== 'undefined') { PhoneGap.onNativeReady.fire(); }
|
|||||||
PhoneGap.onDeviceReady = new PhoneGap.Channel('onDeviceReady');
|
PhoneGap.onDeviceReady = new PhoneGap.Channel('onDeviceReady');
|
||||||
|
|
||||||
|
|
||||||
|
// Array of channels that must fire before "deviceready" is fired
|
||||||
|
PhoneGap.deviceReadyChannelsArray = [ PhoneGap.onPhoneGapReady, PhoneGap.onPhoneGapInfoReady];
|
||||||
|
|
||||||
|
// Hashtable of user defined channels that must also fire before "deviceready" is fired
|
||||||
|
PhoneGap.deviceReadyChannelsMap = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate that a feature needs to be initialized before it is ready to be used.
|
||||||
|
* This holds up PhoneGap's "deviceready" event until the feature has been initialized
|
||||||
|
* and PhoneGap.initComplete(feature) is called.
|
||||||
|
*
|
||||||
|
* @param feature {String} The unique feature name
|
||||||
|
*/
|
||||||
|
PhoneGap.waitForInitialization = function(feature) {
|
||||||
|
if (feature) {
|
||||||
|
var channel = new PhoneGap.Channel(feature);
|
||||||
|
PhoneGap.deviceReadyChannelsMap[feature] = channel;
|
||||||
|
PhoneGap.deviceReadyChannelsArray.push(channel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate that initialization code has completed and the feature is ready to be used.
|
||||||
|
*
|
||||||
|
* @param feature {String} The unique feature name
|
||||||
|
*/
|
||||||
|
PhoneGap.initializationComplete = function(feature) {
|
||||||
|
var channel = PhoneGap.deviceReadyChannelsMap[feature];
|
||||||
|
if (channel) {
|
||||||
|
channel.fire();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create all PhoneGap objects once page has fully loaded and native side is ready.
|
* Create all PhoneGap objects once page has fully loaded and native side is ready.
|
||||||
*/
|
*/
|
||||||
@ -259,12 +298,24 @@ PhoneGap.Channel.join(function() {
|
|||||||
// Fire event to notify that all objects are created
|
// Fire event to notify that all objects are created
|
||||||
PhoneGap.onPhoneGapReady.fire();
|
PhoneGap.onPhoneGapReady.fire();
|
||||||
|
|
||||||
|
PhoneGap.Channel.join(function() {
|
||||||
|
|
||||||
|
// Turn off app loading dialog
|
||||||
|
navigator.notification.activityStop();
|
||||||
|
|
||||||
|
PhoneGap.onDeviceReady.fire();
|
||||||
|
|
||||||
|
// Fire the onresume event, since first one happens before JavaScript is loaded
|
||||||
|
PhoneGap.onResume.fire();
|
||||||
|
}, PhoneGap.deviceReadyChannelsArray);
|
||||||
|
|
||||||
}, [ PhoneGap.onDOMContentLoaded, PhoneGap.onNativeReady ]);
|
}, [ PhoneGap.onDOMContentLoaded, PhoneGap.onNativeReady ]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fire onDeviceReady event once all constructors have run and PhoneGap info has been
|
* Fire onDeviceReady event once all constructors have run and PhoneGap info has been
|
||||||
* received from native side.
|
* received from native side.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
PhoneGap.Channel.join(function() {
|
PhoneGap.Channel.join(function() {
|
||||||
// Turn off app loading dialog
|
// Turn off app loading dialog
|
||||||
navigator.notification.activityStop();
|
navigator.notification.activityStop();
|
||||||
@ -274,6 +325,7 @@ PhoneGap.Channel.join(function() {
|
|||||||
// Fire the onresume event, since first one happens before JavaScript is loaded
|
// Fire the onresume event, since first one happens before JavaScript is loaded
|
||||||
PhoneGap.onResume.fire();
|
PhoneGap.onResume.fire();
|
||||||
}, [ PhoneGap.onPhoneGapReady, PhoneGap.onPhoneGapInfoReady]);
|
}, [ PhoneGap.onPhoneGapReady, PhoneGap.onPhoneGapInfoReady]);
|
||||||
|
*/
|
||||||
|
|
||||||
// Listen for DOMContentLoaded and notify our channel subscribers
|
// Listen for DOMContentLoaded and notify our channel subscribers
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
@ -289,6 +341,9 @@ document.addEventListener = function(evt, handler, capture) {
|
|||||||
PhoneGap.onDeviceReady.subscribeOnce(handler);
|
PhoneGap.onDeviceReady.subscribeOnce(handler);
|
||||||
} else if (e == 'resume') {
|
} else if (e == 'resume') {
|
||||||
PhoneGap.onResume.subscribe(handler);
|
PhoneGap.onResume.subscribe(handler);
|
||||||
|
if (PhoneGap.onDeviceReady.fired) {
|
||||||
|
PhoneGap.onResume.fire();
|
||||||
|
}
|
||||||
} else if (e == 'pause') {
|
} else if (e == 'pause') {
|
||||||
PhoneGap.onPause.subscribe(handler);
|
PhoneGap.onPause.subscribe(handler);
|
||||||
} else {
|
} else {
|
||||||
|
@ -309,6 +309,7 @@ var CupcakeLocalStorage = function() {
|
|||||||
for(var i = 0; i < result.rows.length; i++) {
|
for(var i = 0; i < result.rows.length; i++) {
|
||||||
storage[result.rows.item(i)['id']] = result.rows.item(i)['body'];
|
storage[result.rows.item(i)['id']] = result.rows.item(i)['body'];
|
||||||
}
|
}
|
||||||
|
PhoneGap.initializationComplete("cupcakeStorage");
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -356,6 +357,7 @@ PhoneGap.addConstructor(function() {
|
|||||||
|
|
||||||
if (typeof window.localStorage == "undefined") {
|
if (typeof window.localStorage == "undefined") {
|
||||||
navigator.localStorage = window.localStorage = new CupcakeLocalStorage();
|
navigator.localStorage = window.localStorage = new CupcakeLocalStorage();
|
||||||
|
PhoneGap.waitForInitialization("cupcakeStorage");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user