Просмотр исходного кода

更新 'app/src/main/java/com/sheep/gamegroup/util/js/BaseActWeb.java'

hanjing лет назад: 7
Родитель
Сommit
76a80c418a
1 измененных файлов с 69 добавлено и 464 удалено
  1. 69 464
      app/src/main/java/com/sheep/gamegroup/util/js/BaseActWeb.java

+ 69 - 464
app/src/main/java/com/sheep/gamegroup/util/js/BaseActWeb.java

@@ -1,511 +1,116 @@
-package com.sheep.gamegroup.view.activity;
+package com.sheep.gamegroup.util.js;
 
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Environment;
-import android.provider.MediaStore;
-import android.support.annotation.RequiresApi;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AlertDialog;
-import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.ImageView;
-import android.widget.ProgressBar;
+import android.webkit.WebView;
 
-import com.sheep.gamegroup.model.entity.WebParams;
-import com.sheep.gamegroup.module.webview.util.WebResourceRequestAdapter;
-import com.sheep.gamegroup.module.webview.util.WebResourceResponseAdapter;
+import com.sheep.gamegroup.absBase.BaseUMActivity;
+import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.util.CommonUtil;
-import com.sheep.gamegroup.util.GlideImageLoader;
-import com.sheep.gamegroup.util.Jump2View;
-import com.sheep.gamegroup.util.LogUtil;
-import com.sheep.gamegroup.util.NetUtil;
-import com.sheep.gamegroup.util.StringUtils;
-import com.sheep.gamegroup.util.TestUtil;
-import com.sheep.gamegroup.util.ViewUtil;
-import com.sheep.gamegroup.util.js.BaseActWeb;
-import com.sheep.gamegroup.util.js.KFZSJs;
-import com.sheep.jiuyan.samllsheep.BuildConfig;
-import com.sheep.jiuyan.samllsheep.Config;
+import com.sheep.gamegroup.util.share.ShareLinkConfig;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
-import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
-import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
-import com.tencent.smtt.sdk.ValueCallback;
-import com.tencent.smtt.sdk.WebChromeClient;
-import com.tencent.smtt.sdk.WebSettings;
-import com.tencent.smtt.sdk.WebView;
-import com.tencent.smtt.sdk.WebViewClient;
-import com.yalantis.ucrop.util.FileUtils;
-import com.zhy.http.okhttp.OkHttpUtils;
-import com.zhy.http.okhttp.callback.StringCallback;
+import com.umeng.socialize.bean.SHARE_MEDIA;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
-import butterknife.BindView;
-import okhttp3.Call;
 import ren.yale.android.cachewebviewlib.WebViewCacheInterceptorInst;
-
+import rx.functions.Action1;
 
 /**
- * web页面--含有所有js及url后添加authorization
- * Created by zengjiebin on 2018/4/27.
+ * Created by realicing on 2018/11/23.
+ * realicing@sina.com
  */
-public class ActWebX5 extends BaseActWeb {
+public abstract class BaseActWeb extends BaseUMActivity {
+    public abstract boolean isResponseBack();
 
-    @BindView(R.id.webview)
-    WebView mWebView;
-    @BindView(R.id.act_web_loading_pb)
-    ProgressBar act_web_loading_pb;
-    @BindView(R.id.act_web_loading_iv)
-    ImageView act_web_loading_iv;
-    private WebParams webParams;
-    private WebSettings webViewSettings;
+    public abstract void setResponseBack(boolean responseBack);
 
-    @Override
-    protected int getLayoutId() {
-        return R.layout.act_web_x5;
-    }
+    public abstract void clearWebView();
 
-    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
-    @Override
-    public void initView() {
-        GlideImageLoader.setImage(act_web_loading_iv, R.drawable.gif_sheep_loading);
+    public abstract void loadJs(String js);
 
-        Intent intent = getIntent();
-        webParams = (WebParams) intent.getSerializableExtra(WebParams.class.getSimpleName());
-        String url = webParams.getUrl();
-        String jsUrl = webParams.getJsUrl();
-        if (!TextUtils.isEmpty(url)) {
-            url = url.trim();
-        }
-        if(webParams.isShowTitle()) {
-            TitleBarUtils
-                    .getInstance()
-                    .setShowOrHide(this, true)
-                    .setTitle(this, webParams.getTitle())
-                    .setRightImgBotton(this, R.drawable.ic_edit_text_delete, view -> finish())
-                    .setTitleFinish(this);
-        }
-        initWebViewSettings(mWebView);
-        webViewSettings = mWebView.getSettings();
-        webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
-        try {
-            if (TestUtil.isTest())
-                WebView.setWebContentsDebuggingEnabled(true);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-//            webViewSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
-        }
-        if (TextUtils.isEmpty(jsUrl)) {
-            loadUrl(url);
-        } else {
-            initJsData(url, jsUrl);
-        }
-    }
-
-    //初始化js代码数据
-    private void initJsData(final String url, String jsUrl) {
-        OkHttpUtils.get()
-                .url(jsUrl)
-                .build()
-                .execute(new StringCallback() {
-                    @Override
-                    public void onError(Call call, Exception e, int id) {
-                        G.showToast(R.string.service_data_error);
-                    }
-
-                    @Override
-                    public void onResponse(String response, int id) {
-                        js = response;
-                        loadUrl(url);
-                    }
-                });
-    }
+    public abstract void showTitleBar(boolean isShow);
 
-    @Override
-    public void initListener() {
-        CommonUtil.getInstance().setDownloadListener(this, mWebView);
+    public void superFinish(){
+        super.finish();
     }
 
-    public static void initWebViewSettings(WebView webView) {
-        webView.setClickable(true);
-        WebSettings webSetting = webView.getSettings();
-        webSetting.setJavaScriptEnabled(true);
-        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
-        webSetting.setAllowFileAccess(true);
-        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
-//        webSetting.setSupportZoom(true);
-//        webSetting.setBuiltInZoomControls(true);
-        webSetting.setUseWideViewPort(true);
-        webSetting.setSupportMultipleWindows(true);
-        // webSetting.setLoadWithOverviewMode(true);
-        webSetting.setAppCacheEnabled(true);
-        // webSetting.setDatabaseEnabled(true);
-        webSetting.setDomStorageEnabled(true);
-        webSetting.setGeolocationEnabled(true);
-        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
-        // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
-        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
-        // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
-        webSetting.setCacheMode(NetUtil.CAN_CONNECT_SERVICE ? WebSettings.LOAD_DEFAULT : WebSettings.LOAD_CACHE_ELSE_NETWORK);
 
-        // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
-        // settings 的设计
+    public static String addUrlToken(String url) {
+        return addUrlQuery(url, "authorization", SpUtils.getToken(SheepApp.getInstance()));
     }
 
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        if (mWebView != null) {
-            mWebView.setVisibility(View.GONE);
-            mWebView.removeAllViews();
-            mWebView.destroy();
+    public static String addUrlQuery(String url, String key, String value) {
+        if(url.contains("?"+key+"=") || url.contains("#"+key+"=") || url.contains("&"+key+"=")){
+            return url;
         }
-    }
-
-    /**
-     *
-     */
-    public static final int INPUT_FILE_REQUEST_CODE = 1;
-    private ValueCallback<Uri> mUploadMessage;
-    private final static int FILECHOOSER_RESULTCODE = 2;
-    private ValueCallback<Uri[]> mFilePathCallback;
-
-    private String mCameraPhotoPath;
-
-    private void loadUrl(final String url) {
-
-        mWebView.setWebChromeClient(new WebChromeClient() {
-            @Override
-            public void onReceivedTitle(WebView view, String title) {
-                super.onReceivedTitle(view, title);
-                if (webParams.isShowTitle())
-                    TitleBarUtils
-                            .getInstance()
-                            .setTitle(ActWebX5.this, title);
-            }
-
-            @Override
-            public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
-                if (mFilePathCallback != null) {
-                    mFilePathCallback.onReceiveValue(null);
-                }
-                mFilePathCallback = filePathCallback;
-
-                /*PhotoPicker.builder()
-                        .setPhotoCount(1)
-                        .setShowCamera(true)
-                        .setShowGif(false)
-                        .setPreviewEnabled(true)
-                        .start(ActWeb.this, PhotoPicker.REQUEST_CODE);*/
-                Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
-                if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
-                    // Create the File where the photo should go
-                    File photoFile;
-                    photoFile = createImageFile();
-                    takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
-
-                    // Continue only if the File was successfully created
-                    if (photoFile != null) {
-                        mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
-                        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
-                                Uri.fromFile(photoFile));
-                    } else {
-                    }
-                }
-
-                Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
-                contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
-                contentSelectionIntent.setType("image/*");
-
-                Intent[] intentArray;
-                takePictureIntent = null;//步调用相机
-                if (takePictureIntent != null) {
-                    intentArray = new Intent[]{takePictureIntent};
-                } else {
-                    intentArray = new Intent[0];
-                }
-
-                Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
-                chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
-                chooserIntent.putExtra(Intent.EXTRA_TITLE, "图片选择");
-                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
-
-                startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
-
-                return /*super.onShowFileChooser(webView, filePathCallback, fileChooserParams)*/true;
-            }
-
-            //For Android 4.1
-            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
-                mUploadMessage = uploadMsg;
-                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
-                i.addCategory(Intent.CATEGORY_OPENABLE);
-                i.setType("image/*");
-                ActWebX5.this.startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILECHOOSER_RESULTCODE);
-
-            }
-
-            @Override
-            public void onProgressChanged(WebView view, int newProgress) {
-                LogUtil.println("ActWeb", "onProgressChanged", newProgress);
-                if (newProgress == 100 && ViewUtil.isVisible(act_web_loading_iv)) {
-                    Animation animation = AnimationUtils.loadAnimation(SheepApp.getInstance(), R.anim.anim_alpha_1_0);
-                    animation.setAnimationListener(new Animation.AnimationListener() {
-                        @Override
-                        public void onAnimationStart(Animation animation) {
-
-                        }
-
-                        @Override
-                        public void onAnimationEnd(Animation animation) {
-                            ViewUtil.setVisibility(act_web_loading_iv, false);
-                        }
-
-                        @Override
-                        public void onAnimationRepeat(Animation animation) {
-
-                        }
-                    });
-                    act_web_loading_iv.startAnimation(animation);
-                }
-                ViewUtil.setVisibility(act_web_loading_pb, newProgress != 100);
-                act_web_loading_pb.setProgress(newProgress);
-                super.onProgressChanged(view, newProgress);
-            }
-        });
-        mWebView.setWebViewClient(new WebViewClient() {
-            @Override
-            public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
-                LogUtil.println("ActWeb", "shouldInterceptRequest from cache", url);
-                return WebResourceResponseAdapter.adapter(WebViewCacheInterceptorInst.getInstance().interceptRequest(s));
-            }
-
-            @Override
-            public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) {
-                LogUtil.println("ActWeb", "shouldInterceptRequest from cache", url);
-                return WebResourceResponseAdapter.adapter(WebViewCacheInterceptorInst.getInstance().interceptRequest(WebResourceRequestAdapter.adapter(webResourceRequest)));
-            }
-            @Override
-            public boolean shouldOverrideUrlLoading(WebView view, String url) {
-                LogUtil.println("ActWeb", "shouldOverrideUrlLoading", url);
-                //微信H5支付核心代码
-                if (url.startsWith(Config.SHEEP_PAY)) {
-                    String order_no = StringUtils.getQueryParameter(url, Config.YF_SHOP_ORDER_NUMBER_KEY);
-                    Jump2View.getInstance().goActPay(ActWebX5.this, order_no, SpUtils.getToken(SheepApp.getInstance()));
-                    return true;
-                } else if (url.startsWith(Config.SHEEP)) {
-                    MiddleSchemeAct.parseAndJumpUri(ActWebX5.this, Uri.parse(url));
-                    return true;
-                } else if (url.startsWith("weixin://wap/pay?")) {
-                    try {
-                        Intent intent = new Intent();
-                        intent.setAction(Intent.ACTION_VIEW);
-                        intent.setData(Uri.parse(url));
-                        startActivity(intent);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                    return true;
-                } else if (url.startsWith("alipays:") || url.startsWith("alipay")) {
-                    try {
-                        startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
-                    } catch (Exception e) {
-                        new AlertDialog.Builder(ActWebX5.this)
-                                .setMessage("未检测到支付宝客户端,请安装后重试。")
-                                .setPositiveButton("立即安装", new DialogInterface.OnClickListener() {
-
+        return url + ((url.contains("?") || url.contains("#") && url.contains("=")) ? "&" : "?") + key + "=" + value;
+    }
+    public void setH5Type(String h5Type) {
+        switch (h5Type){
+            case "is_unicom":
+                TitleBarUtils
+                        .getInstance()
+                        .setRightImgBotton(this, R.mipmap.share, new View.OnClickListener() {
+                            @Override
+                            public void onClick(View view) {
+                                CommonUtil.getInstance().callActionWithUserInfo(new Action1<UserEntity>() {
                                     @Override
-                                    public void onClick(DialogInterface dialog, int which) {
-                                        Uri alipayUrl = Uri.parse("https://d.alipay.com");
-                                        startActivity(new Intent("android.intent.action.VIEW", alipayUrl));
+                                    public void call(UserEntity userEntity) {
+                                        if (userEntity == null) {
+                                            G.showToast("分享功能调试中");
+                                            return;
+                                        }
+//                                是否是联通卡分享 1:是 0:不是
+//                                分享链接需要加个 is_unicom  参数
+                                        String url = addUrlQuery(userEntity.getShareLink(), "is_unicom", "1");
+                                        new ShareLinkConfig().setLink(url).setTitle("下载小绵羊,免费领取联通大/小天神卡").toShare(BaseActWeb.this);
                                     }
-                                }).setNegativeButton("取消", null).show();
-                    }
-                    return true;
-                } else if (url.startsWith("https://wx.tenpay.com")) {
-                    Map<String, String> extraHeaders = new HashMap<>();
-                    extraHeaders.put("Referer", "http://17xmy.com");
-                    webViewLoadUrl(view, extraHeaders, url);
-                    return true;
-                } else if (url.contains("kfzs.com") || (url.startsWith("http://10.8.") && TestUtil.isDev())) {
-                    Map<String, String> extraHeaders = new HashMap<>();
-                    extraHeaders.put("Referer", "http://kfzs.com");
-                    webViewLoadUrl(view, extraHeaders, url);
-                    return true;
-                } else {
-                    return false;
-                }
-            }
-
-            @Override
-            public void onPageStarted(WebView view, String url, Bitmap favicon) {
-                LogUtil.println("ActWeb", "onPageStarted", url);
-                super.onPageStarted(view, url, favicon);
-            }
-
-            @Override
-            public void onPageFinished(WebView view, String url) {
-                LogUtil.println("ActWeb", "onPageFinished", url);
-                super.onPageFinished(view, url);
-                loadJs();
-            }
-        });
-        webViewSettings.setJavaScriptEnabled(true);
-
-        if (webParams.isNeedJsInteract()) {
-            mWebView.addJavascriptInterface(new KFZSJs(this), "kfzsjs");
-            String loadUrl = url;
-            if(webParams.getTokenKey() != null){
-                if(url.startsWith(Config.YF_SHOP_HOME))webParams.tokenFirstUpperCase();
-                loadUrl = addUrlQuery(url, webParams.getTokenKey(), SpUtils.getToken(SheepApp.getInstance()));
-                loadUrl = addUrlQuery(loadUrl, "pf", Config.YF_SHOP_PLATFORM);
-            }
-            LogUtil.println("ActWeb loadUrl = " + loadUrl);
-            webViewLoadUrl(mWebView, loadUrl);
-        } else {
-            webViewLoadUrl(mWebView, url);
+                                });
+                            }
+                        });
+                break;
         }
     }
-
-    //在sdcard卡创建缩略图
-    //createImageFileInSdcard
-    @SuppressLint("SdCardPath")
-    private File createImageFile() {
-        //mCameraPhotoPath="/mnt/sdcard/tmp.png";
-        File file = new File(Environment.getExternalStorageDirectory() + "/", "tmp.png");
-        mCameraPhotoPath = file.getAbsolutePath();
-        if (!file.exists()) {
-            try {
-                file.createNewFile();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        return file;
-    }
-
-    /**
-     * 是否响应返回键
-     */
-    private boolean responseBack = true;
-
     @Override
-    public void onBackPressed() {
-        if (responseBack)
-            super.onBackPressed();
-        else {
-            loadJs("onBackPressed()");
-        }
+    public void onStart(SHARE_MEDIA share_media) {
+        //开始分享
+        loadJs(String.format(Locale.CHINA, "callback(\"onStart\", %s)", share_media.getName()));
     }
 
     @Override
-    public void loadJs(String js) {
-        ViewUtil.loadJs(mWebView, js);
+    public void onResult(SHARE_MEDIA share_media) {
+        //分享成功 微信分享时,取消也会成功
+        loadJs(String.format(Locale.CHINA, "callback(\"onResult\", %s)", share_media.getName()));
     }
 
     @Override
-    public void finish() {
-        if (mWebView != null && mWebView.canGoBack()) {
-            mWebView.goBack();
-            return;
-        }
-        super.finish();
+    public void onError(SHARE_MEDIA share_media, Throwable throwable) {
+        //分享出错
+        String msg = throwable.getMessage();
+        G.showToast(msg != null && msg.contains("没有安装应用") ? "没有安装应用" : msg);
+        loadJs(String.format(Locale.CHINA, "callback(\"onError\", %s)", share_media.getName()));
     }
 
     @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == FILECHOOSER_RESULTCODE) {
-            if (null == mUploadMessage) return;
-            Uri result = data == null || resultCode != RESULT_OK ? null
-                    : data.getData();
-            if (result != null) {
-                String imagePath = FileUtils.getPath(this, result);
-                if (!TextUtils.isEmpty(imagePath)) {
-                    result = Uri.parse("file:///" + imagePath);
-                }
-            }
-            mUploadMessage.onReceiveValue(result);
-            mUploadMessage = null;
-        } else if (requestCode == INPUT_FILE_REQUEST_CODE && mFilePathCallback != null) {
-            // 5.0的回调
-            Uri[] results = null;
-
-            // Check that the response is a good one
-            if (resultCode == Activity.RESULT_OK) {
-                if (data == null) {
-                    // If there is not data, then we may have taken a photo
-                    if (mCameraPhotoPath != null) {
-                        results = new Uri[]{Uri.parse(mCameraPhotoPath)};
-                    }
-                } else {
-                    String dataString = data.getDataString();
-                    if (dataString != null) {
-                        results = new Uri[]{Uri.parse(dataString)};
-                    }
-                }
-            }
-
-            mFilePathCallback.onReceiveValue(results);
-            mFilePathCallback = null;
-        } else {
-            super.onActivityResult(requestCode, resultCode, data);
-            return;
-        }
-    }
-
-    // 注入js函数监听
-    public void loadJs() {
-        if (TextUtils.isEmpty(js))
-            return;
-        ViewUtil.loadJs(mWebView, getJs());
-        LogUtil.println("ActWeb", "loadJs", js);
-    }
-
-    private String js;
-
-    private String getJs() {
-        String testJsStart = "alert('成功注入');";
-        return BuildConfig.DEBUG ? testJsStart + "\n" + js : js;
-    }
-
-    @Override
-    public boolean isResponseBack() {
-        return responseBack;
+    public void onCancel(SHARE_MEDIA share_media) {
+        //取消分享 微信分享时,没有取消
+        loadJs(String.format(Locale.CHINA, "callback(\"onCancel\", %s)", share_media.getName()));
     }
 
-    @Override
-    public void setResponseBack(boolean responseBack) {
-        this.responseBack = responseBack;
+    protected void webViewLoadUrl(com.tencent.smtt.sdk.WebView webView, String url){
+        webView.loadUrl(url);
+        WebViewCacheInterceptorInst.getInstance().loadUrl(url, webView.getSettings().getUserAgentString());
     }
-
-    @Override
-    public void clearWebView() {
-        mWebView = null;
+    protected void webViewLoadUrl(com.tencent.smtt.sdk.WebView webView, Map<String, String> map, String url){
+        webView.loadUrl(url, map);
+        WebViewCacheInterceptorInst.getInstance().loadUrl(url, map, webView.getSettings().getUserAgentString());
     }
-
-    @Override
-    public void showTitleBar(boolean isShow) {
-        ActionBar actionBar = getSupportActionBar();
-        if(actionBar != null)
-            actionBar.hide();
+    protected void webViewLoadUrl(WebView webView, String url){
+        WebViewCacheInterceptorInst.getInstance().loadUrl(webView,url);
     }
-
 }