Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-android/pull/170#discussion_r27391907
  
    --- Diff: framework/src/org/apache/cordova/CordovaActivity.java ---
    @@ -314,10 +318,52 @@ public void startActivityForResult(Intent intent, int 
requestCode, Bundle option
          * @param intent            An Intent, which can return result data to 
the caller (various data can be attached to Intent "extras").
          */
         @Override
    -    protected void onActivityResult(int requestCode, int resultCode, 
Intent intent) {
    +    protected void onActivityResult(final int requestCode, final int 
resultCode, final Intent intent) {
             LOG.d(TAG, "Incoming Result. Request code = " + requestCode);
             super.onActivityResult(requestCode, resultCode, intent);
    -        cordovaInterface.onActivityResult(requestCode, resultCode, intent);
    +        // check if plugins are ready to receive the result
    +        if (this.pluginsReady) {
    +            cordovaInterface.onActivityResult(requestCode, resultCode, 
intent);
    +            this.findCallbackTries = 0;
    +        } else {
    +            /**
    +             * If the Android OS kills this activity when a plugin 
launches an a new activity 
    +             * the onActivityResult event fires before the onResume event 
    +             * so we have to wait for the plugins to be loaded again 
before we can hand the result to the correct plugin.
    +             */
    +            final ScheduledThreadPoolExecutor exec = new 
ScheduledThreadPoolExecutor(1);
    --- End diff --
    
    Using a separate thread to accomplish what you want here is a bit 
overcomplicated and as is has the unwanted side-effect that the callback will 
be called on a non-UI thread. We also don't want to wait for a resume event to 
fire this.
    
    I'd suggest instead:
    - Call `CordovaInterfaceImpl.onActivityResult()`, as before (probably just 
revert all changes to CordovaActivity).
    - Have `onActivityResult` just store the result if no initialization has 
happened yet.
    - Change `CordovaInterfaceImpl.setPluginManager(pluginManager)` to 
`onCordovaInit(pluginManager)`
    - Have `onCordovaInit` dispatch any pending result to the pluginManager 
(plugins services should be registered by now).


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

Reply via email to