You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
WebView: implement WebViewClient callbacks
This commit is contained in:
@@ -164,6 +164,7 @@ void set_up_handle_cache(JNIEnv *env)
|
|||||||
|
|
||||||
handle_cache.webview.class = _REF((*env)->FindClass(env, "android/webkit/WebView"));
|
handle_cache.webview.class = _REF((*env)->FindClass(env, "android/webkit/WebView"));
|
||||||
handle_cache.webview.internalGetAssetManager = _METHOD(handle_cache.webview.class, "internalGetAssetManager", "()Landroid/content/res/AssetManager;");
|
handle_cache.webview.internalGetAssetManager = _METHOD(handle_cache.webview.class, "internalGetAssetManager", "()Landroid/content/res/AssetManager;");
|
||||||
|
handle_cache.webview.internalLoadChanged = _METHOD(handle_cache.webview.class, "internalLoadChanged", "(ILjava/lang/String;)V");
|
||||||
}
|
}
|
||||||
|
|
||||||
void extract_from_apk(const char *path, const char *target) {
|
void extract_from_apk(const char *path, const char *target) {
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ struct handle_cache {
|
|||||||
struct {
|
struct {
|
||||||
jclass class;
|
jclass class;
|
||||||
jmethodID internalGetAssetManager;
|
jmethodID internalGetAssetManager;
|
||||||
|
jmethodID internalLoadChanged;
|
||||||
} webview;
|
} webview;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ static void asset_uri_scheme_request_cb(WebKitURISchemeRequest *request, gpointe
|
|||||||
g_object_unref(stream);
|
g_object_unref(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void web_view_load_changed(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer user_data)
|
||||||
|
{
|
||||||
|
WrapperWidget *wrapper = WRAPPER_WIDGET(gtk_widget_get_parent(GTK_WIDGET(web_view)));
|
||||||
|
JNIEnv *env = get_jni_env();
|
||||||
|
(*env)->CallVoidMethod(env, wrapper->jobj, handle_cache.webview.internalLoadChanged, load_event, _JSTRING(webkit_web_view_get_uri(web_view)));
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_android_webkit_WebView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
JNIEXPORT jlong JNICALL Java_android_webkit_WebView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -48,6 +55,7 @@ JNIEXPORT jlong JNICALL Java_android_webkit_WebView_native_1constructor(JNIEnv *
|
|||||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), webview);
|
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), webview);
|
||||||
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
|
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
|
||||||
webkit_web_context_register_uri_scheme(webkit_web_view_get_context(WEBKIT_WEB_VIEW(webview)), "android-asset", asset_uri_scheme_request_cb, NULL, NULL);
|
webkit_web_context_register_uri_scheme(webkit_web_view_get_context(WEBKIT_WEB_VIEW(webview)), "android-asset", asset_uri_scheme_request_cb, NULL, NULL);
|
||||||
|
g_signal_connect(G_OBJECT(webview), "load-changed", G_CALLBACK(web_view_load_changed), NULL);
|
||||||
return _INTPTR(webview);
|
return _INTPTR(webview);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ import android.util.AttributeSet;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
public class WebView extends View {
|
public class WebView extends View {
|
||||||
|
|
||||||
|
private WebViewClient webViewClient;
|
||||||
|
|
||||||
public WebView(Context context) {
|
public WebView(Context context) {
|
||||||
this(context, null);
|
this(context, null);
|
||||||
}
|
}
|
||||||
@@ -26,7 +29,18 @@ public class WebView extends View {
|
|||||||
|
|
||||||
public void setScrollBarStyle(int scrollBarStyle) {}
|
public void setScrollBarStyle(int scrollBarStyle) {}
|
||||||
|
|
||||||
public void setWebViewClient(WebViewClient webViewClient) {}
|
public void setWebViewClient(WebViewClient webViewClient) {
|
||||||
|
this.webViewClient = webViewClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
// to be used by native code
|
||||||
|
void internalLoadChanged(int loadState, String url) {
|
||||||
|
if (loadState == /*WEBKIT_LOAD_STARTED*/0 && webViewClient != null) {
|
||||||
|
webViewClient.onPageStarted(this, url);
|
||||||
|
} else if (loadState == /*WEBKIT_LOAD_FINISHED*/3 && webViewClient != null) {
|
||||||
|
webViewClient.onPageFinished(this, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setVerticalScrollBarEnabled(boolean enabled) {}
|
public void setVerticalScrollBarEnabled(boolean enabled) {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
package android.webkit;
|
package android.webkit;
|
||||||
|
|
||||||
public class WebViewClient {
|
public class WebViewClient {
|
||||||
|
public void onPageStarted(WebView view, String url) {}
|
||||||
|
public void onPageFinished(WebView view, String url) {}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user