package com.tejia.lijin.app.util.web;
|
|
import android.Manifest;
|
import android.app.Activity;
|
import android.content.Intent;
|
import android.content.pm.PackageManager;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapFactory;
|
import android.media.MediaScannerConnection;
|
import android.net.Uri;
|
import android.os.Bundle;
|
import android.os.Environment;
|
import android.os.Handler;
|
import android.os.Message;
|
import androidx.core.content.ContextCompat;
|
import android.util.Log;
|
import android.view.View;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.WebView;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.bumptech.glide.Glide;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.kepler.jd.Listener.OpenAppAction;
|
import com.kepler.jd.login.KeplerApiManager;
|
import com.kepler.jd.sdk.bean.KeplerAttachParameter;
|
import com.tejia.lijin.app.util.JumpActivityUtil;
|
import com.tejia.lijin.app.util.PermissionHelper;
|
import com.tejia.lijin.app.util.Tools;
|
import com.tejia.lijin.app.util.web.BaseRebateJavaInterface;
|
import com.wpc.library.util.common.StringUtils;
|
import com.wpc.library.util.security.MD5Utils;
|
import com.tejia.lijin.app.Interface.WebInterface;
|
import com.tejia.lijin.app.callBack.GeneralBackCallback;
|
import com.tejia.lijin.app.callBack.PermissionInterface;
|
import com.tejia.lijin.app.entity.ImgText;
|
import com.tejia.lijin.app.entity.share.ShareImageEntity;
|
import com.tejia.lijin.app.ui.dialog.ShapeLoadingDialog;
|
import com.tejia.lijin.app.ui.invite.ShareBrowserActivity;
|
import com.tejia.lijin.app.util.baichuan.AlibcTradeUtil;
|
import com.tejia.lijin.app.util.share.ShareImageUtil;
|
import com.tejia.lijin.app.util.share.ShareTextUtil;
|
import com.ysh.wpc.appupdate.download.DownLoadFile;
|
|
import org.json.JSONArray;
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.MalformedURLException;
|
import java.net.URL;
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
|
public class RebateJavaInterface extends BaseRebateJavaInterface implements PermissionInterface {
|
|
Activity mContext;
|
TextView tv_top_bar_middle, tv_top_bar_left2, tv_top_bar_right;
|
ImageView iv_right;
|
WebView webview;
|
ShapeLoadingDialog pd;
|
private boolean boo = false;
|
private PermissionHelper mPermissionsChecker; // 权限检测器
|
|
public RebateJavaInterface(Activity activity, WebView webview) {
|
super(activity);
|
mContext = activity;
|
this.webview = webview;
|
boo = true;
|
}
|
|
public RebateJavaInterface(Activity activity, TextView tv_top_bar_middle
|
, TextView tv_top_bar_left2, TextView tv_top_bar_right
|
, ImageView iv_right, WebView webview, ShapeLoadingDialog pd) {
|
super(activity);
|
mContext = activity;
|
this.tv_top_bar_middle = tv_top_bar_middle;
|
this.tv_top_bar_left2 = tv_top_bar_left2;
|
this.tv_top_bar_right = tv_top_bar_right;
|
this.iv_right = iv_right;
|
this.webview = webview;
|
this.pd = pd;
|
}
|
|
@JavascriptInterface
|
public void setTitle(final String title) {
|
// tv_top_bar_middle.setText(title);
|
if (!boo)
|
tv_top_bar_middle.post(new Runnable() {
|
@Override
|
public void run() {
|
if (null != title && !StringUtils.isEmpty(title.trim()))
|
tv_top_bar_middle.setText(title);
|
}
|
});
|
}
|
|
/**
|
* 保存网络图片
|
*
|
* @param url
|
* @param name
|
*/
|
@JavascriptInterface
|
public void savePicture(String url, String name) {
|
if (mPermissionsChecker == null)
|
mPermissionsChecker = new PermissionHelper(mContext, this);
|
if (mPermissionsChecker.lacksPermissions(getPermissions())) { //存储权限未开启
|
mPermissionsChecker.showNormalDialog();
|
} else {//存储权限已开
|
String md5 = MD5Utils.getMD532(url);
|
String path = com.wpc.library.util.Environment.getExternalStorageDirectory()
|
+ "/tejiaapp";
|
File file = new File(path + "/" + md5 + ".jpg");
|
if (!file.exists()) {
|
try {
|
File resultFile = Tools.saveImageFromPathToSdCard(mContext, url, path, md5 + ".jpg");
|
if (resultFile != null) {
|
Toast.makeText(mContext, "图片保存到相册成功", Toast.LENGTH_LONG).show();
|
}
|
} catch (Exception e) {
|
Toast.makeText(mContext, "图片保存失败", Toast.LENGTH_LONG).show();
|
if (file.exists())
|
file.delete();
|
}
|
|
} else {
|
Toast.makeText(mContext, "图片已经保存!", Toast.LENGTH_LONG).show();
|
}
|
}
|
}
|
|
|
@JavascriptInterface
|
public void savePictures(String urls) {
|
if (mPermissionsChecker == null)
|
mPermissionsChecker = new PermissionHelper(mContext, this);
|
if (mPermissionsChecker.lacksPermissions(getPermissions())) { //存储权限未开启
|
mPermissionsChecker.showNormalDialog();
|
} else {//存储权限已开
|
List<String> urlList = new ArrayList<>();
|
try {
|
JSONArray array = new JSONArray(urls);
|
for (int i = 0; i < array.length(); i++) {
|
urlList.add(array.optString(i));
|
}
|
} catch (Exception e) {
|
|
}
|
|
if (urlList != null && urlList.size() > 0)
|
try {
|
startDownLoadImages(urlList, type, 2);
|
} catch (Exception e) {
|
}
|
}
|
}
|
|
|
@JavascriptInterface
|
public void setTopMenuRightIcon(final String picUrl, final String jsCallback) {
|
if (!boo)
|
iv_right.post(new Runnable() {
|
@Override
|
public void run() {
|
iv_right.setVisibility(View.VISIBLE);
|
Glide.with(mContext).load(picUrl).into(iv_right);
|
iv_right.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
// Log.e("mResult", jsCallback);
|
webview.loadUrl("javascript:" + jsCallback);
|
}
|
});
|
}
|
});
|
}
|
|
@JavascriptInterface
|
public void jumpPageWithFinishCurrentPage(String pageClassName, String paramJson) {
|
Intent intent = null;
|
JSONObject param = null;
|
try {
|
if (StringUtils.isEmpty(paramJson)) {
|
param = null;
|
} else {
|
param = new JSONObject(paramJson);
|
}
|
if (StringUtils.isEmpty(pageClassName)) {
|
return;
|
} else {
|
intent = new Intent(mContext, Class.forName(JumpActivityUtil.filterActivityName(pageClassName)));
|
}
|
} catch (JSONException e) {
|
param = null;
|
e.printStackTrace();
|
} catch (ClassNotFoundException e) {
|
e.printStackTrace();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
if (null != param) {
|
@SuppressWarnings("unchecked")
|
Iterator<String> its = param.keys();
|
while (its.hasNext()) {
|
String key = its.next();
|
String value = param.optString(key);
|
intent.putExtra(key, value);
|
}
|
}
|
mContext.startActivity(intent);
|
if (!boo)
|
mContext.finish();
|
}
|
|
|
@JavascriptInterface
|
public void hiddenTopMenuCloseBtn() {
|
if (!boo)
|
tv_top_bar_left2.setVisibility(View.GONE);
|
}
|
|
|
@JavascriptInterface
|
public void hideLoading() {
|
if (!boo)
|
iv_right.post(new Runnable() {
|
@Override
|
public void run() {
|
if (pd != null && pd.isShowing())
|
pd.dismiss();
|
}
|
});
|
|
}
|
|
@JavascriptInterface
|
public void showLoading() {
|
if (!boo)
|
iv_right.post(new Runnable() {
|
@Override
|
public void run() {
|
if (pd == null) {
|
pd = new ShapeLoadingDialog.Builder(mContext).build();
|
}
|
pd.show();
|
}
|
});
|
|
}
|
|
@JavascriptInterface
|
public void finishPage() {
|
if (!boo)
|
iv_right.post(new Runnable() {
|
@Override
|
public void run() {
|
mContext.finish();
|
}
|
});
|
}
|
|
|
@JavascriptInterface
|
public void setTopMenuRightText(final String text, final String callbackMethod) {
|
if (!boo)
|
tv_top_bar_right.post(new Runnable() {
|
@Override
|
public void run() {
|
tv_top_bar_right.setText(text);
|
tv_top_bar_right.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
webview.loadUrl("javascript:" + callbackMethod);
|
}
|
});
|
}
|
});
|
}
|
|
|
public List<ImgText> mList = new ArrayList<>();
|
|
@JavascriptInterface
|
public void addMenu(String str) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<ImgText> list = gson.fromJson(str, new TypeToken<List<ImgText>>() {
|
}.getType());
|
if (mList.size() > 0)
|
mList.clear();
|
mList.addAll(list);
|
}
|
|
|
@JavascriptInterface
|
public void showSharePanel() {
|
webShareDesc.setShare();
|
}
|
|
//文本分享
|
@JavascriptInterface
|
public void shareText(int type, String text) {
|
if (type == 1) {
|
ShareTextUtil.shareWXTextByIntent(mContext, text);
|
} else if (type == 2) {
|
ShareTextUtil.shareWXCircleTextByIntent(mContext, text);
|
} else if (type == 3) {
|
ShareTextUtil.shareQQTextByIntent(mContext, text);
|
} else if (type == 4) {
|
ShareTextUtil.shareQQZoneTextByIntent(mContext, text);
|
} else {
|
ShareTextUtil.shareSinaTextByIntent(mContext, text);
|
}
|
}
|
|
//图片分享 "type":1,//1-微信 2-朋友圈 3-QQ 4-空间 5-微博 6-更多
|
@JavascriptInterface
|
public void shareImg(int type, final String url) {
|
//检测权限
|
String[] str = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
if (lacksPermissions(str)) {//缺少权限
|
generalBackCallback.onSuccess(type, url);
|
} else {
|
this.type = type;
|
this.imgurl = url;
|
new Thread() {
|
public void run() {
|
Bitmap bitmap = getNetImage(url);//从网络下载图片
|
Message msg = new Message();
|
Bundle data = new Bundle();
|
data.putParcelable("bitmap", bitmap);
|
msg.setData(data);
|
msg.what = 1001;
|
handler.sendMessage(msg);
|
}
|
}.start();
|
}
|
|
}
|
|
/**
|
* 多图分享
|
*
|
* @param type
|
* @param urls
|
*/
|
@JavascriptInterface
|
public void shareImgs(int type, final String urls) {
|
String[] str = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
if (lacksPermissions(str)) {//缺少权限
|
generalBackCallback.onSuccess(type, null);
|
} else {
|
List<String> urlList = new ArrayList<>();
|
try {
|
JSONArray array = new JSONArray(urls);
|
for (int i = 0; i < array.length(); i++) {
|
urlList.add(array.optString(i));
|
}
|
} catch (Exception e) {
|
|
}
|
|
if (urlList != null && urlList.size() > 0)
|
try {
|
startDownLoadImages(urlList, type, 1);
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
|
/**
|
* 淘宝授权
|
*
|
* @param url
|
*/
|
@JavascriptInterface
|
public void tbAuth(String url) {
|
if (StringUtils.isEmpty(url))
|
return;
|
AlibcTradeUtil.openAuthLink(mContext, url);
|
}
|
|
/**
|
* 跳转到京东
|
*
|
* @param url
|
*/
|
@JavascriptInterface
|
public void jumpJD(String url) {
|
if (StringUtils.isEmpty(url))
|
return;
|
KeplerApiManager.getWebViewService().openAppWebViewPage(mContext, url, new KeplerAttachParameter(), new OpenAppAction() {
|
@Override
|
public void onStatus(final int status, final String url) {
|
mContext.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
if (status == OpenAppAction.OpenAppAction_result_APP) {
|
//呼京东成功
|
Log.e("mResult", "呼京东成功");
|
} else if (status == OpenAppAction.OpenAppAction_start) {
|
//开始状态未必一定执行,
|
Log.e("mResult", "开始呼起京东");
|
} else {
|
//唤起京东失败
|
Log.e("mResult", "唤起京东失败" + status);
|
Intent intent = new Intent(mContext, ShareBrowserActivity.class);
|
intent.putExtra("url", url);
|
mContext.startActivity(intent);
|
}
|
}
|
});
|
}
|
});
|
}
|
|
int type;
|
String imgurl;
|
Handler handler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
super.handleMessage(msg);
|
if (msg.what == 1001) {
|
Bitmap bitmap = msg.getData().getParcelable("bitmap");
|
shareImg(type, "", "", bitmap);
|
}
|
}
|
};
|
|
|
private Handler shareHandler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
super.handleMessage(msg);
|
ArrayList<Uri> uriList = new ArrayList<Uri>();
|
if (shareTempImgEntity != null)
|
for (ShareImageEntity entity : shareTempImgEntity)
|
uriList.add(Tools.getImageContentUri(mContext, new File(entity.getFilePath())));
|
switch (msg.what) {
|
case 1://微信
|
ShareImageUtil.shareWXPictureByIntent(mContext, uriList);
|
break;
|
case 2://朋友圈
|
ShareImageUtil.shareWXCirclePictureByIntent(mContext, uriList);
|
break;
|
case 3://QQ
|
ShareImageUtil.shareQQPictureByIntent(mContext, uriList);
|
break;
|
|
case 4://QQ空间
|
ShareImageUtil.shareQQZonePictureByIntent(mContext, uriList);
|
break;
|
case 5://微博
|
ShareImageUtil.shareSinaPictureByIntent(mContext, uriList);
|
break;
|
case 6://更多
|
Intent mulIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
|
mulIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
|
mulIntent.setType("image/png");
|
mContext.startActivity(Intent.createChooser(mulIntent, "多图文件分享"));
|
break;
|
}
|
|
}
|
};
|
|
private ArrayList<ShareImageEntity> shareTempImgEntity;
|
|
/**
|
* 下载图片
|
*
|
* @param urlList
|
* @param platform
|
* @param type 1-分享 2-下载
|
* @throws Exception
|
*/
|
private void startDownLoadImages(List<String> urlList, final int platform, final int type) throws Exception {
|
String path = null;
|
|
if (type == 1) {
|
path = Environment.getExternalStorageDirectory()
|
+ "/rebateshare";
|
} else if (type == 2) {
|
path = com.wpc.library.util.Environment.getExternalStorageDirectory()
|
+ "/tejiaapp";
|
}
|
final File storageDir = new File(path);
|
List<String> filePathList = new ArrayList<>();
|
for (String picture : urlList) {
|
String fileName = storageDir.getPath() + "/" + System.currentTimeMillis() + "_" + (long) (Math.random() * 10000000000L) + ".png";
|
filePathList.add(fileName);
|
}
|
|
if (urlList.size() > 0) {
|
showLoading();
|
shareTempImgEntity = new ArrayList<>();
|
//去下载
|
new DownLoadFile().downloadMultiImages(urlList, filePathList, mContext, new DownLoadFile.FileDownLoadListener() {
|
@Override
|
public void finish(List<File> fileList) {
|
hideLoading();
|
//完成下载
|
|
if (fileList != null)
|
for (File f : fileList) {
|
shareTempImgEntity.add(new ShareImageEntity(f.getPath()));
|
}
|
//下载成功
|
if (type == 1)
|
shareHandler.sendEmptyMessage(platform);
|
else {
|
final String[] filePaths = new String[fileList.size()];
|
for (int i = 0; i < filePaths.length; i++)
|
filePaths[i] = fileList.get(i).getPath();
|
shareHandler.post(new Runnable() {
|
@Override
|
public void run() {
|
MediaScannerConnection.scanFile(mContext, filePaths, null, null);
|
Toast.makeText(mContext, "保存到相册成功", Toast.LENGTH_SHORT).show();
|
}
|
});
|
}
|
}
|
|
@Override
|
public void process(int count) {
|
}
|
});
|
} else {
|
hideLoading();
|
if (type == 1)
|
shareHandler.sendEmptyMessage(platform);
|
else {
|
shareHandler.post(new Runnable() {
|
@Override
|
public void run() {
|
Toast.makeText(mContext, "保存到相册成功", Toast.LENGTH_SHORT).show();
|
}
|
});
|
}
|
}
|
}
|
|
|
/*******分享图片**/
|
private void shareImg(final int platfrom, final String title, final String message, final Bitmap bitmap) {
|
if (bitmap == null)
|
return;
|
int wchatAvilibleValue = Tools.isWeixinAvilible(mContext);
|
int qqAvilibleValue = Tools.isQQAvilible(mContext);
|
int sinaAvilibleValue = Tools.isSinaAvilible(mContext);
|
if (((platfrom == 1 || platfrom == 2) && (wchatAvilibleValue == 1 || wchatAvilibleValue == 2))
|
|| (platfrom == 3 && (qqAvilibleValue == 1 || qqAvilibleValue == 2))
|
|| (platfrom == 5 && (sinaAvilibleValue == 1 || sinaAvilibleValue == 2))) {
|
mContext.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
Toast.makeText(mContext, "未检测到第三方应用", Toast.LENGTH_SHORT).show();
|
}
|
});
|
} else {
|
String path = Environment.getExternalStorageDirectory()
|
+ "/rebateshare";
|
File storageDir = new File(path);
|
if (storageDir.isDirectory()) {
|
try {
|
File files[] = storageDir.listFiles();
|
for (int i = 0; i < files.length; i++) {
|
// deleteFolderFile(files[i].getAbsolutePath());
|
files[i].delete();
|
}
|
if (!storageDir.isDirectory()) {
|
storageDir.delete();
|
} else {
|
if (storageDir.listFiles().length == 0) {
|
storageDir.delete();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
// files.clear();
|
final Thread thread = new Thread(new Runnable() {
|
@Override
|
public void run() {
|
File file = Tools.saveBitmap(mContext, bitmap);
|
ArrayList<ShareImageEntity> imageList = new ArrayList<>();
|
imageList.add(new ShareImageEntity(file.getPath()));
|
|
ArrayList<Uri> uriList = new ArrayList<Uri>();
|
if (imageList != null)
|
for (ShareImageEntity entity : imageList)
|
uriList.add(Tools.getImageContentUri(mContext, new File(entity.getFilePath())));
|
|
if (platfrom == 1) {
|
ShareImageUtil.shareWXPictureByIntent(mContext, uriList);
|
} else if (platfrom == 2) {
|
ShareImageUtil.shareWXCirclePictureByIntent(mContext, uriList);
|
} else if (platfrom == 3) {
|
ShareImageUtil.shareQQPictureByIntent(mContext, uriList);
|
} else if (platfrom == 4) {
|
ShareImageUtil.shareQQZonePictureByIntent(mContext, uriList);
|
} else {
|
ShareImageUtil.shareSinaPictureByIntent(mContext, uriList);
|
}
|
if (pd != null)
|
pd.dismiss();
|
}
|
});
|
thread.start();
|
}
|
}
|
|
private Bitmap getNetImage(String url) {
|
// Log.e("mResult", "getNetImage---" + url);
|
URL fileUrl = null;
|
Bitmap bitmap = null;
|
try {
|
fileUrl = new URL(url);
|
} catch (MalformedURLException e) {
|
e.printStackTrace();
|
}
|
if (fileUrl == null)
|
return null;
|
try {
|
HttpURLConnection conn = (HttpURLConnection) fileUrl.openConnection();
|
conn.setDoInput(true);
|
conn.connect();
|
InputStream is = conn.getInputStream();
|
bitmap = BitmapFactory.decodeStream(is);
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
return bitmap;
|
}
|
|
// 判断权限集合 是否授权 false授权 true未授权
|
public boolean lacksPermissions(String... permissions) {
|
for (String permission : permissions) {
|
if (lacksPermission(permission)) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
// 判断是否缺少权限
|
private boolean lacksPermission(String permission) {
|
//权限未授权
|
return ContextCompat.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_DENIED;
|
}
|
|
private WebInterface webShareDesc; //定义
|
|
public void setWebShareDesc(WebInterface WebShareDesc) {
|
this.webShareDesc = WebShareDesc;
|
}
|
|
private GeneralBackCallback generalBackCallback; //定义 分享图片接口 检查权限传入网页调用type url参数
|
|
public void setGeneralBackCallback(GeneralBackCallback messageCallback) {
|
this.generalBackCallback = messageCallback;
|
}
|
|
@Override
|
public int getPermissionsRequestCode() {
|
return 1001;
|
}
|
|
/**
|
* 请求权限
|
*
|
* @return
|
*/
|
@Override
|
public String[] getPermissions() {
|
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
}
|
|
/**
|
* 权限请求成功
|
*/
|
@Override
|
public void requestPermissionsSuccess() {
|
|
}
|
|
/**
|
* 权限请求失败
|
*/
|
@Override
|
public void requestPermissionsFail() {
|
// Toast.makeText(this, "你以拒绝权限", Toast.LENGTH_SHORT).show();
|
}
|
}
|