MyWebChromeClient.java 2.65 KB
package com.polysoft.nafmii.webview;

import android.net.Uri;
import android.text.TextUtils;

import com.tencent.smtt.export.external.interfaces.ConsoleMessage;
import com.tencent.smtt.export.external.interfaces.JsResult;
import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebView;

import java.util.concurrent.atomic.AtomicBoolean;

public class MyWebChromeClient extends WebChromeClient {
    private final WebviewLoadListener listener;
    private AtomicBoolean mIsLoadFinish = new AtomicBoolean();
    private boolean mIsFinish = false;

    public MyWebChromeClient(WebviewLoadListener listener) {
        this.listener = listener;
    }

    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        if (null != this.listener) {
            if (newProgress == 100) {
                if (!mIsFinish) {
                    this.mIsFinish = true;
                    this.listener.onWebviewLoad(WebviewLoadListener.TYPE_FINISH, null);
                    return;
                }
            }
            this.listener.onWebviewLoad(WebviewLoadListener.TYPE_PROGRESS, newProgress);
        }
        super.onProgressChanged(view, newProgress);
    }

    /**
     * 16(Android 4.1.2) <= API <= 20(Android 4.4W.2)回调此方法
     */
    public void openFileChooser(final ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
        if (null == this.listener) {
            return;
        }

        this.listener.onShowFileChooser((ValueCallback<Uri[]>) value -> {
            for (Uri uri : value) {
                uploadMsg.onReceiveValue(uri);
            }
        }, new String[]{acceptType}, TextUtils.isEmpty(capture));
    }

    @Override
    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
        if (null == this.listener) {
            return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
        }

        String[] acceptTypes = fileChooserParams.getAcceptTypes();
        boolean captureEnabled = fileChooserParams.isCaptureEnabled();
        this.listener.onShowFileChooser(filePathCallback, acceptTypes, captureEnabled);
        return true;
    }


    @Override
    public void onCloseWindow(WebView window) {
        super.onCloseWindow(window);
    }

    @Override
    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
        return super.onConsoleMessage(consoleMessage);
    }
}