Commit ef7eeaf7 by amateur

1

1 parent b112a351
package com.polysoft.nafmii.fragment.dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import com.polysoft.nafmii.net.OkhttpApi;
import com.polysoft.nafmii.utils.FileUtils;
import com.polysoft.nafmii.utils.ToastUtils;
import com.whaty.nafmii.R;
import java.io.File;
public class DownloadDialog extends DialogFragment {
private String url;
private String fileName;
private TextView mProgressText;
public static void show(FragmentManager manager, String url, String fileName) {
DownloadDialog dialog = new DownloadDialog(url, fileName);
dialog.show(manager, "downloadidalog");
}
private DownloadDialog(String url, String fileName) {
this.url = url;
this.fileName = fileName;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// super.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
super.setCancelable(false);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.download_dialog, container, false);
this.mProgressText = view.findViewById(R.id.download_progress);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setDimAmount(0f);
this.start();
}
private void start() {
String name = this.fileName;
File file = new File(FileUtils.getSysDownLoadDir(), name);
OkhttpApi.doDownload(this.url, file, new OkhttpApi.IDownListener() {
@Override
public void onProgress(int progress) {
if (progress == 100) {
mProgressText.post(() -> {
ToastUtils.showLong("下载完成 " + file.getAbsoluteFile());
dismiss();
});
return;
}
mProgressText.post(() -> mProgressText.setText(String.format("%d%%", progress)));
}
@Override
public void onFail() {
mProgressText.post(() -> {
ToastUtils.showLong("下载失败 ");
dismiss();
});
}
});
}
}
......@@ -40,7 +40,9 @@ public class OkhttpApi {
if (client == null) {
synchronized (OkhttpApi.class) {
if (client == null) {
client = new OkHttpClient.Builder().addInterceptor(new RequestInterceptor()).build();
client = new OkHttpClient.Builder()
// .addInterceptor(new RequestInterceptor())
.build();
}
}
}
......@@ -83,12 +85,26 @@ public class OkhttpApi {
}
public static void doDownload(String url, final File file) {
public static void doDownload(String url, final File file, IDownListener downListener) {
if (null == downListener) {
downListener = new IDownListener() {
@Override
public void onProgress(int progress) {
}
@Override
public void onFail() {
}
};
}
Request request = new Request.Builder().url(url).build();
IDownListener finalDownListener = downListener;
getInstance().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
finalDownListener.onFail();
}
@Override
......@@ -99,18 +115,31 @@ public class OkhttpApi {
ResponseBody body = response.body();
long total = body.contentLength();
if (file.exists()) {
file.delete();
}
FileOutputStream fos = new FileOutputStream(file);
InputStream stream = body.byteStream();
if (total < 0) {
total = stream.available();
}
try {
int len = 0;
long sum = 0;
byte[] buffer = new byte[1024 * 4];
int oldProgress = 0;
while ((len = stream.read(buffer)) != -1) {
fos.write(buffer, 0, len);
// sum += len;
// int progress = (int) (sum * 100 / total );
sum += len;
int progress = (int) (sum * 100 / total );
if (oldProgress != progress) {
finalDownListener.onProgress(progress);
oldProgress = progress;
}
}
} catch (Exception e) {
e.printStackTrace();
finalDownListener.onFail();
IOUtils.close(fos);
IOUtils.close(stream);
}
......@@ -155,6 +184,11 @@ public class OkhttpApi {
}
}
public interface IDownListener {
void onProgress(int progress);
void onFail();
}
private static class RequestInterceptor implements Interceptor {
private final String TAG = "okhttp3";
......
......@@ -4,7 +4,9 @@ import android.app.Application;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.Environment;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
......@@ -32,6 +34,10 @@ public class CtxUtils {
return getApplication().getSystemService(c);
}
public static File getDownloadDir() {
return getApplication().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
}
public static PackageInfo getPackageInfo() {
PackageManager manager = getApplication().getPackageManager();
......
package com.polysoft.nafmii.utils;
import android.os.Environment;
import java.io.File;
public class FileUtils {
......@@ -24,6 +26,11 @@ public class FileUtils {
return download;
}
public static File getSysDownLoadDir() {
return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
// return CtxUtils.getApplication().getExternalFilesDir();
}
public static File getRootDir() {
return CtxUtils.getApplication().getFilesDir();
}
......
......@@ -7,6 +7,8 @@ import android.content.pm.PackageInfo;
import android.text.TextUtils;
import android.webkit.JavascriptInterface;
import androidx.fragment.app.FragmentManager;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils;
......@@ -19,11 +21,13 @@ import com.polysoft.nafmii.broadcast.ShareReceiver;
import com.polysoft.nafmii.database.ObjectBox;
import com.polysoft.nafmii.database.entity.DataEntity;
import com.polysoft.nafmii.enums.DatabaseEnum;
import com.polysoft.nafmii.fragment.dialog.DownloadDialog;
import com.polysoft.nafmii.fragment.dialog.FingerprintDialog;
import com.polysoft.nafmii.jpush.JPushMgr;
import com.polysoft.nafmii.net.OkhttpApi;
import com.polysoft.nafmii.utils.BitmapUtils;
import com.polysoft.nafmii.utils.CtxUtils;
import com.polysoft.nafmii.utils.FileUtils;
import com.polysoft.nafmii.utils.IntentUtils;
import com.polysoft.nafmii.utils.PermissionUtils;
import com.polysoft.nafmii.utils.StatusBarUtils;
......@@ -31,6 +35,7 @@ import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.WechatApi;
import com.whaty.nafmii.activity.OutsideWebviewActivity;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -186,7 +191,10 @@ public class NativeApi {
new JsInterfaceHandler(handler).parse(params, (data, js) -> {
String name = data.getString("name");
String url = data.getString("url");
// OkhttpApi.doDownload(url, );
this.mActivity.runOnUiThread(()-> {
FragmentManager manager = this.handler.getFragmentManager();
DownloadDialog.show(manager, url, name);
});
js.success(null);
});
}
......
......@@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentTransaction;
import com.polysoft.nafmii.fragment.AdvertisementFragment;
import com.polysoft.nafmii.fragment.GuideFragment;
import com.polysoft.nafmii.fragment.dialog.DownloadDialog;
import com.polysoft.nafmii.utils.CtxUtils;
import com.polysoft.nafmii.utils.IntentUtils;
import com.polysoft.nafmii.utils.PermissionUtils;
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp" /> <!-- 设置圆角弧度 -->
<solid android:color="#99000000" /> <!-- 设置背景颜色 -->
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:background="@android:color/transparent"
android:fitsSystemWindows="false">
<FrameLayout
android:layout_width="130dp"
android:layout_height="130dp"
android:background="@drawable/dialog_bg_round"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/download_loading"
style="@style/AVLoadingIndicatorView"
android:layout_width="60dp"
android:layout_height="60dp"
app:indicatorColor="@color/white"
app:indicatorName="BallSpinFadeLoaderIndicator"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/download_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1%"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!