Commit 4da6ecce authored by wanglei's avatar wanglei

[拆包]替换ui

parent f4f6d9a6
......@@ -143,6 +143,9 @@ dependencies {
//第三方UI控件
implementation("io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.4")
implementation("com.github.angcyo.DslTablayout:TabLayout:3.7.1")
implementation("com.github.zhpanvip:viewpagerindicator:1.2.3")
//lottie
implementation("com.airbnb.android:lottie:6.4.0")
implementation("com.github.bumptech.glide:glide:4.16.0")
......
......@@ -13,7 +13,7 @@ class AdConfigBean(
var numClickLimit: Int = -1,//点击次数限制
var timeInterval: Int = 10,//广告间隔秒
var openAdLoading: Int = 15,//开屏广告拉取时间
var numNativeDisplayLimit: Int = 1,//原生展示次数限制
var numNativeDisplayLimit: Int = -1,//原生展示次数限制
var fullNativeShow: Boolean = true,//显示全屏原生
var functionBackShowAd: Boolean = true,//功能退出显示广告
......
package com.base.appzxhy.ui.clean
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.base.appzxhy.R
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.ads.NativeParentView
class CleanNativeFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_clean_native, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val flAd = view.findViewById<NativeParentView>(R.id.flAd)
AdsMgr.showNative(flAd, R.layout.layout_admob_native_custom) {
flAd.visibility = View.VISIBLE
}
}
}
\ No newline at end of file
package com.base.appzxhy.ui.clean
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.base.appzxhy.R
class CleanPageFragment : Fragment() {
var tvPath: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_clean_page, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
tvPath = view.findViewById<TextView>(R.id.tvPath)
}
}
\ No newline at end of file
......@@ -7,10 +7,14 @@ import android.view.View
import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import androidx.core.content.ContextCompat
import androidx.core.graphics.toColorInt
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.base.LottieEnum
......@@ -18,8 +22,7 @@ import com.base.appzxhy.base.cleanFileBeans
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
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
import com.base.appzxhy.databinding.ActivityJunkClean2Binding
import com.base.appzxhy.databinding.ItemJunkCleanChildBinding
import com.base.appzxhy.databinding.ItemJunkCleanGroupBinding
import com.base.appzxhy.ui.cleanresult.CleanResultActivity
......@@ -28,9 +31,12 @@ import com.base.appzxhy.utils.MediaUtils
import com.base.appzxhy.utils.MineTypeUtils
import com.base.appzxhy.utils.MyAnimationUtils
import com.base.appzxhy.utils.Utils
import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import pokercc.android.expandablerecyclerview.ExpandableAdapter
......@@ -38,13 +44,25 @@ import pokercc.android.expandablerecyclerview.ExpandableItemAnimator
import kotlin.random.Random
class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCleanBinding::inflate) {
class JunkCleanActivity : BaseActivity<ActivityJunkClean2Binding>(ActivityJunkClean2Binding::inflate) {
private var isStartAnimation = true
private var list = mutableListOf<FileBean>()
private var total: Long = 0
private var selectedFiles = listOf<FileBean>()
private val page1 by lazy { CleanPageFragment() }
private val page2 by lazy { CleanNativeFragment() }
private val viewPagerAdapter by lazy {
object : FragmentStateAdapter(this) {
override fun getItemCount(): Int = 2
override fun createFragment(position: Int): Fragment = if (position == 0) page1 else page2
}
}
private var currentPosition = 0
private val adapter by lazy {
class ChildViewHolder(val binding: ItemJunkCleanChildBinding) : ExpandableAdapter.ViewHolder(binding.root)
class GroupViewHolder(val binding: ItemJunkCleanGroupBinding) : ExpandableAdapter.ViewHolder(binding.root)
......@@ -159,16 +177,56 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
override fun initView() {
super.initView()
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
binding.expandableFiles.adapter = adapter
binding.expandableFiles.layoutManager = LinearLayoutManager(this)
binding.expandableFiles.itemAnimator = ExpandableItemAnimator(binding.expandableFiles)
initPage()
initData()
setFunctionTodayUsed(JUNK_CLEAN)
}
private fun initPage() {
binding.indicator.apply {
setSliderColor("#ffffff".toColorInt(), "#06D16C".toColorInt())
setSliderWidth(resources.getDimension(R.dimen.dp_6))
setSliderHeight(resources.getDimension(R.dimen.dp_6))
setSlideMode(IndicatorSlideMode.COLOR)
setIndicatorStyle(IndicatorStyle.CIRCLE)
setPageSize(2)
notifyDataChanged()
}
binding.viewPager2.adapter = viewPagerAdapter
binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
binding.indicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
}
override fun onPageSelected(position: Int) {
binding.indicator.onPageSelected(position)
currentPosition = position
}
})
lifecycleScope.launch(Dispatchers.IO) {
while (isActive) {
delay(3000)
launch(Dispatchers.Main) {
if (currentPosition == 0) {
binding.viewPager2.setCurrentItem(1, true)
} else {
binding.viewPager2.setCurrentItem(0, true)
}
}
}
}
}
override fun initListener() {
super.initListener()
......@@ -196,7 +254,7 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
@SuppressLint("NotifyDataSetChanged")
private fun initData() {
isBackDisable = true
binding.tvPath.text = ""
page1.tvPath?.text = ""
binding.tvClean.visibility = View.GONE
lifecycleScope.launch(Dispatchers.IO) {
val emptyFolders = async { FileUtils.findEmptyFolders() }.await()
......@@ -234,7 +292,7 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
val totalSize = list.sumOf { it.length }
val random = Random.nextLong(2500, 3000)
launch(Dispatchers.Main) {
MyAnimationUtils.progress(binding.pbProgress, 0, 100, random)
// MyAnimationUtils.progress(binding.pbProgress, 0, 100, random)
ValueAnimator.ofFloat(0f, totalSize.toFloat()).apply {
duration = random
interpolator = LinearInterpolator()
......@@ -245,9 +303,9 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
}.start()
}
for (data in list) {
if (binding.pbProgress.progress == 100) break
// if (binding.pbProgress.progress == 100) break
withContext(Dispatchers.Main) {
binding.tvPath.text = data.path
page1.tvPath?.text = data.path
}
}
delay(random)
......@@ -271,14 +329,14 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
isBackDisable = false
binding.expandableFiles.visibility = View.VISIBLE
binding.tvClean.visibility = View.VISIBLE
binding.tvPath.text = getString(R.string.clean_tips)
updateSelection()
page1.tvPath?.setText(R.string.scan_completed)
}
private fun setSize(size: Long) {
val values = Utils.getSizeArray(size)
binding.tvLength.text = values[0]
binding.tvUnit.text = values[1]
// binding.tvLength.text = values[0]
// binding.tvUnit.text = values[1]
}
}
\ No newline at end of file
......@@ -59,7 +59,7 @@ class CleanResultActivity : BaseActivity<ActivityCleanResultBinding>(ActivityCle
holder.binding.tvBtn.background = ContextCompat.getDrawable(this@CleanResultActivity, R.drawable.bg_btn_4)
} else {
holder.binding.tvBtn.background =
ContextCompat.getDrawable(this@CleanResultActivity, R.drawable.bg_74daff_0051ff_4)
ContextCompat.getDrawable(this@CleanResultActivity, R.drawable.bg_70eb91_4fe5b6)
}
holder.binding.tvBtn.setText(item.content)
holder.binding.tvBtn.setOnClickListener {
......
......@@ -44,49 +44,49 @@ class HomeFragment : BaseFragment<FragmentHome2Binding>(FragmentHome2Binding::in
R.string.clean_junk,
R.drawable.icon_clean_h,
).apply {
color=R.color.color_fffaf7
color = R.color.color_fffaf7
},
FeatureBean(
BATTERY_INFO,
R.string.battery_info,
R.drawable.icon_battery_h,
).apply {
color=R.color.color_fdfff5
color = R.color.color_fdfff5
},
FeatureBean(
SIMILAR_PHOTOS,
R.string.similar_photos,
R.drawable.icon_similar_h,
).apply {
color=R.color.color_fefaff
color = R.color.color_fefaff
},
FeatureBean(
UNINSTALL_APP,
R.string.uninstall_app,
R.drawable.icon_app_uninstall_h,
).apply {
color=R.color.color_fffafa
color = R.color.color_fffafa
},
FeatureBean(
PHOTO_COMPRESSION,
R.string.photo_compression,
R.drawable.icon_compression_h,
).apply {
color=R.color.color_f5fff9
color = R.color.color_f5fff9
},
FeatureBean(
SCREENSHOT_CLEAN,
R.string.screenshot_clean,
R.drawable.icon_screenshot_h,
).apply {
color=R.color.color_f7feff
color = R.color.color_f7feff
},
FeatureBean(
LARGE_FILE_CLEAN,
R.string.large_file_clean,
R.drawable.icon_large_file_h,
).apply {
color=R.color.color_fff7fe
color = R.color.color_fff7fe
},
)
}
......@@ -127,6 +127,9 @@ class HomeFragment : BaseFragment<FragmentHome2Binding>(FragmentHome2Binding::in
binding.flClean.setOnClickListener {
(requireActivity() as MainActivity).permissionStorageJump(JUNK_CLEAN)
}
binding.tvClean.setOnClickListener {
(requireActivity() as MainActivity).permissionStorageJump(JUNK_CLEAN)
}
adapter.itemClick = {
......
......@@ -109,7 +109,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
binding.tvPrivacy.text = spannableString
binding.tvPrivacy.movementMethod = LinkMovementMethod.getInstance()
binding.tvPrivacy.setLinkTextColor("#0456ED".toColorInt())
binding.tvPrivacy.setLinkTextColor("#F2FEF8".toColorInt())
// val spannableString2 = SpannableString("terms of service")
// spannableString2.setSpan(UnderlineSpan(), 0, spannableString2.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:endColor="#4FE5B6"
android:startColor="#70EB91" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F2F4F5" />
<corners
android:topLeftRadius="@dimen/dp_24"
android:topRightRadius="@dimen/dp_24" />
</shape>
\ No newline at end of file
<?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">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="@id/cl_top"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/bg_junk_clean" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_8"
android:padding="@dimen/dp_8"
android:src="@drawable/icon_return_w"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/dp_8"
android:text="@string/junk_clean"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/ivBack"
app:layout_constraintStart_toEndOf="@id/ivBack"
app:layout_constraintTop_toTopOf="@id/ivBack" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ivBack"
tools:layout_height="@dimen/dp_300" />
<com.zhpan.indicator.IndicatorView
android:id="@+id/indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:layout_marginBottom="@dimen/dp_38"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/viewPager2" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp__30"
android:background="@drawable/bg_f2f4f5_tlr24"
android:orientation="vertical"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@id/tv_clean"
app:layout_constraintTop_toBottomOf="@id/cl_top"
tools:ignore="SpeakableTextPresentCheck">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_24"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/clean_tips" />
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
android:id="@+id/expandable_files"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_12"
android:layout_weight="1"
android:background="@color/transparent"
android:overScrollMode="never"
android:scrollbars="none"
tools:ignore="SpeakableTextPresentCheck" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_clean"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginBottom="30dp"
android:background="@drawable/bg_btn_enable_50"
android:gravity="center"
android:paddingVertical="12dp"
android:text="@string/clean"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
tools:ignore="TextContrastCheck"
tools:layout_editor_absoluteX="30dp" />
<include
android:id="@+id/layout_animation"
layout="@layout/layout_animation"
android:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -27,7 +27,7 @@
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_8"
android:text="@string/app_name"
android:textColor="@color/black"
android:textSize="20sp"
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.clean.CleanNativeFragment">
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/img_guanggao"
tools:ignore="ImageContrastCheck" />
</com.base.appzxhy.business.ads.NativeParentView>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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.clean.CleanPageFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:ignore="UselessParent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/img_shuju" />
<TextView
android:id="@+id/tvPath"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:ellipsize="end"
android:gravity="center"
android:paddingHorizontal="@dimen/dp_8"
android:singleLine="true"
android:text="@string/scan_completed"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
android:textStyle="bold" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
......@@ -145,6 +145,7 @@
</FrameLayout>
<TextView
android:id="@+id/tvClean"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_marginHorizontal="@dimen/dp_80"
......
......@@ -27,7 +27,7 @@
android:layout_height="@dimen/dp_50"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_16"
android:src="@drawable/h_junkclean"
android:src="@mipmap/logo"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -25,8 +25,8 @@
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:text="@string/app_name"
android:textColor="@color/color_666666"
android:textSize="14sp"
android:textColor="#999999"
android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_length"
app:layout_constraintStart_toEndOf="@id/iv_icon"
......
......@@ -29,10 +29,10 @@
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginStart="@dimen/dp_12"
android:text="@string/app_name"
android:textColor="@color/color_1a1a1a"
android:textSize="16sp"
android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_icon"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -58,4 +58,8 @@
<dimen name="dp_220">220dp</dimen>
<dimen name="dp_39">39dp</dimen>
<dimen name="dp_62">62dp</dimen>
<dimen name="dp_375">375dp</dimen>
<dimen name="dp_350">350dp</dimen>
<dimen name="dp__30">-30dp</dimen>
<dimen name="dp__10">-10dp</dimen>
</resources>
\ No newline at end of file
......@@ -167,6 +167,9 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="exit_uninstall_app_content">Exit Uninstall App? Unused applications may occupy phone storage</string>
<string name="notify_uninstall_app">Uninstall unused applications save phone storage.</string>
<string name="quick_clean">Quick Clean</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="scan_completed">Scan Completed</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