diff --git a/app/src/gdt/java/com/gh/gamecenter/provider/FlavorProviderImp.kt b/app/src/gdt/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
index 97840f57f8..aabe7325a5 100644
--- a/app/src/gdt/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
+++ b/app/src/gdt/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
@@ -8,7 +8,7 @@ import com.gh.gamecenter.core.provider.IFlavorProvider
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.core.utils.TimeUtils
import com.halo.assistant.HaloApp
-import com.leon.channel.helper.ChannelReaderUtil
+import com.tencent.vasdolly.helper.ChannelReaderUtil
class FlavorProviderImp : IFlavorProvider {
diff --git a/app/src/kuaishou/java/com/gh/gamecenter/provider/FlavorProviderImp.kt b/app/src/kuaishou/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
index f87cdb3cda..0e0d916043 100644
--- a/app/src/kuaishou/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
+++ b/app/src/kuaishou/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
@@ -12,7 +12,7 @@ import com.gh.gamecenter.core.utils.TimeUtils
import com.gh.gamecenter.core.utils.ToastUtils
import com.halo.assistant.HaloApp
import com.kwai.monitor.payload.TurboHelper
-import com.leon.channel.helper.ChannelReaderUtil
+import com.tencent.vasdolly.helper.ChannelReaderUtil
class FlavorProviderImp : IFlavorProvider {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b4fec8acbb..d464bfaa65 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,6 +11,8 @@
+
@@ -118,10 +120,12 @@
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
+ android:preserveLegacyExternalStorage="true"
+ android:requestLegacyExternalStorage="true"
android:resizeableActivity="true"
android:theme="@style/AppCompatTheme.APP"
tools:replace="android:name,android:allowBackup"
- tools:targetApi="n">
+ tools:targetApi="r">
()
for (key in imageUrlMap.keys) {
- val localFileUri = FILE_HOST + key.decodeURI()
-
// 文件格式为 HEIC 时,使用经 OSS 转码的图片作为预览图片
if (FileUtils.getFileMimeType(getApplication(), key.decodeURI())?.lowercase(Locale.CHINA)?.contains("heic") == true) {
val transformedImgUrl = ImageUtils.getIdealImageUrl(imageUrlMap[key], 5000) ?: ""
map[MD5Utils.getUrlMD5(key)] = transformedImgUrl
mapImages[transformedImgUrl.decodeURI()] = imageUrlMap[key] ?: ""
} else {
- map[MD5Utils.getUrlMD5(key)] = localFileUri
+ map[MD5Utils.getUrlMD5(key)] = imageUrlMap[key] ?: ""
mapImages[TextUtils.htmlEncode(key).decodeURI()] = imageUrlMap[key] ?: ""
}
}
diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java
index 1d47fae3a1..812b02efd3 100644
--- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java
+++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java
@@ -52,6 +52,8 @@ import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.common.entity.LinkEntity;
import com.gh.gamecenter.common.utils.DarkModeUtils;
import com.gh.gamecenter.common.utils.ExtensionsKt;
+import com.gh.gamecenter.common.utils.FileUtils;
+import com.gh.gamecenter.common.utils.ImageUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
import com.gh.gamecenter.common.utils.SensorsBridge;
import com.gh.gamecenter.core.utils.MtaHelper;
@@ -69,7 +71,6 @@ import com.gh.gamecenter.gamedetail.dialog.GamePermissionDialogFragment;
import com.gh.gamecenter.manager.PackagesManager;
import com.gh.vspace.VHelper;
import com.lightgame.download.DownloadEntity;
-import com.lightgame.download.FileUtils;
import com.lightgame.utils.Utils;
import java.io.File;
diff --git a/app/src/main/java/com/gh/common/dialog/ManagerAllFilesPermissionDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/ManagerAllFilesPermissionDialogFragment.kt
new file mode 100644
index 0000000000..8487e0f285
--- /dev/null
+++ b/app/src/main/java/com/gh/common/dialog/ManagerAllFilesPermissionDialogFragment.kt
@@ -0,0 +1,68 @@
+package com.gh.common.dialog
+
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.os.Environment
+import android.provider.Settings
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.annotation.RequiresApi
+import androidx.appcompat.app.AppCompatActivity
+import com.gh.gamecenter.common.databinding.DialogAlertDefaultBinding
+import com.lightgame.dialog.BaseDialogFragment
+
+@RequiresApi(Build.VERSION_CODES.R)
+class ManagerAllFilesPermissionDialogFragment : BaseDialogFragment() {
+ private val mBinding by lazy { DialogAlertDefaultBinding.inflate(layoutInflater) }
+ private var mCallBack: (() -> Unit)? = null
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+ return mBinding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ mBinding.run {
+ titleTv.text = "请求权限"
+ titleTv.gravity = Gravity.CENTER
+ contentTv.text = "需要所有文件访问权限,请打开权限设置页面"
+
+ confirmTv.setOnClickListener {
+ val intent = Intent().apply {
+ action = Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
+ data = Uri.fromParts("package", requireContext().packageName, null)
+ }
+ requireActivity().startActivityForResult(intent, REQUEST_CODE)
+ }
+ cancelTv.setOnClickListener {
+ dismissAllowingStateLoss()
+ }
+ }
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (requestCode == REQUEST_CODE && Environment.isExternalStorageManager()) {
+ mCallBack?.invoke()
+ dismissAllowingStateLoss()
+ }
+ }
+
+ companion object {
+ const val REQUEST_CODE = 1000
+
+ @JvmStatic
+ fun show(activity: AppCompatActivity, callback: () -> Unit) {
+ ManagerAllFilesPermissionDialogFragment().apply {
+ mCallBack = callback
+ }.show(
+ activity.supportFragmentManager,
+ ManagerAllFilesPermissionDialogFragment::class.java.name
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt
index a4a274a7d9..85566ef106 100644
--- a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt
+++ b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt
@@ -20,15 +20,14 @@ import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor.uiExecutor
import com.gh.gamecenter.core.utils.*
+import com.gh.gamecenter.entity.TrackableEntity
import com.gh.gamecenter.feature.entity.ApkEntity
import com.gh.gamecenter.feature.entity.SimulatorEntity
-import com.gh.gamecenter.entity.TrackableEntity
import com.gh.ndownload.NDataChanger
import com.halo.assistant.HaloApp
import com.lightgame.download.DataWatcher
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import java.lang.ref.WeakReference
import java.text.DecimalFormat
diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt
index 2371b85f02..60193d0c24 100644
--- a/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt
+++ b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt
@@ -30,7 +30,6 @@ import com.gh.gamecenter.room.AppDatabase
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadDao
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.AppManager
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
index d345a3d63e..dd2babb65f 100644
--- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
+++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
@@ -46,7 +46,6 @@ import com.gh.vspace.VHelper
import com.lightgame.download.DownloadConfig
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import java.io.File
import java.util.concurrent.LinkedBlockingQueue
diff --git a/app/src/main/java/com/gh/common/util/DownloadObserver.kt b/app/src/main/java/com/gh/common/util/DownloadObserver.kt
index beeb5712fc..df7364f52c 100644
--- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt
+++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt
@@ -32,7 +32,10 @@ import com.gh.gamecenter.help.HelpAndFeedbackBridge
import com.gh.gamecenter.pkg.PkgHelper
import com.gh.vspace.VHelper
import com.halo.assistant.HaloApp
-import com.lightgame.download.*
+import com.lightgame.download.DataWatcher
+import com.lightgame.download.DownloadConfig
+import com.lightgame.download.DownloadEntity
+import com.lightgame.download.DownloadStatus
import com.lightgame.utils.AppManager
import com.lightgame.utils.Utils
import org.greenrobot.eventbus.EventBus
diff --git a/app/src/main/java/com/gh/common/util/GameActivityDownloadHelper.kt b/app/src/main/java/com/gh/common/util/GameActivityDownloadHelper.kt
index c14f66c3f6..65502f06eb 100644
--- a/app/src/main/java/com/gh/common/util/GameActivityDownloadHelper.kt
+++ b/app/src/main/java/com/gh/common/util/GameActivityDownloadHelper.kt
@@ -41,7 +41,6 @@ import com.gh.gamecenter.retrofit.RetrofitManager
import com.gh.gamecenter.teenagermode.TeenagerModeActivity
import com.gh.vspace.VHelper
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import java.io.File
diff --git a/app/src/main/java/com/gh/common/util/MessageShareUtils.java b/app/src/main/java/com/gh/common/util/MessageShareUtils.java
index 09fdbef8c4..87072b76fb 100644
--- a/app/src/main/java/com/gh/common/util/MessageShareUtils.java
+++ b/app/src/main/java/com/gh/common/util/MessageShareUtils.java
@@ -566,7 +566,7 @@ public class MessageShareUtils {
String path;
// 安卓11无法访问Android/data目录
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
- path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ShareImg/";
+ path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/ShareImg/";
} else {
path = context.getExternalCacheDir().getPath() + "/ShareImg/";
}
diff --git a/app/src/main/java/com/gh/common/util/PackageInstaller.kt b/app/src/main/java/com/gh/common/util/PackageInstaller.kt
index d599cfc759..dd198c10eb 100644
--- a/app/src/main/java/com/gh/common/util/PackageInstaller.kt
+++ b/app/src/main/java/com/gh/common/util/PackageInstaller.kt
@@ -24,7 +24,6 @@ import com.gh.gamecenter.vpn.VpnHelper
import com.gh.vspace.VHelper
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import java.io.File
diff --git a/app/src/main/java/com/gh/common/xapk/XapkInstaller.kt b/app/src/main/java/com/gh/common/xapk/XapkInstaller.kt
index 1f19298b4a..342e7d2c91 100644
--- a/app/src/main/java/com/gh/common/xapk/XapkInstaller.kt
+++ b/app/src/main/java/com/gh/common/xapk/XapkInstaller.kt
@@ -4,8 +4,12 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.os.Build
+import android.os.Environment
import android.provider.Settings
+import androidx.appcompat.app.AppCompatActivity
import com.gh.common.constant.Config
+import com.gh.common.dialog.ManagerAllFilesPermissionDialogFragment
+import com.gh.common.util.*
import com.gh.common.util.DirectUtils
import com.gh.common.util.DownloadNotificationHelper
import com.gh.common.util.PackageInstaller
@@ -15,6 +19,7 @@ import com.gh.gamecenter.R
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor
+import com.gh.gamecenter.core.utils.CurrentActivityHolder
import com.gh.gamecenter.core.utils.SentryHelper
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.xapk.XApkUnZipper
@@ -22,10 +27,7 @@ import com.gh.gamecenter.xapk.core.XApkFile
import com.gh.gamecenter.xapk.core.XApkUnZipCallback
import com.gh.gamecenter.xapk.core.XApkUnZipEntry
import com.gh.gamecenter.xapk.core.XApkUnZipOutputFactory
-import com.gh.gamecenter.xapk.io.NonSplitApksOutput
-import com.gh.gamecenter.xapk.io.OBBFileOutput
-import com.gh.gamecenter.xapk.io.SplitApksOutput
-import com.gh.gamecenter.xapk.io.XApkFileOutput
+import com.gh.gamecenter.xapk.io.*
import com.gh.gamecenter.xapk.pi.IPackageInstaller
import com.gh.ndownload.NDataChanger
import com.halo.assistant.HaloApp
@@ -112,19 +114,38 @@ object XapkInstaller : XApkUnZipCallback, XApkUnZipOutputFactory {
return
}
- DownloadManager.getInstance().getDownloadEntitySnapshot(downloadEntity.url, downloadEntity.gameId)
- ?.let {
- unzipXapkFile(it)
- if (showUnzipToast) {
- Utils.toast(mContext, "解压过程请勿退出光环助手!")
+ if (checkPermission(downloadEntity, showUnzipToast)) {
+ DownloadManager.getInstance().getDownloadEntitySnapshot(downloadEntity.url, downloadEntity.gameId)
+ ?.let {
+ unzipXapkFile(it)
+ if (showUnzipToast) {
+ Utils.toast(mContext, "解压过程请勿退出光环助手!")
+ }
}
- }
+ }
} else {
throwExceptionInDebug("如果是Apk包请使用PackageInstaller进行安装")
PackageInstaller.install(mContext, downloadEntity)
}
}
+ private fun checkPermission(downloadEntity: DownloadEntity, showUnzipToast: Boolean = false): Boolean {
+ // 安卓11以上系统需要开启所有文件访问权限
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
+ && !Environment.isExternalStorageManager()) {
+ CurrentActivityHolder.getCurrentActivity()?.let {
+ ManagerAllFilesPermissionDialogFragment.show(it as AppCompatActivity) {
+ unzipXapkFile(downloadEntity)
+ if (showUnzipToast) {
+ Utils.toast(mContext, "解压过程请勿退出光环助手!")
+ }
+ }
+ }
+ return false
+ }
+ return true
+ }
+
private fun unzipXapkFile(downloadEntity: DownloadEntity) {
mXApkUnZipper.unzip(
XApkUnZipEntry(
diff --git a/app/src/main/java/com/gh/common/xapk/XapkUnzipThread.kt b/app/src/main/java/com/gh/common/xapk/XapkUnzipThread.kt
index 7c769b0cfd..8a42dc8035 100644
--- a/app/src/main/java/com/gh/common/xapk/XapkUnzipThread.kt
+++ b/app/src/main/java/com/gh/common/xapk/XapkUnzipThread.kt
@@ -2,15 +2,11 @@ package com.gh.common.xapk
import android.os.Build
import android.os.Environment
-import com.gh.gamecenter.common.utils.debounceActionWithInterval
-import com.gh.gamecenter.common.utils.getExtension
-import com.gh.gamecenter.common.utils.throwException
-import com.gh.gamecenter.common.utils.throwExceptionInDebug
import com.gh.gamecenter.BuildConfig
+import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.utils.MD5Utils
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import net.lingala.zip4j.progress.ProgressMonitor
import java.io.File
diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java
index 83ba99271c..9f924e137a 100644
--- a/app/src/main/java/com/gh/download/DownloadManager.java
+++ b/app/src/main/java/com/gh/download/DownloadManager.java
@@ -25,36 +25,44 @@ import com.gh.gamecenter.feature.entity.CustomPageTrackData;
import com.gh.gamecenter.feature.entity.TagStyleEntity;
import com.gh.gamecenter.feature.exposure.ExposureEvent;
import com.gh.common.exposure.ExposureUtils;
-import com.gh.gamecenter.common.exposure.meta.MetaUtil;
import com.gh.common.history.HistoryHelper;
import com.gh.common.simulator.SimulatorGameManager;
import com.gh.common.util.DataCollectionUtils;
-import com.gh.gamecenter.common.utils.DeviceUtils;
import com.gh.common.util.DialogUtils;
-import com.gh.gamecenter.core.utils.GsonUtils;
import com.gh.common.util.HomePluggableHelper;
import com.gh.common.util.LunchType;
-import com.gh.gamecenter.common.utils.NetworkUtils;
import com.gh.common.util.PackageInstaller;
import com.gh.common.util.PackageUtils;
+import com.gh.gamecenter.BuildConfig;
+import com.gh.gamecenter.common.base.GlobalActivityManager;
+import com.gh.gamecenter.common.constant.Constants;
+import com.gh.gamecenter.common.exposure.meta.MetaUtil;
+import com.gh.gamecenter.common.utils.DeviceUtils;
+import com.gh.gamecenter.common.utils.ExtensionsKt;
+import com.gh.gamecenter.common.utils.FileUtils;
+import com.gh.gamecenter.common.utils.NetworkUtils;
+import com.gh.gamecenter.common.utils.SensorsBridge;
+import com.gh.gamecenter.core.AppExecutor;
+import com.gh.gamecenter.core.utils.AppDebugConfig;
+import com.gh.gamecenter.core.utils.GsonUtils;
import com.gh.gamecenter.core.utils.PageSwitchDataHelper;
import com.gh.gamecenter.core.utils.SPUtils;
-import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.core.utils.SentryHelper;
import com.gh.gamecenter.download.DownloadedGameIdAndPackageNameDao;
-import com.gh.gamecenter.feature.entity.ApkEntity;
-import com.gh.gamecenter.feature.entity.GameEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
import com.gh.gamecenter.entity.HomePluggableFilterEntity;
-import com.gh.gamecenter.feature.entity.PluginLocation;
import com.gh.gamecenter.eventbus.EBDownloadStatus;
-import com.gh.gamecenter.manager.PackagesManager;
+import com.gh.gamecenter.feature.entity.ApkEntity;
+import com.gh.gamecenter.feature.entity.GameEntity;
+import com.gh.gamecenter.feature.entity.PluginLocation;
+import com.gh.gamecenter.feature.exposure.ExposureEvent;
import com.gh.gamecenter.login.user.UserManager;
+import com.gh.gamecenter.manager.PackagesManager;
import com.gh.gamecenter.packagehelper.PackageRepository;
-import com.gh.vspace.VHelper;
import com.gh.ndownload.NDataChanger;
import com.gh.ndownload.NDownloadBridge;
import com.gh.ndownload.NDownloadService;
+import com.gh.vspace.VHelper;
import com.halo.assistant.HaloApp;
import com.lightgame.download.ConnectionUtils;
import com.lightgame.download.DataWatcher;
@@ -63,7 +71,6 @@ import com.lightgame.download.DownloadDao;
import com.lightgame.download.DownloadEntity;
import com.lightgame.download.DownloadStatus;
import com.lightgame.download.DownloadStatusListener;
-import com.lightgame.download.FileUtils;
import com.lightgame.download.HttpDnsManager;
import com.lightgame.utils.Utils;
diff --git a/app/src/main/java/com/gh/download/PackageObserver.kt b/app/src/main/java/com/gh/download/PackageObserver.kt
index 6af21e4bb3..088c28870b 100644
--- a/app/src/main/java/com/gh/download/PackageObserver.kt
+++ b/app/src/main/java/com/gh/download/PackageObserver.kt
@@ -3,7 +3,9 @@ package com.gh.download
import android.annotation.SuppressLint
import android.text.TextUtils
import com.gh.common.util.*
-import com.gh.gamecenter.feature.utils.ConcernUtils
+import com.gh.common.util.DataCollectionUtils
+import com.gh.common.util.PackageInstaller
+import com.gh.common.util.PackageUtils
import com.gh.common.xapk.XapkInstaller
import com.gh.download.server.BrowserInstallHelper
import com.gh.gamecenter.common.constant.Constants
@@ -18,6 +20,7 @@ import com.gh.gamecenter.core.utils.ThirdPartyPackageHelper
import com.gh.gamecenter.core.utils.UrlFilterUtils
import com.gh.gamecenter.entity.GameDigestEntity
import com.gh.gamecenter.eventbus.EBPackage
+import com.gh.gamecenter.feature.utils.ConcernUtils
import com.gh.gamecenter.login.user.UserManager
import com.gh.gamecenter.manager.PackagesManager
import com.gh.gamecenter.packagehelper.PackageRepository
diff --git a/app/src/main/java/com/gh/download/cache/ExoCacheManager.kt b/app/src/main/java/com/gh/download/cache/ExoCacheManager.kt
index 98001dcc95..569b482eb8 100644
--- a/app/src/main/java/com/gh/download/cache/ExoCacheManager.kt
+++ b/app/src/main/java/com/gh/download/cache/ExoCacheManager.kt
@@ -27,21 +27,13 @@ object ExoCacheManager {
if (NetworkUtils.isWifiConnected(HaloApp.getInstance().application)) {
10 * 1024 * 1024L
} else {
- when (NetworkUtils.getMobileNetworkType(HaloApp.getInstance().application)) {
- "5G", "4G" -> 10 * 1024 * 1024L
- "3G" -> 5 * 1024 * 1024L
- else -> 0L
- }
+ 10 * 1024 * 1024L
}
} else {
if (NetworkUtils.isWifiConnected(HaloApp.getInstance().application)) {
50 * 1024 * 1024L
} else {
- when (NetworkUtils.getMobileNetworkType(HaloApp.getInstance().application)) {
- "5G", "4G" -> 20 * 1024 * 1024L
- "3G" -> 5 * 1024 * 1024L
- else -> 0L
- }
+ 20 * 1024 * 1024L
}
}
}
diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt
index 60844b373e..38c9feeb80 100644
--- a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt
+++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt
@@ -28,7 +28,6 @@ import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.manager.PackagesManager
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
-import com.lightgame.download.FileUtils
import com.lightgame.utils.AppManager
import com.lightgame.utils.Utils
diff --git a/app/src/main/java/com/gh/download/server/DownloadServer.kt b/app/src/main/java/com/gh/download/server/DownloadServer.kt
index c84024e9a3..67a54b7776 100644
--- a/app/src/main/java/com/gh/download/server/DownloadServer.kt
+++ b/app/src/main/java/com/gh/download/server/DownloadServer.kt
@@ -1,12 +1,12 @@
package com.gh.download.server
+import com.gh.download.DownloadManager
import com.gh.gamecenter.common.constant.Constants
-import com.gh.gamecenter.feature.exposure.ExposureEvent
+import com.gh.gamecenter.common.utils.FileUtils
import com.gh.gamecenter.common.utils.getMetaExtra
import com.gh.gamecenter.common.utils.toObject
-import com.gh.download.DownloadManager
+import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.halo.assistant.HaloApp
-import com.lightgame.download.FileUtils
import fi.iki.elonen.NanoHTTPD
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
diff --git a/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt b/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt
index 9d24da4f47..802fe6c934 100644
--- a/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt
+++ b/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt
@@ -4,7 +4,7 @@ import com.lg.download.*
import com.lg.ndownload.DownloadConfig
import com.lg.ndownload.DownloadDbManager
import com.lg.ndownload.DownloadQueue
-import com.lightgame.download.FileUtils
+import com.gh.gamecenter.common.utils.FileUtils
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java
index a52e2a6801..c90f04f7b1 100644
--- a/app/src/main/java/com/gh/gamecenter/MainActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java
@@ -79,6 +79,7 @@ import com.gh.gamecenter.common.retrofit.BiResponse;
import com.gh.gamecenter.common.retrofit.Response;
import com.gh.gamecenter.common.utils.DialogHelper;
import com.gh.gamecenter.common.utils.ExtensionsKt;
+import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
import com.gh.gamecenter.common.utils.SensorsBridge;
import com.gh.gamecenter.common.utils.ShareUtils;
@@ -113,7 +114,6 @@ import com.google.gson.reflect.TypeToken;
import com.halo.assistant.HaloApp;
import com.lightgame.download.DownloadEntity;
import com.lightgame.download.DownloadStatus;
-import com.lightgame.download.FileUtils;
import com.lightgame.utils.Utils;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.openapi.IWBAPI;
@@ -172,6 +172,8 @@ public class MainActivity extends BaseActivity {
mMainWrapperViewModel = new ViewModelProvider(this, new MainWrapperViewModel.Factory(HaloApp.getInstance()))
.get(MainWrapperViewModel.class);
+ DisplayUtils.updateGlobalScreen(this);
+
super.onCreate(savedInstanceState);
setStatusBarColor(Color.TRANSPARENT);
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
index 0b5f661f9c..77fa1e1ad3 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
@@ -47,7 +47,6 @@ import com.gh.gamecenter.teenagermode.TeenagerModeActivity.Companion.getIntent
import com.gh.vspace.VHelper
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
-import com.lightgame.download.FileUtils
import org.greenrobot.eventbus.EventBus
import java.io.File
diff --git a/app/src/main/java/com/gh/gamecenter/cloudarchive/MyArchiveOptionDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/cloudarchive/MyArchiveOptionDialogFragment.kt
index ee52a09504..d13a366351 100644
--- a/app/src/main/java/com/gh/gamecenter/cloudarchive/MyArchiveOptionDialogFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/cloudarchive/MyArchiveOptionDialogFragment.kt
@@ -23,7 +23,6 @@ import com.gh.gamecenter.entity.ArchiveEntity
import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.vspace.VArchiveHelper
import com.halo.assistant.HaloApp
-import com.lightgame.download.FileUtils
import org.greenrobot.eventbus.EventBus
class MyArchiveOptionDialogFragment(
diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
index d377745cc6..ca1d9ddaec 100644
--- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
@@ -28,6 +28,7 @@ import com.gh.gamecenter.common.constant.Constants;
import com.gh.gamecenter.common.entity.IconFloat;
import com.gh.gamecenter.common.utils.DialogHelper;
import com.gh.gamecenter.common.utils.ExtensionsKt;
+import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.ImageUtils;
import com.gh.gamecenter.common.utils.NetworkUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
@@ -44,7 +45,6 @@ import com.lightgame.adapter.BaseRecyclerAdapter;
import com.lightgame.download.DownloadConfig;
import com.lightgame.download.DownloadEntity;
import com.lightgame.download.DownloadStatus;
-import com.lightgame.download.FileUtils;
import com.lightgame.utils.Utils;
import org.greenrobot.eventbus.EventBus;
diff --git a/app/src/main/java/com/gh/gamecenter/entity/CommonCollectionEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/CommonCollectionEntity.kt
index 4782fc953f..5cd323b44b 100644
--- a/app/src/main/java/com/gh/gamecenter/entity/CommonCollectionEntity.kt
+++ b/app/src/main/java/com/gh/gamecenter/entity/CommonCollectionEntity.kt
@@ -36,6 +36,8 @@ data class CommonCollectionEntity(
@Parcelize
data class CommonCollectionContentEntity(
+ @SerializedName("_id")
+ private val _id: String? = null,
val title: String = "",
val style: String = "",
val image: String = "",
@@ -45,4 +47,8 @@ data class CommonCollectionContentEntity(
var addedContent1: String? = "",
@SerializedName("added_content_2")
var addedContent2: String? = "",
-) : Parcelable
\ No newline at end of file
+) : Parcelable {
+
+ val id: String
+ get() = _id ?: ""
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt
index 45a1c18d4b..85e3b302d3 100644
--- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt
@@ -134,9 +134,11 @@ class ForumArticleAskListFragment : LazyListFragment
if (index != 0) builder.append(";")
- builder.append("${entity.getFormatTime("YYYY年MM月dd日")}开服信息有误:${entity.getNote()}")
+ builder.append("${entity.getFormatTime("yyyy年MM月dd日")}开服信息有误:${entity.getNote()}")
}
HelpAndFeedbackBridge.startSuggestionActivity(
it.context,
diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomCommonCollectionAdapter.kt b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomCommonCollectionAdapter.kt
index 5b92b5312e..97942802ca 100644
--- a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomCommonCollectionAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomCommonCollectionAdapter.kt
@@ -32,7 +32,7 @@ class CustomCommonCollectionAdapter(
}
override fun getKey(t: CommonCollectionContentEntity): String {
- return t.title
+ return "${_data.data.layout}-${t.id}"
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomCommonCollectionItemViewHolder {
diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomIconMatrixAdapter.kt b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomIconMatrixAdapter.kt
index 5de5394c35..0a814374e3 100644
--- a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomIconMatrixAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/CustomIconMatrixAdapter.kt
@@ -48,7 +48,10 @@ class CustomIconMatrixAdapter(
CustomChildIconMatrixViewHolder(parent.toBinding())
override fun onBindViewHolder(holder: CustomChildIconMatrixViewHolder, position: Int, payloads: MutableList) {
- if (payloads.isNotEmpty()) {
+ val isRefreshDownloadStatus = payloads.any {
+ PAYLOAD_REFRESH_GAME_CHANGED == it
+ }
+ if (isRefreshDownloadStatus) {
DownloadItemUtils.updateItem(
context,
getItem(position),
diff --git a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentAdapter.kt
index 633d32b2c5..5f43f49cfa 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentAdapter.kt
@@ -746,6 +746,8 @@ abstract class BaseCommentAdapter(
val loginEntrance = if (isVoted) "帖子评论-取消点赞" else "帖子评论-点赞"
binding.likeCountTv.context.ifLogin(loginEntrance) {
if (isVoted) {
+ viewModel.unLike(comment)
+ } else {
viewModel.like(comment)
if (viewModel is ArticleDetailViewModel) {
@@ -758,8 +760,6 @@ abstract class BaseCommentAdapter(
comment.user.id ?: "", contentType, comment.id
?: "", bbsId, bbsType
)
- } else {
- viewModel.unLike(comment)
}
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/VideoAlbumsAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/VideoAlbumsAdapter.kt
index c8521a3d04..56441b1059 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/VideoAlbumsAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/editor/VideoAlbumsAdapter.kt
@@ -2,7 +2,6 @@ package com.gh.gamecenter.qa.editor
import android.content.Context
import android.database.Cursor
-import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -11,7 +10,6 @@ import android.widget.TextView
import com.facebook.drawee.view.SimpleDraweeView
import com.gh.gamecenter.R
import com.zhihu.matisse.internal.entity.Album
-import java.io.File
class VideoAlbumsAdapter(context: Context) : CursorAdapter(context, null) {
@@ -24,6 +22,6 @@ class VideoAlbumsAdapter(context: Context) : CursorAdapter(context, null) {
val album = Album.valueOf(cursor)
view.findViewById(R.id.album_name).text = album.getDisplayName(context)
view.findViewById(R.id.album_media_count).text = album.count.toString()
- view.findViewById(R.id.album_cover).setImageURI(Uri.fromFile(File(album.coverPath)))
+ view.findViewById(R.id.album_cover).setImageURI(album.coverUri)
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
index bc56f60914..a6bf26fc7a 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
@@ -47,7 +47,6 @@ import com.gh.gamecenter.video.upload.OnUploadListener
import com.gh.gamecenter.video.upload.UploadManager
import com.gh.gamecenter.video.upload.view.VideoFileEntity
import com.gh.gamecenter.video.videomanager.VideoDraftActivity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Util_System_Keyboard
import java.io.File
diff --git a/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt b/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt
index bd35e1a68a..69bd855535 100644
--- a/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt
+++ b/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt
@@ -21,8 +21,8 @@ import com.gh.gamecenter.retrofit.RetrofitManager
import com.gh.ndownload.NDataChanger
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.AppManager
+import com.gh.gamecenter.common.utils.FileUtils
import com.lightgame.utils.Utils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
diff --git a/app/src/main/java/com/gh/gamecenter/video/poster/photo/PhotoAlbumsAdapter.kt b/app/src/main/java/com/gh/gamecenter/video/poster/photo/PhotoAlbumsAdapter.kt
index 7d69a1d3a4..515912d0b7 100644
--- a/app/src/main/java/com/gh/gamecenter/video/poster/photo/PhotoAlbumsAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/poster/photo/PhotoAlbumsAdapter.kt
@@ -2,7 +2,6 @@ package com.gh.gamecenter.video.poster.photo
import android.content.Context
import android.database.Cursor
-import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -11,7 +10,6 @@ import android.widget.TextView
import com.facebook.drawee.view.SimpleDraweeView
import com.gh.gamecenter.R
import com.zhihu.matisse.internal.entity.Album
-import java.io.File
class PhotoAlbumsAdapter(context: Context) : CursorAdapter(context, null) {
@@ -24,6 +22,6 @@ class PhotoAlbumsAdapter(context: Context) : CursorAdapter(context, null) {
val album = Album.valueOf(cursor)
view.findViewById(R.id.album_name).text = album.getDisplayName(context)
view.findViewById(R.id.album_media_count).text = album.count.toString()
- view.findViewById(R.id.album_cover).setImageURI(Uri.fromFile(File(album.coverPath)))
+ view.findViewById(R.id.album_cover).setImageURI(album.coverUri)
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/video/upload/UploadThread.kt b/app/src/main/java/com/gh/gamecenter/video/upload/UploadThread.kt
index f930f1bdca..54ff09e4f7 100644
--- a/app/src/main/java/com/gh/gamecenter/video/upload/UploadThread.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/upload/UploadThread.kt
@@ -37,7 +37,7 @@ class UploadThread(
override fun run() {
super.run()
- val recordDirectory = Environment.getExternalStorageDirectory().absolutePath + "/oss_record/"
+ val recordDirectory = HaloApp.getInstance().filesDir.absolutePath + "/oss_record/"
val recordDir = File(recordDirectory)
if (!recordDir.exists()) {
recordDir.mkdirs()
diff --git a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt
index 59206799b2..09fcf9611a 100644
--- a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt
@@ -53,7 +53,6 @@ import com.gh.gamecenter.video.poster.PosterEditActivity
import com.gh.gamecenter.video.upload.OnUploadListener
import com.gh.gamecenter.video.upload.UploadManager
import com.google.android.flexbox.FlexboxLayout
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Util_System_Keyboard
import com.lightgame.utils.Utils
import com.zhihu.matisse.Matisse
diff --git a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt
index ba960a0c4b..540922e923 100644
--- a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt
+++ b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt
@@ -19,7 +19,6 @@ import com.lg.download.listener.InnerDownloadListener
import com.lg.ndownload.*
import com.lightgame.download.DownloadDao
import com.lightgame.download.DownloadEntity
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import com.tencent.vasdolly.reader.ChannelReader
import com.tencent.vasdolly.writer.ChannelWriter
diff --git a/app/src/main/java/com/gh/vspace/gapps/GAppsDownloadDialogFragment.kt b/app/src/main/java/com/gh/vspace/gapps/GAppsDownloadDialogFragment.kt
index d6562ea2fb..f3ae20579e 100644
--- a/app/src/main/java/com/gh/vspace/gapps/GAppsDownloadDialogFragment.kt
+++ b/app/src/main/java/com/gh/vspace/gapps/GAppsDownloadDialogFragment.kt
@@ -14,6 +14,7 @@ import com.gh.common.util.NewFlatLogUtils
import com.gh.download.simple.*
import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.fragment.BaseBottomDialogFragment
+import com.gh.gamecenter.common.utils.FileUtils
import com.gh.gamecenter.common.utils.toColor
import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.core.runOnIoThread
@@ -28,7 +29,6 @@ import com.lg.download.DownloadError
import com.lg.download.DownloadStatus
import com.lg.download.httpclient.DefaultHttpClient
import com.lg.ndownload.DownloadConfigBuilder
-import com.lightgame.download.FileUtils
import java.io.File
class GAppsDownloadDialogFragment : BaseBottomDialogFragment() {
diff --git a/app/src/sm/java/com/gh/gamecenter/provider/FlavorProviderImp.kt b/app/src/sm/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
index 7d57c88640..5ccca868e9 100644
--- a/app/src/sm/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
+++ b/app/src/sm/java/com/gh/gamecenter/provider/FlavorProviderImp.kt
@@ -11,7 +11,7 @@ import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.core.utils.TimeUtils
import com.gh.gamecenter.core.utils.ToastUtils
import com.halo.assistant.HaloApp
-import com.leon.channel.helper.ChannelReaderUtil
+import com.tencent.vasdolly.helper.ChannelReaderUtil
class FlavorProviderImp : IFlavorProvider {
diff --git a/dependencies.gradle b/dependencies.gradle
index 0d8a8685af..72259e8557 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -4,7 +4,7 @@ ext {
compileSdkVersion = 34
minSdkVersion = 16
- targetSdkVersion = 28
+ targetSdkVersion = 30
// application info (每个大版本之间的 versionCode 增加 20)
versionCode = 1050
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/MimeType.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/MimeType.java
index bc8c875862..865c31e731 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/MimeType.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/MimeType.java
@@ -19,9 +19,10 @@ package com.zhihu.matisse;
import android.content.ContentResolver;
import android.net.Uri;
import android.text.TextUtils;
-import androidx.collection.ArraySet;
import android.webkit.MimeTypeMap;
+import androidx.collection.ArraySet;
+
import com.zhihu.matisse.internal.utils.PhotoMetadataUtils;
import java.util.Arrays;
@@ -110,10 +111,33 @@ public enum MimeType {
return EnumSet.of(JPEG, PNG, GIF, BMP, WEBP);
}
+ public static Set ofImage(boolean onlyGif) {
+ return EnumSet.of(GIF);
+ }
+
+ public static Set ofGif() {
+ return ofImage(true);
+ }
+
public static Set ofVideo() {
return EnumSet.of(MPEG, MP4, QUICKTIME, THREEGPP, THREEGPP2, MKV, WEBM, TS, AVI);
}
+ public static boolean isImage(String mimeType) {
+ if (mimeType == null) return false;
+ return mimeType.startsWith("image");
+ }
+
+ public static boolean isVideo(String mimeType) {
+ if (mimeType == null) return false;
+ return mimeType.startsWith("video");
+ }
+
+ public static boolean isGif(String mimeType) {
+ if (mimeType == null) return false;
+ return mimeType.equals(MimeType.GIF.toString());
+ }
+
private static Set arraySetOf(String... suffixes) {
return new ArraySet<>(Arrays.asList(suffixes));
}
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/Album.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/Album.java
index 4220e18fd4..25b342313c 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/Album.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/Album.java
@@ -18,9 +18,10 @@ package com.zhihu.matisse.internal.entity;
import android.content.Context;
import android.database.Cursor;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
-import android.provider.MediaStore;
+
import androidx.annotation.Nullable;
import com.zhihu.matisse.R;
@@ -43,20 +44,20 @@ public class Album implements Parcelable {
public static final String ALBUM_NAME_ALL = "All";
private final String mId;
- private final String mCoverPath;
+ private final Uri mCoverUri;
private final String mDisplayName;
private long mCount;
- Album(String id, String coverPath, String albumName, long count) {
+ public Album(String id, Uri coverUri, String albumName, long count) {
mId = id;
- mCoverPath = coverPath;
+ mCoverUri = coverUri;
mDisplayName = albumName;
mCount = count;
}
- Album(Parcel source) {
+ private Album(Parcel source) {
mId = source.readString();
- mCoverPath = source.readString();
+ mCoverUri = source.readParcelable(Uri.class.getClassLoader());
mDisplayName = source.readString();
mCount = source.readLong();
}
@@ -66,9 +67,10 @@ public class Album implements Parcelable {
* This method is not responsible for managing cursor resource, such as close, iterate, and so on.
*/
public static Album valueOf(Cursor cursor) {
+ String column = cursor.getString(cursor.getColumnIndex(AlbumLoader.COLUMN_URI));
return new Album(
cursor.getString(cursor.getColumnIndex("bucket_id")),
- cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)),
+ Uri.parse(column != null ? column : ""),
cursor.getString(cursor.getColumnIndex("bucket_display_name")),
cursor.getLong(cursor.getColumnIndex(AlbumLoader.COLUMN_COUNT)));
}
@@ -81,7 +83,7 @@ public class Album implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mId);
- dest.writeString(mCoverPath);
+ dest.writeParcelable(mCoverUri, 0);
dest.writeString(mDisplayName);
dest.writeLong(mCount);
}
@@ -90,8 +92,8 @@ public class Album implements Parcelable {
return mId;
}
- public String getCoverPath() {
- return mCoverPath;
+ public Uri getCoverUri() {
+ return mCoverUri;
}
public long getCount() {
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/SelectionSpec.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/SelectionSpec.java
index a69ab20004..7d09af96a2 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/SelectionSpec.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/entity/SelectionSpec.java
@@ -55,9 +55,11 @@ public final class SelectionSpec {
public boolean hasInited;
public OnSelectedListener onSelectedListener;
public boolean originalable;
+ public boolean autoHideToobar;
public int originalMaxSize;
public boolean singleChoiceMode;
public OnCheckedListener onCheckedListener;
+ public boolean showPreview;
private SelectionSpec() {
}
@@ -92,8 +94,10 @@ public final class SelectionSpec {
imageEngine = new PicassoEngine();
hasInited = true;
originalable = false;
+ autoHideToobar = false;
originalMaxSize = Integer.MAX_VALUE;
singleChoiceMode = false;
+ showPreview = true;
}
public boolean singleSelectionModeEnabled() {
@@ -112,6 +116,10 @@ public final class SelectionSpec {
return showSingleMediaType && MimeType.ofVideo().containsAll(mimeTypeSet);
}
+ public boolean onlyShowGif() {
+ return showSingleMediaType && MimeType.ofGif().equals(mimeTypeSet);
+ }
+
private static final class InstanceHolder {
private static final SelectionSpec INSTANCE = new SelectionSpec();
}
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/loader/AlbumLoader.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/loader/AlbumLoader.java
index 482e22a760..ef96c07deb 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/loader/AlbumLoader.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/loader/AlbumLoader.java
@@ -16,36 +16,55 @@
*/
package com.zhihu.matisse.internal.loader;
+import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.MergeCursor;
import android.net.Uri;
+import android.os.Build;
import android.provider.MediaStore;
+
import androidx.loader.content.CursorLoader;
+import com.zhihu.matisse.MimeType;
import com.zhihu.matisse.internal.entity.Album;
import com.zhihu.matisse.internal.entity.SelectionSpec;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
/**
* Load all albums (grouped by bucket_id) into a single cursor.
*/
public class AlbumLoader extends CursorLoader {
+ private static final String COLUMN_BUCKET_ID = "bucket_id";
+ private static final String COLUMN_BUCKET_DISPLAY_NAME = "bucket_display_name";
+ public static final String COLUMN_URI = "uri";
public static final String COLUMN_COUNT = "count";
private static final Uri QUERY_URI = MediaStore.Files.getContentUri("external");
private static final String[] COLUMNS = {
MediaStore.Files.FileColumns._ID,
- "bucket_id",
- "bucket_display_name",
- MediaStore.MediaColumns.DATA,
+ COLUMN_BUCKET_ID,
+ COLUMN_BUCKET_DISPLAY_NAME,
+ MediaStore.MediaColumns.MIME_TYPE,
+ COLUMN_URI,
COLUMN_COUNT};
private static final String[] PROJECTION = {
MediaStore.Files.FileColumns._ID,
- "bucket_id",
- "bucket_display_name",
- MediaStore.MediaColumns.DATA,
+ COLUMN_BUCKET_ID,
+ COLUMN_BUCKET_DISPLAY_NAME,
+ MediaStore.MediaColumns.MIME_TYPE,
"COUNT(*) AS " + COLUMN_COUNT};
+ private static final String[] PROJECTION_29 = {
+ MediaStore.Files.FileColumns._ID,
+ COLUMN_BUCKET_ID,
+ COLUMN_BUCKET_DISPLAY_NAME,
+ MediaStore.MediaColumns.MIME_TYPE};
+
// === params for showSingleMediaType: false ===
private static final String SELECTION =
"(" + MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
@@ -53,6 +72,11 @@ public class AlbumLoader extends CursorLoader {
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "=?)"
+ " AND " + MediaStore.MediaColumns.SIZE + ">0"
+ ") GROUP BY (bucket_id";
+ private static final String SELECTION_29 =
+ "(" + MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ + " OR "
+ + MediaStore.Files.FileColumns.MEDIA_TYPE + "=?)"
+ + " AND " + MediaStore.MediaColumns.SIZE + ">0";
private static final String[] SELECTION_ARGS = {
String.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE),
String.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO),
@@ -64,29 +88,58 @@ public class AlbumLoader extends CursorLoader {
MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ " AND " + MediaStore.MediaColumns.SIZE + ">0"
+ ") GROUP BY (bucket_id";
+ private static final String SELECTION_FOR_SINGLE_MEDIA_TYPE_29 =
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ + " AND " + MediaStore.MediaColumns.SIZE + ">0";
private static String[] getSelectionArgsForSingleMediaType(int mediaType) {
return new String[]{String.valueOf(mediaType)};
}
// =============================================
+ // === params for showSingleMediaType: true ===
+ private static final String SELECTION_FOR_SINGLE_MEDIA_GIF_TYPE =
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ + " AND " + MediaStore.MediaColumns.SIZE + ">0"
+ + " AND " + MediaStore.MediaColumns.MIME_TYPE + "=?"
+ + ") GROUP BY (bucket_id";
+ private static final String SELECTION_FOR_SINGLE_MEDIA_GIF_TYPE_29 =
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ + " AND " + MediaStore.MediaColumns.SIZE + ">0"
+ + " AND " + MediaStore.MediaColumns.MIME_TYPE + "=?";
+
+ private static String[] getSelectionArgsForSingleMediaGifType(int mediaType) {
+ return new String[]{String.valueOf(mediaType), "image/gif"};
+ }
+ // =============================================
+
private static final String BUCKET_ORDER_BY = "datetaken DESC";
private AlbumLoader(Context context, String selection, String[] selectionArgs) {
- super(context, QUERY_URI, PROJECTION, selection, selectionArgs, BUCKET_ORDER_BY);
+ super(
+ context,
+ QUERY_URI,
+ android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? PROJECTION : PROJECTION_29,
+ selection,
+ selectionArgs,
+ BUCKET_ORDER_BY
+ );
}
public static CursorLoader newInstance(Context context) {
String selection;
String[] selectionArgs;
- if (SelectionSpec.getInstance().onlyShowImages()) {
- selection = SELECTION_FOR_SINGLE_MEDIA_TYPE;
+ if (SelectionSpec.getInstance().onlyShowGif()) {
+ selection = android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? SELECTION_FOR_SINGLE_MEDIA_GIF_TYPE : SELECTION_FOR_SINGLE_MEDIA_GIF_TYPE_29;
+ selectionArgs = getSelectionArgsForSingleMediaGifType(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE);
+ }else if (SelectionSpec.getInstance().onlyShowImages()) {
+ selection = android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? SELECTION_FOR_SINGLE_MEDIA_TYPE : SELECTION_FOR_SINGLE_MEDIA_TYPE_29;
selectionArgs = getSelectionArgsForSingleMediaType(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE);
} else if (SelectionSpec.getInstance().onlyShowVideos()) {
- selection = SELECTION_FOR_SINGLE_MEDIA_TYPE;
+ selection = android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? SELECTION_FOR_SINGLE_MEDIA_TYPE : SELECTION_FOR_SINGLE_MEDIA_TYPE_29;
selectionArgs = getSelectionArgsForSingleMediaType(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO);
} else {
- selection = SELECTION;
+ selection = android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? SELECTION : SELECTION_29;
selectionArgs = SELECTION_ARGS;
}
return new AlbumLoader(context, selection, selectionArgs);
@@ -96,20 +149,107 @@ public class AlbumLoader extends CursorLoader {
public Cursor loadInBackground() {
Cursor albums = super.loadInBackground();
MatrixCursor allAlbum = new MatrixCursor(COLUMNS);
- int totalCount = 0;
- String allAlbumCoverPath = "";
- if (albums != null) {
- while (albums.moveToNext()) {
- totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT));
- }
- if (albums.moveToFirst()) {
- allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA));
- }
- }
- allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, allAlbumCoverPath,
- String.valueOf(totalCount)});
- return new MergeCursor(new Cursor[]{allAlbum, albums});
+ if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
+ int totalCount = 0;
+ Uri allAlbumCoverUri = null;
+ MatrixCursor otherAlbums = new MatrixCursor(COLUMNS);
+ if (albums != null) {
+ while (albums.moveToNext()) {
+ long fileId = albums.getLong(albums.getColumnIndex(MediaStore.Files.FileColumns._ID));
+ long bucketId = albums.getLong(albums.getColumnIndex(COLUMN_BUCKET_ID));
+ String bucketDisplayName = albums.getString(albums.getColumnIndex(COLUMN_BUCKET_DISPLAY_NAME));
+ String mimeType = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
+ Uri uri = getUri(albums);
+ int count = albums.getInt(albums.getColumnIndex(COLUMN_COUNT));
+
+ otherAlbums.addRow(new String[]{Long.toString(fileId), Long.toString(bucketId), bucketDisplayName, mimeType, uri.toString(),
+ String.valueOf(count)});
+ totalCount += count;
+ }
+ if (albums.moveToFirst()) {
+ allAlbumCoverUri = getUri(albums);
+ }
+ }
+
+ allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, null,
+ allAlbumCoverUri == null ? null : allAlbumCoverUri.toString(),
+ String.valueOf(totalCount)});
+
+ return new MergeCursor(new Cursor[]{allAlbum, otherAlbums});
+ } else {
+ int totalCount = 0;
+ Uri allAlbumCoverUri = null;
+
+ // Pseudo GROUP BY
+ Map countMap = new HashMap<>();
+ if (albums != null) {
+ while (albums.moveToNext()) {
+ long bucketId = albums.getLong(albums.getColumnIndex(COLUMN_BUCKET_ID));
+
+ Long count = countMap.get(bucketId);
+ if (count == null) {
+ count = 1L;
+ } else {
+ count++;
+ }
+ countMap.put(bucketId, count);
+ }
+ }
+
+ MatrixCursor otherAlbums = new MatrixCursor(COLUMNS);
+ if (albums != null) {
+ if (albums.moveToFirst()) {
+ allAlbumCoverUri = getUri(albums);
+
+ Set done = new HashSet<>();
+
+ do {
+ long bucketId = albums.getLong(albums.getColumnIndex(COLUMN_BUCKET_ID));
+
+ if (done.contains(bucketId)) {
+ continue;
+ }
+
+ long fileId = albums.getLong(albums.getColumnIndex(MediaStore.Files.FileColumns._ID));
+ String bucketDisplayName = albums.getString(albums.getColumnIndex(COLUMN_BUCKET_DISPLAY_NAME));
+ String mimeType = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
+ Uri uri = getUri(albums);
+ long count = countMap.get(bucketId);
+
+ otherAlbums.addRow(new String[]{Long.toString(fileId), Long.toString(bucketId), bucketDisplayName, mimeType, uri.toString(),
+ String.valueOf(count)});
+ done.add(bucketId);
+
+ totalCount += count;
+ } while (albums.moveToNext());
+ }
+ }
+
+ allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, null,
+ allAlbumCoverUri == null ? null : allAlbumCoverUri.toString(),
+ String.valueOf(totalCount)});
+
+ return new MergeCursor(new Cursor[]{allAlbum, otherAlbums});
+ }
+ }
+
+ private static Uri getUri(Cursor cursor) {
+ long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
+ String mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
+ Uri contentUri;
+
+ if (MimeType.isImage(mimeType)) {
+ contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else if (MimeType.isVideo(mimeType)) {
+ contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ } else {
+ // ?
+ contentUri = MediaStore.Files.getContentUri("external");
+ }
+
+ Uri uri = ContentUris.withAppendedId(contentUri, id);
+ return uri;
}
@Override
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumsAdapter.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumsAdapter.java
index 711e512b8d..8e809c9a23 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumsAdapter.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumsAdapter.java
@@ -19,7 +19,6 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
-import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -31,8 +30,6 @@ import com.zhihu.matisse.R;
import com.zhihu.matisse.internal.entity.Album;
import com.zhihu.matisse.internal.entity.SelectionSpec;
-import java.io.File;
-
public class AlbumsAdapter extends CursorAdapter {
private final Drawable mPlaceholder;
@@ -69,6 +66,6 @@ public class AlbumsAdapter extends CursorAdapter {
// do not need to load animated Gif
SelectionSpec.getInstance().imageEngine.loadThumbnail(context, context.getResources().getDimensionPixelSize(R
.dimen.media_grid_size), mPlaceholder,
- (ImageView) view.findViewById(R.id.album_cover), Uri.fromFile(new File(album.getCoverPath())));
+ (ImageView) view.findViewById(R.id.album_cover), album.getCoverUri());
}
}
diff --git a/libraries/Matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java b/libraries/Matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java
index 31c029405f..71f976afdd 100644
--- a/libraries/Matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java
+++ b/libraries/Matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java
@@ -335,12 +335,7 @@ public class MatisseActivity extends AppCompatActivity implements
if (applyFilter != null) {
applyFilter.applyFiltering(this,
mSelectedCollection.asList(),
- new ApplyFilter.OnApplyFilterCallBack() {
- @Override
- public void onApply() {
- sendBackResult();
- }
- });
+ () -> sendBackResult());
} else {
sendBackResult();
}
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/base/activity/BaseActivity.java b/module_common/src/main/java/com/gh/gamecenter/common/base/activity/BaseActivity.java
index c7c873c0b5..c8fbb08660 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/base/activity/BaseActivity.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/base/activity/BaseActivity.java
@@ -51,11 +51,12 @@ import com.gh.gamecenter.common.constant.EntranceConsts;
import com.gh.gamecenter.common.constant.RouteConsts;
import com.gh.gamecenter.common.eventbus.EBShowDialog;
import com.gh.gamecenter.common.tracker.IBusiness;
+import com.gh.gamecenter.common.utils.DarkModeUtils;
import com.gh.gamecenter.common.utils.DialogHelper;
import com.gh.gamecenter.common.utils.EnvHelper;
import com.gh.gamecenter.common.utils.ExtensionsKt;
+import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.NetworkUtils;
-import com.gh.gamecenter.common.utils.DarkModeUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
import com.gh.gamecenter.common.utils.PackageFlavorHelper;
import com.gh.gamecenter.common.utils.SensorsBridge;
@@ -71,7 +72,6 @@ import com.gh.gamecenter.core.utils.SPUtils;
import com.gh.gamecenter.core.utils.StringUtils;
import com.lightgame.BaseAppCompatActivity;
import com.lightgame.download.DownloadEntity;
-import com.lightgame.download.FileUtils;
import com.lightgame.utils.Utils;
import com.tencent.tauth.Tencent;
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/exposure/meta/MetaUtil.kt b/module_common/src/main/java/com/gh/gamecenter/common/exposure/meta/MetaUtil.kt
index 217f84fc1b..b53f2f79b9 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/exposure/meta/MetaUtil.kt
+++ b/module_common/src/main/java/com/gh/gamecenter/common/exposure/meta/MetaUtil.kt
@@ -225,21 +225,8 @@ object MetaUtil {
ConnectivityManager.TYPE_MOBILE -> {
val telephonyManager = application.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (telephonyManager.simState != TelephonyManager.SIM_STATE_READY) return "unknown"
- when (telephonyManager.networkType) {
- // Unknown
- TelephonyManager.NETWORK_TYPE_UNKNOWN -> "unknown"
- // Cellular Data–2G
- TelephonyManager.NETWORK_TYPE_EDGE, TelephonyManager.NETWORK_TYPE_GPRS, TelephonyManager.NETWORK_TYPE_CDMA,
- TelephonyManager.NETWORK_TYPE_IDEN, TelephonyManager.NETWORK_TYPE_1xRTT -> "2G"
- // Cellular Data–3G
- TelephonyManager.NETWORK_TYPE_UMTS, TelephonyManager.NETWORK_TYPE_HSDPA, TelephonyManager.NETWORK_TYPE_HSPA,
- TelephonyManager.NETWORK_TYPE_HSPAP, TelephonyManager.NETWORK_TYPE_HSUPA, TelephonyManager.NETWORK_TYPE_EVDO_0,
- TelephonyManager.NETWORK_TYPE_EVDO_A, TelephonyManager.NETWORK_TYPE_EVDO_B -> "3G"
- // Cellular Data–4G
- TelephonyManager.NETWORK_TYPE_LTE -> "4G"
- TelephonyManager.NETWORK_TYPE_NR -> "5G"
- else -> "unknown"
- }
+
+ return "MOBILE"
}
else -> "unknown"
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/retrofit/OkHttpCache.java b/module_common/src/main/java/com/gh/gamecenter/common/retrofit/OkHttpCache.java
index a8a1b4e50e..0452e165ec 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/retrofit/OkHttpCache.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/retrofit/OkHttpCache.java
@@ -2,9 +2,9 @@ package com.gh.gamecenter.common.retrofit;
import android.content.Context;
-import com.gh.gamecenter.core.utils.MD5Utils;
+import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.TimestampUtils;
-import com.lightgame.download.FileUtils;
+import com.gh.gamecenter.core.utils.MD5Utils;
import java.io.File;
import java.io.IOException;
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/DeviceUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/DeviceUtils.java
index dddf421353..8f690fa329 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/utils/DeviceUtils.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/DeviceUtils.java
@@ -124,41 +124,7 @@ public class DeviceUtils {
if (typeMobile == ConnectivityManager.TYPE_WIFI) {
return "WIFI";
} else if (typeMobile == ConnectivityManager.TYPE_MOBILE) {
- TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
- if (telephonyManager != null) {
- int networkType = telephonyManager.getNetworkType();
- String status;
- switch (networkType) {
- case TelephonyManager.NETWORK_TYPE_GPRS:
- case TelephonyManager.NETWORK_TYPE_EDGE:
- case TelephonyManager.NETWORK_TYPE_CDMA:
- case TelephonyManager.NETWORK_TYPE_1xRTT:
- case TelephonyManager.NETWORK_TYPE_IDEN:
- status = "2G";
- break;
- case TelephonyManager.NETWORK_TYPE_UMTS:
- case TelephonyManager.NETWORK_TYPE_EVDO_0:
- case TelephonyManager.NETWORK_TYPE_EVDO_A:
- case TelephonyManager.NETWORK_TYPE_HSDPA:
- case TelephonyManager.NETWORK_TYPE_HSUPA:
- case TelephonyManager.NETWORK_TYPE_HSPA:
- case TelephonyManager.NETWORK_TYPE_EVDO_B:
- case TelephonyManager.NETWORK_TYPE_EHRPD:
- case TelephonyManager.NETWORK_TYPE_HSPAP:
- status = "3G";
- break;
- case TelephonyManager.NETWORK_TYPE_LTE:
- status = "4G";
- break;
- case TelephonyManager.NETWORK_TYPE_NR:
- status = "5G";
- break;
- default:
- status = "未知";
- break;
- }
- return status;
- }
+ return "MOBILE";
}
}
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java
new file mode 100644
index 0000000000..e0561a653a
--- /dev/null
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java
@@ -0,0 +1,613 @@
+package com.gh.gamecenter.common.utils;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.os.StatFs;
+import android.os.StrictMode;
+import android.provider.MediaStore;
+
+import androidx.annotation.Nullable;
+
+import org.json.JSONObject;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.UUID;
+
+/**
+ * @author guanchao wen
+ * @email shuwoom.wgc@gmail.com
+ * @modify hzh 2016/03/16
+ * @update 2015-7-29下午2:26:02
+ */
+public class FileUtils {
+
+ public static String getDownloadPath(Context context, String name) {
+ return getDownloadDir(context) + File.separator + name;
+ }
+
+ public static String getDownloadDir(Context context) {
+ String dir;
+ String baseDir;
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+ try {
+ // 在部分设备,可能是使用 sd 卡的设备? getExternalFilesDir 方法返回 null
+ // 异常时使用备用存储位置作为下载地址
+ baseDir = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
+ } catch (NullPointerException exception) {
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
+ // Android 6.0 的设备无法直接下载至根目录 Download 文件夹(需要获取外部存储权限)
+ // 使用 getFilesDir 方法后,默认情况下 PackageInstaller 无法获取直接读取安装 APK
+ // 一般的处理方式是下载的时候将文件 openFileOutput(APK_FILENAME, Context.MODE_WORLD_READABLE)
+ // 但因为下载文件由下载模块创建,暂时不做修改,换成在下载完成后调用 file.setReadable(true, false) 使文件可读
+ baseDir = context.getFilesDir().getAbsolutePath();
+ } else {
+ baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
+ }
+ }
+ } else {
+ baseDir = context.getFilesDir().getAbsolutePath();
+ }
+
+ dir = checkDir(baseDir + File.separator + "gh-files");
+ try {
+ Runtime.getRuntime().exec("chmod 755 " + dir);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return dir;
+ }
+
+ public static boolean isMounted() {
+ return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
+ }
+
+ private static String checkDir(String dir) {
+ File directory = new File(dir);
+ if (directory.exists() && !directory.isDirectory()) {
+ directory.delete();
+ }
+ if (!directory.exists()) {
+ directory.mkdirs();
+ }
+ return dir;
+ }
+
+ public static String getLogPath(Context context, String name) {
+ return checkDir(getDir(context, "log")) + File.separator + name;
+ }
+
+ public static String getDir(Context context, String dir) {
+ if (isMounted()) {
+ // /storage/emulated/0/Android/data/包名/files
+ File file = context.getExternalFilesDir(null);
+ if (file != null) {
+ return file.getAbsolutePath() + File.separator + dir;
+ }
+ }
+ // /data/data/包名/files
+ return context.getFilesDir().getAbsolutePath() + File.separator + dir;
+ }
+
+ public static String getPlatformPicDir(Context context) {
+ return checkDir(getDir(context, "PlatformPic"));
+ }
+
+ public static void deleteFile(String savePath) {
+ try {
+ File file = new File(savePath);
+ if (file.exists()) {
+ file.delete();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void deleteFolder(File folder) {
+ if (folder != null) {
+ if (folder.isDirectory()) {
+ for (File file : folder.listFiles()) {
+ if (file.isDirectory()) {
+ deleteFolder(file);
+ } else {
+ file.delete();
+ }
+ }
+ }
+ folder.delete();
+ }
+ }
+
+ public static boolean isEmptyFile(String path) {
+ File file = new File(path);
+ return !(file.exists() && file.length() != 0);
+ }
+
+ public static String isCanDownload(Context context, String size) {
+ String msg = null;
+ String packageSizeStr = "";
+ for (int i = 0; i < size.length(); i++) {
+ if ((size.charAt(i) >= 48 && size.charAt(i) <= 57) || size.charAt(i) == 46) {
+ packageSizeStr += size.charAt(i);
+ }
+ }
+ float packageSize = 0;
+ if (packageSizeStr.length() != 0) {
+ packageSize = Float.valueOf(packageSizeStr);
+ }
+ float freeSpace = getFreeSpaceByPath(getDownloadDir(context));
+ if (freeSpace < packageSize) {
+ msg = "手机存储空间不足,无法进行下载!";
+ }
+ return msg;
+ }
+
+ public static String isCanDownload(Context context, long size) {
+ String msg = null;
+ float freeSpace = getFreeSpaceByPath(getDownloadDir(context));
+ if (freeSpace < size / 1024f / 1024f) {
+ msg = "手机存储空间不足,无法进行下载!";
+ }
+ return msg;
+ }
+
+ // 返回剩余空间 单位MB
+ @SuppressWarnings("deprecation")
+ public static float getFreeSpaceByPath(String path) {
+ // 部分用 SD卡的老手机会抛出 java.lang.IllegalArgumentException: Invalid path: 的异常
+ // 出现这异常干脆返回 8192MB 让他下
+ try {
+ StatFs statfs = new StatFs(path);
+ long blockSize = statfs.getBlockSize();
+ long availableBlocks = statfs.getAvailableBlocks();
+
+ return availableBlocks * blockSize / 1024f / 1024f;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 8192;
+ }
+ }
+
+ // 下载文件
+ public static int downloadFile(String url, String savePath) {
+ DataInputStream dis = null;
+ FileOutputStream fos = null;
+ try {
+ HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+ connection.setRequestMethod("GET");
+ connection.setConnectTimeout(5 * 1000);
+ connection.setReadTimeout(5 * 1000);
+ connection.connect();
+ int code = connection.getResponseCode();
+ if (code == 200) {
+ dis = new DataInputStream(connection.getInputStream());
+ File file = new File(savePath);
+ if (file.exists()) {
+ file.delete();
+ }
+ file.getParentFile().mkdir();
+ file.createNewFile();
+ fos = new FileOutputStream(file);
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = dis.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
+ }
+ fos.flush();
+ }
+ return code;
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (dis != null) {
+ try {
+ dis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return -1;
+ }
+
+ // 下载并更新文件 (与上面方法的不同之处是只有在下载完成以后才会更新旧文件)
+ public static int downloadAndUpdateFile(String url, String savePath) {
+ DataInputStream dis = null;
+ FileOutputStream fos = null;
+ try {
+ String tempSavePath = savePath + ".tmp";
+
+ HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+ connection.setRequestMethod("GET");
+ connection.setConnectTimeout(5 * 1000);
+ connection.setReadTimeout(5 * 1000);
+ connection.connect();
+ int code = connection.getResponseCode();
+ if (code == 200) {
+ dis = new DataInputStream(connection.getInputStream());
+ File tempFile = new File(tempSavePath);
+ if (tempFile.exists()) {
+ tempFile.delete();
+ }
+ tempFile.getParentFile().mkdir();
+ tempFile.createNewFile();
+ fos = new FileOutputStream(tempFile);
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = dis.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
+ }
+ fos.flush();
+
+ File file = new File(savePath);
+ if (file.exists()) {
+ file.delete();
+ }
+
+ tempFile.renameTo(file);
+ }
+ return code;
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (dis != null) {
+ try {
+ dis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return -1;
+ }
+
+ // 上传文件
+ public static JSONObject uploadFile(String url, String filePath, String token) {
+ String end = "\r\n";
+ String twoHyphens = "--";
+ String boundary = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
+ try {
+ HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+ /*
+ * Output to the connection. Default is false, set to true because
+ * post method must write something to the connection
+ */
+ connection.setDoOutput(true);
+ // Read from the connection. Default is true.
+ connection.setDoInput(true);
+ // Post cannot use caches
+ connection.setUseCaches(false);
+ // Set the post method. Default is GET
+ connection.setRequestMethod("POST");
+ connection.setConnectTimeout(5 * 1000);
+ connection.setReadTimeout(5 * 1000);
+ // 设置请求属性
+ connection.setRequestProperty("Connection", "Keep-Alive");
+ connection.setRequestProperty("Charset", "UTF-8");
+ connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
+ if (token != null) {
+ connection.setRequestProperty("TOKEN", token);
+ }
+ // 设置StrictMode 否则HTTPURLConnection连接失败,因为这是在主进程中进行网络连接
+ StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
+ .detectDiskReads().detectDiskWrites().detectNetwork()
+ .penaltyLog().build());
+ File file = new File(filePath);
+// if (file.exists()) {
+// Utils.log("name = " + file.getName());
+// Utils.log("length = " + file.length());
+// }
+ // 设置DataOutputStream,getOutputStream中默认调用connect()
+ DataOutputStream dos = new DataOutputStream(connection.getOutputStream()); // output
+ // to the connection
+ dos.writeBytes(twoHyphens + boundary + end);
+ dos.writeBytes("Content-Disposition: form-data; "
+ + "name=\"Filedata\";filename=\"" + file.getName() + "\"" + end);
+ dos.writeBytes(end);
+ // 取得文件的FileInputStream
+ FileInputStream fStream = new FileInputStream(file);
+ // 设置每次写入8192bytes
+ int bufferSize = 8192;
+ byte[] buffer = new byte[bufferSize]; // 8k
+ int length;
+ // 从文件读取数据至缓冲区
+ while ((length = fStream.read(buffer)) != -1) {
+ // 将资料写入DataOutputStream中
+ dos.write(buffer, 0, length);
+ }
+ dos.writeBytes(end);
+ dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
+ // 关闭流,写入的东西自动生成Http正文
+ fStream.close();
+ // 关闭DataOutputStream
+ dos.flush();
+ dos.close();
+
+ InputStream inputStream;
+ try {
+ inputStream = connection.getInputStream();
+ } catch (IOException ioe) {
+ inputStream = connection.getErrorStream();
+ }
+ int ch;
+ StringBuffer b = new StringBuffer();
+ while ((ch = inputStream.read()) != -1) {
+ b.append((char) ch);
+ }
+ // 显示网页响应内容
+// Utils.log("content = " + b.toString().trim());
+
+ int statusCode = connection.getResponseCode();
+// Utils.log("statusCode = " + statusCode);
+ JSONObject response = null;
+ switch (statusCode) {
+ case 200:
+ // {"icon":"http:\/\/gh-test-1.oss-cn-qingdao.aliyuncs.com\/pic\/57e4f4d58a3200042d29492f.jpg"}
+ response = new JSONObject(b.toString().trim());
+ response.put("statusCode", 200);
+ break;
+ case 403:
+ response = new JSONObject(b.toString().trim());
+ response.put("statusCode", 403);
+ break;
+ case 401:
+ response = new JSONObject();
+ response.put("statusCode", 401);
+ break;
+ }
+
+ return response;
+ } catch (Exception e) {
+ // 显示异常信息
+ e.printStackTrace();
+// Utils.log("Fail:" + e);
+ }
+ return null;
+ }
+
+
+ // 上传文件 realPath:真实路径(防止对文件压缩后filePath路径改变) 提交成功后会返回该路径 以便识别上传文件的身份
+ public static JSONObject uploadFile(String url, String filePath, String realPath, String token) {
+ String end = "\r\n";
+ String twoHyphens = "--";
+ String boundary = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
+ try {
+ HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+ /*
+ * Output to the connection. Default is false, set to true because
+ * post method must write something to the connection
+ */
+ connection.setDoOutput(true);
+ // Read from the connection. Default is true.
+ connection.setDoInput(true);
+ // Post cannot use caches
+ connection.setUseCaches(false);
+ // Set the post method. Default is GET
+ connection.setRequestMethod("POST");
+ connection.setConnectTimeout(5 * 1000);
+ connection.setReadTimeout(5 * 1000);
+ // 设置请求属性
+ connection.setRequestProperty("Connection", "Keep-Alive");
+ connection.setRequestProperty("Charset", "UTF-8");
+ connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
+ if (token != null) {
+ connection.setRequestProperty("TOKEN", token);
+ }
+ // 设置StrictMode 否则HTTPURLConnection连接失败,因为这是在主进程中进行网络连接
+ StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
+ .detectDiskReads().detectDiskWrites().detectNetwork()
+ .penaltyLog().build());
+ File file = new File(filePath);
+// if (file.exists()) {
+// Utils.log("name = " + file.getName());
+// Utils.log("length = " + file.length());
+// }
+ // 设置DataOutputStream,getOutputStream中默认调用connect()
+ DataOutputStream dos = new DataOutputStream(connection.getOutputStream()); // output
+ // to the connection
+ dos.writeBytes(twoHyphens + boundary + end);
+ dos.writeBytes("Content-Disposition: form-data; "
+ + "name=\"Filedata\";filename=\"" + file.getName() + "\"" + end);
+ dos.writeBytes(end);
+ // 取得文件的FileInputStream
+ FileInputStream fStream = new FileInputStream(file);
+ // 设置每次写入8192bytes
+ int bufferSize = 8192;
+ byte[] buffer = new byte[bufferSize]; // 8k
+ int length;
+ // 从文件读取数据至缓冲区
+ while ((length = fStream.read(buffer)) != -1) {
+ // 将资料写入DataOutputStream中
+ dos.write(buffer, 0, length);
+ }
+ dos.writeBytes(end);
+ dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
+ // 关闭流,写入的东西自动生成Http正文
+ fStream.close();
+ // 关闭DataOutputStream
+ dos.flush();
+ dos.close();
+
+ InputStream inputStream;
+ try {
+ inputStream = connection.getInputStream();
+ } catch (IOException ioe) {
+ inputStream = connection.getErrorStream();
+ }
+ int ch;
+ StringBuffer b = new StringBuffer();
+ while ((ch = inputStream.read()) != -1) {
+ b.append((char) ch);
+ }
+ // 显示网页响应内容
+// Utils.log("content = " + b.toString().trim());
+
+ int statusCode = connection.getResponseCode();
+// Utils.log("statusCode = " + statusCode);
+ JSONObject response = null;
+ switch (statusCode) {
+ case 200:
+ // {"icon":"http:\/\/gh-test-1.oss-cn-qingdao.aliyuncs.com\/pic\/57e4f4d58a3200042d29492f.jpg"}
+ response = new JSONObject(b.toString().trim());
+ response.put("statusCode", 200);
+ response.put("realPath", realPath);
+ break;
+ case 403:
+ response = new JSONObject(b.toString().trim());
+ response.put("statusCode", 403);
+ response.put("realPath", realPath);
+ break;
+ case 401:
+ response = new JSONObject();
+ response.put("statusCode", 401);
+ break;
+ }
+
+ return response;
+ } catch (Exception e) {
+ // 显示异常信息
+ e.printStackTrace();
+// Utils.log("Fail:" + e);
+ }
+ return null;
+ }
+
+
+ // 读取文件,返回byte[]
+ public static byte[] readFile(File file) {
+ if (file == null) {
+ return null;
+ }
+ FileInputStream fis = null;
+ ByteArrayOutputStream bos = null;
+ try {
+ fis = new FileInputStream(file);
+ bos = new ByteArrayOutputStream();
+ byte[] buffer = new byte[2048];
+ int len;
+ while ((len = fis.read(buffer)) != -1) {
+ bos.write(buffer, 0, len);
+ }
+ bos.flush();
+ return bos.toByteArray();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (bos != null) {
+ try {
+ bos.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return null;
+ }
+
+ // 根据byte[],保存文件
+ public static void saveFile(File file, byte[] data) {
+ if (file == null || data == null) {
+ return;
+ }
+ ByteArrayInputStream bis = null;
+ FileOutputStream fos = null;
+ try {
+ bis = new ByteArrayInputStream(data);
+ fos = new FileOutputStream(file);
+ byte[] buffer = new byte[2048];
+ int len;
+ while ((len = bis.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
+ }
+ fos.flush();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * @param context suggestion application context
+ * @param filePath file path
+ * @return A MIME type for the content {category}/{type}
+ * example: video/mp4
+ */
+ @Nullable
+ public static String getFileMimeType(Context context, String filePath) {
+ Uri contentUri = getFileContentUri(context, filePath);
+ if (contentUri != null) {
+ return context.getContentResolver().getType(contentUri);
+ }
+ return null;
+ }
+
+ @Nullable
+ public static Uri getFileContentUri(Context context, String filePath) {
+ Cursor cursor = null;
+ try {
+ String absolutePath = new File(filePath).getAbsolutePath();
+ cursor = context.getContentResolver().query(
+ MediaStore.Files.getContentUri("external"),
+ new String[]{MediaStore.Files.FileColumns._ID},
+ MediaStore.Files.FileColumns.DATA + "=? ",
+ new String[]{absolutePath}, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
+ cursor.close();
+ return Uri.withAppendedPath(MediaStore.Files.getContentUri("external"), "" + id);
+ } else return null;
+ } catch (Exception ignore) {
+ } finally {
+ if (cursor != null) cursor.close();
+ }
+ return null;
+ }
+}
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/NetworkUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/NetworkUtils.java
index 384c4829f3..df02dbbe2c 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/utils/NetworkUtils.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/NetworkUtils.java
@@ -94,39 +94,46 @@ public class NetworkUtils {
}
/**
- * 获取当前移动网络连接的类型信息(当连接的网络是移动网络时使用)
+ * 获取当前网络连接的类型信息
*
* @param context 上下文
- * @return 当前移动网络连接的类型信息
+ * @return 当前网络连接的类型信息
*/
- public static String getMobileNetworkType(Context context) {
- TelephonyManager mTelephonyManager = (TelephonyManager)
- context.getSystemService(Context.TELEPHONY_SERVICE);
- int networkType = mTelephonyManager.getNetworkType();
- switch (networkType) {
- case TelephonyManager.NETWORK_TYPE_GPRS:
- case TelephonyManager.NETWORK_TYPE_EDGE:
- case TelephonyManager.NETWORK_TYPE_CDMA:
- case TelephonyManager.NETWORK_TYPE_1xRTT:
- case TelephonyManager.NETWORK_TYPE_IDEN:
- return "2G";
- case TelephonyManager.NETWORK_TYPE_UMTS:
- case TelephonyManager.NETWORK_TYPE_EVDO_0:
- case TelephonyManager.NETWORK_TYPE_EVDO_A:
- case TelephonyManager.NETWORK_TYPE_HSDPA:
- case TelephonyManager.NETWORK_TYPE_HSUPA:
- case TelephonyManager.NETWORK_TYPE_HSPA:
- case TelephonyManager.NETWORK_TYPE_EVDO_B:
- case TelephonyManager.NETWORK_TYPE_EHRPD:
- case TelephonyManager.NETWORK_TYPE_HSPAP:
- return "3G";
- case TelephonyManager.NETWORK_TYPE_LTE:
- return "4G";
- case TelephonyManager.NETWORK_TYPE_NR:
- return "5G";
- default:
- return "unknown";
+ public static String getConnectedType(Context context) {
+ if (context != null) {
+ context = context.getApplicationContext();
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) context
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mNetworkInfo = mConnectivityManager
+ .getActiveNetworkInfo();
+ if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
+ switch (mNetworkInfo.getType()) {
+ case ConnectivityManager.TYPE_BLUETOOTH:
+ return "BLUETOOTH";
+ case ConnectivityManager.TYPE_DUMMY:
+ return "DUMMY";
+ case ConnectivityManager.TYPE_ETHERNET:
+ return "ETHERNET";
+ case ConnectivityManager.TYPE_MOBILE:
+ return "MOBILE";
+ case ConnectivityManager.TYPE_MOBILE_DUN:
+ return "MOBILE_DUN";
+ case ConnectivityManager.TYPE_MOBILE_HIPRI:
+ return "MOBILE_HIPRI";
+ case ConnectivityManager.TYPE_MOBILE_MMS:
+ return "MOBILE_MMS";
+ case ConnectivityManager.TYPE_MOBILE_SUPL:
+ return "MOBILE_SUPL";
+ case ConnectivityManager.TYPE_WIFI:
+ return "WIFI";
+ case ConnectivityManager.TYPE_WIMAX:
+ return "WIMAX";
+ default:
+ break;
+ }
+ }
}
+ return "NONE";
}
}
diff --git a/module_core/src/main/java/com/gh/gamecenter/core/utils/DisplayUtils.java b/module_core/src/main/java/com/gh/gamecenter/core/utils/DisplayUtils.java
index c2d8d74cb5..43ddac06b3 100644
--- a/module_core/src/main/java/com/gh/gamecenter/core/utils/DisplayUtils.java
+++ b/module_core/src/main/java/com/gh/gamecenter/core/utils/DisplayUtils.java
@@ -32,6 +32,9 @@ public class DisplayUtils {
public static boolean sShouldUseLegacyMiuiStatusBarMethod = true;
+ private static int sGlobalScreenWidth = 0;
+ private static int sGlobalScreenHeight = 0;
+
/**
* 根据手机的分辨率从 dip(像素) 的单位 转成为 px
*/
@@ -296,18 +299,28 @@ public class DisplayUtils {
return false;
}
- public static int getScreenWidth() {
- WindowManager manager = (WindowManager) HaloApp.getInstance().getSystemService(Context.WINDOW_SERVICE);
+ public static void updateGlobalScreen(Activity activity) {
+ WindowManager manager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
- return metrics.widthPixels;
+ sGlobalScreenWidth = metrics.widthPixels;
+ sGlobalScreenHeight = metrics.heightPixels;
}
+ /**
+ * 如需实时获取屏幕宽度,请传入当前 Activity
+ */
+ @Deprecated
+ public static int getScreenWidth() {
+ return sGlobalScreenWidth;
+ }
+
+ /**
+ * 如需实时获取屏幕高度,请传入当前 Activity
+ */
+ @Deprecated
public static int getScreenHeight() {
- WindowManager manager = (WindowManager) HaloApp.getInstance().getSystemService(Context.WINDOW_SERVICE);
- DisplayMetrics metrics = new DisplayMetrics();
- manager.getDefaultDisplay().getMetrics(metrics);
- return metrics.heightPixels;
+ return sGlobalScreenHeight;
}
public static int getScreenWidth(Activity activity) {
diff --git a/module_core_feature/src/main/java/com/gh/gamecenter/feature/utils/PlatformUtils.java b/module_core_feature/src/main/java/com/gh/gamecenter/feature/utils/PlatformUtils.java
index 06f0ac6625..78c0456fd9 100644
--- a/module_core_feature/src/main/java/com/gh/gamecenter/feature/utils/PlatformUtils.java
+++ b/module_core_feature/src/main/java/com/gh/gamecenter/feature/utils/PlatformUtils.java
@@ -11,12 +11,12 @@ import androidx.core.content.ContextCompat;
import com.gh.gamecenter.common.eventbus.EBReuse;
import com.gh.gamecenter.common.retrofit.Response;
+import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.core.AppExecutor;
import com.gh.gamecenter.feature.HaloApp;
import com.gh.gamecenter.feature.R;
import com.gh.gamecenter.feature.entity.PlatformEntity;
import com.gh.gamecenter.feature.retrofit.RetrofitManager;
-import com.lightgame.download.FileUtils;
import org.greenrobot.eventbus.EventBus;
diff --git a/module_setting/src/main/java/com/gh/gamecenter/setting/view/GameDownloadSettingFragment.kt b/module_setting/src/main/java/com/gh/gamecenter/setting/view/GameDownloadSettingFragment.kt
index 635037d65f..9fcc9aa056 100644
--- a/module_setting/src/main/java/com/gh/gamecenter/setting/view/GameDownloadSettingFragment.kt
+++ b/module_setting/src/main/java/com/gh/gamecenter/setting/view/GameDownloadSettingFragment.kt
@@ -82,7 +82,7 @@ class GameDownloadSettingFragment : ToolbarFragment() {
contentTv.visibility = View.VISIBLE
root.setOnClickListener {
MtaHelper.onEvent("我的光环_设置", "设置功能", "游戏下载目录")
- if (TextUtils.isEmpty(dirPath)) dirPath = Environment.getExternalStorageDirectory().path + "/gh-files"
+ if (TextUtils.isEmpty(dirPath)) dirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).path + "/gh-files"
startFilePath(dirPath)
}
}
diff --git a/module_setting/src/main/java/com/gh/gamecenter/setting/view/SettingsFragment.kt b/module_setting/src/main/java/com/gh/gamecenter/setting/view/SettingsFragment.kt
index cb59a6f202..5a4f9b1059 100644
--- a/module_setting/src/main/java/com/gh/gamecenter/setting/view/SettingsFragment.kt
+++ b/module_setting/src/main/java/com/gh/gamecenter/setting/view/SettingsFragment.kt
@@ -47,7 +47,6 @@ import com.gh.gamecenter.setting.R
import com.gh.gamecenter.setting.databinding.FragmentSettingBinding
import com.gh.gamecenter.setting.view.security.SecurityActivity
import com.gh.gid.GidHelper
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import io.reactivex.Observable
import io.reactivex.ObservableEmitter
diff --git a/module_setting/src/main/res/values/strings.xml b/module_setting/src/main/res/values/strings.xml
index 8397c6bc9a..274a8ae5d5 100644
--- a/module_setting/src/main/res/values/strings.xml
+++ b/module_setting/src/main/res/values/strings.xml
@@ -15,7 +15,7 @@
开启后你可以及时收到重要通知
个性化推荐
开启功能后,您在本应用的使用信息(如下载信息),将用于个性化内容推荐,以提升您在本应用的体验
- …/gh-files
+ …/Download/gh-files
…/pictures/ghzhushou
游戏下载目录
图片保存目录
diff --git a/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeGameDownloadSettingActivity.kt b/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeGameDownloadSettingActivity.kt
index c32506ff04..55d240fd6b 100644
--- a/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeGameDownloadSettingActivity.kt
+++ b/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeGameDownloadSettingActivity.kt
@@ -79,7 +79,7 @@ class ComposeGameDownloadSettingActivity : ComposeBaseActivity() {
SettingItem(
getString(R.string.setting_download_path), content = getString(R.string.setting_download_path_des)
) {
- val dirPath = Environment.getExternalStorageDirectory().path + "/gh-files"
+ val dirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).path + "/gh-files"
startFilePath(dirPath)
}
SettingDivider()
diff --git a/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeSettingActivity.kt b/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeSettingActivity.kt
index 33106e49ab..a134f113b8 100644
--- a/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeSettingActivity.kt
+++ b/module_setting_compose/src/main/java/com/gh/gamecenter/setting/compose/activity/ComposeSettingActivity.kt
@@ -55,7 +55,6 @@ import com.gh.gamecenter.setting.compose.ui.component.Space
import com.gh.gamecenter.setting.compose.ui.theme.*
import com.gh.gamecenter.setting.compose.viewmodel.ComposeSettingViewModel
import com.gh.gid.GidHelper
-import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import io.reactivex.Observable
import io.reactivex.ObservableEmitter
diff --git a/module_setting_compose/src/main/res/values/strings.xml b/module_setting_compose/src/main/res/values/strings.xml
index e6f56fff78..69e3a48d52 100644
--- a/module_setting_compose/src/main/res/values/strings.xml
+++ b/module_setting_compose/src/main/res/values/strings.xml
@@ -16,7 +16,7 @@
开启后你可以及时收到重要通知
个性化推荐
开启功能后,您在本应用的使用信息(如下载信息),将用于个性化内容推荐,以提升您在本应用的体验
- …/gh-files
+ …/Download/gh-files
…/pictures/ghzhushou
游戏下载目录
图片保存目录