Bug 697641, part 4: Pass sensor events from Android to Gecko. r=cjones

This commit is contained in:
Sinker Li
2012-01-16 14:38:00 +01:00
parent 81c7f5ce72
commit 2379acdfce
4 changed files with 42 additions and 4 deletions

View File

@@ -75,6 +75,7 @@ public class GeckoEvent {
public static final int ACTIVITY_START = 17;
public static final int SAVE_STATE = 18;
public static final int BROADCAST = 19;
public static final int PROXIMITY_EVENT = 20;
public static final int IME_COMPOSITION_END = 0;
public static final int IME_COMPOSITION_BEGIN = 1;
@@ -102,6 +103,7 @@ public class GeckoEvent {
public Rect mRect;
public double mX, mY, mZ;
public double mAlpha, mBeta, mGamma;
public double mDistance;
public int mMetaState, mFlags;
public int mKeyCode, mUnicodeChar;
@@ -145,19 +147,30 @@ public class GeckoEvent {
}
public GeckoEvent(SensorEvent s) {
int sensor_type = s.sensor.getType();
if (s.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
switch(sensor_type) {
case Sensor.TYPE_ACCELEROMETER:
mType = ACCELERATION_EVENT;
mX = s.values[0];
mY = s.values[1];
mZ = s.values[2];
}
else {
break;
case Sensor.TYPE_ORIENTATION:
mType = ORIENTATION_EVENT;
mAlpha = -s.values[0];
mBeta = -s.values[1];
mGamma = -s.values[2];
Log.i("GeckoEvent", "SensorEvent type = " + s.sensor.getType() + " " + s.sensor.getName() + " " + mAlpha + " " + mBeta + " " + mGamma );
break;
case Sensor.TYPE_PROXIMITY:
mType = PROXIMITY_EVENT;
mDistance = s.values[0];
Log.i("GeckoEvent", "SensorEvent type = " + s.sensor.getType() +
" " + s.sensor.getName() + " " + mDistance);
break;
}
}

View File

@@ -52,6 +52,7 @@ jfieldID AndroidGeckoEvent::jGammaField = 0;
jfieldID AndroidGeckoEvent::jXField = 0;
jfieldID AndroidGeckoEvent::jYField = 0;
jfieldID AndroidGeckoEvent::jZField = 0;
jfieldID AndroidGeckoEvent::jDistanceField = 0;
jfieldID AndroidGeckoEvent::jRectField = 0;
jfieldID AndroidGeckoEvent::jNativeWindowField = 0;
@@ -161,6 +162,7 @@ AndroidGeckoEvent::InitGeckoEventClass(JNIEnv *jEnv)
jXField = getField("mX", "D");
jYField = getField("mY", "D");
jZField = getField("mZ", "D");
jDistanceField = getField("mDistance", "D");
jRectField = getField("mRect", "Landroid/graphics/Rect;");
jCharactersField = getField("mCharacters", "Ljava/lang/String;");
@@ -491,6 +493,11 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
break;
}
case PROXIMITY_EVENT: {
mDistance = jenv->GetDoubleField(jobj, jDistanceField);
break;
}
default:
break;
}

View File

@@ -440,6 +440,7 @@ public:
double X() { return mX; }
double Y() { return mY; }
double Z() { return mZ; }
double Distance() { return mDistance; }
const nsIntRect& Rect() { return mRect; }
nsAString& Characters() { return mCharacters; }
nsAString& CharactersExtra() { return mCharactersExtra; }
@@ -470,6 +471,7 @@ protected:
int mRangeForeColor, mRangeBackColor;
double mAlpha, mBeta, mGamma;
double mX, mY, mZ;
double mDistance;
nsString mCharacters, mCharactersExtra;
nsRefPtr<nsGeoPosition> mGeoPosition;
nsRefPtr<nsGeoPositionAddress> mGeoAddress;
@@ -492,6 +494,7 @@ protected:
static jfieldID jXField;
static jfieldID jYField;
static jfieldID jZField;
static jfieldID jDistanceField;
static jfieldID jRectField;
static jfieldID jNativeWindowField;
@@ -534,6 +537,7 @@ public:
VIEWPORT = 20,
TILE_SIZE = 21,
VISITED = 22,
PROXIMITY_EVENT = 23,
dummy_java_enum_list_end
};

View File

@@ -36,6 +36,10 @@
*
* ***** END LICENSE BLOCK ***** */
// Make sure the order of included headers
#include "base/basictypes.h"
#include "nspr/prtypes.h"
#include "nsAppShell.h"
#include "nsWindow.h"
#include "nsThreadUtils.h"
@@ -47,6 +51,7 @@
#include "mozilla/Services.h"
#include "mozilla/unused.h"
#include "mozilla/Preferences.h"
#include "mozilla/Hal.h"
#include "prenv.h"
#include "AndroidBridge.h"
@@ -354,6 +359,15 @@ nsAppShell::ProcessNextNativeEvent(bool mayWait)
break;
}
case AndroidGeckoEvent::PROXIMITY_EVENT: {
InfallibleTArray<float> values;
values.AppendElement(curEvent->Distance());
hal::SensorData sdata(hal::SENSOR_PROXIMITY, PR_Now(), values);
hal::NotifySensorChange(sdata);
break;
}
case AndroidGeckoEvent::ACTIVITY_STOPPING: {
nsCOMPtr<nsIObserverService> obsServ =
mozilla::services::GetObserverService();