Commit b19262a2 authored by wanglei's avatar wanglei

...

parent e831c041
package com.base.appzxhy
import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.toFormatTime4
import java.util.Locale
object SpConstObject {
......@@ -90,4 +91,6 @@ object SpConstObject {
AppPreferences.getInstance().put("fcmToken", value, true)
}
}
\ No newline at end of file
......@@ -62,6 +62,11 @@ abstract class BaseFragment<VB : ViewBinding>(
//要手动置null防止内存泄漏
_binding = null
}
override fun onStop() {
super.onStop()
fragmentInit = false
}
}
inline fun <VB : ViewBinding> BaseFragment<VB>.viewBind(block: VB.() -> Unit) {
......
package com.base.appzxhy.bean
import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.toFormatTime4
class FeatureBean(
val key: String = "",
val titleRes: Int = 0,
......@@ -8,6 +11,7 @@ class FeatureBean(
val color: Int = 0,
) {
var span: Int = 1
var todayUsed = false
companion object {
const val JUNK_CLEAN = "junk_clean"
......@@ -25,5 +29,20 @@ class FeatureBean(
const val ANTIVIRUS = "antivirus"
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
import com.base.appzxhy.base.LottieEnum
import com.base.appzxhy.base.cleanFileBeans
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.business.ads.AdsMgr
import com.base.appzxhy.databinding.ActivityJunkCleanBinding
......@@ -135,7 +137,6 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
setClean()
}
private fun setClean() {
binding.tvClean.text =
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
binding.expandableFiles.itemAnimator = ExpandableItemAnimator(binding.expandableFiles)
initData()
setFunctionTodayUsed(JUNK_CLEAN)
}
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
class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::inflate) {
private val page1: Guide2Fragment by lazy {
Guide2Fragment().apply { page = 0 }
private val page1: GuideFragment by lazy {
GuideFragment().apply { page = 0 }
}
private val page2: Guide2Fragment by lazy {
Guide2Fragment().apply { page = 1 }
private val page2: GuideFragment by lazy {
GuideFragment().apply { page = 1 }
}
private val pageNative: NativeFullFragment by lazy {
NativeFullFragment()
}
private val page3: Guide2Fragment by lazy {
Guide2Fragment().apply { page = 3 }
private val page3: GuideFragment by lazy {
GuideFragment().apply { page = 3 }
}
private val fragments: MutableList<Fragment> by lazy {
mutableListOf(page1, page2, page3)
......@@ -74,4 +74,6 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::i
finish()
}
}
override fun handleBackCallBack() {}
}
\ No newline at end of file
//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.FragmentGuideBinding
//import com.base.appzxhy.ui.main.MainActivity
//
//
//class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::inflate) {
// var page: Int = 1
//
//
// @SuppressLint("SetTextI18n")
// override fun initView() {
// super.initView()
// when (page) {
// 0 -> {
// binding.iv.setImageResource(R.drawable.chahua04)
// binding.ivDian.setImageResource(R.drawable.icon1)
// binding.tvContent.text = "Clean up clutter to unlock more space and\n" +
// "keep your phone running smoothly."
// }
//
// 1 -> {
// binding.iv.setImageResource(R.drawable.chahua03)
// binding.ivDian.setImageResource(R.drawable.icon2)
// binding.tvContent.text = "Quickly clear junk files and free up valuable\n" +
// "storage with just a few taps."
// }
//
// 3 -> {
// binding.iv.setImageResource(R.drawable.chahua01)
// binding.ivDian.setImageResource(R.drawable.icon4)
// binding.tvContent.text = "Clean photos,videos,and audio files to\n" +
// "save space and keep your phone tidy."
// 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)
// }
// }
//
//}
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.business.ads.AdsShowCallBack
import com.base.appzxhy.databinding.FragmentGuideBinding
import com.base.appzxhy.ui.main.MainActivity
class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::inflate) {
var page: Int = 1
@SuppressLint("SetTextI18n")
override fun initView() {
super.initView()
when (page) {
0 -> {
binding.iv.setImageResource(R.drawable.yindaoye1)
binding.ivDian.setImageResource(R.drawable.dian_1)
binding.tvTitle.text = getString(R.string.guide_title_1)
binding.tvContent.text = getString(R.string.guide_tip_1)
}
1 -> {
binding.iv.setImageResource(R.drawable.yingdaoye2)
binding.ivDian.setImageResource(R.drawable.dian_2)
binding.tvTitle.text = getString(R.string.guide_title_2)
binding.tvContent.text = getString(R.string.guide_tip_2)
}
3 -> {
binding.iv.setImageResource(R.drawable.yingdaoye3)
binding.ivDian.setImageResource(R.drawable.dian_3)
binding.tvTitle.text = getString(R.string.guide_title_3)
binding.tvContent.text = getString(R.string.guide_tip_3)
binding.tvBtn.text = getString(R.string.get_started)
}
}
}
override fun initListener() {
super.initListener()
binding.tvSkip.setOnClickListener {
AdsMgr.showInsert(requireActivity(), showCallBack = object : AdsShowCallBack() {
override fun next() {
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
......@@ -6,6 +6,9 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.appzxhy.R
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.utils.Utils.inflate
import com.chad.library.adapter4.BaseQuickAdapter
......@@ -16,15 +19,12 @@ class FeatureItemAdapter : BaseQuickAdapter<FeatureBean, FeatureItemAdapter.Koko
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?) {
item ?: return
val context = holder.itemView.context
if (item.todayUsed) {
val binding = ItemFeatureSpan1Binding.bind(holder.itemView)
binding.ivIcon.setImageResource(item.icon)
binding.tvName.text = context.getString(item.titleRes)
......@@ -33,10 +33,27 @@ class FeatureItemAdapter : BaseQuickAdapter<FeatureBean, FeatureItemAdapter.Koko
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 {
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
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.core.graphics.toColorInt
import androidx.lifecycle.lifecycleScope
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.base.goToAc
import com.base.appzxhy.base.jumpAction
import com.base.appzxhy.bean.FeatureBean
import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS
......@@ -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.SETTINGS
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.ui.dialog.permissionStorageJump
import com.base.appzxhy.ui.malware.MalwareCleanActivity
import com.base.appzxhy.ui.malware.MalwareDialog
import com.base.appzxhy.ui.set.SettingActivity
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) {
......@@ -33,6 +37,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
private val adapter = FeatureItemAdapter()
private val featureList by lazy {
listOf<FeatureBean>(
FeatureBean(
JUNK_CLEAN,
......@@ -99,8 +104,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
binding.flTop.setPadding(0, insets.top, 0, 0)
}
binding.rv.adapter = adapter
adapter.submitList(featureList)
startAnimation()
initData()
}
override fun initListener() {
......@@ -129,9 +135,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
}
ANTIVIRUS -> {
val dialog= MalwareDialog(requireActivity())
dialog.action={
val dialog = MalwareDialog(requireActivity())
dialog.action = {
(requireActivity() as MainActivity).permissionStorageJump(it.key)
}
dialog.showDialog()
......@@ -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
import com.base.appzxhy.BuildConfig
import com.base.appzxhy.base.LottieEnum
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.utils.LogEx
......@@ -193,6 +195,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM
@SuppressLint("NotifyDataSetChanged")
fun scanFinishData(dataList: MutableList<AppInfo>?) {
lifecycleScope.launch(Dispatchers.Default) {
val realList = mutableListOf<AppInfoBean>()
dataList?.forEach {
......@@ -313,6 +317,8 @@ class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityM
scanFinishData(null)
}
setFunctionTodayUsed(ANTIVIRUS)
}
override fun initListener() {
......
......@@ -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.databinding.ActivitySplashBinding
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.main.MainActivity
import com.base.appzxhy.utils.LogEx
......@@ -90,9 +89,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
Log.e(TAG, "Countdown jumpNext")
jumpNext()
}
// viewModel.onTick = { s, t ->
// Log.e(TAG, "onTick $s $t")
// }
viewModel.onTick = { s, t, p ->
Log.e(TAG, "onTick $s $t")
binding.progressBar.progress = p.toInt()
}
}
private fun setPrivacyPolicy() {
......
......@@ -6,6 +6,7 @@ import com.base.appzxhy.SpConstObject.ifAgreePrivacy
import com.base.appzxhy.bean.config.AdConfigBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
......@@ -19,7 +20,7 @@ class SplashViewModel : ViewModel() {
private val checkIntervalMs = 100L // 检查间隔(100毫秒)
var jumpNext: (() -> Unit)? = null
var onTick: ((sLong: Long, total: Long) -> Unit)? = null
var onTick: ((sLong: Long, total: Long, percent: Float) -> Unit)? = null
fun startCountdown() {
......@@ -34,14 +35,15 @@ class SplashViewModel : ViewModel() {
val remaining = totalTimeMs - elapsed
if (remaining <= 0) {
launch(Dispatchers.Main) {
onTick?.invoke(totalTimeMs, totalTimeMs)
async(Dispatchers.Main) {
onTick?.invoke(totalTimeMs, totalTimeMs, 100f)
}
break
} else {
launch(Dispatchers.Main) {
onTick?.invoke(elapsed, totalTimeMs)
}
async(Dispatchers.Main) {
val percent = elapsed * 100f / totalTimeMs
onTick?.invoke(elapsed, totalTimeMs, percent)
}.await()
}
delay(Random.nextLong(checkIntervalMs, checkIntervalMs + 100L))
......
......@@ -3,15 +3,17 @@
<!-- 背景 -->
<item android:id="@android:id/background">
<shape>
<solid android:color="#00B77D" /> <!-- 背景颜色 -->
<solid android:color="#F0FFFA" /> <!-- 背景颜色 -->
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
<!-- 进度条 -->
<item android:id="@android:id/progress">
<clip>
<scale android:scaleWidth="100%">
<shape>
<solid android:color="@color/white" /> <!-- 进度条颜色 -->
<solid android:color="#2DD29E" /> <!-- 进度条颜色 -->
<corners android:radius="@dimen/dp_10" />
</shape>
</clip>
</scale>
</item>
</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 @@
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_loading"
android:layout_width="wrap_content"
<!-- <com.airbnb.lottie.LottieAnimationView-->
<!-- android:id="@+id/lottie_loading"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginBottom="48dp"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:lottie_autoPlay="true"-->
<!-- app:lottie_fileName="loading.json"-->
<!-- app:lottie_loop="true" />-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:lottie_autoPlay="true"
app:lottie_fileName="loading.json"
app:lottie_loop="true" />
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_involve_ad"
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="56dp"
android:layout_marginBottom="@dimen/dp_20"
android:gravity="center"
android:text="@string/involve_ad"
android:textAlignment="center"
android:textColor="@color/color_8b8b8b"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent" />
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>
\ No newline at end of file
......@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
tools:context=".ui.guide.GuideFragment">
<TextView
android:id="@+id/tvSkip"
......@@ -20,69 +20,84 @@
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<ImageView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv"
android:layout_width="@dimen/dp_300"
android:layout_height="@dimen/dp_300"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3"
tools:ignore="ContentDescription"
tools:src="@drawable/chahua01" />
app:layout_constraintVertical_bias="0.2"
app:srcCompat="@drawable/yindaoye1" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_35"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/iv">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/one_tap_clean"
android:textColor="#111111"
android:textSize="@dimen/sp_24"
android:textStyle="bold" />
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="18dp"
android:layout_marginHorizontal="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center"
android:text="Clean up clutter to unlock more space and keep your phone running smoothly."
android:textColor="#000000"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv"
tools:ignore="HardcodedText" />
android:text="@string/guide_tip_1"
android:textColor="#111111"
android:textSize="@dimen/sp_16" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/ll">
<ImageView
android:id="@+id/ivDian"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_10"
android:layout_marginTop="25dp"
android:src="@drawable/icon1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvContent"
tools:ignore="ContentDescription" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivDian"
android:layout_width="@dimen/dp_88"
android:layout_height="@dimen/dp_15"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="@dimen/dp_16"
app:srcCompat="@drawable/dian_1" />
<TextView
android:id="@+id/tv_btn"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginHorizontal="80dp"
android:layout_marginTop="24dp"
android:layout_marginBottom="28dp"
android:background="@drawable/bg_splash_button"
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:text="Next"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivDian"
tools:ignore="HardcodedText,MissingConstraints" />
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
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">
......@@ -91,6 +106,7 @@
android:layout_height="wrap_content"
android:src="@drawable/zhanwei1"
tools:ignore="ImageContrastCheck,ImageContrastCheck" />
</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 @@
<dimen name="dp_500">500dp</dimen>
<dimen name="sp_24">24sp</dimen>
<dimen name="dp_1">1dp</dimen>
<dimen name="sp_22">22sp</dimen>
</resources>
\ No newline at end of file
......@@ -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="submit">SUBMIT</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_content">Exit Junk Clean? Uncleared junk files might be taking up space.</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
<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="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>
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