widget/android/AndroidJavaWrappers.h

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:b8dc0d5e0e97
1 /* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #ifndef AndroidJavaWrappers_h__
7 #define AndroidJavaWrappers_h__
8
9 #include <jni.h>
10 #include <android/input.h>
11 #include <android/log.h>
12
13 #include "nsGeoPosition.h"
14 #include "nsRect.h"
15 #include "nsString.h"
16 #include "nsTArray.h"
17 #include "nsIObserver.h"
18 #include "nsIAndroidBridge.h"
19 #include "mozilla/gfx/Rect.h"
20 #include "mozilla/dom/Touch.h"
21 #include "mozilla/EventForwards.h"
22 #include "InputData.h"
23 #include "Units.h"
24
25 //#define FORCE_ALOG 1
26
27 class nsIAndroidDisplayport;
28 class nsIAndroidViewport;
29 class nsIWidget;
30
31 namespace mozilla {
32
33 class AutoLocalJNIFrame;
34
35 void InitAndroidJavaWrappers(JNIEnv *jEnv);
36
37 /*
38 * Note: do not store global refs to any WrappedJavaObject;
39 * these are live only during a particular JNI method, as
40 * NewGlobalRef is -not- called on the jobject.
41 *
42 * If this is needed, WrappedJavaObject can be extended to
43 * handle it.
44 */
45
46 class RefCountedJavaObject {
47 public:
48 RefCountedJavaObject(JNIEnv* env, jobject obj) : mRefCnt(0), mObject(env->NewGlobalRef(obj)) {}
49
50 ~RefCountedJavaObject();
51
52 int32_t AddRef() { return ++mRefCnt; }
53
54 int32_t Release() {
55 int32_t refcnt = --mRefCnt;
56 if (refcnt == 0)
57 delete this;
58 return refcnt;
59 }
60
61 jobject GetObject() { return mObject; }
62 private:
63 int32_t mRefCnt;
64 jobject mObject;
65 };
66
67 class WrappedJavaObject {
68 public:
69 WrappedJavaObject() :
70 wrapped_obj(nullptr)
71 { }
72
73 WrappedJavaObject(jobject jobj) : wrapped_obj(nullptr) {
74 Init(jobj);
75 }
76
77 void Init(jobject jobj) {
78 wrapped_obj = jobj;
79 }
80
81 bool isNull() const {
82 return wrapped_obj == nullptr;
83 }
84
85 jobject wrappedObject() const {
86 return wrapped_obj;
87 }
88
89 protected:
90 jobject wrapped_obj;
91 };
92
93 class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{
94 public:
95 AutoGlobalWrappedJavaObject() :
96 wrapped_obj(nullptr)
97 { }
98
99 AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(nullptr) {
100 Init(jobj, env);
101 }
102
103 virtual ~AutoGlobalWrappedJavaObject();
104 void Dispose();
105
106 void Init(jobject jobj, JNIEnv* env) {
107 if (!isNull()) {
108 env->DeleteGlobalRef(wrapped_obj);
109 }
110 wrapped_obj = env->NewGlobalRef(jobj);
111 }
112
113 bool isNull() const {
114 return wrapped_obj == nullptr;
115 }
116
117 jobject wrappedObject() const {
118 return wrapped_obj;
119 }
120
121 protected:
122 jobject wrapped_obj;
123 };
124
125 class AndroidPoint : public WrappedJavaObject
126 {
127 public:
128 static void InitPointClass(JNIEnv *jEnv);
129
130 AndroidPoint() { }
131 AndroidPoint(JNIEnv *jenv, jobject jobj) {
132 Init(jenv, jobj);
133 }
134
135 void Init(JNIEnv *jenv, jobject jobj);
136
137 int X() { return mX; }
138 int Y() { return mY; }
139
140 protected:
141 int mX;
142 int mY;
143
144 static jclass jPointClass;
145 static jfieldID jXField;
146 static jfieldID jYField;
147 };
148
149 class AndroidRect : public WrappedJavaObject
150 {
151 public:
152 static void InitRectClass(JNIEnv *jEnv);
153
154 AndroidRect() { }
155 AndroidRect(JNIEnv *jenv, jobject jobj) {
156 Init(jenv, jobj);
157 }
158
159 void Init(JNIEnv *jenv, jobject jobj);
160
161 int Bottom() { return mBottom; }
162 int Left() { return mLeft; }
163 int Right() { return mRight; }
164 int Top() { return mTop; }
165 int Width() { return mRight - mLeft; }
166 int Height() { return mBottom - mTop; }
167
168 protected:
169 int mBottom;
170 int mLeft;
171 int mRight;
172 int mTop;
173
174 static jclass jRectClass;
175 static jfieldID jBottomField;
176 static jfieldID jLeftField;
177 static jfieldID jRightField;
178 static jfieldID jTopField;
179 };
180
181 class AndroidRectF : public WrappedJavaObject
182 {
183 public:
184 static void InitRectFClass(JNIEnv *jEnv);
185
186 AndroidRectF() { }
187 AndroidRectF(JNIEnv *jenv, jobject jobj) {
188 Init(jenv, jobj);
189 }
190
191 void Init(JNIEnv *jenv, jobject jobj);
192
193 float Bottom() { return mBottom; }
194 float Left() { return mLeft; }
195 float Right() { return mRight; }
196 float Top() { return mTop; }
197 float Width() { return mRight - mLeft; }
198 float Height() { return mBottom - mTop; }
199
200 protected:
201 float mBottom;
202 float mLeft;
203 float mRight;
204 float mTop;
205
206 static jclass jRectClass;
207 static jfieldID jBottomField;
208 static jfieldID jLeftField;
209 static jfieldID jRightField;
210 static jfieldID jTopField;
211 };
212
213 class AndroidLayerRendererFrame : public WrappedJavaObject {
214 public:
215 static void InitLayerRendererFrameClass(JNIEnv *jEnv);
216
217 void Init(JNIEnv *env, jobject jobj);
218 void Dispose(JNIEnv *env);
219
220 bool BeginDrawing(AutoLocalJNIFrame *jniFrame);
221 bool DrawBackground(AutoLocalJNIFrame *jniFrame);
222 bool DrawForeground(AutoLocalJNIFrame *jniFrame);
223 bool EndDrawing(AutoLocalJNIFrame *jniFrame);
224
225 private:
226 static jclass jLayerRendererFrameClass;
227 static jmethodID jBeginDrawingMethod;
228 static jmethodID jDrawBackgroundMethod;
229 static jmethodID jDrawForegroundMethod;
230 static jmethodID jEndDrawingMethod;
231 };
232
233 enum {
234 // These keycode masks are not defined in android/keycodes.h:
235 AKEYCODE_ESCAPE = 111,
236 AKEYCODE_FORWARD_DEL = 112,
237 AKEYCODE_CTRL_LEFT = 113,
238 AKEYCODE_CTRL_RIGHT = 114,
239 AKEYCODE_CAPS_LOCK = 115,
240 AKEYCODE_SCROLL_LOCK = 116,
241 AKEYCODE_META_LEFT = 117,
242 AKEYCODE_META_RIGHT = 118,
243 AKEYCODE_FUNCTION = 119,
244 AKEYCODE_SYSRQ = 120,
245 AKEYCODE_BREAK = 121,
246 AKEYCODE_MOVE_HOME = 122,
247 AKEYCODE_MOVE_END = 123,
248 AKEYCODE_INSERT = 124,
249 AKEYCODE_FORWARD = 125,
250 AKEYCODE_MEDIA_PLAY = 126,
251 AKEYCODE_MEDIA_PAUSE = 127,
252 AKEYCODE_MEDIA_CLOSE = 128,
253 AKEYCODE_MEDIA_EJECT = 129,
254 AKEYCODE_MEDIA_RECORD = 130,
255 AKEYCODE_F1 = 131,
256 AKEYCODE_F2 = 132,
257 AKEYCODE_F3 = 133,
258 AKEYCODE_F4 = 134,
259 AKEYCODE_F5 = 135,
260 AKEYCODE_F6 = 136,
261 AKEYCODE_F7 = 137,
262 AKEYCODE_F8 = 138,
263 AKEYCODE_F9 = 139,
264 AKEYCODE_F10 = 140,
265 AKEYCODE_F11 = 141,
266 AKEYCODE_F12 = 142,
267 AKEYCODE_NUM_LOCK = 143,
268 AKEYCODE_NUMPAD_0 = 144,
269 AKEYCODE_NUMPAD_1 = 145,
270 AKEYCODE_NUMPAD_2 = 146,
271 AKEYCODE_NUMPAD_3 = 147,
272 AKEYCODE_NUMPAD_4 = 148,
273 AKEYCODE_NUMPAD_5 = 149,
274 AKEYCODE_NUMPAD_6 = 150,
275 AKEYCODE_NUMPAD_7 = 151,
276 AKEYCODE_NUMPAD_8 = 152,
277 AKEYCODE_NUMPAD_9 = 153,
278 AKEYCODE_NUMPAD_DIVIDE = 154,
279 AKEYCODE_NUMPAD_MULTIPLY = 155,
280 AKEYCODE_NUMPAD_SUBTRACT = 156,
281 AKEYCODE_NUMPAD_ADD = 157,
282 AKEYCODE_NUMPAD_DOT = 158,
283 AKEYCODE_NUMPAD_COMMA = 159,
284 AKEYCODE_NUMPAD_ENTER = 160,
285 AKEYCODE_NUMPAD_EQUALS = 161,
286 AKEYCODE_NUMPAD_LEFT_PAREN = 162,
287 AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
288 AKEYCODE_VOLUME_MUTE = 164,
289 AKEYCODE_INFO = 165,
290 AKEYCODE_CHANNEL_UP = 166,
291 AKEYCODE_CHANNEL_DOWN = 167,
292 AKEYCODE_ZOOM_IN = 168,
293 AKEYCODE_ZOOM_OUT = 169,
294 AKEYCODE_TV = 170,
295 AKEYCODE_WINDOW = 171,
296 AKEYCODE_GUIDE = 172,
297 AKEYCODE_DVR = 173,
298 AKEYCODE_BOOKMARK = 174,
299 AKEYCODE_CAPTIONS = 175,
300 AKEYCODE_SETTINGS = 176,
301 AKEYCODE_TV_POWER = 177,
302 AKEYCODE_TV_INPUT = 178,
303 AKEYCODE_STB_POWER = 179,
304 AKEYCODE_STB_INPUT = 180,
305 AKEYCODE_AVR_POWER = 181,
306 AKEYCODE_AVR_INPUT = 182,
307 AKEYCODE_PROG_RED = 183,
308 AKEYCODE_PROG_GREEN = 184,
309 AKEYCODE_PROG_YELLOW = 185,
310 AKEYCODE_PROG_BLUE = 186,
311 AKEYCODE_APP_SWITCH = 187,
312 AKEYCODE_BUTTON_1 = 188,
313 AKEYCODE_BUTTON_2 = 189,
314 AKEYCODE_BUTTON_3 = 190,
315 AKEYCODE_BUTTON_4 = 191,
316 AKEYCODE_BUTTON_5 = 192,
317 AKEYCODE_BUTTON_6 = 193,
318 AKEYCODE_BUTTON_7 = 194,
319 AKEYCODE_BUTTON_8 = 195,
320 AKEYCODE_BUTTON_9 = 196,
321 AKEYCODE_BUTTON_10 = 197,
322 AKEYCODE_BUTTON_11 = 198,
323 AKEYCODE_BUTTON_12 = 199,
324 AKEYCODE_BUTTON_13 = 200,
325 AKEYCODE_BUTTON_14 = 201,
326 AKEYCODE_BUTTON_15 = 202,
327 AKEYCODE_BUTTON_16 = 203,
328 AKEYCODE_LANGUAGE_SWITCH = 204,
329 AKEYCODE_MANNER_MODE = 205,
330 AKEYCODE_3D_MODE = 206,
331 AKEYCODE_CONTACTS = 207,
332 AKEYCODE_CALENDAR = 208,
333 AKEYCODE_MUSIC = 209,
334 AKEYCODE_CALCULATOR = 210,
335 AKEYCODE_ZENKAKU_HANKAKU = 211,
336 AKEYCODE_EISU = 212,
337 AKEYCODE_MUHENKAN = 213,
338 AKEYCODE_HENKAN = 214,
339 AKEYCODE_KATAKANA_HIRAGANA = 215,
340 AKEYCODE_YEN = 216,
341 AKEYCODE_RO = 217,
342 AKEYCODE_KANA = 218,
343 AKEYCODE_ASSIST = 219,
344
345 AMETA_FUNCTION_ON = 0x00000008,
346 AMETA_CTRL_ON = 0x00001000,
347 AMETA_CTRL_LEFT_ON = 0x00002000,
348 AMETA_CTRL_RIGHT_ON = 0x00004000,
349 AMETA_META_ON = 0x00010000,
350 AMETA_META_LEFT_ON = 0x00020000,
351 AMETA_META_RIGHT_ON = 0x00040000,
352 AMETA_CAPS_LOCK_ON = 0x00100000,
353 AMETA_NUM_LOCK_ON = 0x00200000,
354 AMETA_SCROLL_LOCK_ON = 0x00400000,
355
356 AMETA_ALT_MASK = AMETA_ALT_LEFT_ON | AMETA_ALT_RIGHT_ON | AMETA_ALT_ON,
357 AMETA_CTRL_MASK = AMETA_CTRL_LEFT_ON | AMETA_CTRL_RIGHT_ON | AMETA_CTRL_ON,
358 AMETA_META_MASK = AMETA_META_LEFT_ON | AMETA_META_RIGHT_ON | AMETA_META_ON,
359 AMETA_SHIFT_MASK = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON,
360 };
361
362 class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport
363 {
364 public:
365 NS_DECL_ISUPPORTS
366 virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; }
367 virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; }
368 virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; }
369 virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; }
370 virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; }
371 virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; }
372 virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; }
373 virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; }
374 virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; }
375 virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; }
376
377 nsAndroidDisplayport(AndroidRectF aRect, float aResolution):
378 mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {}
379
380 private:
381 ~nsAndroidDisplayport() {}
382 float mLeft, mTop, mRight, mBottom, mResolution;
383 };
384
385 class AndroidMotionEvent
386 {
387 public:
388 enum {
389 ACTION_DOWN = 0,
390 ACTION_UP = 1,
391 ACTION_MOVE = 2,
392 ACTION_CANCEL = 3,
393 ACTION_OUTSIDE = 4,
394 ACTION_POINTER_DOWN = 5,
395 ACTION_POINTER_UP = 6,
396 ACTION_HOVER_MOVE = 7,
397 ACTION_HOVER_ENTER = 9,
398 ACTION_HOVER_EXIT = 10,
399 ACTION_MAGNIFY_START = 11,
400 ACTION_MAGNIFY = 12,
401 ACTION_MAGNIFY_END = 13,
402 EDGE_TOP = 0x00000001,
403 EDGE_BOTTOM = 0x00000002,
404 EDGE_LEFT = 0x00000004,
405 EDGE_RIGHT = 0x00000008,
406 SAMPLE_X = 0,
407 SAMPLE_Y = 1,
408 SAMPLE_PRESSURE = 2,
409 SAMPLE_SIZE = 3,
410 NUM_SAMPLE_DATA = 4,
411 dummy_java_enum_list_end
412 };
413 };
414
415 class AndroidLocation : public WrappedJavaObject
416 {
417 public:
418 static void InitLocationClass(JNIEnv *jEnv);
419 static nsGeoPosition* CreateGeoPosition(JNIEnv *jenv, jobject jobj);
420 static jclass jLocationClass;
421 static jmethodID jGetLatitudeMethod;
422 static jmethodID jGetLongitudeMethod;
423 static jmethodID jGetAltitudeMethod;
424 static jmethodID jGetAccuracyMethod;
425 static jmethodID jGetBearingMethod;
426 static jmethodID jGetSpeedMethod;
427 static jmethodID jGetTimeMethod;
428 };
429
430 class AndroidGeckoEvent : public WrappedJavaObject
431 {
432 private:
433 AndroidGeckoEvent() {
434 }
435
436 void Init(JNIEnv *jenv, jobject jobj);
437 void Init(int aType);
438 void Init(AndroidGeckoEvent *aResizeEvent);
439
440 public:
441 static void InitGeckoEventClass(JNIEnv *jEnv);
442
443 static AndroidGeckoEvent* MakeNativePoke() {
444 AndroidGeckoEvent *event = new AndroidGeckoEvent();
445 event->Init(NATIVE_POKE);
446 return event;
447 }
448
449 static AndroidGeckoEvent* MakeIMEEvent(int aAction) {
450 AndroidGeckoEvent *event = new AndroidGeckoEvent();
451 event->Init(IME_EVENT);
452 event->mAction = aAction;
453 return event;
454 }
455
456 static AndroidGeckoEvent* MakeDrawEvent(const nsIntRect& aRect) {
457 AndroidGeckoEvent *event = new AndroidGeckoEvent();
458 event->Init(DRAW);
459 event->mRect = aRect;
460 return event;
461 }
462
463 static AndroidGeckoEvent* MakeFromJavaObject(JNIEnv *jenv, jobject jobj) {
464 AndroidGeckoEvent *event = new AndroidGeckoEvent();
465 event->Init(jenv, jobj);
466 return event;
467 }
468
469 static AndroidGeckoEvent* CopyResizeEvent(AndroidGeckoEvent *aResizeEvent) {
470 AndroidGeckoEvent *event = new AndroidGeckoEvent();
471 event->Init(aResizeEvent);
472 return event;
473 }
474
475 static AndroidGeckoEvent* MakeBroadcastEvent(const nsCString& topic, const nsCString& data) {
476 AndroidGeckoEvent* event = new AndroidGeckoEvent();
477 event->Init(BROADCAST);
478 CopyUTF8toUTF16(topic, event->mCharacters);
479 CopyUTF8toUTF16(data, event->mCharactersExtra);
480 return event;
481 }
482
483 static AndroidGeckoEvent* MakeAddObserver(const nsAString &key, nsIObserver *observer) {
484 AndroidGeckoEvent *event = new AndroidGeckoEvent();
485 event->Init(ADD_OBSERVER);
486 event->mCharacters.Assign(key);
487 event->mObserver = observer;
488 return event;
489 }
490
491 int Action() { return mAction; }
492 int Type() { return mType; }
493 bool AckNeeded() { return mAckNeeded; }
494 int64_t Time() { return mTime; }
495 const nsTArray<nsIntPoint>& Points() { return mPoints; }
496 const nsTArray<int>& PointIndicies() { return mPointIndicies; }
497 const nsTArray<float>& Pressures() { return mPressures; }
498 const nsTArray<float>& Orientations() { return mOrientations; }
499 const nsTArray<nsIntPoint>& PointRadii() { return mPointRadii; }
500 const nsTArray<nsString>& PrefNames() { return mPrefNames; }
501 double X() { return mX; }
502 double Y() { return mY; }
503 double Z() { return mZ; }
504 const nsIntRect& Rect() { return mRect; }
505 nsAString& Characters() { return mCharacters; }
506 nsAString& CharactersExtra() { return mCharactersExtra; }
507 nsAString& Data() { return mData; }
508 int KeyCode() { return mKeyCode; }
509 int MetaState() { return mMetaState; }
510 uint32_t DomKeyLocation() { return mDomKeyLocation; }
511 Modifiers DOMModifiers() const;
512 bool IsAltPressed() const { return (mMetaState & AMETA_ALT_MASK) != 0; }
513 bool IsShiftPressed() const { return (mMetaState & AMETA_SHIFT_MASK) != 0; }
514 bool IsCtrlPressed() const { return (mMetaState & AMETA_CTRL_MASK) != 0; }
515 bool IsMetaPressed() const { return (mMetaState & AMETA_META_MASK) != 0; }
516 int Flags() { return mFlags; }
517 int UnicodeChar() { return mUnicodeChar; }
518 int BaseUnicodeChar() { return mBaseUnicodeChar; }
519 int DOMPrintableKeyValue() { return mDOMPrintableKeyValue; }
520 int RepeatCount() const { return mRepeatCount; }
521 int Count() { return mCount; }
522 int Start() { return mStart; }
523 int End() { return mEnd; }
524 int PointerIndex() { return mPointerIndex; }
525 int RangeType() { return mRangeType; }
526 int RangeStyles() { return mRangeStyles; }
527 int RangeLineStyle() { return mRangeLineStyle; }
528 bool RangeBoldLine() { return mRangeBoldLine; }
529 int RangeForeColor() { return mRangeForeColor; }
530 int RangeBackColor() { return mRangeBackColor; }
531 int RangeLineColor() { return mRangeLineColor; }
532 nsGeoPosition* GeoPosition() { return mGeoPosition; }
533 int ConnectionType() { return mConnectionType; }
534 bool IsWifi() { return mIsWifi; }
535 int DHCPGateway() { return mDHCPGateway; }
536 short ScreenOrientation() { return mScreenOrientation; }
537 RefCountedJavaObject* ByteBuffer() { return mByteBuffer; }
538 int Width() { return mWidth; }
539 int Height() { return mHeight; }
540 int RequestId() { return mCount; } // for convenience
541 WidgetTouchEvent MakeTouchEvent(nsIWidget* widget);
542 MultiTouchInput MakeMultiTouchInput(nsIWidget* widget);
543 WidgetMouseEvent MakeMouseEvent(nsIWidget* widget);
544 void UnionRect(nsIntRect const& aRect);
545 nsIObserver *Observer() { return mObserver; }
546
547 protected:
548 int mAction;
549 int mType;
550 bool mAckNeeded;
551 int64_t mTime;
552 nsTArray<nsIntPoint> mPoints;
553 nsTArray<nsIntPoint> mPointRadii;
554 nsTArray<int> mPointIndicies;
555 nsTArray<float> mOrientations;
556 nsTArray<float> mPressures;
557 nsIntRect mRect;
558 int mFlags, mMetaState;
559 uint32_t mDomKeyLocation;
560 int mKeyCode, mUnicodeChar, mBaseUnicodeChar, mDOMPrintableKeyValue;
561 int mRepeatCount;
562 int mCount;
563 int mStart, mEnd;
564 int mRangeType, mRangeStyles, mRangeLineStyle;
565 bool mRangeBoldLine;
566 int mRangeForeColor, mRangeBackColor, mRangeLineColor;
567 double mX, mY, mZ;
568 int mPointerIndex;
569 nsString mCharacters, mCharactersExtra, mData;
570 nsRefPtr<nsGeoPosition> mGeoPosition;
571 int mConnectionType;
572 bool mIsWifi;
573 int mDHCPGateway;
574 short mScreenOrientation;
575 nsRefPtr<RefCountedJavaObject> mByteBuffer;
576 int mWidth, mHeight;
577 nsCOMPtr<nsIObserver> mObserver;
578 nsTArray<nsString> mPrefNames;
579
580 void ReadIntArray(nsTArray<int> &aVals,
581 JNIEnv *jenv,
582 jfieldID field,
583 int32_t count);
584 void ReadFloatArray(nsTArray<float> &aVals,
585 JNIEnv *jenv,
586 jfieldID field,
587 int32_t count);
588 void ReadPointArray(nsTArray<nsIntPoint> &mPoints,
589 JNIEnv *jenv,
590 jfieldID field,
591 int32_t count);
592 void ReadStringArray(nsTArray<nsString> &aStrings,
593 JNIEnv *jenv,
594 jfieldID field);
595 void ReadRectField(JNIEnv *jenv);
596 void ReadCharactersField(JNIEnv *jenv);
597 void ReadCharactersExtraField(JNIEnv *jenv);
598 void ReadDataField(JNIEnv *jenv);
599 void ReadStringFromJString(nsString &aString, JNIEnv *jenv, jstring s);
600
601 uint32_t ReadDomKeyLocation(JNIEnv* jenv, jobject jGeckoEventObj);
602
603 static jclass jGeckoEventClass;
604 static jfieldID jActionField;
605 static jfieldID jTypeField;
606 static jfieldID jAckNeededField;
607 static jfieldID jTimeField;
608 static jfieldID jPoints;
609 static jfieldID jPointIndicies;
610 static jfieldID jOrientations;
611 static jfieldID jPressures;
612 static jfieldID jPointRadii;
613 static jfieldID jXField;
614 static jfieldID jYField;
615 static jfieldID jZField;
616 static jfieldID jDistanceField;
617 static jfieldID jRectField;
618 static jfieldID jNativeWindowField;
619
620 static jfieldID jCharactersField;
621 static jfieldID jCharactersExtraField;
622 static jfieldID jDataField;
623 static jfieldID jDOMPrintableKeyValueField;
624 static jfieldID jKeyCodeField;
625 static jfieldID jMetaStateField;
626 static jfieldID jDomKeyLocationField;
627 static jfieldID jFlagsField;
628 static jfieldID jCountField;
629 static jfieldID jStartField;
630 static jfieldID jEndField;
631 static jfieldID jPointerIndexField;
632 static jfieldID jUnicodeCharField;
633 static jfieldID jBaseUnicodeCharField;
634 static jfieldID jRepeatCountField;
635 static jfieldID jRangeTypeField;
636 static jfieldID jRangeStylesField;
637 static jfieldID jRangeLineStyleField;
638 static jfieldID jRangeBoldLineField;
639 static jfieldID jRangeForeColorField;
640 static jfieldID jRangeBackColorField;
641 static jfieldID jRangeLineColorField;
642 static jfieldID jLocationField;
643 static jfieldID jPrefNamesField;
644
645 static jfieldID jConnectionTypeField;
646 static jfieldID jIsWifiField;
647 static jfieldID jDHCPGatewayField;
648
649 static jfieldID jScreenOrientationField;
650 static jfieldID jByteBufferField;
651
652 static jfieldID jWidthField;
653 static jfieldID jHeightField;
654
655 static jclass jDomKeyLocationClass;
656 static jfieldID jDomKeyLocationValueField;
657
658 public:
659 enum {
660 NATIVE_POKE = 0,
661 KEY_EVENT = 1,
662 MOTION_EVENT = 2,
663 SENSOR_EVENT = 3,
664 LOCATION_EVENT = 5,
665 IME_EVENT = 6,
666 DRAW = 7,
667 SIZE_CHANGED = 8,
668 APP_BACKGROUNDING = 9,
669 APP_FOREGROUNDING = 10,
670 LOAD_URI = 12,
671 NOOP = 15,
672 FORCED_RESIZE = 16, // used internally in nsAppShell/nsWindow
673 BROADCAST = 19,
674 VIEWPORT = 20,
675 VISITED = 21,
676 NETWORK_CHANGED = 22,
677 THUMBNAIL = 25,
678 SCREENORIENTATION_CHANGED = 27,
679 COMPOSITOR_CREATE = 28,
680 COMPOSITOR_PAUSE = 29,
681 COMPOSITOR_RESUME = 30,
682 NATIVE_GESTURE_EVENT = 31,
683 IME_KEY_EVENT = 32,
684 CALL_OBSERVER = 33,
685 REMOVE_OBSERVER = 34,
686 LOW_MEMORY = 35,
687 NETWORK_LINK_CHANGE = 36,
688 TELEMETRY_HISTOGRAM_ADD = 37,
689 ADD_OBSERVER = 38,
690 PREFERENCES_OBSERVE = 39,
691 PREFERENCES_GET = 40,
692 PREFERENCES_REMOVE_OBSERVERS = 41,
693 TELEMETRY_UI_SESSION_START = 42,
694 TELEMETRY_UI_SESSION_STOP = 43,
695 TELEMETRY_UI_EVENT = 44,
696 dummy_java_enum_list_end
697 };
698
699 enum {
700 // Memory pressure levels. Keep these in sync with those in MemoryMonitor.java.
701 MEMORY_PRESSURE_NONE = 0,
702 MEMORY_PRESSURE_CLEANUP = 1,
703 MEMORY_PRESSURE_LOW = 2,
704 MEMORY_PRESSURE_MEDIUM = 3,
705 MEMORY_PRESSURE_HIGH = 4
706 };
707
708 enum {
709 // Internal Gecko events
710 IME_FLUSH_CHANGES = -2,
711 IME_UPDATE_CONTEXT = -1,
712 // Events from Java to Gecko
713 IME_SYNCHRONIZE = 0,
714 IME_REPLACE_TEXT = 1,
715 IME_SET_SELECTION = 2,
716 IME_ADD_COMPOSITION_RANGE = 3,
717 IME_UPDATE_COMPOSITION = 4,
718 IME_REMOVE_COMPOSITION = 5,
719 IME_ACKNOWLEDGE_FOCUS = 6,
720 dummy_ime_enum_list_end
721 };
722 };
723
724 class nsJNIString : public nsString
725 {
726 public:
727 nsJNIString(jstring jstr, JNIEnv *jenv);
728 };
729
730 }
731
732 #endif

mercurial