BrowserPresentation.java 5.06 KB
package com.studymachine.www.ui.presentation;

import static com.hjq.http.EasyUtils.post;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Message;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.studymachine.www.R;
import com.studymachine.www.action.StatusAction;
import com.studymachine.www.aop.CheckNet;
import com.studymachine.www.app.AppPresentation;
import com.studymachine.www.app.ModeHandler;
import com.studymachine.www.http.glide.GlideApp;
import com.studymachine.www.js.MainJavaScriptInterface;
import com.studymachine.www.ui.activity.BrowserActivity;
import com.studymachine.www.widget.StatusLayout;
import com.studymachine.www.widget.X5WebView;
import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;

import java.util.TimerTask;

import timber.log.Timber;

public class BrowserPresentation extends AppPresentation implements StatusAction {
    private String url;
    private StatusLayout mStatusLayout;
    private ProgressBar mProgressBar;
    private X5WebView mX5WebView;
    private ImageView mImgView;

    public BrowserPresentation(Context outerContext, Display display) {
        super(outerContext, display);
    }

    public BrowserPresentation(Context outerContext, Display display, String url) {
        super(outerContext, display);
        this.url = url;
    }

    public X5WebView getmX5WebView() {
        return this.mX5WebView;
    }

    @Override
    public int getLayout() {
        return R.layout.browser_activity;
    }

    @Override
    public void initData() {
        final ModeHandler handler = new ModeHandler(this);
        mStatusLayout = findViewById(R.id.hl_browser_hint);
        mProgressBar = findViewById(R.id.pb_browser_progress);
        mX5WebView = findViewById(R.id.wv_browser_view);
        mImgView = findViewById(R.id.loadview);
        mX5WebView.addJavascriptInterface(new MainJavaScriptInterface(getOwnerActivity(), mX5WebView, handler,this), "studyMachine");

        GlideApp.with(getOwnerActivity())
                .asGif()
                .load(R.drawable.common_load)
                .into(mImgView);
        mX5WebView.setWebViewClient(new AppBrowserViewClient());
        mX5WebView.setWebChromeClient(new AppBrowserChromeClient());
        mX5WebView.loadUrl(url);
        handler.sendEmptyMessage(0);
        Runnable task = new Runnable() {
            public void run() {
                if ((System.currentTimeMillis() - handler.getModeTime()) > 2000) {
                    handler.sendEmptyMessage(0);//设置循环时间,此处是5秒
                }

                handler.postDelayed(this, 1000);
                //需要执行的代码
            }
        };

        handler.post(task);
    }


    private class AppBrowserViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(com.tencent.smtt.sdk.WebView webView, String url) {
            Timber.tag("网页UrlLoading").d(url);
            return super.shouldOverrideUrlLoading(webView, url);
        }

        /**
         * 网页加载错误时回调,这个方法会在 onPageFinished 之前调用
         */
        @Override
        public void onReceivedError(WebView webView, int i, String s, String s1) {
            // 这里为什么要用延迟呢?因为加载出错之后会先调用 onReceivedError 再调用 onPageFinished
            post(() -> showError(listener -> reload()));
        }

        /**
         * 开始加载网页
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
        }

        /**
         * 完成加载网页
         */
        @Override
        public void onPageFinished(WebView view, String url) {
//            showComplete();
            mImgView.setVisibility(View.GONE);
        }
    }

    private class AppBrowserChromeClient extends WebChromeClient {

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            Timber.tag("网页").d("look");
            return false;
        }

        /**
         * 收到网页标题
         */
        @Override
        public void onReceivedTitle(WebView view, String title) {
            if (title == null) {
                return;
            }
            setTitle(title);
        }

        @Override
        public void onReceivedIcon(WebView view, Bitmap icon) {
            if (icon == null) {
                return;
            }
            setRightIcon(new BitmapDrawable(getResources(), icon));
        }

        /**
         * 收到加载进度变化
         */
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            mProgressBar.setProgress(newProgress);
        }
    }

    /**
     * 重新加载当前页
     */
    @CheckNet
    private void reload() {
        mX5WebView.reload();
    }
}