/*
 * Copyright 2008, The Android Open Source Project
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef PluginWidgetAndroid_h
#define PluginWidgetAndroid_h

#include "android_npapi.h"
#include "ANPSystem_npapi.h"
#include "GraphicsContext.h"
#include "IntPoint.h"
#include "IntRect.h"
#include "MediaLayer.h"
#include "SkRect.h"
#include <jni.h>

namespace WebCore {
    class PluginView;
}

namespace android {
    class PluginSurface;
    class WebViewCore;
}

class SkCanvas;
class SkFlipPixelRef;

/*
    This is our extended state in a PluginView. This object is created and
    kept insync with the PluginView, but is also available to WebViewCore
    to allow its draw() method to be called from outside of the PluginView.
 */
struct PluginWidgetAndroid {
    // initialize with our host pluginview. This will delete us when it is
    // destroyed.
    PluginWidgetAndroid(WebCore::PluginView* view);
    ~PluginWidgetAndroid();

    WebCore::PluginView* pluginView() const { return m_pluginView; }

    // Needed by PluginSurface to manage the java SurfaceView.
    android::WebViewCore* webViewCore() const { return m_core; }

    /*  Can't determine our core at construction time, so PluginView calls this
        as soon as it has a parent.
     */
    void init(android::WebViewCore*);
    /*  Called each time the PluginView gets a new size or position.
     */
    void setWindow(NPWindow* window, bool isTransparent);

    /*  Called whenever the plugin itself requests a new drawing model. If the
        hardware does not support the requested model then false is returned,
        otherwise true is returned.
     */
    bool setDrawingModel(ANPDrawingModel);

    /*  Called to check if the plugin is running in "windowed" mode (i.e. surface
        view).
     */
    bool isSurfaceDrawingModel() const { return kSurface_ANPDrawingModel == m_drawingModel; }

    bool isOpenGLDrawingModel() const { return kOpenGL_ANPDrawingModel == m_drawingModel; }

    void checkSurfaceReady();

    /*  Returns true (and optionally updates rect with the dirty bounds in the
        page coordinate) if the plugin has invalidate us.
     */
    bool isDirty(SkIRect* dirtyBounds = NULL) const;
    /*  Called by PluginView to invalidate a portion of the plugin area (in
        local plugin coordinates). If signalRedraw is true, this also triggers
        a subsequent call to draw(NULL).
     */
    void inval(const WebCore::IntRect&, bool signalRedraw);

    /*  Called to draw into the plugin's bitmap. If canvas is non-null, the
        bitmap itself is then drawn into the canvas.
     */
    void draw(PlatformGraphicsContext* context = NULL);

    /*  Send this event to the plugin instance. A non-zero value will be
        returned if the plugin handled the event.
     */
    int16_t sendEvent(const ANPEvent&);

    /*  Update the plugins event flags. If a flag is set to true then the plugin
        wants to be notified of events of this type.
     */
    void updateEventFlags(ANPEventFlags);

    /*  Called to check if a plugin wants to accept a given event type. It
        returns true if the plugin wants the events and false otherwise.
     */
    bool isAcceptingEvent(ANPEventFlag);

    /*  Notify the plugin of the currently visible screen coordinates (document
        space) and the current zoom level.
     */
    void setVisibleScreen(const ANPRectI& visibleScreenRect, float zoom);

    /** Returns a rectangle representing the visible area of the plugin on
        screen. The coordinates are relative to the size of the plugin in the
        document and will not be negative or exceed the plugin's size.
     */
    ANPRectI visibleRect();

    /** Registers a set of rectangles that the plugin would like to keep on
        screen. The rectangles are listed in order of priority with the highest
        priority rectangle in location rects[0].  The browser will attempt to keep
        as many of the rectangles on screen as possible and will scroll them into
        view in response to the invocation of this method and other various events.
        The count specifies how many rectangles are in the array. If the count is
        zero it signals the plugin that any existing rectangles should be cleared
        and no rectangles will be tracked.
     */
    void setVisibleRects(const ANPRectI rects[], int32_t count);

    /** Called when a plugin wishes to enter into full screen mode. It invokes
        the plugin's Java class (defined in the plugin's apk manifest), which is
        called asynchronously and provides a View to be displayed full screen.
     */
    void requestFullScreen();

    /** Called when a plugin wishes to exit from full screen mode. As a result,
        the plugin's full-screen view is discarded by the view system. It is also
        called in order to notify the native code that the browser has discarded
        the view.
     */
    void exitFullScreen(bool pluginInitiated);

    bool inFullScreen() { return m_isFullScreen; }

    void setFullScreenOrientation(ANPScreenOrientation orientation);

    /** Called to check if a plugin currently has document focus, which is
        required for certain operations (e.g. show/hide keyboard). It returns
        true if the plugin currently has focus and false otherwise.
     */
    bool hasFocus() const { return m_hasFocus; }

    /** Called to ensure the surface is being correctly displayed within the
        view hierarchy. For instance, if the visibility of the plugin has
        changed then we need to ensure the surface is added or removed from the
        view system.
     */
    void layoutSurface(bool pluginBoundsChanged = false);

    /** send the surface the currently visible portion of the plugin. This is not
        the portion of the plugin visible on the screen but rather the portion of
        the plugin that is not obscured by other HTML content.
     */
    void setSurfaceClip(const SkIRect& clip);

    /** Called when a plugin wishes to be zoomed and centered in the current view.
     */
    void requestCenterFitZoom();

    WebCore::MediaLayer* getLayer() const { return m_layer; }

    void setPowerState(ANPPowerState powerState);

    void viewInvalidate();

private:
    void computeVisiblePluginRect();
    void scrollToVisiblePluginRect();
    void sendSizeAndVisibilityEvents(const bool updateDimensions);

    WebCore::MediaLayer*   m_layer;

    WebCore::PluginView*    m_pluginView;
    android::WebViewCore*   m_core;
    SkFlipPixelRef*         m_flipPixelRef;
    ANPDrawingModel         m_drawingModel;
    ANPEventFlags           m_eventFlags;
    NPWindow*               m_pluginWindow;
    SkIRect                 m_pluginBounds; // relative to the page
    SkIRect                 m_visibleDocRect; // relative to the page
    SkIRect                 m_requestedVisibleRect; // relative to the page
    bool                    m_hasFocus;
    bool                    m_isFullScreen;
    bool                    m_visible;
    float                   m_cachedZoomLevel; // used for comparison only
    jobject                 m_embeddedView;
    bool                    m_embeddedViewAttached;
    bool                    m_acceptEvents;
    bool                    m_isSurfaceClippedOut;
    ANPPowerState           m_powerState;
    int                     m_fullScreenOrientation;
    bool                    m_drawEventDelayed;

    /* We limit the number of rectangles to minimize storage and ensure adequate
       speed.
    */
    enum {
        MAX_REQUESTED_RECTS = 5,
    };

    ANPRectI                m_requestedVisibleRects[MAX_REQUESTED_RECTS];
    int32_t                 m_requestedVisibleRectCount;
};

#endif
