If no one has any objections, there should be a JIRA issue tracking this task so it doesn't get lost or forgotten.
On Thu, Jul 23, 2015 at 6:49 AM, Carlos Santana <csantan...@gmail.com> wrote: > +1 cordova-js have the logic to handle this at bootstrap, it's a matter of > staring for a few minutes to see what are the entry points that Jesse > describe. > > For the plug and play scenario, where you plugin something way after > deviceready/bootstrap then something dynamic to query for the capabilities > like Jesse describe > > Let's keep the two use cases separate and do not cross the streams :-), > fix each use case at a time > > On Tue, Jul 21, 2015 at 6:17 PM Jesse <purplecabb...@gmail.com> wrote: > > > There are a couple different ways to go about this, but ultimately the > > mechanisms are already there. > > > > 1. WaitForInit > > If you look at the cordova-device plugin, it pre-populates data about the > > device it is running on, and this info is available when the deviceready > > event fires. > > Essentially the plugin creates a channel, and specifies that this channel > > must fire BEFORE the deviceready channel can fire, via the call > > channel.waitForInitialization('onCordovaInfoReady'); //[1] > > > > 2. addConstructor > > The window.cordova object defines an addConstructor method to allow a > > plugin to do some pre-deviceready work. > > All functions passed in to cordova.addConstructor will be called at the > > 'cordovaready' stage which is guaranteed to happen after 'nativeready' > and > > before 'deviceready' [2] > > > > Another approach may be to add a getDeviceCapabilites async call to a > > plugin like Camera that has many varied capabilities depending on where > it > > is running. We could simply instruct users to call this method ( after > > deviceready ) to know for certain what capabilities are available. The > > plugin (js) could also cache this info so later calls would not require a > > round trip. This would allow the app to be active as soon as possible, > and > > place the responsibility on the app developer, especially relevant if the > > camera api is a small subset of the functionality of the app, and the > > capabilities are not essential at launch time. > > > > > > [1] > > > > > https://github.com/apache/cordova-plugin-device/blob/master/www/device.js#L28 > > [2] https://github.com/apache/cordova-js/blob/master/src/cordova.js#L233 > > > > > > > > > > My team is hiring! > > @purplecabbage > > risingj.com > > > > On Mon, Jul 20, 2015 at 11:34 AM, Rob Paveza <rob.pav...@microsoft.com> > > wrote: > > > > > We chatted briefly about this at the hangout last week, and I wanted to > > > continue on the discussion. I gave the example that the "Quirks" > section > > > of CameraOptions [1] is longer than the actual API documentation. I > like > > > to pick on the Camera plugin because it's one of the most-used and is > > very > > > well-documented, so its holes are easy to understand. > > > > > > I looked at a request to, for example, support the <plugin> element > > within > > > a <platform> element in config.xml. When we drilled down into the > > request, > > > it was because the plugin wasn't well-supported on Windows, so the > > > developer wanted to be able to do feature detection and bypass using > the > > > plugin there. Presently, Cordova.js doesn't support this; the proxy > > > doesn't have an opportunity to talk to native until the `deviceready` > > > event, at which point, mutating the public API surface of the proxy > would > > > result in a race condition (because you're not sure who subscribed to > > > `deviceready` first). > > > > > > I think it's important to note that **how the API can support feature > > > detection should be up to the plugin author**. If the plugin is trying > > to > > > mimic a W3C standard, then it can do so; if it's just trying to fill a > > > feature gap, it can do that, too. The plugin developer can choose what > > > fits best. > > > > > > ==Proposal== > > > - I'll make a change to Cordova.js that will create a new event for > > > plugins to listen to. This will delay the invocation of `deviceready` > > > until all plugins have signaled completion (we'll avoid breaking > > > compatibility by having plugins opt-in to this behavior; if they don't > > opt > > > in, we'll treat them like they don't need to do anything). Once the > > plugin > > > initialization code has been run and the plugins have signaled > readiness, > > > we'll then fire `deviceready`. > > > - I'd also like to go through the plugins at least in mobilespec and > > make > > > some targeted proposals about where we can refactor to improve > > > feature-detectability. The File Plugin is tough because it's > > > standards-based on a standard that is defunct, but the Camera plugin > > might > > > have some opportunities, as well as Vibration, etc (e.g., vibration is > > > supported on Windows mobile devices, but not on desktop PCs). > > > > > > == Guiding Principles == > > > - Feature detection should be based on the availability of the > platform > > > API, not the availability of the platform to do the work. > > > - For example, if we created a Printer plugin, and the device can > > > support printing but no printers are attached, then the print() API > > should > > > be available. > > > - In such a case, calling print() should result in a runtime error. > > The > > > plugin author should provide a way to query for attached printers. > > > - This allows for a printer to be attached at a later time. > > > - Features should be in some way able to be queried by code at > runtime. > > > - Whether that's via a "foo.hasFeature(bar)" method or "if (foo.bar)" > > > truthy check, we should try our best to follow web principles in making > > > these decisions and enable it to be similar to known practices on the > > web. > > > > > > Looking forward to hearing your thoughts... > > > -Rob > > > > > > [1] https://github.com/apache/cordova-plugin-camera#cameraoptions > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org > > > For additional commands, e-mail: dev-h...@cordova.apache.org > > > > > > > > >