widget/android/AndroidJavaWrappers.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/widget/android/AndroidJavaWrappers.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,732 @@
     1.4 +/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
     1.5 + * This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +#ifndef AndroidJavaWrappers_h__
    1.10 +#define AndroidJavaWrappers_h__
    1.11 +
    1.12 +#include <jni.h>
    1.13 +#include <android/input.h>
    1.14 +#include <android/log.h>
    1.15 +
    1.16 +#include "nsGeoPosition.h"
    1.17 +#include "nsRect.h"
    1.18 +#include "nsString.h"
    1.19 +#include "nsTArray.h"
    1.20 +#include "nsIObserver.h"
    1.21 +#include "nsIAndroidBridge.h"
    1.22 +#include "mozilla/gfx/Rect.h"
    1.23 +#include "mozilla/dom/Touch.h"
    1.24 +#include "mozilla/EventForwards.h"
    1.25 +#include "InputData.h"
    1.26 +#include "Units.h"
    1.27 +
    1.28 +//#define FORCE_ALOG 1
    1.29 +
    1.30 +class nsIAndroidDisplayport;
    1.31 +class nsIAndroidViewport;
    1.32 +class nsIWidget;
    1.33 +
    1.34 +namespace mozilla {
    1.35 +
    1.36 +class AutoLocalJNIFrame;
    1.37 +
    1.38 +void InitAndroidJavaWrappers(JNIEnv *jEnv);
    1.39 +
    1.40 +/*
    1.41 + * Note: do not store global refs to any WrappedJavaObject;
    1.42 + * these are live only during a particular JNI method, as
    1.43 + * NewGlobalRef is -not- called on the jobject.
    1.44 + *
    1.45 + * If this is needed, WrappedJavaObject can be extended to
    1.46 + * handle it.
    1.47 + */
    1.48 +
    1.49 +class RefCountedJavaObject {
    1.50 +public:
    1.51 +    RefCountedJavaObject(JNIEnv* env, jobject obj) : mRefCnt(0), mObject(env->NewGlobalRef(obj)) {}
    1.52 +
    1.53 +    ~RefCountedJavaObject();
    1.54 +
    1.55 +    int32_t AddRef() { return ++mRefCnt; }
    1.56 +
    1.57 +    int32_t Release() {
    1.58 +        int32_t refcnt = --mRefCnt;
    1.59 +        if (refcnt == 0)
    1.60 +            delete this;
    1.61 +        return refcnt;
    1.62 +    }
    1.63 +
    1.64 +    jobject GetObject() { return mObject; }
    1.65 +private:
    1.66 +    int32_t mRefCnt;
    1.67 +    jobject mObject;
    1.68 +};
    1.69 +
    1.70 +class WrappedJavaObject {
    1.71 +public:
    1.72 +    WrappedJavaObject() :
    1.73 +        wrapped_obj(nullptr)
    1.74 +    { }
    1.75 +
    1.76 +    WrappedJavaObject(jobject jobj) : wrapped_obj(nullptr) {
    1.77 +        Init(jobj);
    1.78 +    }
    1.79 +
    1.80 +    void Init(jobject jobj) {
    1.81 +        wrapped_obj = jobj;
    1.82 +    }
    1.83 +
    1.84 +    bool isNull() const {
    1.85 +        return wrapped_obj == nullptr;
    1.86 +    }
    1.87 +
    1.88 +    jobject wrappedObject() const {
    1.89 +        return wrapped_obj;
    1.90 +    }
    1.91 +
    1.92 +protected:
    1.93 +    jobject wrapped_obj;
    1.94 +};
    1.95 +
    1.96 +class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{
    1.97 +public:
    1.98 +    AutoGlobalWrappedJavaObject() :
    1.99 +        wrapped_obj(nullptr)
   1.100 +    { }
   1.101 +
   1.102 +    AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(nullptr) {
   1.103 +        Init(jobj, env);
   1.104 +    }
   1.105 +
   1.106 +    virtual ~AutoGlobalWrappedJavaObject();
   1.107 +    void Dispose();
   1.108 +
   1.109 +    void Init(jobject jobj, JNIEnv* env) {
   1.110 +        if (!isNull()) {
   1.111 +            env->DeleteGlobalRef(wrapped_obj);
   1.112 +        }
   1.113 +        wrapped_obj = env->NewGlobalRef(jobj);
   1.114 +    }
   1.115 +
   1.116 +    bool isNull() const {
   1.117 +        return wrapped_obj == nullptr;
   1.118 +    }
   1.119 +
   1.120 +    jobject wrappedObject() const {
   1.121 +        return wrapped_obj;
   1.122 +    }
   1.123 +
   1.124 +protected:
   1.125 +    jobject wrapped_obj;
   1.126 +};
   1.127 +
   1.128 +class AndroidPoint : public WrappedJavaObject
   1.129 +{
   1.130 +public:
   1.131 +    static void InitPointClass(JNIEnv *jEnv);
   1.132 +
   1.133 +    AndroidPoint() { }
   1.134 +    AndroidPoint(JNIEnv *jenv, jobject jobj) {
   1.135 +        Init(jenv, jobj);
   1.136 +    }
   1.137 +
   1.138 +    void Init(JNIEnv *jenv, jobject jobj);
   1.139 +
   1.140 +    int X() { return mX; }
   1.141 +    int Y() { return mY; }
   1.142 +
   1.143 +protected:
   1.144 +    int mX;
   1.145 +    int mY;
   1.146 +
   1.147 +    static jclass jPointClass;
   1.148 +    static jfieldID jXField;
   1.149 +    static jfieldID jYField;
   1.150 +};
   1.151 +
   1.152 +class AndroidRect : public WrappedJavaObject
   1.153 +{
   1.154 +public:
   1.155 +    static void InitRectClass(JNIEnv *jEnv);
   1.156 +
   1.157 +    AndroidRect() { }
   1.158 +    AndroidRect(JNIEnv *jenv, jobject jobj) {
   1.159 +        Init(jenv, jobj);
   1.160 +    }
   1.161 +
   1.162 +    void Init(JNIEnv *jenv, jobject jobj);
   1.163 +
   1.164 +    int Bottom() { return mBottom; }
   1.165 +    int Left() { return mLeft; }
   1.166 +    int Right() { return mRight; }
   1.167 +    int Top() { return mTop; }
   1.168 +    int Width() { return mRight - mLeft; }
   1.169 +    int Height() { return mBottom - mTop; }
   1.170 +
   1.171 +protected:
   1.172 +    int mBottom;
   1.173 +    int mLeft;
   1.174 +    int mRight;
   1.175 +    int mTop;
   1.176 +
   1.177 +    static jclass jRectClass;
   1.178 +    static jfieldID jBottomField;
   1.179 +    static jfieldID jLeftField;
   1.180 +    static jfieldID jRightField;
   1.181 +    static jfieldID jTopField;
   1.182 +};
   1.183 +
   1.184 +class AndroidRectF : public WrappedJavaObject
   1.185 +{
   1.186 +public:
   1.187 +    static void InitRectFClass(JNIEnv *jEnv);
   1.188 +
   1.189 +    AndroidRectF() { }
   1.190 +    AndroidRectF(JNIEnv *jenv, jobject jobj) {
   1.191 +        Init(jenv, jobj);
   1.192 +    }
   1.193 +
   1.194 +    void Init(JNIEnv *jenv, jobject jobj);
   1.195 +
   1.196 +    float Bottom() { return mBottom; }
   1.197 +    float Left() { return mLeft; }
   1.198 +    float Right() { return mRight; }
   1.199 +    float Top() { return mTop; }
   1.200 +    float Width() { return mRight - mLeft; }
   1.201 +    float Height() { return mBottom - mTop; }
   1.202 +
   1.203 +protected:
   1.204 +    float mBottom;
   1.205 +    float mLeft;
   1.206 +    float mRight;
   1.207 +    float mTop;
   1.208 +
   1.209 +    static jclass jRectClass;
   1.210 +    static jfieldID jBottomField;
   1.211 +    static jfieldID jLeftField;
   1.212 +    static jfieldID jRightField;
   1.213 +    static jfieldID jTopField;
   1.214 +};
   1.215 +
   1.216 +class AndroidLayerRendererFrame : public WrappedJavaObject {
   1.217 +public:
   1.218 +    static void InitLayerRendererFrameClass(JNIEnv *jEnv);
   1.219 +
   1.220 +    void Init(JNIEnv *env, jobject jobj);
   1.221 +    void Dispose(JNIEnv *env);
   1.222 +
   1.223 +    bool BeginDrawing(AutoLocalJNIFrame *jniFrame);
   1.224 +    bool DrawBackground(AutoLocalJNIFrame *jniFrame);
   1.225 +    bool DrawForeground(AutoLocalJNIFrame *jniFrame);
   1.226 +    bool EndDrawing(AutoLocalJNIFrame *jniFrame);
   1.227 +
   1.228 +private:
   1.229 +    static jclass jLayerRendererFrameClass;
   1.230 +    static jmethodID jBeginDrawingMethod;
   1.231 +    static jmethodID jDrawBackgroundMethod;
   1.232 +    static jmethodID jDrawForegroundMethod;
   1.233 +    static jmethodID jEndDrawingMethod;
   1.234 +};
   1.235 +
   1.236 +enum {
   1.237 +    // These keycode masks are not defined in android/keycodes.h:
   1.238 +    AKEYCODE_ESCAPE             = 111,
   1.239 +    AKEYCODE_FORWARD_DEL        = 112,
   1.240 +    AKEYCODE_CTRL_LEFT          = 113,
   1.241 +    AKEYCODE_CTRL_RIGHT         = 114,
   1.242 +    AKEYCODE_CAPS_LOCK          = 115,
   1.243 +    AKEYCODE_SCROLL_LOCK        = 116,
   1.244 +    AKEYCODE_META_LEFT          = 117,
   1.245 +    AKEYCODE_META_RIGHT         = 118,
   1.246 +    AKEYCODE_FUNCTION           = 119,
   1.247 +    AKEYCODE_SYSRQ              = 120,
   1.248 +    AKEYCODE_BREAK              = 121,
   1.249 +    AKEYCODE_MOVE_HOME          = 122,
   1.250 +    AKEYCODE_MOVE_END           = 123,
   1.251 +    AKEYCODE_INSERT             = 124,
   1.252 +    AKEYCODE_FORWARD            = 125,
   1.253 +    AKEYCODE_MEDIA_PLAY         = 126,
   1.254 +    AKEYCODE_MEDIA_PAUSE        = 127,
   1.255 +    AKEYCODE_MEDIA_CLOSE        = 128,
   1.256 +    AKEYCODE_MEDIA_EJECT        = 129,
   1.257 +    AKEYCODE_MEDIA_RECORD       = 130,
   1.258 +    AKEYCODE_F1                 = 131,
   1.259 +    AKEYCODE_F2                 = 132,
   1.260 +    AKEYCODE_F3                 = 133,
   1.261 +    AKEYCODE_F4                 = 134,
   1.262 +    AKEYCODE_F5                 = 135,
   1.263 +    AKEYCODE_F6                 = 136,
   1.264 +    AKEYCODE_F7                 = 137,
   1.265 +    AKEYCODE_F8                 = 138,
   1.266 +    AKEYCODE_F9                 = 139,
   1.267 +    AKEYCODE_F10                = 140,
   1.268 +    AKEYCODE_F11                = 141,
   1.269 +    AKEYCODE_F12                = 142,
   1.270 +    AKEYCODE_NUM_LOCK           = 143,
   1.271 +    AKEYCODE_NUMPAD_0           = 144,
   1.272 +    AKEYCODE_NUMPAD_1           = 145,
   1.273 +    AKEYCODE_NUMPAD_2           = 146,
   1.274 +    AKEYCODE_NUMPAD_3           = 147,
   1.275 +    AKEYCODE_NUMPAD_4           = 148,
   1.276 +    AKEYCODE_NUMPAD_5           = 149,
   1.277 +    AKEYCODE_NUMPAD_6           = 150,
   1.278 +    AKEYCODE_NUMPAD_7           = 151,
   1.279 +    AKEYCODE_NUMPAD_8           = 152,
   1.280 +    AKEYCODE_NUMPAD_9           = 153,
   1.281 +    AKEYCODE_NUMPAD_DIVIDE      = 154,
   1.282 +    AKEYCODE_NUMPAD_MULTIPLY    = 155,
   1.283 +    AKEYCODE_NUMPAD_SUBTRACT    = 156,
   1.284 +    AKEYCODE_NUMPAD_ADD         = 157,
   1.285 +    AKEYCODE_NUMPAD_DOT         = 158,
   1.286 +    AKEYCODE_NUMPAD_COMMA       = 159,
   1.287 +    AKEYCODE_NUMPAD_ENTER       = 160,
   1.288 +    AKEYCODE_NUMPAD_EQUALS      = 161,
   1.289 +    AKEYCODE_NUMPAD_LEFT_PAREN  = 162,
   1.290 +    AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
   1.291 +    AKEYCODE_VOLUME_MUTE        = 164,
   1.292 +    AKEYCODE_INFO               = 165,
   1.293 +    AKEYCODE_CHANNEL_UP         = 166,
   1.294 +    AKEYCODE_CHANNEL_DOWN       = 167,
   1.295 +    AKEYCODE_ZOOM_IN            = 168,
   1.296 +    AKEYCODE_ZOOM_OUT           = 169,
   1.297 +    AKEYCODE_TV                 = 170,
   1.298 +    AKEYCODE_WINDOW             = 171,
   1.299 +    AKEYCODE_GUIDE              = 172,
   1.300 +    AKEYCODE_DVR                = 173,
   1.301 +    AKEYCODE_BOOKMARK           = 174,
   1.302 +    AKEYCODE_CAPTIONS           = 175,
   1.303 +    AKEYCODE_SETTINGS           = 176,
   1.304 +    AKEYCODE_TV_POWER           = 177,
   1.305 +    AKEYCODE_TV_INPUT           = 178,
   1.306 +    AKEYCODE_STB_POWER          = 179,
   1.307 +    AKEYCODE_STB_INPUT          = 180,
   1.308 +    AKEYCODE_AVR_POWER          = 181,
   1.309 +    AKEYCODE_AVR_INPUT          = 182,
   1.310 +    AKEYCODE_PROG_RED           = 183,
   1.311 +    AKEYCODE_PROG_GREEN         = 184,
   1.312 +    AKEYCODE_PROG_YELLOW        = 185,
   1.313 +    AKEYCODE_PROG_BLUE          = 186,
   1.314 +    AKEYCODE_APP_SWITCH         = 187,
   1.315 +    AKEYCODE_BUTTON_1           = 188,
   1.316 +    AKEYCODE_BUTTON_2           = 189,
   1.317 +    AKEYCODE_BUTTON_3           = 190,
   1.318 +    AKEYCODE_BUTTON_4           = 191,
   1.319 +    AKEYCODE_BUTTON_5           = 192,
   1.320 +    AKEYCODE_BUTTON_6           = 193,
   1.321 +    AKEYCODE_BUTTON_7           = 194,
   1.322 +    AKEYCODE_BUTTON_8           = 195,
   1.323 +    AKEYCODE_BUTTON_9           = 196,
   1.324 +    AKEYCODE_BUTTON_10          = 197,
   1.325 +    AKEYCODE_BUTTON_11          = 198,
   1.326 +    AKEYCODE_BUTTON_12          = 199,
   1.327 +    AKEYCODE_BUTTON_13          = 200,
   1.328 +    AKEYCODE_BUTTON_14          = 201,
   1.329 +    AKEYCODE_BUTTON_15          = 202,
   1.330 +    AKEYCODE_BUTTON_16          = 203,
   1.331 +    AKEYCODE_LANGUAGE_SWITCH    = 204,
   1.332 +    AKEYCODE_MANNER_MODE        = 205,
   1.333 +    AKEYCODE_3D_MODE            = 206,
   1.334 +    AKEYCODE_CONTACTS           = 207,
   1.335 +    AKEYCODE_CALENDAR           = 208,
   1.336 +    AKEYCODE_MUSIC              = 209,
   1.337 +    AKEYCODE_CALCULATOR         = 210,
   1.338 +    AKEYCODE_ZENKAKU_HANKAKU    = 211,
   1.339 +    AKEYCODE_EISU               = 212,
   1.340 +    AKEYCODE_MUHENKAN           = 213,
   1.341 +    AKEYCODE_HENKAN             = 214,
   1.342 +    AKEYCODE_KATAKANA_HIRAGANA  = 215,
   1.343 +    AKEYCODE_YEN                = 216,
   1.344 +    AKEYCODE_RO                 = 217,
   1.345 +    AKEYCODE_KANA               = 218,
   1.346 +    AKEYCODE_ASSIST             = 219,
   1.347 +
   1.348 +    AMETA_FUNCTION_ON           = 0x00000008,
   1.349 +    AMETA_CTRL_ON               = 0x00001000,
   1.350 +    AMETA_CTRL_LEFT_ON          = 0x00002000,
   1.351 +    AMETA_CTRL_RIGHT_ON         = 0x00004000,
   1.352 +    AMETA_META_ON               = 0x00010000,
   1.353 +    AMETA_META_LEFT_ON          = 0x00020000,
   1.354 +    AMETA_META_RIGHT_ON         = 0x00040000,
   1.355 +    AMETA_CAPS_LOCK_ON          = 0x00100000,
   1.356 +    AMETA_NUM_LOCK_ON           = 0x00200000,
   1.357 +    AMETA_SCROLL_LOCK_ON        = 0x00400000,
   1.358 +
   1.359 +    AMETA_ALT_MASK              = AMETA_ALT_LEFT_ON   | AMETA_ALT_RIGHT_ON   | AMETA_ALT_ON,
   1.360 +    AMETA_CTRL_MASK             = AMETA_CTRL_LEFT_ON  | AMETA_CTRL_RIGHT_ON  | AMETA_CTRL_ON,
   1.361 +    AMETA_META_MASK             = AMETA_META_LEFT_ON  | AMETA_META_RIGHT_ON  | AMETA_META_ON,
   1.362 +    AMETA_SHIFT_MASK            = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON,
   1.363 +};
   1.364 +
   1.365 +class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport
   1.366 +{
   1.367 +public:
   1.368 +    NS_DECL_ISUPPORTS
   1.369 +    virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; }
   1.370 +    virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; }
   1.371 +    virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; }
   1.372 +    virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; }
   1.373 +    virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; }
   1.374 +    virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; }
   1.375 +    virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; }
   1.376 +    virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; }
   1.377 +    virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; }
   1.378 +    virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; }
   1.379 +
   1.380 +    nsAndroidDisplayport(AndroidRectF aRect, float aResolution):
   1.381 +        mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {}
   1.382 +
   1.383 +private:
   1.384 +    ~nsAndroidDisplayport() {}
   1.385 +    float mLeft, mTop, mRight, mBottom, mResolution;
   1.386 +};
   1.387 +
   1.388 +class AndroidMotionEvent
   1.389 +{
   1.390 +public:
   1.391 +    enum {
   1.392 +        ACTION_DOWN = 0,
   1.393 +        ACTION_UP = 1,
   1.394 +        ACTION_MOVE = 2,
   1.395 +        ACTION_CANCEL = 3,
   1.396 +        ACTION_OUTSIDE = 4,
   1.397 +        ACTION_POINTER_DOWN = 5,
   1.398 +        ACTION_POINTER_UP = 6,
   1.399 +        ACTION_HOVER_MOVE = 7,
   1.400 +        ACTION_HOVER_ENTER = 9,
   1.401 +        ACTION_HOVER_EXIT = 10,
   1.402 +        ACTION_MAGNIFY_START = 11,
   1.403 +        ACTION_MAGNIFY = 12,
   1.404 +        ACTION_MAGNIFY_END = 13,
   1.405 +        EDGE_TOP = 0x00000001,
   1.406 +        EDGE_BOTTOM = 0x00000002,
   1.407 +        EDGE_LEFT = 0x00000004,
   1.408 +        EDGE_RIGHT = 0x00000008,
   1.409 +        SAMPLE_X = 0,
   1.410 +        SAMPLE_Y = 1,
   1.411 +        SAMPLE_PRESSURE = 2,
   1.412 +        SAMPLE_SIZE = 3,
   1.413 +        NUM_SAMPLE_DATA = 4,
   1.414 +        dummy_java_enum_list_end
   1.415 +    };
   1.416 +};
   1.417 +
   1.418 +class AndroidLocation : public WrappedJavaObject
   1.419 +{
   1.420 +public:
   1.421 +    static void InitLocationClass(JNIEnv *jEnv);
   1.422 +    static nsGeoPosition* CreateGeoPosition(JNIEnv *jenv, jobject jobj);
   1.423 +    static jclass jLocationClass;
   1.424 +    static jmethodID jGetLatitudeMethod;
   1.425 +    static jmethodID jGetLongitudeMethod;
   1.426 +    static jmethodID jGetAltitudeMethod;
   1.427 +    static jmethodID jGetAccuracyMethod;
   1.428 +    static jmethodID jGetBearingMethod;
   1.429 +    static jmethodID jGetSpeedMethod;
   1.430 +    static jmethodID jGetTimeMethod;
   1.431 +};
   1.432 +
   1.433 +class AndroidGeckoEvent : public WrappedJavaObject
   1.434 +{
   1.435 +private:
   1.436 +    AndroidGeckoEvent() {
   1.437 +    }
   1.438 +
   1.439 +    void Init(JNIEnv *jenv, jobject jobj);
   1.440 +    void Init(int aType);
   1.441 +    void Init(AndroidGeckoEvent *aResizeEvent);
   1.442 +
   1.443 +public:
   1.444 +    static void InitGeckoEventClass(JNIEnv *jEnv);
   1.445 +
   1.446 +    static AndroidGeckoEvent* MakeNativePoke() {
   1.447 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.448 +        event->Init(NATIVE_POKE);
   1.449 +        return event;
   1.450 +    }
   1.451 +
   1.452 +    static AndroidGeckoEvent* MakeIMEEvent(int aAction) {
   1.453 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.454 +        event->Init(IME_EVENT);
   1.455 +        event->mAction = aAction;
   1.456 +        return event;
   1.457 +    }
   1.458 +
   1.459 +    static AndroidGeckoEvent* MakeDrawEvent(const nsIntRect& aRect) {
   1.460 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.461 +        event->Init(DRAW);
   1.462 +        event->mRect = aRect;
   1.463 +        return event;
   1.464 +    }
   1.465 +
   1.466 +    static AndroidGeckoEvent* MakeFromJavaObject(JNIEnv *jenv, jobject jobj) {
   1.467 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.468 +        event->Init(jenv, jobj);
   1.469 +        return event;
   1.470 +    }
   1.471 +
   1.472 +    static AndroidGeckoEvent* CopyResizeEvent(AndroidGeckoEvent *aResizeEvent) {
   1.473 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.474 +        event->Init(aResizeEvent);
   1.475 +        return event;
   1.476 +    }
   1.477 +
   1.478 +    static AndroidGeckoEvent* MakeBroadcastEvent(const nsCString& topic, const nsCString& data) {
   1.479 +        AndroidGeckoEvent* event = new AndroidGeckoEvent();
   1.480 +        event->Init(BROADCAST);
   1.481 +        CopyUTF8toUTF16(topic, event->mCharacters);
   1.482 +        CopyUTF8toUTF16(data, event->mCharactersExtra);
   1.483 +        return event;
   1.484 +    }
   1.485 +
   1.486 +    static AndroidGeckoEvent* MakeAddObserver(const nsAString &key, nsIObserver *observer) {
   1.487 +        AndroidGeckoEvent *event = new AndroidGeckoEvent();
   1.488 +        event->Init(ADD_OBSERVER);
   1.489 +        event->mCharacters.Assign(key);
   1.490 +        event->mObserver = observer;
   1.491 +        return event;
   1.492 +    }
   1.493 +
   1.494 +    int Action() { return mAction; }
   1.495 +    int Type() { return mType; }
   1.496 +    bool AckNeeded() { return mAckNeeded; }
   1.497 +    int64_t Time() { return mTime; }
   1.498 +    const nsTArray<nsIntPoint>& Points() { return mPoints; }
   1.499 +    const nsTArray<int>& PointIndicies() { return mPointIndicies; }
   1.500 +    const nsTArray<float>& Pressures() { return mPressures; }
   1.501 +    const nsTArray<float>& Orientations() { return mOrientations; }
   1.502 +    const nsTArray<nsIntPoint>& PointRadii() { return mPointRadii; }
   1.503 +    const nsTArray<nsString>& PrefNames() { return mPrefNames; }
   1.504 +    double X() { return mX; }
   1.505 +    double Y() { return mY; }
   1.506 +    double Z() { return mZ; }
   1.507 +    const nsIntRect& Rect() { return mRect; }
   1.508 +    nsAString& Characters() { return mCharacters; }
   1.509 +    nsAString& CharactersExtra() { return mCharactersExtra; }
   1.510 +    nsAString& Data() { return mData; }
   1.511 +    int KeyCode() { return mKeyCode; }
   1.512 +    int MetaState() { return mMetaState; }
   1.513 +    uint32_t DomKeyLocation() { return mDomKeyLocation; }
   1.514 +    Modifiers DOMModifiers() const;
   1.515 +    bool IsAltPressed() const { return (mMetaState & AMETA_ALT_MASK) != 0; }
   1.516 +    bool IsShiftPressed() const { return (mMetaState & AMETA_SHIFT_MASK) != 0; }
   1.517 +    bool IsCtrlPressed() const { return (mMetaState & AMETA_CTRL_MASK) != 0; }
   1.518 +    bool IsMetaPressed() const { return (mMetaState & AMETA_META_MASK) != 0; }
   1.519 +    int Flags() { return mFlags; }
   1.520 +    int UnicodeChar() { return mUnicodeChar; }
   1.521 +    int BaseUnicodeChar() { return mBaseUnicodeChar; }
   1.522 +    int DOMPrintableKeyValue() { return mDOMPrintableKeyValue; }
   1.523 +    int RepeatCount() const { return mRepeatCount; }
   1.524 +    int Count() { return mCount; }
   1.525 +    int Start() { return mStart; }
   1.526 +    int End() { return mEnd; }
   1.527 +    int PointerIndex() { return mPointerIndex; }
   1.528 +    int RangeType() { return mRangeType; }
   1.529 +    int RangeStyles() { return mRangeStyles; }
   1.530 +    int RangeLineStyle() { return mRangeLineStyle; }
   1.531 +    bool RangeBoldLine() { return mRangeBoldLine; }
   1.532 +    int RangeForeColor() { return mRangeForeColor; }
   1.533 +    int RangeBackColor() { return mRangeBackColor; }
   1.534 +    int RangeLineColor() { return mRangeLineColor; }
   1.535 +    nsGeoPosition* GeoPosition() { return mGeoPosition; }
   1.536 +    int ConnectionType() { return mConnectionType; }
   1.537 +    bool IsWifi() { return mIsWifi; }
   1.538 +    int DHCPGateway() { return mDHCPGateway; }
   1.539 +    short ScreenOrientation() { return mScreenOrientation; }
   1.540 +    RefCountedJavaObject* ByteBuffer() { return mByteBuffer; }
   1.541 +    int Width() { return mWidth; }
   1.542 +    int Height() { return mHeight; }
   1.543 +    int RequestId() { return mCount; } // for convenience
   1.544 +    WidgetTouchEvent MakeTouchEvent(nsIWidget* widget);
   1.545 +    MultiTouchInput MakeMultiTouchInput(nsIWidget* widget);
   1.546 +    WidgetMouseEvent MakeMouseEvent(nsIWidget* widget);
   1.547 +    void UnionRect(nsIntRect const& aRect);
   1.548 +    nsIObserver *Observer() { return mObserver; }
   1.549 +
   1.550 +protected:
   1.551 +    int mAction;
   1.552 +    int mType;
   1.553 +    bool mAckNeeded;
   1.554 +    int64_t mTime;
   1.555 +    nsTArray<nsIntPoint> mPoints;
   1.556 +    nsTArray<nsIntPoint> mPointRadii;
   1.557 +    nsTArray<int> mPointIndicies;
   1.558 +    nsTArray<float> mOrientations;
   1.559 +    nsTArray<float> mPressures;
   1.560 +    nsIntRect mRect;
   1.561 +    int mFlags, mMetaState;
   1.562 +    uint32_t mDomKeyLocation;
   1.563 +    int mKeyCode, mUnicodeChar, mBaseUnicodeChar, mDOMPrintableKeyValue;
   1.564 +    int mRepeatCount;
   1.565 +    int mCount;
   1.566 +    int mStart, mEnd;
   1.567 +    int mRangeType, mRangeStyles, mRangeLineStyle;
   1.568 +    bool mRangeBoldLine;
   1.569 +    int mRangeForeColor, mRangeBackColor, mRangeLineColor;
   1.570 +    double mX, mY, mZ;
   1.571 +    int mPointerIndex;
   1.572 +    nsString mCharacters, mCharactersExtra, mData;
   1.573 +    nsRefPtr<nsGeoPosition> mGeoPosition;
   1.574 +    int mConnectionType;
   1.575 +    bool mIsWifi;
   1.576 +    int mDHCPGateway;
   1.577 +    short mScreenOrientation;
   1.578 +    nsRefPtr<RefCountedJavaObject> mByteBuffer;
   1.579 +    int mWidth, mHeight;
   1.580 +    nsCOMPtr<nsIObserver> mObserver;
   1.581 +    nsTArray<nsString> mPrefNames;
   1.582 +
   1.583 +    void ReadIntArray(nsTArray<int> &aVals,
   1.584 +                      JNIEnv *jenv,
   1.585 +                      jfieldID field,
   1.586 +                      int32_t count);
   1.587 +    void ReadFloatArray(nsTArray<float> &aVals,
   1.588 +                        JNIEnv *jenv,
   1.589 +                        jfieldID field,
   1.590 +                        int32_t count);
   1.591 +    void ReadPointArray(nsTArray<nsIntPoint> &mPoints,
   1.592 +                        JNIEnv *jenv,
   1.593 +                        jfieldID field,
   1.594 +                        int32_t count);
   1.595 +    void ReadStringArray(nsTArray<nsString> &aStrings,
   1.596 +                         JNIEnv *jenv,
   1.597 +                         jfieldID field);
   1.598 +    void ReadRectField(JNIEnv *jenv);
   1.599 +    void ReadCharactersField(JNIEnv *jenv);
   1.600 +    void ReadCharactersExtraField(JNIEnv *jenv);
   1.601 +    void ReadDataField(JNIEnv *jenv);
   1.602 +    void ReadStringFromJString(nsString &aString, JNIEnv *jenv, jstring s);
   1.603 +
   1.604 +    uint32_t ReadDomKeyLocation(JNIEnv* jenv, jobject jGeckoEventObj);
   1.605 +
   1.606 +    static jclass jGeckoEventClass;
   1.607 +    static jfieldID jActionField;
   1.608 +    static jfieldID jTypeField;
   1.609 +    static jfieldID jAckNeededField;
   1.610 +    static jfieldID jTimeField;
   1.611 +    static jfieldID jPoints;
   1.612 +    static jfieldID jPointIndicies;
   1.613 +    static jfieldID jOrientations;
   1.614 +    static jfieldID jPressures;
   1.615 +    static jfieldID jPointRadii;
   1.616 +    static jfieldID jXField;
   1.617 +    static jfieldID jYField;
   1.618 +    static jfieldID jZField;
   1.619 +    static jfieldID jDistanceField;
   1.620 +    static jfieldID jRectField;
   1.621 +    static jfieldID jNativeWindowField;
   1.622 +
   1.623 +    static jfieldID jCharactersField;
   1.624 +    static jfieldID jCharactersExtraField;
   1.625 +    static jfieldID jDataField;
   1.626 +    static jfieldID jDOMPrintableKeyValueField;
   1.627 +    static jfieldID jKeyCodeField;
   1.628 +    static jfieldID jMetaStateField;
   1.629 +    static jfieldID jDomKeyLocationField;
   1.630 +    static jfieldID jFlagsField;
   1.631 +    static jfieldID jCountField;
   1.632 +    static jfieldID jStartField;
   1.633 +    static jfieldID jEndField;
   1.634 +    static jfieldID jPointerIndexField;
   1.635 +    static jfieldID jUnicodeCharField;
   1.636 +    static jfieldID jBaseUnicodeCharField;
   1.637 +    static jfieldID jRepeatCountField;
   1.638 +    static jfieldID jRangeTypeField;
   1.639 +    static jfieldID jRangeStylesField;
   1.640 +    static jfieldID jRangeLineStyleField;
   1.641 +    static jfieldID jRangeBoldLineField;
   1.642 +    static jfieldID jRangeForeColorField;
   1.643 +    static jfieldID jRangeBackColorField;
   1.644 +    static jfieldID jRangeLineColorField;
   1.645 +    static jfieldID jLocationField;
   1.646 +    static jfieldID jPrefNamesField;
   1.647 +
   1.648 +    static jfieldID jConnectionTypeField;
   1.649 +    static jfieldID jIsWifiField;
   1.650 +    static jfieldID jDHCPGatewayField;
   1.651 +
   1.652 +    static jfieldID jScreenOrientationField;
   1.653 +    static jfieldID jByteBufferField;
   1.654 +
   1.655 +    static jfieldID jWidthField;
   1.656 +    static jfieldID jHeightField;
   1.657 +
   1.658 +    static jclass jDomKeyLocationClass;
   1.659 +    static jfieldID jDomKeyLocationValueField;
   1.660 +
   1.661 +public:
   1.662 +    enum {
   1.663 +        NATIVE_POKE = 0,
   1.664 +        KEY_EVENT = 1,
   1.665 +        MOTION_EVENT = 2,
   1.666 +        SENSOR_EVENT = 3,
   1.667 +        LOCATION_EVENT = 5,
   1.668 +        IME_EVENT = 6,
   1.669 +        DRAW = 7,
   1.670 +        SIZE_CHANGED = 8,
   1.671 +        APP_BACKGROUNDING = 9,
   1.672 +        APP_FOREGROUNDING = 10,
   1.673 +        LOAD_URI = 12,
   1.674 +        NOOP = 15,
   1.675 +        FORCED_RESIZE = 16, // used internally in nsAppShell/nsWindow
   1.676 +        BROADCAST = 19,
   1.677 +        VIEWPORT = 20,
   1.678 +        VISITED = 21,
   1.679 +        NETWORK_CHANGED = 22,
   1.680 +        THUMBNAIL = 25,
   1.681 +        SCREENORIENTATION_CHANGED = 27,
   1.682 +        COMPOSITOR_CREATE = 28,
   1.683 +        COMPOSITOR_PAUSE = 29,
   1.684 +        COMPOSITOR_RESUME = 30,
   1.685 +        NATIVE_GESTURE_EVENT = 31,
   1.686 +        IME_KEY_EVENT = 32,
   1.687 +        CALL_OBSERVER = 33,
   1.688 +        REMOVE_OBSERVER = 34,
   1.689 +        LOW_MEMORY = 35,
   1.690 +        NETWORK_LINK_CHANGE = 36,
   1.691 +        TELEMETRY_HISTOGRAM_ADD = 37,
   1.692 +        ADD_OBSERVER = 38,
   1.693 +        PREFERENCES_OBSERVE = 39,
   1.694 +        PREFERENCES_GET = 40,
   1.695 +        PREFERENCES_REMOVE_OBSERVERS = 41,
   1.696 +        TELEMETRY_UI_SESSION_START = 42,
   1.697 +        TELEMETRY_UI_SESSION_STOP = 43,
   1.698 +        TELEMETRY_UI_EVENT = 44,
   1.699 +        dummy_java_enum_list_end
   1.700 +    };
   1.701 +
   1.702 +    enum {
   1.703 +        // Memory pressure levels. Keep these in sync with those in MemoryMonitor.java.
   1.704 +        MEMORY_PRESSURE_NONE = 0,
   1.705 +        MEMORY_PRESSURE_CLEANUP = 1,
   1.706 +        MEMORY_PRESSURE_LOW = 2,
   1.707 +        MEMORY_PRESSURE_MEDIUM = 3,
   1.708 +        MEMORY_PRESSURE_HIGH = 4
   1.709 +    };
   1.710 +
   1.711 +    enum {
   1.712 +        // Internal Gecko events
   1.713 +        IME_FLUSH_CHANGES = -2,
   1.714 +        IME_UPDATE_CONTEXT = -1,
   1.715 +        // Events from Java to Gecko
   1.716 +        IME_SYNCHRONIZE = 0,
   1.717 +        IME_REPLACE_TEXT = 1,
   1.718 +        IME_SET_SELECTION = 2,
   1.719 +        IME_ADD_COMPOSITION_RANGE = 3,
   1.720 +        IME_UPDATE_COMPOSITION = 4,
   1.721 +        IME_REMOVE_COMPOSITION = 5,
   1.722 +        IME_ACKNOWLEDGE_FOCUS = 6,
   1.723 +        dummy_ime_enum_list_end
   1.724 +    };
   1.725 +};
   1.726 +
   1.727 +class nsJNIString : public nsString
   1.728 +{
   1.729 +public:
   1.730 +    nsJNIString(jstring jstr, JNIEnv *jenv);
   1.731 +};
   1.732 +
   1.733 +}
   1.734 +
   1.735 +#endif

mercurial