diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 85343531f..0b52a257c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,7 +13,7 @@
android:protectionLevel="signature" />
+ android:protectionLevel="signature" />
diff --git a/app/src/main/java/com/chwl/app/MainActivity.java b/app/src/main/java/com/chwl/app/MainActivity.java
index bad6c5d74..0b691967f 100644
--- a/app/src/main/java/com/chwl/app/MainActivity.java
+++ b/app/src/main/java/com/chwl/app/MainActivity.java
@@ -310,7 +310,7 @@ public class MainActivity extends BaseMvpActivity
PreloadResourceViewModel viewModel = new ViewModelProvider(
GlobalViewModelOwner.Companion.getInstance()
).get(PreloadResourceViewModel.class);
- viewModel.start();
+ viewModel.start(context);
}
@Override
diff --git a/app/src/main/java/com/chwl/app/application/App.java b/app/src/main/java/com/chwl/app/application/App.java
index 9d1a9e48f..186eec319 100644
--- a/app/src/main/java/com/chwl/app/application/App.java
+++ b/app/src/main/java/com/chwl/app/application/App.java
@@ -25,7 +25,6 @@ import com.chwl.library.language.LanguageHelper;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
-import com.liulishuo.filedownloader.FileDownloader;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
@@ -459,7 +458,6 @@ public class App extends BaseApp {
.build();
Realm.setDefaultConfiguration(config);
- FileDownloader.setup(BasicConfig.INSTANCE.getAppContext());
LogUtil.i(TAG, channel);
}
diff --git a/app/src/main/java/com/chwl/app/avroom/widget/GiftEffectView.java b/app/src/main/java/com/chwl/app/avroom/widget/GiftEffectView.java
index 187733062..b57f21e5e 100644
--- a/app/src/main/java/com/chwl/app/avroom/widget/GiftEffectView.java
+++ b/app/src/main/java/com/chwl/app/avroom/widget/GiftEffectView.java
@@ -12,13 +12,13 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
-import com.chwl.library.utils.PathHelper;
-import com.chwl.library.download.DownloadException;
-import com.chwl.library.download.DownloadManager;
-import com.chwl.library.download.DownloadRequest;
-import com.chwl.library.download.DownloadTask;
-import com.chwl.library.download.FileDownloadListener;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
+import com.chwl.library.common.glide.GlideUtils;
import com.example.lib_utils.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGACallback;
@@ -205,22 +205,44 @@ public class GiftEffectView extends RelativeLayout {
private void drawSvgaEffect(String url) {
log("drawSvgaEffect url:" + url);
- String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
- DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
- DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+
+ GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener() {
@Override
- public void onDownloadCompleted(@NonNull DownloadTask task) {
- String path = task.getRequest().getPath();
- log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
- drawSvgaEffectFile(path);
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+
+ log("drawSvgaEffect onDownloadError url:" + url);
+ effectHandler.sendEmptyMessage(0);
+ return true;
}
@Override
- public void onDownloadError(@NonNull DownloadException exception) {
- log("drawSvgaEffect onDownloadError url:" + url);
- effectHandler.sendEmptyMessage(0);
+ public boolean onResourceReady(File resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
+ if (resource != null) {
+ String path = resource.getPath();
+ log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
+ drawSvgaEffectFile(path);
+ }
+ return true;
}
});
+
+
+// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
+// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
+// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+// @Override
+// public void onDownloadCompleted(@NonNull DownloadTask task) {
+// String path = task.getRequest().getPath();
+// log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
+// drawSvgaEffectFile(path);
+// }
+//
+// @Override
+// public void onDownloadError(@NonNull DownloadException exception) {
+// log("drawSvgaEffect onDownloadError url:" + url);
+// effectHandler.sendEmptyMessage(0);
+// }
+// });
}
private void drawSvgaEffectFile(String path) {
@@ -236,23 +258,45 @@ public class GiftEffectView extends RelativeLayout {
private void drawVAPEffect(String url) {
log("drawVAPEffect url:" + url);
- String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
- DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
- DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+
+ GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener() {
@Override
- public void onDownloadCompleted(@NonNull DownloadTask task) {
- String path = task.getRequest().getPath();
- log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + path);
- vapAnimView.startPlay(new File(path));
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+ log("drawVAPEffect onDownloadError url:" + url);
+ effectHandler.sendEmptyMessageDelayed(0, 4000);
+ return true;
}
@Override
- public void onDownloadError(@NonNull DownloadException exception) {
- log("drawVAPEffect onDownloadError url:" + url);
- exception.printStackTrace();
- effectHandler.sendEmptyMessageDelayed(0, 4000);
+ public boolean onResourceReady(File resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
+ if (resource != null) {
+ log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + resource.getPath());
+ vapAnimView.startPlay(resource);
+ }
+ return true;
}
});
+
+
+// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
+// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
+// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+// @Override
+// public void onDownloadCompleted(@NonNull DownloadTask task) {
+// String path = task.getRequest().getPath();
+// log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + path);
+// vapAnimView.startPlay(new File(path));
+// }
+//
+// @Override
+// public void onDownloadError(@NonNull DownloadException exception) {
+// log("drawVAPEffect onDownloadError url:" + url);
+// exception.printStackTrace();
+// effectHandler.sendEmptyMessageDelayed(0, 4000);
+// }
+// });
+
+
}
private void deleteAnim() {
@@ -270,7 +314,6 @@ public class GiftEffectView extends RelativeLayout {
public void release() {
log("release");
- DownloadManager.INSTANCE.stopTag(DOWNLOAD_TAG);
effectHandler.removeMessages(0);
}
diff --git a/app/src/main/java/com/chwl/app/decoration/adapter/MyUserCardWearAdapter.java b/app/src/main/java/com/chwl/app/decoration/adapter/MyUserCardWearAdapter.java
index 893f33a88..11db79b8d 100644
--- a/app/src/main/java/com/chwl/app/decoration/adapter/MyUserCardWearAdapter.java
+++ b/app/src/main/java/com/chwl/app/decoration/adapter/MyUserCardWearAdapter.java
@@ -3,7 +3,12 @@ package com.chwl.app.decoration.adapter;
import android.view.View;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
import com.chwl.app.R;
import com.chwl.app.bindadapter.BaseAdapter;
import com.chwl.app.bindadapter.BindingViewHolder;
@@ -11,13 +16,8 @@ import com.chwl.app.databinding.ItemMyUserCardWearBinding;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.decoration.headwear.bean.UserCardWearInfo;
-import com.chwl.library.download.DownloadException;
-import com.chwl.library.download.DownloadManager;
-import com.chwl.library.download.DownloadRequest;
-import com.chwl.library.download.DownloadTask;
-import com.chwl.library.download.FileDownloadListener;
+import com.chwl.library.common.glide.GlideUtils;
import com.chwl.library.utils.ResUtil;
-import com.chwl.library.utils.PathHelper;
import java.io.File;
@@ -37,21 +37,37 @@ public class MyUserCardWearAdapter extends BaseAdapter {
ItemMyUserCardWearBinding binding = (ItemMyUserCardWearBinding) helper.getBinding();
binding.ivUserCardWearMp4.setLoop(Integer.MAX_VALUE);
- String filePath = PathHelper.INSTANCE.generateResourcesFilePath(item.getPic());
- DownloadRequest request = DownloadRequest.Companion.build(item.getPic(), filePath, "gift_effect_download", null, 60000L);
- DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+ GlideUtils.instance().downloadFromUrl(binding.ivUserCardWearMp4.getContext(), item.getPic(), new RequestListener() {
@Override
- public void onDownloadCompleted(@NonNull DownloadTask task) {
- String path = task.getRequest().getPath();
- binding.ivUserCardWearMp4.startPlay(new File(path));
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+ ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
+ return true;
}
@Override
- public void onDownloadError(@NonNull DownloadException exception) {
- ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
+ public boolean onResourceReady(File resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
+ if (resource != null) {
+ binding.ivUserCardWearMp4.startPlay(resource);
+ }
+ return true;
}
});
+// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(item.getPic());
+// DownloadRequest request = DownloadRequest.Companion.build(item.getPic(), filePath, "gift_effect_download", null, 60000L);
+// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+// @Override
+// public void onDownloadCompleted(@NonNull DownloadTask task) {
+// String path = task.getRequest().getPath();
+// binding.ivUserCardWearMp4.startPlay(new File(path));
+// }
+//
+// @Override
+// public void onDownloadError(@NonNull DownloadException exception) {
+// ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
+// }
+// });
+
helper.addOnClickListener(R.id.tv_used);
diff --git a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt
index 3e8d68173..cb7105f4e 100644
--- a/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt
+++ b/app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt
@@ -37,10 +37,12 @@ import com.chwl.app.ui.setting.VipSetActivity
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.wallet.WalletActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
+import com.chwl.app.ui.widget.UserInfoDialog
import com.chwl.app.view.GenderAgeTextView
import com.chwl.app.vip.VipCenterActivity
import com.chwl.app.vip.VipSettingActivity
import com.chwl.app.vip.VipViewModel
+import com.chwl.app.vip.dialog.VipUpgradeDialog
import com.chwl.core.auth.AuthModel
import com.chwl.core.gift.bean.BoomMsgAwardBean
import com.chwl.core.initial.InitialModel
@@ -376,7 +378,6 @@ class MeFragment : BaseFragment(), View.OnClickListener {
//todo do 测试按钮
if (BuildConfig.DEBUG) {
VipSetActivity.start(requireActivity());
-// VipSettingActivity.start(requireActivity())
}
}
diff --git a/app/src/main/java/com/chwl/app/support/PreloadResourceViewModel.kt b/app/src/main/java/com/chwl/app/support/PreloadResourceViewModel.kt
index 7e437cd5c..0dc8ac741 100644
--- a/app/src/main/java/com/chwl/app/support/PreloadResourceViewModel.kt
+++ b/app/src/main/java/com/chwl/app/support/PreloadResourceViewModel.kt
@@ -1,16 +1,18 @@
package com.chwl.app.support
+import android.annotation.SuppressLint
+import android.content.Context
import androidx.lifecycle.viewModelScope
+import com.bumptech.glide.load.DataSource
+import com.bumptech.glide.load.engine.GlideException
+import com.bumptech.glide.request.RequestListener
+import com.bumptech.glide.request.target.Target
import com.chwl.app.BuildConfig
import com.chwl.app.base.BaseViewModel
import com.chwl.library.utils.PathHelper
import com.chwl.core.home.model.HomeModel
+import com.chwl.library.common.glide.GlideUtils
import com.chwl.library.common.util.SPUtils
-import com.chwl.library.download.DownloadException
-import com.chwl.library.download.DownloadListener
-import com.chwl.library.download.DownloadManager
-import com.chwl.library.download.DownloadRequest
-import com.chwl.library.download.DownloadTask
import com.chwl.library.utils.NetworkUtils
import com.example.lib_utils.AppUtils
import com.example.lib_utils.FileUtils2
@@ -18,8 +20,10 @@ import com.example.lib_utils.log.ILog
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
+import java.io.File
-class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
+@SuppressLint("StaticFieldLeak")
+class PreloadResourceViewModel : BaseViewModel(), ILog , RequestListener {
private val DOWNLOAD_TAG = "RESOURCE_DOWNLOAD_TAG"
@@ -27,7 +31,10 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
private var isStarted = false
- fun start() {
+ private var mContext : Context? = null
+
+ fun start(context: Context) {
+ mContext = context
if (BuildConfig.DEBUG) {
// 太多请求了,影响查看控制台日志
return
@@ -85,40 +92,53 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
}
private fun downloadTask(url: String) {
- val path = PathHelper.generateResourcesFilePath(url)
- logI("downloadTask() url:${url} path:${path}")
- val request = DownloadRequest.build(
- url = url,
- path = path,
- tag = DOWNLOAD_TAG,
- header = null,
- timeout = null
- )
- DownloadManager.download(request, this)
+
+// val path = PathHelper.generateResourcesFilePath(url)
+// logI("downloadTask() url:${url} path:${path}")
+// val request = DownloadRequest.build(
+// url = url,
+// path = path,
+// tag = DOWNLOAD_TAG,
+// header = null,
+// timeout = null
+// )
+// DownloadManager.download(request, this)
+
+ GlideUtils.instance().downloadFromUrl(mContext,url,this)
+
+
}
- override fun onDownloadError(exception: DownloadException) {
- super.onDownloadError(exception)
- val url = exception.task()?.getRequest()?.getUrl()
- logI(
- "onDownloadError() url:${url} message:${exception.message}"
- )
- exception.printStackTrace()
- nextTask(url)
+ override fun onLoadFailed(
+ e: GlideException?,
+ model: Any?,
+ target: Target?,
+ isFirstResource: Boolean
+ ): Boolean {
+ if (model is String) {
+ logI("onDownloadError() url:${model} message:${e?.message}")
+ nextTask(model)
+ }
+ return true
}
- override fun onDownloadCompleted(task: DownloadTask) {
- super.onDownloadCompleted(task)
- val url = task.getRequest().getUrl()
- logI(
- "onDownloadCompleted() url:${url} path:${
- task.getRequest().getPath()
- }"
- )
- makeDownloadRecord(url)
- nextTask(url)
+ override fun onResourceReady(
+ resource: File?,
+ model: Any?,
+ target: Target?,
+ dataSource: DataSource?,
+ isFirstResource: Boolean
+ ): Boolean {
+ if (model is String) {
+ logI("onDownloadCompleted() url:${model} path:${resource?.path}")
+ makeDownloadRecord(model)
+ nextTask(null)
+ }
+
+ return true
}
+
private fun isWifiNet(): Boolean {
return getNetType() == NetworkUtils.NET_WIFI
}
@@ -149,10 +169,12 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
val set = getDownloadRecord()
set.add(url)
SPUtils.putStringSet("RESOURCE_DOWNLOAD_COMPLETE", set)
+ preloadResourceList?.remove(url)
}
override fun onCleared() {
super.onCleared()
- DownloadManager.stopTag(DOWNLOAD_TAG)
}
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoMedalAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoMedalAdapter.kt
index 3a916c7d5..c1732ffa4 100644
--- a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoMedalAdapter.kt
+++ b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoMedalAdapter.kt
@@ -5,12 +5,8 @@ import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.load
+import com.chwl.app.ui.utils.loadAnim2
import com.chwl.core.user.bean.MedalBean
-import com.chwl.library.download.DownloadManager
-import com.chwl.library.download.DownloadRequest
-import com.chwl.library.download.DownloadTask
-import com.chwl.library.download.FileDownloadListener
-import com.chwl.library.utils.PathHelper
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.AnimView
import com.tencent.qgame.animplayer.inter.IAnimListener
@@ -46,14 +42,7 @@ class UserInfoMedalAdapter :
}
})
- val filePath = PathHelper.generateResourcesFilePath(it)
- val request = DownloadRequest.build(it, filePath, "", null, 600000L)
- DownloadManager.download(request, object : FileDownloadListener() {
- override fun onDownloadCompleted(task: DownloadTask) {
- val path = task.getRequest().getPath()
- mp4View.startPlay(File(path))
- }
- })
+ mp4View.loadAnim2(it)
} else {
val imageView = helper.getView(R.id.iv_image)
imageView.load(item.picUrl,0f,R.drawable.transparent_draw)
diff --git a/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt b/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt
index b85f26401..85eeac103 100644
--- a/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt
+++ b/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt
@@ -194,7 +194,9 @@ fun AnimView.loadAnim2(url: String) {
isFirstResource: Boolean
): Boolean {
if (resource != null) {
- this@loadAnim2.startPlay(resource)
+ if (this@loadAnim2.isAttachedToWindow){
+ this@loadAnim2.startPlay(resource)
+ }
}
return true
}
diff --git a/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java b/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java
index 442ac04d0..2d2e77a9b 100644
--- a/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java
+++ b/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java
@@ -32,14 +32,13 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.core.vip.bean.UserVipInfo;
-import com.chwl.library.download.DownloadException;
-import com.chwl.library.download.DownloadManager;
-import com.chwl.library.download.DownloadRequest;
-import com.chwl.library.download.DownloadTask;
-import com.chwl.library.download.FileDownloadListener;
-import com.chwl.library.utils.PathHelper;
+import com.chwl.library.common.glide.GlideUtils;
import com.chwl.library.widget.SVGAView;
import com.google.android.flexbox.FlexboxLayout;
import com.hjq.toast.ToastUtils;
@@ -660,20 +659,38 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
}
private void drawVAPEffect(String url) {
- String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
- DownloadRequest request = DownloadRequest.Companion.build(url, filePath, "gift_effect_download", null, 60000L);
- DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+
+ GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener() {
@Override
- public void onDownloadCompleted(@NonNull DownloadTask task) {
- String path = task.getRequest().getPath();
- ivUserCardWearMP4.startPlay(new File(path));
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+ ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
+ return true;
}
@Override
- public void onDownloadError(@NonNull DownloadException exception) {
- ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
+ public boolean onResourceReady(File resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
+ if (resource != null) {
+ ivUserCardWearMP4.startPlay(resource);
+ }
+ return true;
}
});
+
+// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
+// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, "gift_effect_download", null, 60000L);
+// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
+// @Override
+// public void onDownloadCompleted(@NonNull DownloadTask task) {
+// String path = task.getRequest().getPath();
+// ivUserCardWearMP4.startPlay(new File(path));
+// }
+//
+// @Override
+// public void onDownloadError(@NonNull DownloadException exception) {
+// ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
+// }
+// });
+
}
private void copyName() {
diff --git a/app/src/main/java/com/chwl/app/vip/adapter/VipCenterBannerAdapter.kt b/app/src/main/java/com/chwl/app/vip/adapter/VipCenterBannerAdapter.kt
index d7dd33090..8436d28fb 100644
--- a/app/src/main/java/com/chwl/app/vip/adapter/VipCenterBannerAdapter.kt
+++ b/app/src/main/java/com/chwl/app/vip/adapter/VipCenterBannerAdapter.kt
@@ -13,12 +13,6 @@ import com.bumptech.glide.request.target.Target
import com.chwl.app.R
import com.chwl.core.vip.bean.VipInfo
import com.chwl.library.common.glide.GlideUtils
-import com.chwl.library.download.DownloadException
-import com.chwl.library.download.DownloadManager.download
-import com.chwl.library.download.DownloadRequest.Companion.build
-import com.chwl.library.download.DownloadTask
-import com.chwl.library.download.FileDownloadListener
-import com.chwl.library.utils.PathHelper.generateResourcesFilePath
import com.chwl.library.utils.ResUtil.getString
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.AnimView
diff --git a/app/src/main/java/com/chwl/app/vip/dialog/VipUpgradeDialog.kt b/app/src/main/java/com/chwl/app/vip/dialog/VipUpgradeDialog.kt
index ecf281976..fe1f1effc 100644
--- a/app/src/main/java/com/chwl/app/vip/dialog/VipUpgradeDialog.kt
+++ b/app/src/main/java/com/chwl/app/vip/dialog/VipUpgradeDialog.kt
@@ -10,18 +10,10 @@ import com.opensource.svgaplayer.SVGAVideoEntity
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogVipUpgradeBinding
+import com.chwl.app.ui.utils.loadAnim
+import com.chwl.app.ui.utils.loadAnim2
import com.chwl.app.vip.VipViewModel
import com.chwl.core.vip.bean.VipInfo
-import com.chwl.library.download.DownloadException
-import com.chwl.library.download.DownloadManager.download
-import com.chwl.library.download.DownloadRequest
-import com.chwl.library.download.DownloadRequest.Companion
-import com.chwl.library.download.DownloadTask
-import com.chwl.library.download.FileDownloadListener
-import com.chwl.library.utils.PathHelper.generateResourcesFilePath
-import java.io.File
-import java.net.MalformedURLException
-import java.net.URL
class VipUpgradeDialog : BaseDialogFragment() {
@@ -62,19 +54,9 @@ class VipUpgradeDialog : BaseDialogFragment() {
binding?.tvVipUplevel?.setOnClickListener { dismissAllowingStateLoss() }
binding?.tvVipOrigin?.setOnClickListener { vm.saveOriginDisguise() }
binding?.ivVipIconMp4?.setLoop(Int.MAX_VALUE)
+ binding?.ivVipIconMp4?.loadAnim(vipInfo.vipLogo)
- val filePath = generateResourcesFilePath(vipInfo.vipLogo)
- val request = DownloadRequest.build(vipInfo.vipLogo, filePath, "gift_effect_download", null, 60000L)
- download(request, object : FileDownloadListener() {
- override fun onDownloadCompleted(task: DownloadTask) {
- val path = task.getRequest().getPath()
- binding?.ivVipIconMp4?.startPlay(File(path))
- }
- override fun onDownloadError(exception: DownloadException) {
- exception.printStackTrace()
- }
- })
// try {
// SVGAParser.shareParser()
diff --git a/core/build.gradle b/core/build.gradle
index 5820b3be7..c39149211 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -71,11 +71,11 @@ dependencies {
api 'io.agora.rtc:voice-sdk:4.2.2'
// core
- implementation 'com.liulishuo.okdownload:okdownload:1.0.4'
+// implementation 'com.liulishuo.okdownload:okdownload:1.0.4'
// provide sqlite to store breakpoints
- implementation 'com.liulishuo.okdownload:sqlite:1.0.4'
+// implementation 'com.liulishuo.okdownload:sqlite:1.0.4'
// provide okhttp to connect to backend
- implementation 'com.liulishuo.okdownload:okhttp:1.0.4'
+// implementation 'com.liulishuo.okdownload:okhttp:1.0.4'
// Room
api 'androidx.room:room-runtime:2.5.1'
annotationProcessor 'androidx.room:room-compiler:2.5.1'
@@ -93,8 +93,8 @@ dependencies {
api project(':nim_uikit')
api project(':library')
- implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
- implementation 'com.liulishuo.okdownload:okhttp:1.0.7'
+// implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
+// implementation 'com.liulishuo.okdownload:okhttp:1.0.7'
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:11.7.0.13946'
diff --git a/core/src/main/java/com/chwl/core/room/face/DynamicFaceModel.java b/core/src/main/java/com/chwl/core/room/face/DynamicFaceModel.java
index 6b350e9be..caf44b9ba 100644
--- a/core/src/main/java/com/chwl/core/room/face/DynamicFaceModel.java
+++ b/core/src/main/java/com/chwl/core/room/face/DynamicFaceModel.java
@@ -10,10 +10,13 @@ import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
+import com.chwl.core.utils.MyUriUtils;
+import com.chwl.library.common.glide.GlideUtils;
import com.google.gson.Gson;
-import com.liulishuo.okdownload.DownloadTask;
-import com.liulishuo.okdownload.core.cause.EndCause;
-import com.liulishuo.okdownload.core.listener.DownloadListener2;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
@@ -52,6 +55,7 @@ import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -63,6 +67,11 @@ import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.BiConsumer;
import io.reactivex.functions.Consumer;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.Headers;
@@ -621,27 +630,47 @@ public class DynamicFaceModel extends BaseModel implements IDynamicFaceModel {
}
}
+
String url = onlineFacesList.getZipUrl();
- DownloadTask task = new DownloadTask.Builder(url, facesRootDir)
- .setFilename("face.zip")
- .setMinIntervalMillisCallbackProcess(1000)
- .setPassIfAlreadyCompleted(true)
- .build();
- task.enqueue(new DownloadListener2() {
+ GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener() {
@Override
- public void taskStart(@NonNull DownloadTask task) {
- Logger.d("face.zip download start");
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+ Logger.d("face.zip download onLoadFailed");
+ return true;
}
-
@Override
- public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause) {
- Logger.d("face.zip download end" + "response dir: " + facesRootDir.getAbsolutePath());
- unzipFaceZipFile(onlineFacesList);
- isRequestingZip = false;
+ public boolean onResourceReady(File resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
+ if (resource != null) {
+ MyUriUtils.INSTANCE.copyFile(resource,new File(facesRootDir,"face.zip"));
+ Logger.d("face.zip download end" + "response dir: " + facesRootDir.getAbsolutePath());
+ unzipFaceZipFile(onlineFacesList);
+ isRequestingZip = false;
+ }
+ return true;
}
});
+
+// DownloadTask task = new DownloadTask.Builder(url, facesRootDir)
+// .setFilename("face.zip")
+// .setMinIntervalMillisCallbackProcess(1000)
+// .setPassIfAlreadyCompleted(true)
+// .build();
+//
+// task.enqueue(new DownloadListener2() {
+// @Override
+// public void taskStart(@NonNull DownloadTask task) {
+// Logger.d("face.zip download start");
+// }
+//
+// @Override
+// public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause) {
+// Logger.d("face.zip download end" + "response dir: " + facesRootDir.getAbsolutePath());
+// unzipFaceZipFile(onlineFacesList);
+// isRequestingZip = false;
+// }
+// });
}
/**
diff --git a/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt b/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt
index ee4fe8636..3c1b2037f 100644
--- a/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt
+++ b/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt
@@ -81,5 +81,12 @@ object MyUriUtils {
return data
}
+ fun copyFile(file:File,dir:File){
+ if (!dir.exists()) {
+ dir.mkdirs()
+ }
+ file.copyTo(dir,true)
+ }
+
}
\ No newline at end of file
diff --git a/library/build.gradle b/library/build.gradle
index eb3e7410f..eaf261566 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -119,7 +119,7 @@ dependencies {
api project(':libs:lib_encipher')
api 'com.qcloud.cos:cos-android:5.9.25'
- api 'com.liulishuo.filedownloader:library:1.7.7'
+// api 'com.liulishuo.filedownloader:library:1.7.7'
api "com.github.yyued:SVGAPlayer-Android:2.6.1"
}
diff --git a/library/src/main/java/com/chwl/library/download/DownloadException.kt b/library/src/main/java/com/chwl/library/download/DownloadException.kt
deleted file mode 100644
index a284f83b2..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadException.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.chwl.library.download
-
-
-class DownloadException : Exception {
-
- private var task: DownloadTask? = null
-
- private var request: DownloadRequest? = null
-
- constructor(message: String) : super(message)
-
- constructor(task: DownloadTask, throwable: Throwable) : super(
- throwable
- ) {
- this.task = task
- this.request = task.getRequest()
- }
-
- constructor(request: DownloadRequest, throwable: Throwable) : super(
- throwable
- ) {
- this.request = request
- }
-
- fun task() = task
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/DownloadListener.kt b/library/src/main/java/com/chwl/library/download/DownloadListener.kt
deleted file mode 100644
index aed75d39b..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadListener.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.chwl.library.download
-
-
-interface DownloadListener {
-
- /**
- * 下载完成
- */
- fun onDownloadCompleted(task: DownloadTask) {}
-
- /**
- * 下载进度
- * @param soFarBytes 已下载
- * @param totalBytes 总
- */
- fun onDownloadProgress(task: DownloadTask, soFarBytes: Int, totalBytes: Int) {}
-
- /**
- * 下载异常
- */
- fun onDownloadError(exception: DownloadException){}
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/DownloadManager.kt b/library/src/main/java/com/chwl/library/download/DownloadManager.kt
deleted file mode 100644
index 6bff08f30..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadManager.kt
+++ /dev/null
@@ -1,231 +0,0 @@
-package com.chwl.library.download
-
-import com.example.lib_utils.log.ILog
-import java.util.concurrent.ConcurrentHashMap
-
-
-object DownloadManager : ILog {
-
- /**
- * 任务列表
- */
- private val tasks: ConcurrentHashMap by lazy {
- ConcurrentHashMap()
- }
-
- /**
- * 标签列表
- */
- private val tags: ConcurrentHashMap> by lazy {
- ConcurrentHashMap()
- }
-
- /**
- * 停止所有任务
- */
- fun stopAll() {
- logD("stopAll()")
- tasks.keys.map {
- it
- }.forEach {
- stop(it)
- }
- tasks.clear()
- tags.clear()
- }
-
- /**
- * 停止某一个URL下载任务(有多组下载该URL,都会被停止)
- */
- fun stop(url: String) {
- logD("stop() url:${url}")
- getTask(url)?.stop()
- }
-
- /**
- * 停止某一组内的某个URL下载任务(其他组正在下载该URL的任务不受影响)
- */
- fun stop(url: String, tag: String) {
- logD("stop() url:$url ,tag:$tag")
- getTask(url)?.removeListener(tag)
- }
-
- /**
- * 停止某一标签的所有任务
- */
- fun stopTag(tag: String) {
- logD("stopTag()")
- if (tags.containsKey(tag)) {
- tags.remove(tag)?.let {
- it.forEach { url ->
- getTask(url)?.removeListener(tag)
- }
- }
- }
- }
-
- /**
- * 停止某个下载请求
- */
- fun stop(request: DownloadRequest) {
- stop(request.getUrl(), request.getTag())
- }
-
- /**
- * 下载文件 (简单下载,也可通过自己构造DownloadRequest下载)
- * @param url 下载地址
- * @param tag 标签
- * @param listener 监听器
- */
- fun download(url: String, path: String, listener: DownloadListener, tag: String? = null) {
- val request = DownloadRequest.build(url, path, tag, null)
- download(request, listener)
- }
-
- /**
- * 下载文件
- * @param request 下载请求体
- * @param listener 监听器
- */
- fun download(request: DownloadRequest, listener: DownloadListener) {
- download(request, request.getTag(), listener)
- }
-
- /**
- * 下载文件
- * @param request 下载请求体
- * @param listenerTag 监听器标签(有重复任务时,内部会复用任务追加监听器,监听器以标签区分。)
- * @param listener 监听器
- */
- fun download(request: DownloadRequest, listenerTag: String, listener: DownloadListener) {
- logD("download() url:${request.getUrl()} ,path:${request.getPath()} ,listenerTag:$listenerTag")
- // 记录标签与地址关系
- addTag(request.getTag(), request.getUrl())
- synchronized(this) {
- var task = getTask(request)
- // 判断是否有相同目标的任务
- if (task != null) {
- logD("download() 有重复任务->关联复用")
- task.addListener(listenerTag, listener)
- task.start()
- } else {
- logD("download() 创建新任务")
- task = request.createTask().apply {
- addListener(listenerTag, listener)
- }
- addTask(task)
- task.start()
- }
- }
- }
-
- /**
- * 添加监听
- * @param url 下载地址
- * @param listener 监听器
- */
- fun addListener(url: String, listener: DownloadListener) {
- getTask(url)?.addListener(listener = listener)
- }
-
- /**
- * 移除监听
- * @param url 下载地址
- * @param listener 监听器
- */
- fun removeListener(url: String, listener: DownloadListener) {
- getTask(url)?.removeListener(listener = listener)
- }
-
- /**
- * 获取任务(具有相同目标的任务)
- * @param request
- */
- fun getTask(request: DownloadRequest): DownloadTask? {
- tasks.values.forEach {
- if (it.getRequest().equalsTarget(request)) {
- return it
- }
- }
- return null
- }
-
- /**
- * 添加任务
- */
- private fun addTask(task: DownloadTask) {
- logD("addTask()")
- tasks[task.getRequest().getUrl()] = task
- }
-
- /**
- * 移除任务
- */
- fun removeTask(task: DownloadTask) {
- removeTask(task.getRequest().getUrl())
- }
-
- /**
- * 移除任务
- */
- @Synchronized
- private fun removeTask(url: String) {
- logD("removeTask() url:$url")
- tasks.remove(url)?.apply {
- // 移除该URL与标签关系
- tags.iterator().let {
- while (it.hasNext()) {
- it.next().let { entry ->
- entry.value.remove(url)
- if (entry.value.isEmpty()) {
- it.remove()
- }
- }
- }
- }
- }
- }
-
- /**
- * 获取任务-根据下载地址
- * @param url 下载地址
- */
- fun getTask(url: String): DownloadTask? {
- if (hasTask(url)) {
- return tasks[url]
- }
- return null
- }
-
- /**
- * 是否存在相同任务
- * @param url 下载地址
- */
- private fun hasTask(url: String): Boolean {
- return tasks.containsKey(url)
- }
-
- /**
- * 是否存在相同任务
- */
- private fun hasTask(request: DownloadRequest): Boolean {
- return getTask(request) != null
- }
-
- /**
- * 添加标签记录(建立关系)
- */
- private fun addTag(tag: String, url: String) {
- logD("addTag() tag:$tag ,url:$url")
- if (tag.isEmpty() || url.isEmpty()) {
- return
- }
- synchronized(this) {
- tags[tag]?.add(url) ?: let {
- tags[tag] = HashSet().apply {
- add(url)
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/DownloadRequest.kt b/library/src/main/java/com/chwl/library/download/DownloadRequest.kt
deleted file mode 100644
index b222b6ffa..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadRequest.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.chwl.library.download
-
-interface DownloadRequest {
-
- companion object {
-
- /**
- * 构建请求
- * @param url 下载地址
- * @param path 存储路径(完整)
- * @param tag 标记
- * @param header 请求头
- * @param timeout 下载超时时间
- */
- fun build(
- url: String,
- path: String,
- tag: String? = null,
- header: Map? = null,
- timeout: Long? = null,
- ): DownloadRequest {
- return FileDownloadRequest(url, path, tag, header, timeout)
- }
- }
-
- /**
- * 下载地址
- */
- fun getUrl(): String
-
- /**
- * 本地文件路径
- */
- fun getPath(): String
-
- /**
- * 标签
- */
- fun getTag(): String
-
- /**
- * 请求头
- */
- fun getHeader(): Map?
-
- /**
- * 获取下载任务
- */
- fun createTask(): DownloadTask
-
- /**
- * 获取下载超时时间(毫秒)
- */
- fun getTimeout(): Long?
-
- /**
- * 是否是相同的目标
- */
- fun equalsTarget(request: DownloadRequest): Boolean
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/DownloadState.kt b/library/src/main/java/com/chwl/library/download/DownloadState.kt
deleted file mode 100644
index 3b08790d0..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadState.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.chwl.library.download
-
-
-
-object DownloadState {
-
- /**
- * 空闲
- */
- const val IDLE: Int = -1
-
- /**
- * 错误
- */
- const val ERROR: Int = 0
-
- /**
- * 成功
- */
- const val SUCCESS: Int = 1
-
- /**
- * 已启动
- */
- const val STARTED: Int = 2
-
- /**
- * 进行中
- */
- const val PROGRESS: Int = 3
-
- /**
- * 暂停
- */
- const val PAUSED: Int = 4
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/DownloadTask.kt b/library/src/main/java/com/chwl/library/download/DownloadTask.kt
deleted file mode 100644
index e0fd66bdf..000000000
--- a/library/src/main/java/com/chwl/library/download/DownloadTask.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.chwl.library.download
-
-import com.example.lib_utils.ICleared
-
-
-interface DownloadTask : ICleared {
-
- /**
- * 请求体
- */
- fun getRequest(): DownloadRequest
-
- /**
- * 获取当前状态
- */
- fun getState(): Int
-
- /**
- * 任务ID(唯一标识)
- */
- fun getId(): String
-
- /**
- * 文件路径(只有成功时才能拿到有效的文件路径)
- */
- fun getFilePath(): String?
-
- /**
- * 开始/恢复
- */
- fun start()
-
- /**
- * 停止/暂停
- */
- fun stop()
-
- /**
- * 是否暂停状态
- */
- fun isPause(): Boolean {
- return getState() == DownloadState.PAUSED
- }
-
- /**
- * 添加回调监听
- * @param tag 标签 (重复标签时,监听器会发生覆盖操作)
- * @param listener 监听器
- * @return 是否添加成功
- */
- fun addListener(tag: String? = null, listener: DownloadListener)
-
- /**
- * 移除回调监听
- * @param tag 标签
- */
- fun removeListener(tag: String)
-
- /**
- * 移除回调监听
- * @param listener 监听器
- */
- fun removeListener(listener: DownloadListener)
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/FileDownloadListener.kt b/library/src/main/java/com/chwl/library/download/FileDownloadListener.kt
deleted file mode 100644
index 3abad6352..000000000
--- a/library/src/main/java/com/chwl/library/download/FileDownloadListener.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.chwl.library.download
-
-
-open class FileDownloadListener : DownloadListener
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/FileDownloadRequest.kt b/library/src/main/java/com/chwl/library/download/FileDownloadRequest.kt
deleted file mode 100644
index 835a56718..000000000
--- a/library/src/main/java/com/chwl/library/download/FileDownloadRequest.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.chwl.library.download
-
-
-
-
-open class FileDownloadRequest(
- // 下载地址
- private val url: String,
- // 保存路径(完整)
- private val path: String,
- // 别名
- private val tag: String? = null,
- // 请求头
- private val header: Map? = null,
- // 下载超时时间
- private val timeout: Long? = null,
-) : DownloadRequest {
-
- override fun getUrl(): String {
- return url
- }
-
- override fun getPath(): String {
- return path
- }
-
- override fun getTag(): String {
- return tag ?: "DEFAULT_TAG"
- }
-
- override fun getHeader(): Map? {
- return header
- }
-
- override fun createTask(): DownloadTask {
- return FileDownloadTask(this)
- }
-
- override fun getTimeout(): Long? {
- return timeout
- }
-
- override fun equalsTarget(request: DownloadRequest): Boolean {
- // 暂时只判断目标地址是否一致
- return request.getUrl() == getUrl()
- }
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/download/FileDownloadTask.kt b/library/src/main/java/com/chwl/library/download/FileDownloadTask.kt
deleted file mode 100644
index 9739afb55..000000000
--- a/library/src/main/java/com/chwl/library/download/FileDownloadTask.kt
+++ /dev/null
@@ -1,276 +0,0 @@
-package com.chwl.library.download
-
-import android.os.Handler
-import android.os.Looper
-import com.example.lib_utils.FileUtils2
-import com.example.lib_utils.log.ILog
-import com.liulishuo.filedownloader.BaseDownloadTask
-import com.liulishuo.filedownloader.FileDownloadListener
-import com.liulishuo.filedownloader.FileDownloader
-import java.util.concurrent.ConcurrentHashMap
-import java.util.concurrent.TimeoutException
-
-
-
-open class FileDownloadTask(
- private val request: DownloadRequest,
-) : DownloadTask, ILog {
-
- // 真正执行下载工作的任务(第三方组件SDK)
- private var task: BaseDownloadTask? = null
-
- // 工作的任务监听器
- private var taskListener: ListenerBridge? = null
-
- // 监听器列表 <标签,监听器>
- private val listeners: ConcurrentHashMap by lazy {
- ConcurrentHashMap()
- }
-
- // 任务ID
- private val taskId: String by lazy {
- getRequest().getUrl() + getRequest().getPath()
- }
-
- // 状态
- @Volatile
- private var state: Int = DownloadState.IDLE
-
- private var handler: Handler? = null
-
- // 是否释放了(临时记录,只是为了协助排除问题)
- private var isCleared: Boolean? = null
-
- override fun getRequest(): DownloadRequest {
- return request
- }
-
- override fun getState(): Int {
- return state
- }
-
- override fun getId(): String {
- return taskId
- }
-
- override fun getFilePath(): String {
- return getWorkTask().targetFilePath
- }
-
- override fun start() {
- logI(
- "start()" +
- "\nurl:${getRequest().getUrl()}" +
- "\npath:${getRequest().getPath()}" +
- "\ntimeout:${getRequest().getTimeout()}" +
- "\nstate:${getState()}" +
- "\nworkTask-status:${getWorkTask().status}", filePrinter = true
- )
- if (FileUtils2.isFileExists(getRequest().getPath())) {
- logD("该目标文件已存在本地")
- downloadSuccess()
- return
- }
- if (isCleared == true) {
- logE("当前任务已释放 url:${request.getUrl()}", filePrinter = true)
- return
- }
- if (getState() == DownloadState.IDLE || getState() == DownloadState.ERROR) {
- state = DownloadState.STARTED
- startTimeout()
-
- // -------start
- // TODO 线上部分异常:调用start时,内部抛正在进行的异常(This task is dirty to restart, If you want to reuse this task, please invoke #reuse method manually and retry to restart again)
- // TODO 临时预先判断记录下
- if (getWorkTask().isUsing) {
- logE("下载正在进行,无需重复启动,url:${request.getUrl()}", filePrinter = true)
- return
- }
- // -------end
-
- try {
- getWorkTask().start()
- } catch (e: Exception) {
- downloadError(e)
- }
- } else {
- logI("start() 已经启动")
- }
- }
-
- override fun stop() {
- logI("stop()", filePrinter = true)
- if (getState() != DownloadState.PAUSED && getState() != DownloadState.IDLE) {
- getWorkTask().pause()
- }
- onCleared()
- }
-
- override fun addListener(tag: String?, listener: DownloadListener) {
- listeners[tag ?: getRequest().getTag()] = listener
- }
-
- override fun removeListener(tag: String) {
- listeners.remove(tag)
- if (listeners.isEmpty()) {
- stop()
- }
- }
-
- override fun removeListener(listener: DownloadListener) {
- listeners.forEach {
- if (it == listener) {
- listeners.remove(it.key)
- if (listeners.isEmpty()) {
- stop()
- }
- return
- }
- }
- }
-
- /**
- * (真正)工作的任务
- */
- protected open fun getWorkTask(): BaseDownloadTask {
- if (task == null) {
- task = createTask()
- }
- return task!!
- }
-
- /**
- * 创建任务
- */
- protected open fun createTask(): BaseDownloadTask {
- taskListener = ListenerBridge()
- return FileDownloader.getImpl().create(getRequest().getUrl()).apply {
- setPath(getRequest().getPath(), false)
- this.listener = taskListener
- }
- }
-
- /**
- * 释放工作任务相关资源
- */
- private fun releaseWorkTask() {
- task?.listener = null
- taskListener = null
- task = null
- }
-
- /**
- * 释放
- */
- override fun onCleared() {
- super.onCleared()
- logD("onCleared() url:${getRequest().getUrl()}", filePrinter = true)
- this.isCleared = true
- // 从任务管理中移除自己
- DownloadManager.removeTask(this)
- handler?.removeCallbacksAndMessages(null)
- handler = null
- // 释放工作任务
- releaseWorkTask()
- // 移除所有监听
- listeners.clear()
- }
-
- /**
- * 下载成功处理
- */
- private fun downloadSuccess() {
- logI("downloadSuccess() url:${getRequest().getUrl()}", filePrinter = true)
- state = DownloadState.SUCCESS
- listeners.values.forEach {
- it.onDownloadCompleted(this)
- }
- onCleared()
- }
-
- /**
- * 下载失败
- */
- private fun downloadError(error: Throwable) {
- logE("downloadError() url:${getRequest().getUrl()}", error, filePrinter = true)
- state = DownloadState.ERROR
- listeners.values.forEach {
- it.onDownloadError(DownloadException(this@FileDownloadTask, error))
- }
- onCleared()
- }
-
- /**
- * 开始超时检测
- */
- private fun startTimeout() {
- val timeout = request.getTimeout()
- if (timeout == null || timeout < 500) {
- // 时间太小就过滤掉
- return
- }
- logD("startTimeout() timeout:$timeout")
- if (handler == null) {
- handler = Handler(Looper.getMainLooper())
- } else {
- handler?.removeCallbacksAndMessages(null)
- }
- handler?.postDelayed({
- logD("startTimeout() postDelayed state:$state")
- if (state != DownloadState.IDLE && state != DownloadState.SUCCESS && state != DownloadState.ERROR) {
- logI(
- "startTimeout() postDelayed state:$state url:${getRequest().getUrl()}",
- filePrinter = true
- )
- if (getState() != DownloadState.PAUSED) {
- getWorkTask().pause()
- }
- downloadError(TimeoutException())
- }
- }, timeout)
- }
-
- /**
- * 监听器转发处理
- */
- private inner class ListenerBridge : FileDownloadListener() {
- override fun pending(task: BaseDownloadTask, soFarBytes: Int, totalBytes: Int) {
- state = DownloadState.STARTED
- logI(
- "pending() url:${getRequest().getUrl()} soFarBytes:$soFarBytes,totalBytes:$totalBytes",
- filePrinter = true
- )
- }
-
- override fun progress(task: BaseDownloadTask, soFarBytes: Int, totalBytes: Int) {
- state = DownloadState.PROGRESS
-// logD("progress() soFarBytes:$soFarBytes,totalBytes:$totalBytes")
- listeners.values.forEach {
- it.onDownloadProgress(this@FileDownloadTask, soFarBytes, totalBytes)
- }
- }
-
- /**
- * 完成时
- */
- override fun completed(task: BaseDownloadTask) {
- downloadSuccess()
- }
-
- override fun paused(task: BaseDownloadTask, soFarBytes: Int, totalBytes: Int) {
- logI("paused() url:${getRequest().getUrl()}", filePrinter = true)
- state = DownloadState.PAUSED
- }
-
- override fun error(task: BaseDownloadTask, e: Throwable) {
- downloadError(e)
- }
-
- /**
- * 在下载队列中(正在等待/正在下载)已经存在相同下载连接与相同存储路径的任务
- */
- override fun warn(task: BaseDownloadTask) {
- logI("warn() 已经存在相同下载连接与相同存储路径的任务 url:${getRequest().getUrl()}", filePrinter = true)
- }
- }
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/chwl/library/widget/SVGAView.kt b/library/src/main/java/com/chwl/library/widget/SVGAView.kt
index fd8d33a57..670d25e18 100644
--- a/library/src/main/java/com/chwl/library/widget/SVGAView.kt
+++ b/library/src/main/java/com/chwl/library/widget/SVGAView.kt
@@ -3,12 +3,11 @@ package com.chwl.library.widget
import android.content.Context
import android.util.AttributeSet
import android.util.LruCache
-import com.chwl.library.download.DownloadException
-import com.chwl.library.download.DownloadManager
-import com.chwl.library.download.DownloadManager.download
-import com.chwl.library.download.DownloadRequest.Companion.build
-import com.chwl.library.download.DownloadTask
-import com.chwl.library.download.FileDownloadListener
+import com.bumptech.glide.load.DataSource
+import com.bumptech.glide.load.engine.GlideException
+import com.bumptech.glide.request.RequestListener
+import com.bumptech.glide.request.target.Target
+import com.chwl.library.common.glide.GlideUtils
import com.chwl.library.utils.LogUtil
import com.chwl.library.utils.PathHelper
import com.example.lib_utils.AppUtils
@@ -19,6 +18,7 @@ import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAParser.Companion.shareParser
import com.opensource.svgaplayer.SVGAVideoEntity
import java.io.BufferedInputStream
+import java.io.File
import java.io.FileInputStream
import java.net.MalformedURLException
@@ -48,7 +48,6 @@ class SVGAView : SVGAImageView, ILog {
private var logTag: String? = null
- private var isDownloading = false
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
@@ -83,10 +82,6 @@ class SVGAView : SVGAImageView, ILog {
this.resourceUrl = null
this.setImageDrawable(null)
onViewStateChanged(0)
- if (isDownloading) {
- DownloadManager.stopTag(downloadTag)
- isDownloading = false
- }
return
}
if (url == resourceUrl && drawable is SVGADrawable) {
@@ -110,28 +105,38 @@ class SVGAView : SVGAImageView, ILog {
private fun loadSVGAUrl(url: String) {
logD("loadSVGAUrl url:$url")
- DownloadManager.stopTag(downloadTag)
- val filePath = PathHelper.generateResourcesFilePath(url)
- val request = build(url, filePath, downloadTag, null, 60000L)
- this.isDownloading = true
- download(request, object : FileDownloadListener() {
- override fun onDownloadCompleted(task: DownloadTask) {
- this@SVGAView.isDownloading = false
- val path = task.getRequest().getPath()
- logD("loadSVGAUrl onDownloadCompleted url:$url path:$path")
- if (resourceUrl == url) {
- loadSVGAFile(url, path)
- }
- }
-
- override fun onDownloadError(exception: DownloadException) {
- this@SVGAView.isDownloading = false
+ GlideUtils.instance().downloadFromUrl(context,url,object : RequestListener {
+ override fun onLoadFailed(
+ e: GlideException?,
+ model: Any?,
+ target: Target?,
+ isFirstResource: Boolean
+ ): Boolean {
logD("loadSVGAUrl onDownloadError url:$url")
if (resourceUrl == url) {
onViewStateChanged(-1)
}
+ return true
+ }
+
+ override fun onResourceReady(
+ resource: File?,
+ model: Any?,
+ target: Target?,
+ dataSource: DataSource?,
+ isFirstResource: Boolean
+ ): Boolean {
+ if (resource != null) {
+ val path = resource.path
+ logD("loadSVGAUrl onDownloadCompleted url:$url path:$path")
+ if (resourceUrl == url) {
+ loadSVGAFile(url, path)
+ }
+ }
+ return true
}
})
+
}
private fun loadSVGAFile(url: String, path: String) {