зеркало из https://github.com/mozilla/gecko-dev.git
bug 867517 - Gecko-based WebView for Android, add GeckoView r=mfinkle
This commit is contained in:
Родитель
245c63df69
Коммит
f68e311176
|
@ -0,0 +1,96 @@
|
|||
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko;
|
||||
|
||||
import org.mozilla.gecko.db.BrowserDB;
|
||||
import org.mozilla.gecko.gfx.LayerView;
|
||||
import org.mozilla.gecko.util.GeckoEventListener;
|
||||
import org.mozilla.gecko.util.ThreadUtils;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
import android.os.Handler;
|
||||
|
||||
public class GeckoView extends LayerView
|
||||
implements GeckoEventListener, ContextGetter {
|
||||
static GeckoThread sGeckoThread;
|
||||
|
||||
public GeckoView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.GeckoView);
|
||||
String url = a.getString(R.styleable.GeckoView_url);
|
||||
a.recycle();
|
||||
|
||||
Intent intent;
|
||||
if (url == null) {
|
||||
intent = new Intent(Intent.ACTION_MAIN);
|
||||
} else {
|
||||
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createURILoadEvent(url));
|
||||
}
|
||||
GeckoAppShell.setContextGetter(this);
|
||||
if (context instanceof Activity) {
|
||||
Tabs tabs = Tabs.getInstance();
|
||||
tabs.attachToActivity((Activity) context);
|
||||
}
|
||||
GeckoProfile profile = GeckoProfile.get(context);
|
||||
BrowserDB.initialize(profile.getName());
|
||||
GeckoAppShell.registerEventListener("Gecko:Ready", this);
|
||||
|
||||
sGeckoThread = new GeckoThread(intent, url);
|
||||
ThreadUtils.setGeckoThread(sGeckoThread);
|
||||
ThreadUtils.setUiThread(Thread.currentThread(), new Handler());
|
||||
initializeView(GeckoAppShell.getEventDispatcher());
|
||||
if (GeckoThread.checkAndSetLaunchState(GeckoThread.LaunchState.Launching, GeckoThread.LaunchState.Launched)) {
|
||||
GeckoAppShell.setLayerView(this);
|
||||
sGeckoThread.start();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus) {
|
||||
super.onWindowFocusChanged(hasFocus);
|
||||
|
||||
if (hasFocus) {
|
||||
setBackgroundDrawable(null);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadUrl(String uri) {
|
||||
Tabs.getInstance().loadUrl(uri);
|
||||
}
|
||||
|
||||
public void handleMessage(String event, JSONObject message) {
|
||||
if (event.equals("Gecko:Ready")) {
|
||||
GeckoThread.setLaunchState(GeckoThread.LaunchState.GeckoRunning);
|
||||
Tab selectedTab = Tabs.getInstance().getSelectedTab();
|
||||
if (selectedTab != null)
|
||||
Tabs.getInstance().notifyListeners(selectedTab, Tabs.TabEvents.SELECTED);
|
||||
geckoConnected();
|
||||
GeckoAppShell.setLayerClient(getLayerClient());
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Viewport:Flush", null));
|
||||
show();
|
||||
requestRender();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setGeckoInterface(GeckoAppShell.GeckoInterface aGeckoInterface) {
|
||||
GeckoAppShell.setGeckoInterface(aGeckoInterface);
|
||||
}
|
||||
}
|
|
@ -110,6 +110,7 @@ FENNEC_JAVA_FILES = \
|
|||
GeckoJavaSampler.java \
|
||||
GlobalHistory.java \
|
||||
GeckoViewsFactory.java \
|
||||
GeckoView.java \
|
||||
health/BrowserHealthRecorder.java \
|
||||
InputMethods.java \
|
||||
JavaAddonManager.java \
|
||||
|
|
|
@ -164,5 +164,9 @@
|
|||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="GeckoView">
|
||||
<attr name="url" format="string"/>
|
||||
</declare-styleable>
|
||||
|
||||
</resources>
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче