diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 47a1f41388..f81ca2b2c5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -165,7 +165,8 @@
android:screenOrientation="portrait" />
+ android:name="com.gh.gamecenter.WebActivity"
+ android:screenOrientation="portrait"/>
Unit)? = null
+ var mCallBack: ((isFromPermissionGrantedCallback: Boolean) -> Unit)? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
mView = inflater.inflate(R.layout.dialog_install_permission, null, false)
@@ -59,7 +60,7 @@ class InstallPermissionDialogFragment : BaseDialogFragment() {
closeTv.setOnClickListener {
if (isXapk) {
- mCallBack?.invoke()
+ mCallBack?.invoke(false)
}
dismiss()
}
@@ -78,36 +79,38 @@ class InstallPermissionDialogFragment : BaseDialogFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISSION_CODE) {
- SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "")
- SPUtils.setString(Constants.SP_XAPK_URL, "")
- mCallBack?.invoke()
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
+ SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "")
+ SPUtils.setString(Constants.SP_XAPK_URL, "")
+ }
+ mCallBack?.invoke(true)
dismiss()
}
}
companion object {
@JvmStatic
- fun show(activity: AppCompatActivity, downloadEntity: DownloadEntity, callBack: (() -> Unit)?) {
+ fun show(activity: AppCompatActivity, downloadEntity: DownloadEntity, callBack: ((isFromPermissionGrantedCallback: Boolean) -> Unit)?) {
val isXapk = XapkInstaller.XAPK_EXTENSION_NAME == downloadEntity.path.getExtension()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
- callBack?.invoke()
+ callBack?.invoke(false)
return
}
val haveInstallPermission = activity.packageManager.canRequestPackageInstalls()
if (haveInstallPermission) {
- callBack?.invoke()
+ callBack?.invoke(false)
return
}
if (isXapk) {
val xapkUnzipVersions = Config.getSettings()?.permissionPopupAppliedVersions?.xapkUnzip
if (xapkUnzipVersions?.contains(Build.VERSION.SDK_INT.toString()) == false) {
- callBack?.invoke()
+ callBack?.invoke(false)
return
}
} else {
val installVersions = Config.getSettings()?.permissionPopupAppliedVersions?.install
if (installVersions?.contains(Build.VERSION.SDK_INT.toString()) == false) {
- callBack?.invoke()
+ callBack?.invoke(false)
return
}
}
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 1e380c5700..7c5bd38bab 100644
--- a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt
+++ b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt
@@ -94,6 +94,9 @@ class SimulatorDownloadManager private constructor() {
DownloadStatus.unqualified == downloadEntity.status -> {
ToastUtils.showToast("未成年人暂不允许在此时间下载游戏")
}
+ DownloadStatus.unavailable == downloadEntity.status -> {
+ ToastUtils.showToast("该游戏未接入防沉迷系统,暂不支持下载")
+ }
DownloadStatus.hijack == downloadEntity.status -> {
ToastUtils.showToast("网络劫持,请稍后重试")
}
diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java
index 55b946f3c5..dd1d3586dd 100644
--- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java
+++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java
@@ -201,6 +201,7 @@ public class DetailDownloadUtils {
case notfound:
case uncertificated:
case unqualified:
+ case unavailable:
detailInitDownload(viewHolder, false);
break;
default:
diff --git a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt
index 4c7570a817..af208da26f 100644
--- a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt
+++ b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt
@@ -118,6 +118,7 @@ object DownloadNotificationHelper {
|| entity.status == DownloadStatus.cancel
|| entity.status == DownloadStatus.hijack
|| entity.status == DownloadStatus.unqualified
+ || entity.status == DownloadStatus.unavailable
|| entity.status == DownloadStatus.uncertificated
|| entity.status == DownloadStatus.notfound
|| entity.status == DownloadStatus.overflow
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 fb4d1d7858..c782508b4a 100644
--- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt
+++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt
@@ -39,7 +39,6 @@ import okhttp3.MediaType
import okhttp3.RequestBody
import org.greenrobot.eventbus.EventBus
import org.json.JSONObject
-import java.util.*
object DownloadObserver {
@@ -112,6 +111,20 @@ object DownloadObserver {
// 未成年
RealNameHelper.showRealNameUnqualifiedDialog(downloadEntity)
+ // 删除任务
+ downloadEntity.status = DownloadStatus.cancel
+ downloadManager.cancel(downloadEntity.url)
+ } else if (DownloadStatus.unavailable == downloadEntity.status) {
+ // 未接入防沉迷系统
+ val currentActivity = AppManager.getInstance().currentActivity() ?: return
+
+ DialogHelper.showDialog(
+ context = currentActivity,
+ title = "温馨提示",
+ content = "该游戏未接入防沉迷系统,暂不支持下载",
+ confirmText = "知道了",
+ cancelText = "")
+
// 删除任务
downloadEntity.status = DownloadStatus.cancel
downloadManager.cancel(downloadEntity.url)
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 aafbde2651..7e86761029 100644
--- a/app/src/main/java/com/gh/common/util/PackageInstaller.kt
+++ b/app/src/main/java/com/gh/common/util/PackageInstaller.kt
@@ -59,15 +59,23 @@ object PackageInstaller {
// TODO 此处可能遇到 activity 是 WXEntryActivity
// TODO 当 activity 全部出栈,但是应用还在下载游戏,下载完会唤不起安装!
if (currentActivity is AppCompatActivity && !currentActivity.isFinishing) {
- InstallPermissionDialogFragment.show(currentActivity, downloadEntity) {
+ InstallPermissionDialogFragment.show(currentActivity, downloadEntity) { isFromPermissionGrantedCallback ->
// 取消状态栏下载完成的通知,若存在
downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES"
DownloadNotificationHelper.addOrUpdateDownloadNotification(downloadEntity)
- if (isXapk) {
- XapkInstaller.install(context, downloadEntity, showUnzipToast)
+ if (isFromPermissionGrantedCallback && Build.VERSION.SDK_INT >= 31) {
+ val pm = context.packageManager
+ val intent = pm.getLaunchIntentForPackage(context.packageName)
+ val mainIntent = Intent.makeRestartActivityTask(intent!!.component)
+ context.startActivity(mainIntent)
+ Runtime.getRuntime().exit(0)
} else {
- install(context, downloadEntity.isPlugin, downloadEntity.path)
+ if (isXapk) {
+ XapkInstaller.install(context, downloadEntity, showUnzipToast)
+ } else {
+ install(context, downloadEntity.isPlugin, downloadEntity.path)
+ }
}
}
}
diff --git a/app/src/main/java/com/gh/download/DownloadDataHelper.kt b/app/src/main/java/com/gh/download/DownloadDataHelper.kt
index 60680d9d6a..4e1a6b2649 100644
--- a/app/src/main/java/com/gh/download/DownloadDataHelper.kt
+++ b/app/src/main/java/com/gh/download/DownloadDataHelper.kt
@@ -86,6 +86,8 @@ object DownloadDataHelper {
"未实名"
} else if (status == DownloadStatus.unqualified) {
"未成年"
+ } else if (status == DownloadStatus.unavailable) {
+ "未接入防沉迷系统,暂不支持下载"
} else if (status == DownloadStatus.redirected) {
"重定向至最终地址"
} else {
diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java
index eb4aab2da7..e1870ff6e6 100644
--- a/app/src/main/java/com/gh/gamecenter/MainActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java
@@ -295,11 +295,6 @@ public class MainActivity extends BaseActivity {
checkDialog();
}
-// handler.postDelayed(() -> {
-// PushHelper.postPushClickAction(this.getApplicationContext(), null);
-// }, 2000);
-
-
// 耗时操作
AppExecutor.getIoExecutor().execute(() -> {
// 上传数据
@@ -312,9 +307,6 @@ public class MainActivity extends BaseActivity {
// 初始化PlatformUtils
PlatformUtils.getInstance(getApplicationContext());
-// // 友盟记录启动
-// PushAgent.getInstance(this).onAppStart();
-
HomePluggableHelper.activationFilterData();
});
@@ -336,6 +328,9 @@ public class MainActivity extends BaseActivity {
postAttentionVideoRecord();
deleteSimulatorGame();
+ // 检查是否需要触发 XAPK 安装
+ AppExecutor.getUiExecutor().executeWithDelay(this::resumeXapkInstallIfNeeded, 150);
+
QuickLoginHelper.getPhoneInfo(this);
WechatBindHelper.getWechatConfig(null);
initWBSDK();
@@ -1028,6 +1023,25 @@ public class MainActivity extends BaseActivity {
}
}
+ /**
+ * 重新触发 XAPK 安装流程
+ * 因为 Android 12 起授予应用安装未知应用权限以后不触发进程重启,导致应用一直无法读写 android/data 目录
+ * 所以这里再手动重启应用进程时再触发一回安装
+ */
+ private void resumeXapkInstallIfNeeded() {
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) {
+ String xapkUrl = SPUtils.getString(Constants.SP_XAPK_URL);
+ if (!TextUtils.isEmpty(xapkUrl)) {
+ DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntityByUrl(xapkUrl);
+ if (downloadEntity != null) {
+ PackageInstaller.install(this, downloadEntity, false);
+ }
+ }
+ SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
+ SPUtils.setString(Constants.SP_XAPK_URL, "");
+ }
+ }
+
@Override
protected boolean isAutoResetViewBackgroundEnabled() {
return true;
diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
index deca48a1c3..2724c82f87 100644
--- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
@@ -5,6 +5,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
@@ -177,8 +178,10 @@ public class SplashScreenActivity extends BaseActivity {
launchMainActivity();
}
- SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
- SPUtils.setString(Constants.SP_XAPK_URL, "");
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
+ SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
+ SPUtils.setString(Constants.SP_XAPK_URL, "");
+ }
}
private void showPrivacyDialog(ViewPager guideLayout) {
diff --git a/app/src/main/java/com/gh/gamecenter/WebActivity.kt b/app/src/main/java/com/gh/gamecenter/WebActivity.kt
index d95ed883e0..bbe324695f 100644
--- a/app/src/main/java/com/gh/gamecenter/WebActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/WebActivity.kt
@@ -34,9 +34,6 @@ open class WebActivity : ToolBarActivity() {
if (mIsFullScreen) {
setTheme(R.style.AppFullScreenTheme)
}
- if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
- requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
- }
super.onCreate(savedInstanceState)
if (mIsFullScreen) {
hideToolbar(true)
diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideListViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideListViewHolder.kt
index 0f78c192cd..f73d856488 100644
--- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideListViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideListViewHolder.kt
@@ -39,7 +39,7 @@ class GameHorizontalSlideListViewHolder(val binding: GameHorizontalListBinding)
binding.horizontalRv.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING)
binding.horizontalRv.isNestedScrollingEnabled = false
- if (subjectEntity.data?.first()?.test?.testTime != null && mLastScrolledPosition == 0) {
+ if (subjectEntity.data?.firstOrNull()?.test?.testTime != null && mLastScrolledPosition == 0) {
scrollToSpecificItemForTheFirstTime(subjectEntity)
}
} else {
@@ -49,7 +49,7 @@ class GameHorizontalSlideListViewHolder(val binding: GameHorizontalListBinding)
if (mLastScrolledPosition != adapterPosition) {
val offset = offsetable.getOffset(adapterPosition)
if (offset == 0) {
- if (subjectEntity.data?.first()?.test?.testTime != null && mLastScrolledPosition == 0) {
+ if (subjectEntity.data?.firstOrNull()?.test?.testTime != null && mLastScrolledPosition == 0) {
scrollToSpecificItemForTheFirstTime(subjectEntity)
} else {
binding.horizontalRv.scrollToPosition(0)
diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionAmwayViewHolder.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionAmwayViewHolder.kt
index bb603356fb..f581aed995 100644
--- a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionAmwayViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionAmwayViewHolder.kt
@@ -3,6 +3,9 @@ package com.gh.gamecenter.gamecollection.square
import android.animation.Animator
import android.animation.TimeInterpolator
import android.animation.ValueAnimator
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
import android.view.animation.AccelerateDecelerateInterpolator
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
@@ -13,20 +16,10 @@ import com.gh.gamecenter.entity.AmwayCommentEntity
import java.lang.ref.WeakReference
class GameCollectionAmwayViewHolder(var binding: GameCollectionSquareAmwayItemBinding) : RecyclerView.ViewHolder(binding.root) {
- val mAdapter = GameCollectionAmwayAdapter(binding.root.context)
- private val mLoopTask = object : Runnable {
- private val reference: WeakReference = WeakReference(binding.amwayVp)
- override fun run() {
- val vp: ViewPager2? = reference.get()
- if (vp != null) {
- val count = mAdapter.itemCount
- if (count == 0) return
- val next = vp.currentItem + 1
- vp.setCurrentItem(next, 1000)
- vp.postDelayed(this, AMWAY_LOOP_TIME)
- }
- }
- }
+
+ private val mAdapter = GameCollectionAmwayAdapter(binding.root.context)
+ private val mLooperHandle = LooperHandle(this)
+ private val mSlideLooperKey = 333
fun bindAmway(amwayList: List) {
mAdapter.setAmwayList(amwayList)
@@ -35,7 +28,7 @@ class GameCollectionAmwayViewHolder(var binding: GameCollectionSquareAmwayItemBi
isUserInputEnabled = false
adapter = mAdapter
orientation = ViewPager2.ORIENTATION_VERTICAL
- postDelayed(mLoopTask, AMWAY_LOOP_TIME)
+ startAutoPlay()
}
binding.root.setOnClickListener {
NewLogUtils.logClickGameCollectionAmway()
@@ -44,13 +37,20 @@ class GameCollectionAmwayViewHolder(var binding: GameCollectionSquareAmwayItemBi
}
}
- fun start() {
- stop()
- binding.amwayVp.postDelayed(mLoopTask, AMWAY_LOOP_TIME)
+ private fun scrollToNextPage() {
+ if (mAdapter.getRealCount() == 0) return
+ val next = binding.amwayVp.currentItem + 1
+ binding.amwayVp.setCurrentItem(next, 1000)
}
- fun stop() {
- binding.amwayVp.removeCallbacks(mLoopTask)
+ private fun startAutoPlay() {
+ if (mAdapter.getRealCount() <= 1) return
+ stopAutoPlay()
+ mLooperHandle.sendEmptyMessageDelayed(mSlideLooperKey, AMWAY_LOOP_TIME)
+ }
+
+ private fun stopAutoPlay() {
+ mLooperHandle.removeMessages(mSlideLooperKey)
}
fun ViewPager2.setCurrentItem(
@@ -83,4 +83,18 @@ class GameCollectionAmwayViewHolder(var binding: GameCollectionSquareAmwayItemBi
// 安利墙卡片轮播时间
const val AMWAY_LOOP_TIME = 5000L
}
+
+ class LooperHandle(viewHolder: GameCollectionAmwayViewHolder): Handler(
+ Looper.getMainLooper()) {
+ private val mWeakReference: WeakReference = WeakReference(viewHolder)
+
+ override fun handleMessage(msg: Message) {
+ super.handleMessage(msg)
+ val viewHolder = mWeakReference.get()
+ if (viewHolder != null && msg.what == viewHolder.mSlideLooperKey) {
+ viewHolder.scrollToNextPage()
+ viewHolder.startAutoPlay()
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt
index 2dab8bb5bf..7dd2d33016 100644
--- a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt
@@ -329,11 +329,12 @@ class HomeFragment : LazyFragment() {
override fun onNightModeChange() {
super.onNightModeChange()
- mBinding.gameList.setBackgroundColor(R.color.background_white.toColor(requireContext()))
- mBinding.gameList.recycledViewPool.clear()
- mListAdapter.notifyItemRangeChanged(0, mListAdapter.itemCount)
- if (isSupportVisible) {
- onScrollChanged()
+ if (::mBinding.isInitialized) {
+ mBinding.gameList.recycledViewPool.clear()
+ if (::mListAdapter.isInitialized) mListAdapter.notifyItemRangeChanged(0, mListAdapter.itemCount)
+ if (isSupportVisible) {
+ onScrollChanged()
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt
index 56868304cc..55c8a42d6e 100644
--- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt
+++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt
@@ -1,13 +1,17 @@
package com.halo.assistant.fragment
import android.annotation.SuppressLint
+import android.app.Application
import android.app.Dialog
+import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.View
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelProvider
import com.airbnb.lottie.LottieAnimationView
import com.gh.common.constant.Config
@@ -58,6 +62,8 @@ class SettingsFragment : ToolbarFragment() {
private var loadingDialog: Dialog? = null
private var mUsageStatus = false
+ private val mViewModel: SettingViewModel by lazy { viewModelProvider() }
+
override fun getLayoutId() = 0
override fun getInflatedLayout() = FragmentSettingBinding.inflate(layoutInflater).apply { mBinding = this }.root
@@ -101,13 +107,12 @@ class SettingsFragment : ToolbarFragment() {
//判断隐私政策是否有更新
mBinding.privacyPolicyItem.redDot.visibility = if (checkPrivacyIsSame()) View.GONE else View.VISIBLE
- runOnIoThread {
- val cacheSize = getCacheSize()
- runOnUiThread {
- mBinding.cacheItem.contentTv.text = cacheSize
- }
+ mViewModel.cacheSizeLiveData.observe(this) {
+ mBinding.cacheItem.contentTv.text = it
}
+ mViewModel.getCacheSize()
+
mBinding.personalRecommendItem.switchLottie.setSwitchAnimation(SPUtils.getBoolean(PERSONAL_RECOMMEND_SP_KEY, true))
checkSizeIndex = SPUtils.getInt(FONT_SIZE_SP_KEY, 1)
@@ -442,7 +447,7 @@ class SettingsFragment : ToolbarFragment() {
if (loadingDialog != null) {
loadingDialog!!.dismiss()
}
- mBinding.cacheItem.contentTv.text = getCacheSize()
+ mViewModel.getCacheSize()
Utils.toast(context, "缓存清除成功")
}
@@ -511,43 +516,50 @@ class SettingsFragment : ToolbarFragment() {
return currentMd5 == privacyMd5
}
- // 获取缓存大小
- private fun getCacheSize(): String {
- val ecDir = requireContext().externalCacheDir
- var cacheLength: Long = getFolderSize(requireContext().cacheDir)
- if (ecDir != null) {
- cacheLength += getFolderSize(ecDir)
- }
- return long2Size(cacheLength)
- }
+ class SettingViewModel(application: Application): AndroidViewModel(application) {
+ val cacheSizeLiveData = MutableLiveData()
- private fun getFolderSize(folder: File): Long {
- var size: Long = 0
- //忽略视频缓存
- if (folder.name == "video-cache" || folder.name == "exo") return size
- size += folder.length()
- if (folder.isDirectory) {
- val files = folder.listFiles()
- if (files == null || files.isEmpty()) return size
- for (file in files) {
- size += if (file.isDirectory) {
- getFolderSize(file)
- } else {
- file.length()
+ // 获取缓存大小
+ fun getCacheSize() {
+ runOnIoThread {
+ val ecDir = getApplication().externalCacheDir
+ var cacheLength: Long = getFolderSize(getApplication().cacheDir)
+ if (ecDir != null) {
+ cacheLength += getFolderSize(ecDir)
}
+ cacheSizeLiveData.postValue(long2Size(cacheLength))
}
}
- return size
- }
- private fun long2Size(length: Long): String {
- val m = length / 1024f / 1024f
- var str = m.toString()
- val index = str.lastIndexOf(".")
- if (index != -1 && str.length > index + 3) {
- str = str.substring(0, index + 3)
+ private fun long2Size(length: Long): String {
+ val m = length / 1024f / 1024f
+ var str = m.toString()
+ val index = str.lastIndexOf(".")
+ if (index != -1 && str.length > index + 3) {
+ str = str.substring(0, index + 3)
+ }
+ return str + "M"
}
- return str + "M"
+
+ private fun getFolderSize(folder: File): Long {
+ var size: Long = 0
+ //忽略视频缓存
+ if (folder.name == "video-cache" || folder.name == "exo") return size
+ size += folder.length()
+ if (folder.isDirectory) {
+ val files = folder.listFiles()
+ if (files == null || files.isEmpty()) return size
+ for (file in files) {
+ size += if (file.isDirectory) {
+ getFolderSize(file)
+ } else {
+ file.length()
+ }
+ }
+ }
+ return size
+ }
+
}
override fun onNightModeChange() {
diff --git a/app/src/main/res/values-v26/style.xml b/app/src/main/res/values-v26/style.xml
new file mode 100644
index 0000000000..2ef10712de
--- /dev/null
+++ b/app/src/main/res/values-v26/style.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
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 0c3de56deb..b49d3ea310 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
@@ -189,7 +189,9 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
super.onResume();
startPageTime = System.currentTimeMillis();
- if (!NightModeUtils.INSTANCE.getSystemMode() && mNightMode != NightModeUtils.INSTANCE.isNightMode(this)) {
+ if (BuildConfig.IS_NIGHT_MODE_ON
+ && !NightModeUtils.INSTANCE.getSystemMode()
+ && mNightMode != NightModeUtils.INSTANCE.isNightMode(this)) {
onNightModeChange();
}
}
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/BaseFragment.java b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/BaseFragment.java
index e2d42e9939..0b7c65be1c 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/BaseFragment.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/BaseFragment.java
@@ -244,7 +244,9 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB
isEverPause = false;
startPageTime = System.currentTimeMillis();
- if (!NightModeUtils.INSTANCE.getSystemMode() && mNightMode != NightModeUtils.INSTANCE.isNightMode(requireContext())) {
+ if (BuildConfig.IS_NIGHT_MODE_ON
+ && !NightModeUtils.INSTANCE.getSystemMode()
+ && mNightMode != NightModeUtils.INSTANCE.isNightMode(requireContext())) {
onNightModeChange();
}
}
@@ -332,7 +334,9 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB
// 为 fragment 附加 bundle (setArgument())
public BaseFragment with(Bundle bundle) {
- this.setArguments(bundle);
+ if (!isStateSaved()) {
+ this.setArguments(bundle);
+ }
return this;
}
@@ -352,7 +356,9 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- onNightModeChange();
+ if (BuildConfig.IS_NIGHT_MODE_ON) {
+ onNightModeChange();
+ }
}
protected void onNightModeChange() {