Commit b19262a2 authored by wanglei's avatar wanglei

...

parent e831c041
package com.base.appzxhy package com.base.appzxhy
import com.base.appzxhy.utils.AppPreferences import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.toFormatTime4
import java.util.Locale import java.util.Locale
object SpConstObject { object SpConstObject {
...@@ -90,4 +91,6 @@ object SpConstObject { ...@@ -90,4 +91,6 @@ object SpConstObject {
AppPreferences.getInstance().put("fcmToken", value, true) AppPreferences.getInstance().put("fcmToken", value, true)
} }
} }
\ No newline at end of file
...@@ -62,6 +62,11 @@ abstract class BaseFragment<VB : ViewBinding>( ...@@ -62,6 +62,11 @@ abstract class BaseFragment<VB : ViewBinding>(
//要手动置null防止内存泄漏 //要手动置null防止内存泄漏
_binding = null _binding = null
} }
override fun onStop() {
super.onStop()
fragmentInit = false
}
} }
inline fun <VB : ViewBinding> BaseFragment<VB>.viewBind(block: VB.() -> Unit) { inline fun <VB : ViewBinding> BaseFragment<VB>.viewBind(block: VB.() -> Unit) {
......
package com.base.appzxhy.bean package com.base.appzxhy.bean
import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.toFormatTime4
class FeatureBean( class FeatureBean(
val key: String = "", val key: String = "",
val titleRes: Int = 0, val titleRes: Int = 0,
...@@ -8,6 +11,7 @@ class FeatureBean( ...@@ -8,6 +11,7 @@ class FeatureBean(
val color: Int = 0, val color: Int = 0,
) { ) {
var span: Int = 1 var span: Int = 1
var todayUsed = false
companion object { companion object {
const val JUNK_CLEAN = "junk_clean" const val JUNK_CLEAN = "junk_clean"
...@@ -25,5 +29,20 @@ class FeatureBean( ...@@ -25,5 +29,20 @@ class FeatureBean(
const val ANTIVIRUS = "antivirus" const val ANTIVIRUS = "antivirus"
const val SETTINGS = "settings" const val SETTINGS = "settings"
/**
* 今天功能使用过否
*/
fun getFunctionTodayUsed(key: String): Boolean {
return AppPreferences.getInstance().getBoolean("${key}_${System.currentTimeMillis().toFormatTime4()}", false)
}
/**
* 设置今天功能使用过
*/
fun setFunctionTodayUsed(key: String, used: Boolean = true) {
return AppPreferences.getInstance().put("${key}_${System.currentTimeMillis().toFormatTime4()}", used)
}
} }
} }
\ No newline at end of file
...@@ -15,6 +15,8 @@ import com.base.appzxhy.base.BaseActivity ...@@ -15,6 +15,8 @@ import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.base.LottieEnum import com.base.appzxhy.base.LottieEnum
import com.base.appzxhy.base.cleanFileBeans import com.base.appzxhy.base.cleanFileBeans
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.getFunctionTodayUsed
import com.base.appzxhy.bean.FeatureBean.Companion.setFunctionTodayUsed
import com.base.appzxhy.bean.FileBean import com.base.appzxhy.bean.FileBean
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.ActivityJunkCleanBinding import com.base.appzxhy.databinding.ActivityJunkCleanBinding
...@@ -135,7 +137,6 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle ...@@ -135,7 +137,6 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
setClean() setClean()
} }
private fun setClean() { private fun setClean() {
binding.tvClean.text = binding.tvClean.text =
if (total > 0) "${getString(R.string.clean)} (${Utils.getSizeFormat(total)})" else getString(R.string.go_it) if (total > 0) "${getString(R.string.clean)} (${Utils.getSizeFormat(total)})" else getString(R.string.go_it)
...@@ -159,6 +160,8 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle ...@@ -159,6 +160,8 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
binding.expandableFiles.itemAnimator = ExpandableItemAnimator(binding.expandableFiles) binding.expandableFiles.itemAnimator = ExpandableItemAnimator(binding.expandableFiles)
initData() initData()
setFunctionTodayUsed(JUNK_CLEAN)
} }
override fun initListener() { override fun initListener() {
......
package com.base.appzxhy.ui.guide
import android.annotation.SuppressLint
import android.content.Intent
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentGuide2Binding
import com.base.appzxhy.ui.main.MainActivity
class Guide2Fragment : BaseFragment<FragmentGuide2Binding>(FragmentGuide2Binding::inflate) {
var page: Int = 1
@SuppressLint("SetTextI18n")
override fun initView() {
super.initView()
when (page) {
0 -> {
binding.iv.setImageResource(R.drawable.image_guide_1)
binding.ivDian.setImageResource(R.drawable.dian_1)
binding.tvContent.text = getString(R.string.guide_tip_1)
}
1 -> {
binding.iv.setImageResource(R.drawable.image_guide_2)
binding.ivDian.setImageResource(R.drawable.dian_2)
binding.tvContent.text = getString(R.string.guide_tip_2)
}
3 -> {
binding.iv.setImageResource(R.drawable.image_guide_3)
binding.ivDian.setImageResource(R.drawable.dian_3)
binding.tvContent.text = getString(R.string.guide_tip_3)
binding.tvBtn.text = "Start"
}
}
}
override fun initListener() {
super.initListener()
binding.tvSkip.setOnClickListener {
val activity = requireActivity() as GuideActivity?
activity?.startActivity(Intent(activity, MainActivity::class.java))
activity?.finish()
}
binding.tvBtn.setOnClickListener {
val activity = requireActivity() as GuideActivity?
activity ?: requireActivity()
activity?.next(page)
}
}
override fun onResume() {
super.onResume()
if (!binding.flAd.isAdShowed) {
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
}
}
}
\ No newline at end of file
...@@ -12,18 +12,18 @@ import com.base.appzxhy.ui.main.MainActivity ...@@ -12,18 +12,18 @@ import com.base.appzxhy.ui.main.MainActivity
class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::inflate) { class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::inflate) {
private val page1: Guide2Fragment by lazy { private val page1: GuideFragment by lazy {
Guide2Fragment().apply { page = 0 } GuideFragment().apply { page = 0 }
} }
private val page2: Guide2Fragment by lazy { private val page2: GuideFragment by lazy {
Guide2Fragment().apply { page = 1 } GuideFragment().apply { page = 1 }
} }
private val pageNative: NativeFullFragment by lazy { private val pageNative: NativeFullFragment by lazy {
NativeFullFragment() NativeFullFragment()
} }
private val page3: Guide2Fragment by lazy { private val page3: GuideFragment by lazy {
Guide2Fragment().apply { page = 3 } GuideFragment().apply { page = 3 }
} }
private val fragments: MutableList<Fragment> by lazy { private val fragments: MutableList<Fragment> by lazy {
mutableListOf(page1, page2, page3) mutableListOf(page1, page2, page3)
...@@ -74,4 +74,6 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::i ...@@ -74,4 +74,6 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::i
finish() finish()
} }
} }
override fun handleBackCallBack() {}
} }
\ No newline at end of file
//package com.base.appzxhy.ui.guide package com.base.appzxhy.ui.guide
//
//import android.annotation.SuppressLint import android.annotation.SuppressLint
//import android.content.Intent import android.content.Intent
//import com.base.appzxhy.R import com.base.appzxhy.R
//import com.base.appzxhy.base.BaseFragment import com.base.appzxhy.base.BaseFragment
//import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
//import com.base.appzxhy.databinding.FragmentGuideBinding import com.base.appzxhy.business.ads.AdsShowCallBack
//import com.base.appzxhy.ui.main.MainActivity import com.base.appzxhy.databinding.FragmentGuideBinding
// import com.base.appzxhy.ui.main.MainActivity
//
//class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::inflate) { class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::inflate) {
// var page: Int = 1 var page: Int = 1
//
//
// @SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
// override fun initView() { override fun initView() {
// super.initView() super.initView()
// when (page) {
// 0 -> { when (page) {
// binding.iv.setImageResource(R.drawable.chahua04) 0 -> {
// binding.ivDian.setImageResource(R.drawable.icon1) binding.iv.setImageResource(R.drawable.yindaoye1)
// binding.tvContent.text = "Clean up clutter to unlock more space and\n" + binding.ivDian.setImageResource(R.drawable.dian_1)
// "keep your phone running smoothly." binding.tvTitle.text = getString(R.string.guide_title_1)
// } binding.tvContent.text = getString(R.string.guide_tip_1)
// }
// 1 -> {
// binding.iv.setImageResource(R.drawable.chahua03) 1 -> {
// binding.ivDian.setImageResource(R.drawable.icon2) binding.iv.setImageResource(R.drawable.yingdaoye2)
// binding.tvContent.text = "Quickly clear junk files and free up valuable\n" + binding.ivDian.setImageResource(R.drawable.dian_2)
// "storage with just a few taps." binding.tvTitle.text = getString(R.string.guide_title_2)
// } binding.tvContent.text = getString(R.string.guide_tip_2)
// }
// 3 -> {
// binding.iv.setImageResource(R.drawable.chahua01) 3 -> {
// binding.ivDian.setImageResource(R.drawable.icon4) binding.iv.setImageResource(R.drawable.yingdaoye3)
// binding.tvContent.text = "Clean photos,videos,and audio files to\n" + binding.ivDian.setImageResource(R.drawable.dian_3)
// "save space and keep your phone tidy." binding.tvTitle.text = getString(R.string.guide_title_3)
// binding.tvBtn.text = "Start" binding.tvContent.text = getString(R.string.guide_tip_3)
// } binding.tvBtn.text = getString(R.string.get_started)
// } }
// }
// }
// }
// override fun initListener() {
// super.initListener() override fun initListener() {
// binding.tvSkip.setOnClickListener { super.initListener()
// val activity = requireActivity() as GuideActivity? binding.tvSkip.setOnClickListener {
// activity?.startActivity(Intent(activity, MainActivity::class.java))
// activity?.finish() AdsMgr.showInsert(requireActivity(), showCallBack = object : AdsShowCallBack() {
// } override fun next() {
// binding.tvBtn.setOnClickListener { val activity = requireActivity() as GuideActivity
// val activity = requireActivity() as GuideActivity? activity.startActivity(Intent(activity, MainActivity::class.java))
// activity ?: requireActivity() activity.finish()
// activity?.next(page) }
// } })
// }
// }
// override fun onResume() { binding.tvBtn.setOnClickListener {
// super.onResume() val activity = requireActivity() as GuideActivity?
// activity ?: requireActivity()
// if (!binding.flAd.isAdShowed) { activity?.next(page)
// AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom) }
// } }
// }
//
//} override fun onResume() {
super.onResume()
if (!binding.flAd.isAdShowed) {
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
}
}
}
\ No newline at end of file
...@@ -6,6 +6,9 @@ import android.view.ViewGroup ...@@ -6,6 +6,9 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.bean.FeatureBean import com.base.appzxhy.bean.FeatureBean
import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.databinding.ItemFeatureSpan12Binding
import com.base.appzxhy.databinding.ItemFeatureSpan1Binding import com.base.appzxhy.databinding.ItemFeatureSpan1Binding
import com.base.appzxhy.utils.Utils.inflate import com.base.appzxhy.utils.Utils.inflate
import com.chad.library.adapter4.BaseQuickAdapter import com.chad.library.adapter4.BaseQuickAdapter
...@@ -16,27 +19,41 @@ class FeatureItemAdapter : BaseQuickAdapter<FeatureBean, FeatureItemAdapter.Koko ...@@ -16,27 +19,41 @@ class FeatureItemAdapter : BaseQuickAdapter<FeatureBean, FeatureItemAdapter.Koko
var itemClick: ((bean: FeatureBean) -> Unit)? = null var itemClick: ((bean: FeatureBean) -> Unit)? = null
override fun getItemViewType(position: Int, list: List<FeatureBean>): Int {
val bean = list[position]
return bean.span
}
override fun onBindViewHolder(holder: Koko8888, position: Int, item: FeatureBean?) { override fun onBindViewHolder(holder: Koko8888, position: Int, item: FeatureBean?) {
item ?: return item ?: return
val context = holder.itemView.context val context = holder.itemView.context
val binding = ItemFeatureSpan1Binding.bind(holder.itemView) if (item.todayUsed) {
binding.ivIcon.setImageResource(item.icon) val binding = ItemFeatureSpan1Binding.bind(holder.itemView)
binding.tvName.text = context.getString(item.titleRes) binding.ivIcon.setImageResource(item.icon)
binding.tvContent.text = context.getString(item.content) binding.tvName.text = context.getString(item.titleRes)
binding.ll.setBackgroundColor(item.color) binding.tvContent.text = context.getString(item.content)
binding.root.setOnClickListener { binding.ll.setBackgroundColor(item.color)
itemClick?.invoke(item) binding.root.setOnClickListener {
itemClick?.invoke(item)
}
} else {
val binding = ItemFeatureSpan12Binding.bind(holder.itemView)
binding.ivIcon.setImageResource(item.icon)
binding.tvName.text = context.getString(item.titleRes)
binding.tvContent.text = context.getString(item.content)
binding.ll.setBackgroundColor(item.color)
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
} }
}
override fun getItemViewType(position: Int, list: List<FeatureBean>): Int {
val bean = list[position]
return if (!bean.todayUsed && (bean.key == JUNK_CLEAN || bean.key == ANTIVIRUS)) 0 else 1
} }
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): Koko8888 { override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): Koko8888 {
return Koko8888(R.layout.item_feature_span1.inflate(parent)) val layout = if (viewType == 0) R.layout.item_feature_span1_2 else R.layout.item_feature_span1
return Koko8888(layout.inflate(parent))
} }
} }
\ No newline at end of file
...@@ -3,12 +3,13 @@ package com.base.appzxhy.ui.main ...@@ -3,12 +3,13 @@ package com.base.appzxhy.ui.main
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.view.View import android.view.View
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import androidx.lifecycle.lifecycleScope
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.base.goToAc
import com.base.appzxhy.base.jumpAction import com.base.appzxhy.base.jumpAction
import com.base.appzxhy.bean.FeatureBean import com.base.appzxhy.bean.FeatureBean
import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS
...@@ -19,13 +20,16 @@ import com.base.appzxhy.bean.FeatureBean.Companion.PHOTO_COMPRESSION ...@@ -19,13 +20,16 @@ import com.base.appzxhy.bean.FeatureBean.Companion.PHOTO_COMPRESSION
import com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN import com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.SETTINGS import com.base.appzxhy.bean.FeatureBean.Companion.SETTINGS
import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.base.appzxhy.bean.FeatureBean.Companion.getFunctionTodayUsed
import com.base.appzxhy.databinding.FragmentHomeBinding import com.base.appzxhy.databinding.FragmentHomeBinding
import com.base.appzxhy.ui.dialog.permissionStorageJump import com.base.appzxhy.ui.dialog.permissionStorageJump
import com.base.appzxhy.ui.malware.MalwareCleanActivity
import com.base.appzxhy.ui.malware.MalwareDialog import com.base.appzxhy.ui.malware.MalwareDialog
import com.base.appzxhy.ui.set.SettingActivity import com.base.appzxhy.ui.set.SettingActivity
import com.base.appzxhy.utils.MyAnimationUtils import com.base.appzxhy.utils.MyAnimationUtils
import com.base.appzxhy.utils.Utils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) { class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) {
...@@ -33,6 +37,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -33,6 +37,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
private val adapter = FeatureItemAdapter() private val adapter = FeatureItemAdapter()
private val featureList by lazy { private val featureList by lazy {
listOf<FeatureBean>( listOf<FeatureBean>(
FeatureBean( FeatureBean(
JUNK_CLEAN, JUNK_CLEAN,
...@@ -99,8 +104,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -99,8 +104,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
binding.flTop.setPadding(0, insets.top, 0, 0) binding.flTop.setPadding(0, insets.top, 0, 0)
} }
binding.rv.adapter = adapter binding.rv.adapter = adapter
adapter.submitList(featureList)
startAnimation() startAnimation()
initData()
} }
override fun initListener() { override fun initListener() {
...@@ -129,9 +135,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -129,9 +135,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
ANTIVIRUS -> { ANTIVIRUS -> {
val dialog = MalwareDialog(requireActivity())
val dialog= MalwareDialog(requireActivity()) dialog.action = {
dialog.action={
(requireActivity() as MainActivity).permissionStorageJump(it.key) (requireActivity() as MainActivity).permissionStorageJump(it.key)
} }
dialog.showDialog() dialog.showDialog()
...@@ -172,4 +177,31 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -172,4 +177,31 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
} }
private fun initData() {
lifecycleScope.launch(Dispatchers.IO) {
val totalStorageSize = async { Utils.getTotalStorageSize() }.await()
val availableStorageSize = async { Utils.getAvailableStorageSize() }.await()
val usedStorageSize = totalStorageSize - availableStorageSize
val totalStorage = Utils.getSizeFormat(totalStorageSize)
val usedStorage = Utils.getSizeFormat(usedStorageSize)
val percent = (usedStorageSize * 100 / totalStorageSize).toInt()
launch(Dispatchers.Main) {
binding
}
}
}
override fun onResumeOneShoot() {
super.onResumeOneShoot()
changeListTodayUsed()
}
@SuppressLint("NotifyDataSetChanged")
fun changeListTodayUsed() {
featureList[0].todayUsed = getFunctionTodayUsed(JUNK_CLEAN)
featureList[1].todayUsed = getFunctionTodayUsed(ANTIVIRUS)
adapter.submitList(featureList)
}
} }
...@@ -32,6 +32,8 @@ import androidx.core.view.WindowInsetsCompat ...@@ -32,6 +32,8 @@ import androidx.core.view.WindowInsetsCompat
import com.base.appzxhy.BuildConfig import com.base.appzxhy.BuildConfig
import com.base.appzxhy.base.LottieEnum import com.base.appzxhy.base.LottieEnum
import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.setFunctionTodayUsed
import com.base.appzxhy.ui.cleanresult.CleanResultActivity import com.base.appzxhy.ui.cleanresult.CleanResultActivity
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
...@@ -193,6 +195,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM ...@@ -193,6 +195,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
fun scanFinishData(dataList: MutableList<AppInfo>?) { fun scanFinishData(dataList: MutableList<AppInfo>?) {
lifecycleScope.launch(Dispatchers.Default) { lifecycleScope.launch(Dispatchers.Default) {
val realList = mutableListOf<AppInfoBean>() val realList = mutableListOf<AppInfoBean>()
dataList?.forEach { dataList?.forEach {
...@@ -313,6 +317,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM ...@@ -313,6 +317,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM
scanFinishData(null) scanFinishData(null)
} }
setFunctionTodayUsed(ANTIVIRUS)
} }
override fun initListener() { override fun initListener() {
......
...@@ -35,7 +35,6 @@ import com.base.appzxhy.business.helper.NewComUtils.spConfig ...@@ -35,7 +35,6 @@ import com.base.appzxhy.business.helper.NewComUtils.spConfig
import com.base.appzxhy.business.service.StayJobService.Companion.startStayJobService import com.base.appzxhy.business.service.StayJobService.Companion.startStayJobService
import com.base.appzxhy.databinding.ActivitySplashBinding import com.base.appzxhy.databinding.ActivitySplashBinding
import com.base.appzxhy.ui.dialog.StoragePermissionDialog import com.base.appzxhy.ui.dialog.StoragePermissionDialog
import com.base.appzxhy.ui.guide.GuideCleanActivity
import com.base.appzxhy.ui.language.LanguageActivity import com.base.appzxhy.ui.language.LanguageActivity
import com.base.appzxhy.ui.main.MainActivity import com.base.appzxhy.ui.main.MainActivity
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
...@@ -90,9 +89,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding ...@@ -90,9 +89,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
Log.e(TAG, "Countdown jumpNext") Log.e(TAG, "Countdown jumpNext")
jumpNext() jumpNext()
} }
// viewModel.onTick = { s, t -> viewModel.onTick = { s, t, p ->
// Log.e(TAG, "onTick $s $t") Log.e(TAG, "onTick $s $t")
// } binding.progressBar.progress = p.toInt()
}
} }
private fun setPrivacyPolicy() { private fun setPrivacyPolicy() {
......
...@@ -6,6 +6,7 @@ import com.base.appzxhy.SpConstObject.ifAgreePrivacy ...@@ -6,6 +6,7 @@ import com.base.appzxhy.SpConstObject.ifAgreePrivacy
import com.base.appzxhy.bean.config.AdConfigBean import com.base.appzxhy.bean.config.AdConfigBean
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -19,7 +20,7 @@ class SplashViewModel : ViewModel() { ...@@ -19,7 +20,7 @@ class SplashViewModel : ViewModel() {
private val checkIntervalMs = 100L // 检查间隔(100毫秒) private val checkIntervalMs = 100L // 检查间隔(100毫秒)
var jumpNext: (() -> Unit)? = null var jumpNext: (() -> Unit)? = null
var onTick: ((sLong: Long, total: Long) -> Unit)? = null var onTick: ((sLong: Long, total: Long, percent: Float) -> Unit)? = null
fun startCountdown() { fun startCountdown() {
...@@ -34,14 +35,15 @@ class SplashViewModel : ViewModel() { ...@@ -34,14 +35,15 @@ class SplashViewModel : ViewModel() {
val remaining = totalTimeMs - elapsed val remaining = totalTimeMs - elapsed
if (remaining <= 0) { if (remaining <= 0) {
launch(Dispatchers.Main) { async(Dispatchers.Main) {
onTick?.invoke(totalTimeMs, totalTimeMs) onTick?.invoke(totalTimeMs, totalTimeMs, 100f)
} }
break break
} else { } else {
launch(Dispatchers.Main) { async(Dispatchers.Main) {
onTick?.invoke(elapsed, totalTimeMs) val percent = elapsed * 100f / totalTimeMs
} onTick?.invoke(elapsed, totalTimeMs, percent)
}.await()
} }
delay(Random.nextLong(checkIntervalMs, checkIntervalMs + 100L)) delay(Random.nextLong(checkIntervalMs, checkIntervalMs + 100L))
......
...@@ -3,15 +3,17 @@ ...@@ -3,15 +3,17 @@
<!-- 背景 --> <!-- 背景 -->
<item android:id="@android:id/background"> <item android:id="@android:id/background">
<shape> <shape>
<solid android:color="#00B77D" /> <!-- 背景颜色 --> <solid android:color="#F0FFFA" /> <!-- 背景颜色 -->
<corners android:radius="@dimen/dp_10" />
</shape> </shape>
</item> </item>
<!-- 进度条 --> <!-- 进度条 -->
<item android:id="@android:id/progress"> <item android:id="@android:id/progress">
<clip> <scale android:scaleWidth="100%">
<shape> <shape>
<solid android:color="@color/white" /> <!-- 进度条颜色 --> <solid android:color="#2DD29E" /> <!-- 进度条颜色 -->
<corners android:radius="@dimen/dp_10" />
</shape> </shape>
</clip> </scale>
</item> </item>
</layer-list> </layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 背景 -->
<item android:id="@android:id/background">
<shape>
<solid android:color="#00B77D" /> <!-- 背景颜色 -->
</shape>
</item>
<!-- 进度条 -->
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/white" /> <!-- 进度条颜色 -->
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
...@@ -164,29 +164,61 @@ ...@@ -164,29 +164,61 @@
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
<com.airbnb.lottie.LottieAnimationView <!-- <com.airbnb.lottie.LottieAnimationView-->
android:id="@+id/lottie_loading" <!-- android:id="@+id/lottie_loading"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginBottom="48dp" <!-- android:layout_marginBottom="48dp"-->
app:layout_constraintBottom_toBottomOf="parent" <!-- app:layout_constraintBottom_toBottomOf="parent"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toTopOf="parent" <!-- app:layout_constraintTop_toTopOf="parent"-->
app:lottie_autoPlay="true" <!-- app:lottie_autoPlay="true"-->
app:lottie_fileName="loading.json" <!-- app:lottie_fileName="loading.json"-->
app:lottie_loop="true" /> <!-- app:lottie_loop="true" />-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_involve_ad" <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="56dp" android:orientation="vertical"
android:text="@string/involve_ad" app:layout_constraintBottom_toBottomOf="parent"
android:textAlignment="center" app:layout_constraintTop_toTopOf="parent">
android:textColor="@color/color_8b8b8b"
android:textSize="14sp" <TextView
app:layout_constraintBottom_toBottomOf="parent" /> android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_20"
android:gravity="center"
android:text="@string/involve_ad"
android:textColor="@color/black"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_12"
android:layout_marginHorizontal="@dimen/dp_24"
android:layout_marginBottom="@dimen/dp_35"
android:max="100"
android:progressDrawable="@drawable/progress_drawable_home"
tools:progress="50" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_50"
android:gravity="center"
android:text="@string/loading"
android:textColor="@color/black"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#FFFFFF"> tools:context=".ui.guide.GuideFragment">
<TextView <TextView
android:id="@+id/tvSkip" android:id="@+id/tvSkip"
...@@ -20,69 +20,84 @@ ...@@ -20,69 +20,84 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
<ImageView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv" android:id="@+id/iv"
android:layout_width="@dimen/dp_300" android:layout_width="wrap_content"
android:layout_height="@dimen/dp_300" android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" app:layout_constraintVertical_bias="0.2"
tools:ignore="ContentDescription" app:srcCompat="@drawable/yindaoye1" />
tools:src="@drawable/chahua01" />
<TextView <LinearLayout
android:id="@+id/tvContent" android:id="@+id/ll"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp" android:layout_marginTop="@dimen/dp_35"
android:layout_marginTop="18dp"
android:gravity="center" android:gravity="center"
android:text="Clean up clutter to unlock more space and keep your phone running smoothly." android:orientation="vertical"
android:textColor="#000000" app:layout_constraintTop_toBottomOf="@id/iv">
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv"
tools:ignore="HardcodedText" />
<ImageView <TextView
android:id="@+id/ivDian" android:id="@+id/tvTitle"
android:layout_width="@dimen/dp_50" android:layout_width="wrap_content"
android:layout_height="@dimen/dp_10" android:layout_height="wrap_content"
android:layout_marginTop="25dp" android:text="@string/one_tap_clean"
android:src="@drawable/icon1" android:textColor="#111111"
app:layout_constraintEnd_toEndOf="parent" android:textSize="@dimen/sp_24"
app:layout_constraintStart_toStartOf="parent" android:textStyle="bold" />
app:layout_constraintTop_toBottomOf="@id/tvContent"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center"
android:text="@string/guide_tip_1"
android:textColor="#111111"
android:textSize="@dimen/sp_16" />
<TextView </LinearLayout>
android:id="@+id/tv_btn"
<FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_height="wrap_content"
android:layout_marginHorizontal="80dp" android:layout_marginTop="@dimen/dp_40"
android:layout_marginTop="24dp" app:layout_constraintTop_toBottomOf="@id/ll">
android:layout_marginBottom="28dp"
android:background="@drawable/bg_splash_button"
android:gravity="center" <androidx.appcompat.widget.AppCompatImageView
android:text="Next" android:id="@+id/ivDian"
android:textColor="@color/white" android:layout_width="@dimen/dp_88"
android:textSize="18sp" android:layout_height="@dimen/dp_15"
app:layout_constraintEnd_toEndOf="parent" android:layout_gravity="center_vertical|start"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="@dimen/dp_16"
app:layout_constraintTop_toBottomOf="@id/ivDian" app:srcCompat="@drawable/dian_1" />
tools:ignore="HardcodedText,MissingConstraints" />
<TextView
android:id="@+id/tvBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="@dimen/dp_16"
android:gravity="center"
android:padding="@dimen/dp_8"
android:text="@string/next"
android:textColor="#2DD29E"
android:textSize="@dimen/sp_22"
android:textStyle="bold" />
</FrameLayout>
<com.base.appzxhy.business.ads.NativeParentView <com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd" android:id="@+id/flAd"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#D9D9D9"
android:minHeight="75dp" android:minHeight="75dp"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
...@@ -91,6 +106,7 @@ ...@@ -91,6 +106,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/zhanwei1" android:src="@drawable/zhanwei1"
tools:ignore="ImageContrastCheck,ImageContrastCheck" /> tools:ignore="ImageContrastCheck,ImageContrastCheck" />
</com.base.appzxhy.business.ads.NativeParentView> </com.base.appzxhy.business.ads.NativeParentView>
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.guide.Guide2Fragment">
<TextView
android:id="@+id/tvSkip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginEnd="20dp"
android:text="Skip"
android:textColor="#B6B6B6"
android:textSize="16sp"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivDian"
android:layout_width="@dimen/dp_118"
android:layout_height="@dimen/dp_4"
android:layout_marginTop="@dimen/dp_60"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/dian_1" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_118"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivDian"
app:srcCompat="@drawable/image_guide_1" />
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_60"
android:gravity="center"
android:text="@string/guide_tip_1"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_16"
app:layout_constraintTop_toBottomOf="@id/iv" />
<TextView
android:id="@+id/tvBtn"
android:layout_width="@dimen/dp_300"
android:layout_height="@dimen/dp_55"
android:layout_marginBottom="@dimen/dp_40"
android:background="@drawable/bg_stroke_328ef6_50"
android:gravity="center"
android:text="@string/next"
android:textColor="#328EF6"
android:textSize="@dimen/sp_20"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/flAd"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#D9D9D9"
android:minHeight="75dp"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/zhanwei1"
tools:ignore="ImageContrastCheck,ImageContrastCheck" />
</com.base.appzxhy.business.ads.NativeParentView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_70"
android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginVertical="6dp"
app:cardCornerRadius="@dimen/dp_8"
app:cardElevation="0dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:srcCompat="@drawable/hongsebeijing" />
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_6"
app:cardCornerRadius="@dimen/dp_8">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:background="#FFF7F2">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivIcon"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_16" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#262626"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
tools:text="@string/clean_junk" />
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#999999"
android:textSize="@dimen/sp_14"
tools:text="Make your phone clean" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/icon_tanhao" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
app:srcCompat="@drawable/icon_jiantou" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</FrameLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
...@@ -54,4 +54,5 @@ ...@@ -54,4 +54,5 @@
<dimen name="dp_500">500dp</dimen> <dimen name="dp_500">500dp</dimen>
<dimen name="sp_24">24sp</dimen> <dimen name="sp_24">24sp</dimen>
<dimen name="dp_1">1dp</dimen> <dimen name="dp_1">1dp</dimen>
<dimen name="sp_22">22sp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -126,13 +126,26 @@ Please rest assured that we will handle your information in strict accordance wi ...@@ -126,13 +126,26 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="thank_you_very_much_for_taking_the_time_to_rate_us">Thank you very much for taking the time to rate us.</string> <string name="thank_you_very_much_for_taking_the_time_to_rate_us">Thank you very much for taking the time to rate us.</string>
<string name="submit">SUBMIT</string> <string name="submit">SUBMIT</string>
<string name="screenshot_cleaner">Screenshot Cleaner</string> <string name="screenshot_cleaner">Screenshot Cleaner</string>
<string name="guide_tip_1">Deleted precious photos or important files by accident? That’s when regret kicks in.</string>
<string name="guide_tip_2">Don’t let regret set in! Our app can accurately recover the files you’ve accidentally deleted.</string>
<string name="guide_tip_3">Release phone memory clean up junk files</string>
<string name="next">Next</string>
<string name="sure">Sure</string>
<string name="guide_title_1">One - Tap Clean</string>
<string name="guide_tip_1">
Banish junk, boost speed. Free up memory with a single tap.
</string>
<string name="guide_title_2">File Recovery</string>
<string name="guide_tip_2">
Don’t let regret set in! Our app can accurately recover the files you’ve accidentally deleted.
</string>
<string name="guide_title_3">Virus Shield</string>
<string name="guide_tip_3">
Powerful scan, total protection. Keep your phone safe.
we</string>
<string name="next">Next</string>
<string name="sure">Sure</string>
<string name="exit_junk_clean">Exit Junk Clean</string> <string name="exit_junk_clean">Exit Junk Clean</string>
<string name="exit_junk_clean_content">Exit Junk Clean? Uncleared junk files might be taking up space.</string> <string name="exit_junk_clean_content">Exit Junk Clean? Uncleared junk files might be taking up space.</string>
<string name="exit_battery_info">Exit Battery Info</string> <string name="exit_battery_info">Exit Battery Info</string>
...@@ -187,6 +200,9 @@ Please rest assured that we will handle your information in strict accordance wi ...@@ -187,6 +200,9 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="let_us_know_how_we_re_doing">Let us know how we\'re doing!</string> <string name="let_us_know_how_we_re_doing">Let us know how we\'re doing!</string>
<string name="w_e_are_ahways_irying_to_improve_what_wedo_and_your_feedbackk_is_invaluable">W\'e are ahways irying to improve what wedo and your feedbackk is invaluable!</string> <string name="w_e_are_ahways_irying_to_improve_what_wedo_and_your_feedbackk_is_invaluable">W\'e are ahways irying to improve what wedo and your feedbackk is invaluable!</string>
<string name="select_a_language">Select a language</string> <string name="select_a_language">Select a language</string>
<string name="one_tap_clean">One - Tap Clean</string>
<string name="get_started">Get Started</string>
<string name="loading">loading...</string>
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment