Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
polysoft-nafmii
/
polysoft-android
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit ef7eeaf7
authored
Sep 05, 2021
by
amateur
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
1
1 parent
b112a351
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
206 additions
and
6 deletions
app/src/main/java/com/polysoft/nafmii/fragment/dialog/DownloadDialog.java
app/src/main/java/com/polysoft/nafmii/net/OkhttpApi.java
app/src/main/java/com/polysoft/nafmii/utils/CtxUtils.java
app/src/main/java/com/polysoft/nafmii/utils/FileUtils.java
app/src/main/java/com/polysoft/nafmii/webview/NativeApi.java
app/src/main/java/com/whaty/nafmii/activity/MainActivity.java
app/src/main/res/drawable/dialog_bg_round.xml
app/src/main/res/layout/download_dialog.xml
app/src/main/java/com/polysoft/nafmii/fragment/dialog/DownloadDialog.java
0 → 100644
View file @
ef7eeaf
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
(
0
f
);
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
();
});
}
});
}
}
app/src/main/java/com/polysoft/nafmii/net/OkhttpApi.java
View file @
ef7eeaf
...
@@ -40,7 +40,9 @@ public class OkhttpApi {
...
@@ -40,7 +40,9 @@ public class OkhttpApi {
if
(
client
==
null
)
{
if
(
client
==
null
)
{
synchronized
(
OkhttpApi
.
class
)
{
synchronized
(
OkhttpApi
.
class
)
{
if
(
client
==
null
)
{
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 {
...
@@ -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
();
Request
request
=
new
Request
.
Builder
().
url
(
url
).
build
();
IDownListener
finalDownListener
=
downListener
;
getInstance
().
newCall
(
request
).
enqueue
(
new
Callback
()
{
getInstance
().
newCall
(
request
).
enqueue
(
new
Callback
()
{
@Override
@Override
public
void
onFailure
(
@NotNull
Call
call
,
@NotNull
IOException
e
)
{
public
void
onFailure
(
@NotNull
Call
call
,
@NotNull
IOException
e
)
{
finalDownListener
.
onFail
();
}
}
@Override
@Override
...
@@ -99,18 +115,31 @@ public class OkhttpApi {
...
@@ -99,18 +115,31 @@ public class OkhttpApi {
ResponseBody
body
=
response
.
body
();
ResponseBody
body
=
response
.
body
();
long
total
=
body
.
contentLength
();
long
total
=
body
.
contentLength
();
if
(
file
.
exists
())
{
file
.
delete
();
}
FileOutputStream
fos
=
new
FileOutputStream
(
file
);
FileOutputStream
fos
=
new
FileOutputStream
(
file
);
InputStream
stream
=
body
.
byteStream
();
InputStream
stream
=
body
.
byteStream
();
if
(
total
<
0
)
{
total
=
stream
.
available
();
}
try
{
try
{
int
len
=
0
;
int
len
=
0
;
long
sum
=
0
;
long
sum
=
0
;
byte
[]
buffer
=
new
byte
[
1024
*
4
];
byte
[]
buffer
=
new
byte
[
1024
*
4
];
int
oldProgress
=
0
;
while
((
len
=
stream
.
read
(
buffer
))
!=
-
1
)
{
while
((
len
=
stream
.
read
(
buffer
))
!=
-
1
)
{
fos
.
write
(
buffer
,
0
,
len
);
fos
.
write
(
buffer
,
0
,
len
);
// sum += len;
sum
+=
len
;
// int progress = (int) (sum * 100 / total );
int
progress
=
(
int
)
(
sum
*
100
/
total
);
if
(
oldProgress
!=
progress
)
{
finalDownListener
.
onProgress
(
progress
);
oldProgress
=
progress
;
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
finalDownListener
.
onFail
();
IOUtils
.
close
(
fos
);
IOUtils
.
close
(
fos
);
IOUtils
.
close
(
stream
);
IOUtils
.
close
(
stream
);
}
}
...
@@ -155,6 +184,11 @@ public class OkhttpApi {
...
@@ -155,6 +184,11 @@ public class OkhttpApi {
}
}
}
}
public
interface
IDownListener
{
void
onProgress
(
int
progress
);
void
onFail
();
}
private
static
class
RequestInterceptor
implements
Interceptor
{
private
static
class
RequestInterceptor
implements
Interceptor
{
private
final
String
TAG
=
"okhttp3"
;
private
final
String
TAG
=
"okhttp3"
;
...
...
app/src/main/java/com/polysoft/nafmii/utils/CtxUtils.java
View file @
ef7eeaf
...
@@ -4,7 +4,9 @@ import android.app.Application;
...
@@ -4,7 +4,9 @@ import android.app.Application;
import
android.content.pm.PackageInfo
;
import
android.content.pm.PackageInfo
;
import
android.content.pm.PackageManager
;
import
android.content.pm.PackageManager
;
import
android.content.res.AssetManager
;
import
android.content.res.AssetManager
;
import
android.os.Environment
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
...
@@ -32,6 +34,10 @@ public class CtxUtils {
...
@@ -32,6 +34,10 @@ public class CtxUtils {
return
getApplication
().
getSystemService
(
c
);
return
getApplication
().
getSystemService
(
c
);
}
}
public
static
File
getDownloadDir
()
{
return
getApplication
().
getExternalFilesDir
(
Environment
.
DIRECTORY_DOWNLOADS
);
}
public
static
PackageInfo
getPackageInfo
()
{
public
static
PackageInfo
getPackageInfo
()
{
PackageManager
manager
=
getApplication
().
getPackageManager
();
PackageManager
manager
=
getApplication
().
getPackageManager
();
...
...
app/src/main/java/com/polysoft/nafmii/utils/FileUtils.java
View file @
ef7eeaf
package
com
.
polysoft
.
nafmii
.
utils
;
package
com
.
polysoft
.
nafmii
.
utils
;
import
android.os.Environment
;
import
java.io.File
;
import
java.io.File
;
public
class
FileUtils
{
public
class
FileUtils
{
...
@@ -24,6 +26,11 @@ public class FileUtils {
...
@@ -24,6 +26,11 @@ public class FileUtils {
return
download
;
return
download
;
}
}
public
static
File
getSysDownLoadDir
()
{
return
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
);
// return CtxUtils.getApplication().getExternalFilesDir();
}
public
static
File
getRootDir
()
{
public
static
File
getRootDir
()
{
return
CtxUtils
.
getApplication
().
getFilesDir
();
return
CtxUtils
.
getApplication
().
getFilesDir
();
}
}
...
...
app/src/main/java/com/polysoft/nafmii/webview/NativeApi.java
View file @
ef7eeaf
...
@@ -7,6 +7,8 @@ import android.content.pm.PackageInfo;
...
@@ -7,6 +7,8 @@ import android.content.pm.PackageInfo;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
android.webkit.JavascriptInterface
;
import
android.webkit.JavascriptInterface
;
import
androidx.fragment.app.FragmentManager
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.util.TypeUtils
;
import
com.alibaba.fastjson.util.TypeUtils
;
...
@@ -19,11 +21,13 @@ import com.polysoft.nafmii.broadcast.ShareReceiver;
...
@@ -19,11 +21,13 @@ import com.polysoft.nafmii.broadcast.ShareReceiver;
import
com.polysoft.nafmii.database.ObjectBox
;
import
com.polysoft.nafmii.database.ObjectBox
;
import
com.polysoft.nafmii.database.entity.DataEntity
;
import
com.polysoft.nafmii.database.entity.DataEntity
;
import
com.polysoft.nafmii.enums.DatabaseEnum
;
import
com.polysoft.nafmii.enums.DatabaseEnum
;
import
com.polysoft.nafmii.fragment.dialog.DownloadDialog
;
import
com.polysoft.nafmii.fragment.dialog.FingerprintDialog
;
import
com.polysoft.nafmii.fragment.dialog.FingerprintDialog
;
import
com.polysoft.nafmii.jpush.JPushMgr
;
import
com.polysoft.nafmii.jpush.JPushMgr
;
import
com.polysoft.nafmii.net.OkhttpApi
;
import
com.polysoft.nafmii.net.OkhttpApi
;
import
com.polysoft.nafmii.utils.BitmapUtils
;
import
com.polysoft.nafmii.utils.BitmapUtils
;
import
com.polysoft.nafmii.utils.CtxUtils
;
import
com.polysoft.nafmii.utils.CtxUtils
;
import
com.polysoft.nafmii.utils.FileUtils
;
import
com.polysoft.nafmii.utils.IntentUtils
;
import
com.polysoft.nafmii.utils.IntentUtils
;
import
com.polysoft.nafmii.utils.PermissionUtils
;
import
com.polysoft.nafmii.utils.PermissionUtils
;
import
com.polysoft.nafmii.utils.StatusBarUtils
;
import
com.polysoft.nafmii.utils.StatusBarUtils
;
...
@@ -31,6 +35,7 @@ import com.polysoft.nafmii.wechat.ShareBean;
...
@@ -31,6 +35,7 @@ import com.polysoft.nafmii.wechat.ShareBean;
import
com.polysoft.nafmii.wechat.WechatApi
;
import
com.polysoft.nafmii.wechat.WechatApi
;
import
com.whaty.nafmii.activity.OutsideWebviewActivity
;
import
com.whaty.nafmii.activity.OutsideWebviewActivity
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -186,7 +191,10 @@ public class NativeApi {
...
@@ -186,7 +191,10 @@ public class NativeApi {
new
JsInterfaceHandler
(
handler
).
parse
(
params
,
(
data
,
js
)
->
{
new
JsInterfaceHandler
(
handler
).
parse
(
params
,
(
data
,
js
)
->
{
String
name
=
data
.
getString
(
"name"
);
String
name
=
data
.
getString
(
"name"
);
String
url
=
data
.
getString
(
"url"
);
String
url
=
data
.
getString
(
"url"
);
// OkhttpApi.doDownload(url, );
this
.
mActivity
.
runOnUiThread
(()->
{
FragmentManager
manager
=
this
.
handler
.
getFragmentManager
();
DownloadDialog
.
show
(
manager
,
url
,
name
);
});
js
.
success
(
null
);
js
.
success
(
null
);
});
});
}
}
...
...
app/src/main/java/com/whaty/nafmii/activity/MainActivity.java
View file @
ef7eeaf
...
@@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentTransaction;
...
@@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentTransaction;
import
com.polysoft.nafmii.fragment.AdvertisementFragment
;
import
com.polysoft.nafmii.fragment.AdvertisementFragment
;
import
com.polysoft.nafmii.fragment.GuideFragment
;
import
com.polysoft.nafmii.fragment.GuideFragment
;
import
com.polysoft.nafmii.fragment.dialog.DownloadDialog
;
import
com.polysoft.nafmii.utils.CtxUtils
;
import
com.polysoft.nafmii.utils.CtxUtils
;
import
com.polysoft.nafmii.utils.IntentUtils
;
import
com.polysoft.nafmii.utils.IntentUtils
;
import
com.polysoft.nafmii.utils.PermissionUtils
;
import
com.polysoft.nafmii.utils.PermissionUtils
;
...
...
app/src/main/res/drawable/dialog_bg_round.xml
0 → 100644
View file @
ef7eeaf
<?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
\ No newline at end of file
app/src/main/res/layout/download_dialog.xml
0 → 100644
View file @
ef7eeaf
<?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
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment