/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

[scriptable, function, uuid(674b6e69-05f0-41da-aabd-4184ea85c9d8)]
interface nsIActivityUIGlueCallback : nsISupports
{
    /**
     * The activity service should start the activity at the specified index.
     */
    const short WEBAPPS_ACTIVITY = 0;

    /**
     * The activity service should deliver the specified result to the MozActivity callback.
     */
    const short NATIVE_ACTIVITY  = 1;

    /**
      * Called if the user picked an activitiy to launch.
      * @param resultType Inidcates that {@code result} is an index or a native activity result.
      * @param result     If WEBAPPS_ACTIVITY, the index of the chosen activity. Send '-1' if no choice is made.
                          If NATIVE_ACTIVITY, the return value to be sent to the MozActivity.
      */
    void handleEvent(in short resultType, in jsval result);
};

/**
  * To be implemented by @mozilla.org/dom/activities/ui-glue;1
  */
[scriptable, uuid(3caef69f-3569-4b19-bcea-1cfb0fee4466)]
interface nsIActivityUIGlue : nsISupports
{
    /**
      * This method is called even if the size of {@code activities} is 0 so that the callee can
      * decide whether or not to defer the request to an alternate activity system.
      *
      * @param options     The ActivityOptions object in the form of { name: "send", data: { ... } }
      * @param activities  A json blob which is an array of { "title":"...", "icon":"..." }.
      * @param callback    The callback to send the index of the choosen activity, or the result.
      */
    void chooseActivity(in jsval options, in jsval activities,
        in nsIActivityUIGlueCallback callback);
};
