зеркало из https://github.com/mozilla/pjs.git
Bug 728614 - Part 0: Allow querying the viewport information from Java; r=dougt
This commit is contained in:
Родитель
af50207d95
Коммит
54d0094288
|
@ -1302,6 +1302,16 @@ abstract public class GeckoApp
|
|||
Runnable r = new SessionSnapshotRunnable(tab);
|
||||
GeckoAppShell.getHandler().postDelayed(r, 500);
|
||||
}
|
||||
|
||||
GeckoAppShell.sendEventToGecko(
|
||||
GeckoEvent.createMetaViewportQueryEvent(tab.getId(),
|
||||
new GeckoEvent.Callback() {
|
||||
public void callback(GeckoEvent ev, String data) {
|
||||
Log.i(LOGTAG, "Meta Viewport Data:" + data);
|
||||
// To do: do something with this data
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
void handleShowToast(final String message, final String duration) {
|
||||
|
|
|
@ -62,6 +62,10 @@ import android.util.Log;
|
|||
*/
|
||||
|
||||
public class GeckoEvent {
|
||||
public interface Callback {
|
||||
public void callback(GeckoEvent event, String jsonData);
|
||||
}
|
||||
|
||||
private static final String LOGTAG = "GeckoEvent";
|
||||
|
||||
private static final int INVALID = -1;
|
||||
|
@ -89,6 +93,7 @@ public class GeckoEvent {
|
|||
private static final int PROXIMITY_EVENT = 23;
|
||||
private static final int ACTIVITY_RESUMING = 24;
|
||||
private static final int SCREENSHOT = 25;
|
||||
private static final int META_VIEWPORT_QUERY = 26;
|
||||
|
||||
public static final int IME_COMPOSITION_END = 0;
|
||||
public static final int IME_COMPOSITION_BEGIN = 1;
|
||||
|
@ -136,6 +141,9 @@ public class GeckoEvent {
|
|||
public boolean mCanBeMetered;
|
||||
|
||||
public int mNativeWindow;
|
||||
public int mTabId;
|
||||
|
||||
Callback mCallback;
|
||||
|
||||
private GeckoEvent(int evType) {
|
||||
mType = evType;
|
||||
|
@ -382,6 +390,14 @@ public class GeckoEvent {
|
|||
return event;
|
||||
}
|
||||
|
||||
public static GeckoEvent createMetaViewportQueryEvent(int tabId, Callback callback) {
|
||||
Log.i("GeckoEvent", "createMetaViewportQueryEvent");
|
||||
GeckoEvent event = new GeckoEvent(META_VIEWPORT_QUERY);
|
||||
event.mCallback = callback;
|
||||
event.mTabId = tabId;
|
||||
return event;
|
||||
}
|
||||
|
||||
public static GeckoEvent createLoadEvent(String uri) {
|
||||
GeckoEvent event = new GeckoEvent(LOAD_URI);
|
||||
event.mCharacters = uri;
|
||||
|
@ -409,4 +425,10 @@ public class GeckoEvent {
|
|||
event.mMetaState = tabId;
|
||||
return event;
|
||||
}
|
||||
|
||||
public void doCallback(String jsonData) {
|
||||
if (mCallback != null) {
|
||||
mCallback.callback(this, jsonData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,8 @@ jfieldID AndroidGeckoEvent::jLocationField = 0;
|
|||
jfieldID AndroidGeckoEvent::jAddressField = 0;
|
||||
jfieldID AndroidGeckoEvent::jBandwidthField = 0;
|
||||
jfieldID AndroidGeckoEvent::jCanBeMeteredField = 0;
|
||||
jfieldID AndroidGeckoEvent::jTabIdField = 0;
|
||||
jmethodID AndroidGeckoEvent::jDoCallbackMethod = 0;
|
||||
|
||||
jclass AndroidPoint::jPointClass = 0;
|
||||
jfieldID AndroidPoint::jXField = 0;
|
||||
|
@ -208,6 +210,9 @@ AndroidGeckoEvent::InitGeckoEventClass(JNIEnv *jEnv)
|
|||
jAddressField = getField("mAddress", "Landroid/location/Address;");
|
||||
jBandwidthField = getField("mBandwidth", "D");
|
||||
jCanBeMeteredField = getField("mCanBeMetered", "Z");
|
||||
|
||||
jTabIdField = getField("mTabId", "I");
|
||||
jDoCallbackMethod = getMethod("doCallback", "(Ljava/lang/String;)V");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -585,6 +590,10 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
|
|||
break;
|
||||
}
|
||||
|
||||
case META_VIEWPORT_QUERY:
|
||||
mTabId = jenv->GetIntField(jobj, jTabIdField);
|
||||
break;
|
||||
|
||||
case VIEWPORT:
|
||||
case BROADCAST: {
|
||||
ReadCharactersField(jenv);
|
||||
|
@ -665,6 +674,16 @@ AndroidPoint::Init(JNIEnv *jenv, jobject jobj)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
AndroidGeckoEvent::DoCallback(const nsAString& data) {
|
||||
JNIEnv* env = AndroidBridge::GetJNIEnv();
|
||||
if (!env)
|
||||
return;
|
||||
AndroidBridge::AutoLocalJNIFrame(env, 1);
|
||||
jstring jData = env->NewString(nsPromiseFlatString(data).get(), data.Length());
|
||||
env->CallVoidMethod(wrapped_obj, jDoCallbackMethod, jData);
|
||||
}
|
||||
|
||||
void
|
||||
AndroidGeckoGLLayerClient::Init(jobject jobj)
|
||||
{
|
||||
|
|
|
@ -546,6 +546,8 @@ public:
|
|||
nsGeoPositionAddress* GeoAddress() { return mGeoAddress; }
|
||||
double Bandwidth() { return mBandwidth; }
|
||||
bool CanBeMetered() { return mCanBeMetered; }
|
||||
int TabId() { return mTabId; }
|
||||
void DoCallback(const nsAString& data);
|
||||
|
||||
protected:
|
||||
int mAction;
|
||||
|
@ -571,6 +573,7 @@ protected:
|
|||
nsRefPtr<nsGeoPositionAddress> mGeoAddress;
|
||||
double mBandwidth;
|
||||
bool mCanBeMetered;
|
||||
int mTabId;
|
||||
|
||||
void ReadIntArray(nsTArray<int> &aVals,
|
||||
JNIEnv *jenv,
|
||||
|
@ -625,6 +628,9 @@ protected:
|
|||
|
||||
static jfieldID jBandwidthField;
|
||||
static jfieldID jCanBeMeteredField;
|
||||
static jfieldID jTabIdField;
|
||||
|
||||
static jmethodID jDoCallbackMethod;
|
||||
|
||||
public:
|
||||
enum {
|
||||
|
@ -653,6 +659,7 @@ public:
|
|||
PROXIMITY_EVENT = 23,
|
||||
ACTIVITY_RESUMING = 24,
|
||||
SCREENSHOT = 25,
|
||||
META_VIEWPORT_QUERY = 26,
|
||||
dummy_java_enum_list_end
|
||||
};
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
#include <android/log.h>
|
||||
#include <pthread.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#include "nsContentUtils.h"
|
||||
#ifdef MOZ_ANDROID_HISTORY
|
||||
#include "nsAndroidHistory.h"
|
||||
#endif
|
||||
|
@ -453,6 +453,34 @@ nsAppShell::ProcessNextNativeEvent(bool mayWait)
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
case AndroidGeckoEvent::META_VIEWPORT_QUERY:
|
||||
{
|
||||
nsCOMPtr<nsIDOMWindow> domWindow;
|
||||
mBrowserApp->GetWindowForTab(curEvent->TabId(), getter_AddRefs(domWindow));
|
||||
if (!domWindow)
|
||||
break;
|
||||
nsCOMPtr<nsIDOMDocument> domDocument;
|
||||
domWindow->GetDocument(getter_AddRefs(domDocument));
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDocument);
|
||||
if (!doc)
|
||||
break;
|
||||
ViewportInfo vi = nsContentUtils::GetViewportInfo(doc);
|
||||
nsAutoString data;
|
||||
data.AppendLiteral("{");
|
||||
data.AppendPrintf("\"defaultZoom\": %f,", vi.defaultZoom);
|
||||
data.AppendPrintf("\"minZoom\": %f,", vi.minZoom);
|
||||
data.AppendPrintf("\"maxZoom\": %f,", vi.maxZoom);
|
||||
data.AppendPrintf("\"width\": %d,", vi.width);
|
||||
data.AppendPrintf("\"height\": %d,", vi.height);
|
||||
data.AppendPrintf("\"autoSize\": %s,", vi.autoSize ? "true" : "false");
|
||||
data.AppendPrintf("\"allowZoom\": %s,", vi.allowZoom ? "true" : "false");
|
||||
data.AppendPrintf("\"autoScale\": %s", vi.autoScale ? "true" : "false");
|
||||
data.AppendLiteral("}");
|
||||
|
||||
curEvent->DoCallback(data);
|
||||
}
|
||||
break;
|
||||
case AndroidGeckoEvent::VIEWPORT:
|
||||
case AndroidGeckoEvent::BROADCAST: {
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче