cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shazron <shaz...@gmail.com>
Subject Re: Propagate OS events to plugins
Date Mon, 18 Nov 2013 08:13:41 GMT
Well if one wants to go through this rabbit-hole of Objective-C, your
plugin can load itself (on a class level) without Cordova's help, see this
blog post for the +load method:
http://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html

This is in fact how the Pushwoosh PhoneGap plugin loads itself so it can
method swizzle the AppDelegate methods:
https://github.com/shaders/phonegap-cordova-push-notifications/blob/master/iOS/Plugins/PushRuntime.m#L111-L139



On Sun, Nov 17, 2013 at 8:20 AM, <Axel.Nennker@telekom.de> wrote:

> Yep, definitely sounds the same issue I was experiencing.
>
>
>
> Although I am not sure whether to put onload=true in plugin.xml really is
> the right solution in general.
>
> If you want your app to be started on the first tap it is the only
> solution.
>
> If you open your app then you can call some method of phonegap-nfc and the
> plugin is initialized and you do not have this problem.
>
> A plugin that needs to react to intent filters on Android needs
> onload=true.
>
> A plugin that needs to react to e.g. a file being opened on IOS needs
> onload=true because the plugin needs to register itself for this event.
>
>
>
> *This not related to phonegap-nfc only. All plugins that need OS-Events
> currently need onload=true.*
>
>
>
> But what Cordova is missing is a way for a plugin to express this: I want
> to get OS-Events (like onNewIntent on Android) but I do not need to be
> loaded on startup.
>
> Each line in PluginManager.java like this “if (entry.plugin != null) {”
>
>
> https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginManager.java#L307
>
> currently prevents an OS-Event to be propagated to a plugin.
>
> The only way to get the event is to set “onload=true” or use a plugin
> method (thus creating a plugin instance).
>
>
>
> But if the plugin only needs to get events after the app is started (like
> e.g. reading an NFC tag through the app) then creating the plugin instance
> is wasting startup time and memory resources.
>
>
>
> I suggest to have
>
>  <feature…>
>
>    <param name=”osevents” value=”true” />
>
>
>
> and change all the line in PluginManager from
>
>                     “if (entry.plugin != null) {”
>
>  to
>
>                     “if (entry.plugin != null || (entry.osevent==true && entry.createPlugin(this.app,
this.ctx)!=null)) {”
>
>
>
> Changing
>
>
> https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginEntry.java
>
> and the parser in PluginManager is simple…
>
>
> https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginManager.java#L147
>
>
>
> Although this new osevent param would need support in all platforms and
> docs and tests. Not a half-hour project…
>
>
>
> Have fun
>
> Axel
>
>
>
>
>
> *From:* Don Coleman [mailto:notifications@github.com]
> *Sent:* Saturday, November 16, 2013 5:37 PM
> *To:* chariotsolutions/phonegap-nfc
> *Cc:* AxelNennker
> *Subject:* [phonegap-nfc] Add onload for android (#105)
>
>
>
> See @AxelNennker <https://github.com/AxelNennker> doc updates
> https://github.com/apache/cordova-docs/pull/154/files
>
> Might fix #99 <https://github.com/chariotsolutions/phonegap-nfc/issues/99>
> ?
>
> —
> Reply to this email directly or view it on GitHub<https://github.com/chariotsolutions/phonegap-nfc/issues/105>
> .[image: Description: Image removed by sender.]
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message