Jelajahi Sumber

增加下载pdf文件流程

Pq 9 bulan lalu
induk
melakukan
65cee8b673

+ 3 - 3
BaseLibrary/src/main/java/com/cooleshow/base/utils/MyFileUtils.java

@@ -1266,7 +1266,7 @@ public class MyFileUtils {
         Uri uri = null;
         final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
         if (isN) {
-            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
+            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
         } else {
             uri = Uri.fromFile(file);
         }
@@ -1283,7 +1283,7 @@ public class MyFileUtils {
         Uri uri = null;
         final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
         if (isN) {
-            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
+            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
         } else {
             uri = Uri.fromFile(file);
 
@@ -1338,7 +1338,7 @@ public class MyFileUtils {
         Uri uri = null;
         final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
         if (isN) {
-            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
+            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
         } else {
             uri = Uri.fromFile(file);
 

+ 138 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/dialog/DownloadFileTipDialog.java

@@ -0,0 +1,138 @@
+package com.cooleshow.base.widgets.dialog;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.cooleshow.base.R;
+import com.cooleshow.base.utils.UiUtils;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2023/7/14.
+ */
+public class DownloadFileTipDialog extends BaseFullDialog implements View.OnClickListener {
+    private TextView mTvConfirm;
+    private TextView mTvCancel;
+    private TextView mTvTip;
+    private OnEventListener mListener;
+    private ImageView mIvClose;
+    private TextView mTvCopy;
+    private TextView mTvTitle;
+    private View mViewTitleBg;
+
+
+    public DownloadFileTipDialog(@NonNull Context context) {
+        super(context, R.style.DialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_download_file_tip_layout);
+        initParams();
+        mTvConfirm = findViewById(R.id.tv_confirm);
+        mTvCancel = findViewById(R.id.tv_cancel);
+        mTvTip = findViewById(R.id.tv_content);
+        mIvClose = findViewById(R.id.iv_close);
+        mTvCopy = findViewById(R.id.tv_copy);
+        mTvTitle = findViewById(R.id.tv_title);
+        mViewTitleBg = findViewById(R.id.view_title_bg);
+        initData();
+        initListener();
+    }
+
+    private void initParams() {
+        Window window = getWindow();
+        //设置dialog在屏幕底部
+        window.setGravity(Gravity.CENTER);
+        //设置dialog弹出时的动画效果,从屏幕底部向上弹出
+        window.setWindowAnimations(R.style.BottomAnimation);
+        window.getDecorView().setPadding(0, 0, 0, 0);
+        //获得window窗口的属性
+        WindowManager.LayoutParams lp = window.getAttributes();
+        //设置窗口宽度为充满全屏
+        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+        //设置窗口高度为包裹内容
+        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+        lp.horizontalMargin = 0;
+        lp.verticalMargin = 0;
+        //将设置好的属性set回去
+        window.setAttributes(lp);
+    }
+
+
+    private void initListener() {
+        mTvConfirm.setOnClickListener(this);
+        mIvClose.setOnClickListener(this);
+        mTvCopy.setOnClickListener(this);
+        mTvCancel.setOnClickListener(this);
+    }
+
+    private void initData() {
+    }
+
+    public void setData(String title, String text) {
+        if (mTvTip != null) {
+            mTvTip.setText(text);
+        }
+
+        if (mTvTitle != null) {
+            mTvTitle.setText(title);
+        }
+    }
+
+    public void handleTitleBg(boolean isVisibility) {
+        if (mViewTitleBg != null) {
+            mViewTitleBg.setVisibility(isVisibility ? View.VISIBLE : View.INVISIBLE);
+        }
+    }
+
+
+    @Override
+    public void onClick(View view) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        int id = view.getId();
+        if (id == R.id.tv_confirm) {
+            if (mListener != null) {
+                mListener.onConfirmClick();
+            }
+            return;
+        }
+
+        if (id == R.id.iv_close || id == R.id.tv_cancel) {
+            dismiss();
+            return;
+        }
+        if (id == R.id.tv_copy) {
+            if (mListener != null) {
+                mListener.onCopy();
+            }
+            return;
+        }
+    }
+
+    public void setOnCancelClickListener(View.OnClickListener listener) {
+        if (mTvCancel != null) {
+            mTvCancel.setOnClickListener(listener);
+        }
+    }
+
+    public void setOnEventListener(OnEventListener listener) {
+        mListener = listener;
+    }
+
+    public interface OnEventListener {
+        void onConfirmClick();
+
+        void onCopy();
+    }
+}

+ 7 - 0
BaseLibrary/src/main/res/drawable/bg_white_20dp.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/white" />
+    <corners
+        android:radius="20dp" />
+</shape>

+ 9 - 0
BaseLibrary/src/main/res/drawable/shape_defaff_to_white_20dp.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:startColor="#FFEAEE"
+        android:endColor="@color/white"
+        android:angle="270"
+        android:centerColor="@color/white"/>
+    <corners android:topLeftRadius="20dp"
+        android:topRightRadius="20dp"/>
+</shape>

+ 113 - 0
BaseLibrary/src/main/res/layout/dialog_download_file_tip_layout.xml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_marginStart="@dimen/dp_32"
+        android:layout_marginEnd="@dimen/dp_32"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_white_20dp"
+        android:paddingBottom="20dp">
+
+        <View
+            android:id="@+id/view_title_bg"
+            android:layout_width="match_parent"
+            android:layout_height="49dp"
+            android:background="@drawable/shape_defaff_to_white_20dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:paddingTop="20dp"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_18"
+            android:textStyle="bold"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="我是标题" />
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:gravity="left"
+            android:paddingTop="20dp"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_16"
+            android:lineSpacingMultiplier="1.2"
+            app:layout_constraintRight_toLeftOf="@+id/tv_copy"
+            app:layout_constraintLeft_toLeftOf="parent"
+            android:maxLines="2"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title"
+            tools:text="文件已保存到以下地址 C:/文件/dei/dei/dei/dei/dei/dei/dei/dei" />
+
+        <TextView
+            android:id="@+id/tv_copy"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:textColor="?attr/klx_main_color"
+            android:textSize="@dimen/sp_16"
+            android:text="复制"
+            android:paddingStart="5dp"
+            android:paddingEnd="25dp"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_content"
+            app:layout_constraintRight_toRightOf="parent" />
+
+
+
+        <TextView
+            android:layout_marginTop="25dp"
+            android:id="@+id/tv_cancel"
+            android:layout_width="0dp"
+            android:layout_height="40dp"
+            android:layout_marginStart="20dp"
+            android:layout_marginEnd="8dp"
+            android:background="@drawable/shape_border_dbdbdb_1dp_22dp"
+            android:gravity="center"
+            android:text="取消"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toLeftOf="@+id/tv_confirm"
+            app:layout_constraintTop_toBottomOf="@+id/tv_content" />
+
+        <TextView
+            android:id="@+id/tv_confirm"
+            android:layout_width="0dp"
+            android:layout_height="40dp"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="20dp"
+            android:background="@drawable/shape_2dc7aa_22dp_dynamic"
+            android:gravity="center"
+            android:text="打开文件"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toRightOf="@+id/tv_cancel"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/tv_cancel" />
+
+        <ImageView
+            android:id="@+id/iv_close"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            android:layout_marginEnd="20dp"
+            android:layout_marginTop="24dp"
+            android:src="@drawable/icon_close_black"
+            android:layout_width="18dp"
+            android:layout_height="18dp"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 51 - 25
student/src/main/java/com/cooleshow/student/ui/main/MallFragment.java

@@ -48,6 +48,7 @@ import com.cooleshow.base.constanst.ErrorType;
 import com.cooleshow.base.data.net.RetrofitClientNoToken;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.AppUtils;
+import com.cooleshow.base.utils.ClipboardUtils;
 import com.cooleshow.base.utils.LOG;
 import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.PermissionUtils;
@@ -58,6 +59,7 @@ import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.LogUploadManager;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.widgets.DialogUtil;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.student.R;
 import com.cooleshow.student.api.APIService;
 import com.cooleshow.student.bean.alipay.AuthResult;
@@ -305,8 +307,12 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
         });
     }
 
-    @Override
     public void downloadFile(String url) {
+        downloadFile(url,"");
+    }
+
+    @Override
+    public void downloadFile(String url,String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
@@ -328,7 +334,14 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                                     return;
                                 }
                                 String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -698,7 +711,7 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -722,28 +735,10 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getParentFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -782,6 +777,37 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(getContext());
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getContext().getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getContext().getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getContext().getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
     //android获取一个用于打开PDF文件的intent
     public static Intent getPdfFileIntent(String Path) {
         File file = new File(Path);

+ 55 - 28
student/src/main/java/com/cooleshow/student/ui/web/HtmlActivity.java

@@ -87,6 +87,7 @@ import com.cooleshow.base.utils.helper.WebLoadFileHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.widgets.DialogUtil;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog2;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
 import com.cooleshow.chatmodule.utils.helper.ChatHelper;
 import com.cooleshow.student.App;
@@ -407,13 +408,18 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
         });
     }
 
-    @Override
     public void downloadFile(String url) {
+        downloadFile(url, "");
+    }
+
+
+    @Override
+    public void downloadFile(String url, String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
         }
-        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
         PermissionTipHelper.getInstance().showTipDialog(this, permissions);
         new RxPermissions(this)
                 .request(permissions)
@@ -427,8 +433,15 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                                     ToastUtil.getInstance().showShort("文件异常");
                                     return;
                                 }
-                                String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String path = MyFileUtils.getPublicDirectoryDownload();
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -877,7 +890,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -901,28 +914,10 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getSupportFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -961,6 +956,38 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(this);
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.handleTitleBg(UserHelper.isTenantAccount());
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
 
     @Override
     public void saveFile(JSONObject jsonObject) {
@@ -1232,7 +1259,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                     if (error.getErrorCode() == WebViewClient.ERROR_HOST_LOOKUP || error.getErrorCode() == WebViewClient.ERROR_CONNECT) {
                         showLoadErrorView();
                     } else {
-                        if(error.getErrorCode() == WebViewClient.ERROR_UNKNOWN){
+                        if (error.getErrorCode() == WebViewClient.ERROR_UNKNOWN) {
                             return;
                         }
                         String errorMsg = "url:" + request.getUrl().toString() + " " + error.getDescription();

+ 52 - 27
student/src/main/java/com/cooleshow/student/ui/web/HtmlHorizontalScreenActivity.java

@@ -70,6 +70,7 @@ import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.widgets.DialogUtil;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
 import com.cooleshow.student.App;
 import com.cooleshow.student.R;
@@ -377,13 +378,17 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
         });
     }
 
-    @Override
     public void downloadFile(String url) {
+        downloadFile(url,"");
+    }
+
+    @Override
+    public void downloadFile(String url,String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
         }
-        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
         PermissionTipHelper.getInstance().showTipDialog(this, permissions);
         new RxPermissions(this)
                 .request(permissions)
@@ -397,8 +402,15 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                                     ToastUtil.getInstance().showShort("文件异常");
                                     return;
                                 }
-                                String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String path = MyFileUtils.getPublicDirectoryDownload();
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -834,7 +846,7 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -858,28 +870,10 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getSupportFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -918,6 +912,37 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(this);
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
     //android获取一个用于打开PDF文件的intent
     public static Intent getPdfFileIntent(String Path) {
         File file = new File(Path);

+ 4 - 2
student/src/main/java/com/cooleshow/student/widgets/helper/JsInterfaceUtils.java

@@ -188,7 +188,9 @@ public class JsInterfaceUtils extends Object {
                 if ("downloadFile".equals(api)) {
                     JSONObject content = jsonObject.getJSONObject("content");
                     if (onListener != null) {
-                        onListener.downloadFile(content.getString("downloadUrl"));
+                        String downloadUrl = content.optString("downloadUrl");
+                        String fileName = content.optString("fileName");
+                        onListener.downloadFile(downloadUrl,fileName);
                     }
 
                 }
@@ -405,7 +407,7 @@ public class JsInterfaceUtils extends Object {
 
         void onAccompanySelecResult(String id, String name);
 
-        void downloadFile(String url);
+        void downloadFile(String url, String fileName);
 
         /**
          * 选择文件

+ 50 - 25
teacher/src/main/java/com/cooleshow/teacher/ui/main/MallFragment.java

@@ -49,6 +49,7 @@ import com.cooleshow.base.constanst.StyleConfig;
 import com.cooleshow.base.data.net.RetrofitClientNoToken;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.AppUtils;
+import com.cooleshow.base.utils.ClipboardUtils;
 import com.cooleshow.base.utils.LOG;
 import com.cooleshow.base.utils.PermissionUtils;
 import com.cooleshow.base.utils.ToastUtil;
@@ -58,6 +59,7 @@ import com.cooleshow.base.utils.helper.GlideEngine;
 import com.cooleshow.base.utils.helper.LogUploadManager;
 import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.widgets.DialogUtil;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.api.APIService;
 import com.cooleshow.teacher.bean.alipay.AuthResult;
@@ -309,9 +311,12 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
             downloadFile(url);
         });
     }
+    public void downloadFile(String url) {
+        downloadFile(url,"");
+    }
 
     @Override
-    public void downloadFile(String url) {
+    public void downloadFile(String url,String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
@@ -331,7 +336,14 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                                     return;
                                 }
                                 String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -705,7 +717,7 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -729,28 +741,10 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getParentFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -789,6 +783,37 @@ public class MallFragment extends BaseMVPFragment<FragmentMallBinding, ShopMallP
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(getContext());
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getContext().getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getContext().getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getContext().getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
     //android获取一个用于打开PDF文件的intent
     public static Intent getPdfFileIntent(String Path) {
         File file = new File(Path);

+ 53 - 27
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlActivity.java

@@ -88,6 +88,7 @@ import com.cooleshow.base.utils.helper.WebLoadFileHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.widgets.DialogUtil;
 import com.cooleshow.base.widgets.dialog.CommonConfirmDialog2;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
 import com.cooleshow.chatmodule.utils.helper.ChatHelper;
 import com.cooleshow.teacher.App;
@@ -590,13 +591,17 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
         return saveFileListener;
     }
 
-    @Override
     public void downloadFile(String url) {
+        downloadFile(url, "");
+    }
+
+    @Override
+    public void downloadFile(String url,String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
         }
-        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
         PermissionTipHelper.getInstance().showTipDialog(this, permissions);
         new RxPermissions(this)
                 .request(permissions)
@@ -610,8 +615,15 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                                     ToastUtil.getInstance().showShort("文件异常");
                                     return;
                                 }
-                                String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String path = MyFileUtils.getPublicDirectoryDownload();
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -1067,7 +1079,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -1091,28 +1103,10 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getSupportFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -1151,6 +1145,38 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(this);
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.handleTitleBg(false);
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
     //android获取一个用于打开PDF文件的intent
     public static Intent getPdfFileIntent(String Path) {
         File file = new File(Path);

+ 52 - 27
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlHorizontalScreenActivity.java

@@ -70,6 +70,7 @@ import com.cooleshow.base.utils.helper.PermissionTipHelper;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.widgets.DialogUtil;
+import com.cooleshow.base.widgets.dialog.DownloadFileTipDialog;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
 import com.cooleshow.teacher.App;
 import com.cooleshow.teacher.R;
@@ -376,13 +377,17 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
         });
     }
 
-    @Override
     public void downloadFile(String url) {
+        downloadFile(url,"");
+    }
+
+    @Override
+    public void downloadFile(String url,String fileName) {
         if (TextUtils.isEmpty(url)) {
             ToastUtil.getInstance().showShort("文件异常");
             return;
         }
-        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
         PermissionTipHelper.getInstance().showTipDialog(this, permissions);
         new RxPermissions(this)
                 .request(permissions)
@@ -396,8 +401,15 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                                     ToastUtil.getInstance().showShort("文件异常");
                                     return;
                                 }
-                                String path = MyFileUtils.getPublicDirectory("file");
-                                String name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                String path = MyFileUtils.getPublicDirectoryDownload();
+                                String name;
+                                if (TextUtils.isEmpty(fileName)) {
+                                    name = "FILE_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()) + "." + type;
+                                } else {
+                                    long timeStamp = System.currentTimeMillis();
+                                    name = timeStamp + "_" + fileName + "." + type;
+                                }
+                                LOG.e(path + name);
                                 upDateNewsVideoFile(path, name, url, type);
                             } else {
                                 String type = MyFileUtils.getBase64Type(url.split(",")[0]);
@@ -832,7 +844,7 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
 
 
     private void upDateNewsVideoFile(String filePath, String fileName, String url, String type) {
-//        showUploadLoading("下载中");
+        showLoading("下载中");
         RetrofitClientNoToken.getInstance().getRetrofit().create(APIService.class)
                 .downloadFileWithFixedUrl(url)
                 .subscribeOn(Schedulers.io())
@@ -856,28 +868,10 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                                     e.printStackTrace();
                                 }
                                 onSendMessage(jsonObject.toString());
-                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath + File.separator + fileName))));
-                                DialogUtil.showInCenter(getSupportFragmentManager(), com.cooleshow.base.R.layout.common_popu, "提示", "保存成功,文件保存位置:" + filePath + File.separator + fileName + ";是否打开?", new DialogUtil.OnDialogButtonClickListener() {
-                                    @Override
-                                    public void onCancel(View v) {
-
-                                    }
-
-                                    @Override
-                                    public void onCommit(View v) {
-                                        try {
-                                            Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath + File.separator + fileName);
-                                            if (intent != null) {
-                                                startActivity(intent);
-                                            } else {
-                                                ToastUtil.getInstance().showShort("打开失败");
-                                            }
-                                        } catch (Exception e) {
-                                            ToastUtil.getInstance().showShort("打开失败");
-                                        }
-
-                                    }
-                                });
+                                File file = new File(filePath + File.separator + fileName);
+                                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
+                                String tip = "文件已保存到以下地址\n" + file.getAbsolutePath();
+                                showDownloadTipDialog(file.getAbsolutePath(), "下载成功", tip);
                             });
                         } else {
                             runOnUiThread(() -> {
@@ -916,6 +910,37 @@ public class HtmlHorizontalScreenActivity extends BaseActivity<ActivityHtml1Bind
                 });
     }
 
+    private void showDownloadTipDialog(String filePath, String title, String content) {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        DownloadFileTipDialog dialog = new DownloadFileTipDialog(this);
+        dialog.show();
+        dialog.setData(title,content);
+        dialog.setOnEventListener(new DownloadFileTipDialog.OnEventListener() {
+            @Override
+            public void onConfirmClick() {
+                try {
+                    Intent intent = MyFileUtils.startIntent(getApplicationContext(), filePath);
+                    if (intent != null) {
+                        startActivity(intent);
+                    } else {
+                        ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                    }
+                } catch (Exception e) {
+                    LOG.e(e.toString());
+                    ToastUtil.getInstance().show(getApplicationContext(), "打开失败");
+                }
+            }
+
+            @Override
+            public void onCopy() {
+                ClipboardUtils.copyText(filePath);
+                ToastUtil.getInstance().showShort("复制成功");
+            }
+        });
+    }
+
     //android获取一个用于打开PDF文件的intent
     public static Intent getPdfFileIntent(String Path) {
         File file = new File(Path);

+ 10 - 8
teacher/src/main/java/com/cooleshow/teacher/widgets/helper/JsInterfaceUtils.java

@@ -57,7 +57,7 @@ public class JsInterfaceUtils extends Object {
             try {
                 JSONObject jsonObject = new JSONObject(message);
                 String api = jsonObject.getString("api");
-                LOG.i("postMessage:"+jsonObject.toString());
+                LOG.i("postMessage:" + jsonObject.toString());
                 if ("back".equals(api)) {
                     activity.finish();
                     return;
@@ -78,7 +78,7 @@ public class JsInterfaceUtils extends Object {
                     if (null != contentBean) {
                         String userId = contentBean.optString("userId");
                         String name = contentBean.optString("name");
-                        ChatHelper.getInstance().goChat(userId,name);
+                        ChatHelper.getInstance().goChat(userId, name);
                     }
                     return;
                 }
@@ -177,7 +177,7 @@ public class JsInterfaceUtils extends Object {
                         statusBarTextColor = content.getBoolean("statusBarTextColor");
                         isOpenLight = content.getBoolean("isOpenLight");
                         orientation = content.getInt("orientation");
-                        c_orientation = content.optInt("c_orientation",ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//当前页面的横竖屏,用于云教练页面页面关闭的时候判断
+                        c_orientation = content.optInt("c_orientation", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//当前页面的横竖屏,用于云教练页面页面关闭的时候判断
                     } catch (Exception e) {
                     }
                     ARouter.getInstance().build(RouterPath.Accompany.ACTIVITY_ACCOMPANY_HTML)
@@ -203,7 +203,9 @@ public class JsInterfaceUtils extends Object {
                 if ("downloadFile".equals(api)) {
                     JSONObject content = jsonObject.getJSONObject("content");
                     if (onListener != null) {
-                        onListener.downloadFile(content.getString("downloadUrl"));
+                        String downloadUrl = content.optString("downloadUrl");
+                        String fileName = content.optString("fileName");
+                        onListener.downloadFile(downloadUrl, fileName);
                     }
                     return;
 
@@ -348,14 +350,14 @@ public class JsInterfaceUtils extends Object {
                     return;
                 }
 
-                if(TextUtils.equals(WebApi.API_SAVE_FILE,api)){
+                if (TextUtils.equals(WebApi.API_SAVE_FILE, api)) {
                     if (onListener != null) {
                         onListener.saveFile(jsonObject);
                     }
                     return;
                 }
 
-                if(TextUtils.equals(WebApi.API_VIDEO_CROP,api)){
+                if (TextUtils.equals(WebApi.API_VIDEO_CROP, api)) {
                     if (onListener != null) {
                         onListener.videoCrop(jsonObject);
                     }
@@ -397,7 +399,7 @@ public class JsInterfaceUtils extends Object {
                     return;
                 }
 
-                if(TextUtils.equals(WebApi.CANCEL_DOWNLOAD_COURSEWARE,api)){
+                if (TextUtils.equals(WebApi.CANCEL_DOWNLOAD_COURSEWARE, api)) {
                     WebLoadFileHelper.getInstance().pauseAll();
                     return;
                 }
@@ -452,7 +454,7 @@ public class JsInterfaceUtils extends Object {
 
         void onAccompanySelecResult(String id, String name);
 
-        void downloadFile(String url);
+        void downloadFile(String url, String fileName);
 
         /**
          * 选择文件