Commit 03e87af4 authored by wanglei's avatar wanglei

...

parent 5e0851cd
......@@ -43,7 +43,9 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
MainScope().launch(Dispatchers.IO) {
try {
listPath.forEach { NewFileUtils.delete(it) }
listPath.forEach {
runCatching { NewFileUtils.delete(it) }
}
MediaStoreUtils.updateMediaStore(this@CleaningActivity, listPath)
} catch (_: Exception) {
} finally {
......@@ -78,7 +80,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
binding.idTvJd.text = "${it.animatedValue as Int}"
}
doOnEnd {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity){
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity) {
startActivity(
Intent(this@CleaningActivity, ResultActivity::class.java).putExtra("from", JUNK_CLEANER)
.putExtra("clean_size", intentSize)
......
package com.base.datarecovery.adapter
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import androidx.core.view.isVisible
import com.base.datarecovery.R
import com.base.datarecovery.bean.ChildBean
import com.base.datarecovery.databinding.ItemChildBinding
import com.base.datarecovery.databinding.ItemParentBinding
import com.base.datarecovery.bean.ParentBean
import com.base.datarecovery.help.KotlinExt.toFormatSize
import com.base.datarecovery.utils.LogEx
import pokercc.android.expandablerecyclerview.ExpandableAdapter
class JunkExpandAdapter(private val chooseAction: (size: Long) -> Unit) : ExpandableAdapter<ExpandableAdapter.ViewHolder>() {
private val TAG = "JunkExpandAdapter"
private val parentBeanList by lazy {
mutableListOf(
ParentBean(
title = "Residual file",
isParentSelected = true,
expanded = false
),
ParentBean(
title = "Useless installation package",
isParentSelected = true,
expanded = false
),
ParentBean(
title = "Temp File",
isParentSelected = true,
expanded = false
),
ParentBean(
title = "Log File",
isParentSelected = true,
expanded = false
)
)
}
var animators = mutableMapOf<Int, ValueAnimator>()
inner class ChildViewHolder(val binding: ItemChildBinding) : ViewHolder(binding.root)
inner class ParentViewHolder(val binding: ItemParentBinding) : ViewHolder(binding.root)
override fun getChildCount(groupPosition: Int): Int {
return parentBeanList[groupPosition].childItem.size
}
override fun getGroupCount(): Int {
return parentBeanList.size
}
override fun onCreateChildViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val binding = ItemChildBinding.inflate(inflater, viewGroup, false)
return ChildViewHolder(binding)
}
override fun onCreateGroupViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val binding = ItemParentBinding.inflate(inflater, viewGroup, false)
return ParentViewHolder(binding)
}
@SuppressLint("NotifyDataSetChanged", "SetTextI18n")
override fun onBindGroupViewHolder(holder: ViewHolder, groupPosition: Int, expand: Boolean, payloads: List<Any>) {
val viewHolder = holder as? ParentViewHolder ?: return
val parentBean = parentBeanList[groupPosition]
viewHolder.binding.idTypeName.text = parentBean.title
parentBean.expanded = expand
if (parentBean.expanded) {
viewHolder.binding.idXiala.setImageResource(R.mipmap.zhankai)
} else {
viewHolder.binding.idXiala.setImageResource(R.mipmap.shouqi)
}
if (parentBean.title == "Residual file") {
viewHolder.binding.idTypeSize.text = parentBean.childItem.size.toString() + " items"
} else {
viewHolder.binding.idTypeSize.text = parentBean.parentSize.toFormatSize(1)
}
viewHolder.binding.idXiala.isVisible = true
viewHolder.binding.idImgChoose.isSelected = parentBean.isParentSelected
bindParentAnimation(parentBean, groupPosition, viewHolder)
if (parentBean.childItem.isEmpty()) {
viewHolder.binding.idImgChoose.setOnClickListener { }
} else {
viewHolder.binding.idImgChoose.setOnClickListener {
viewHolder.binding.idImgChoose.isSelected = !viewHolder.binding.idImgChoose.isSelected
parentBean.isParentSelected = viewHolder.binding.idImgChoose.isSelected
parentBean.childItem.forEach {
it.isChildSelected = parentBean.isParentSelected
}
notifyDataSetChanged()
chooseSizeChange()
}
}
}
override fun onGroupViewHolderExpandChange(holder: ViewHolder, groupPosition: Int, animDuration: Long, expand: Boolean) {}
private fun chooseSizeChange() {
val selectSize = parentBeanList.sumOf { it.childItem.filter { it.isChildSelected }.sumOf { it.childSize } }
chooseAction.invoke(selectSize)
}
fun getChoosePath(): List<ChildBean> {
return parentBeanList.flatMap { it.childItem }.filter { it.isChildSelected }
}
fun getAllChildItemCount(): Int {
return parentBeanList.flatMap { it.childItem }.size
}
private fun bindParentAnimation(parentBean: ParentBean, groupPosition: Int, viewHolder: ParentViewHolder) {
if (parentBean.isfinish) {
viewHolder.binding.idImgLoad.isVisible = false
viewHolder.binding.idImgChoose.isVisible = true
animators[groupPosition]?.cancel()
} else {
LogEx.logDebug(TAG, "play parent ValueAnimator")
animators[groupPosition] ?: ValueAnimator.ofFloat(0f, 360f).apply {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
viewHolder.binding.idImgLoad.rotation = it.animatedValue as Float
}
start()
animators[groupPosition] = this
}
viewHolder.binding.idImgLoad.isVisible = true
viewHolder.binding.idImgChoose.isVisible = false
}
}
@SuppressLint("NotifyDataSetChanged")
override fun onBindChildViewHolder(holder: ViewHolder, groupPosition: Int, childPosition: Int, payloads: List<Any>) {
val viewHolder = holder as? ChildViewHolder ?: return
val childBean = parentBeanList[groupPosition].childItem[childPosition]
val parentBean = parentBeanList[groupPosition]
val context = holder.itemView.context
viewHolder.binding.idTvAppName.text = childBean.childname
viewHolder.binding.idImgSelect.isSelected = childBean.isChildSelected
viewHolder.binding.idTvSize.text = childBean.childSize.toFormatSize()
when (groupPosition) {
0 -> {
holder.binding.idImgIcon.setImageResource(R.mipmap.kongwenjian)
viewHolder.binding.idTvAppName.text = childBean.chilepath
}
1 -> {
try {
val apkFilePath = childBean.chilepath // 替换成您的APK文件路径
val packageInfo =
context.packageManager.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES)
if (packageInfo != null) {
val applicationInfo = packageInfo.applicationInfo
val appIcon: Drawable = context.packageManager.getApplicationIcon(applicationInfo)
viewHolder.binding.idImgIcon.setImageDrawable(appIcon)
} else {
holder.binding.idImgIcon.setImageResource(R.mipmap.apk)
}
} catch (e: Exception) {
holder.binding.idImgIcon.setImageResource(R.mipmap.apk)
}
}
2 -> {
holder.binding.idImgIcon.setImageResource(R.mipmap.temp_clean)
}
3 -> {
holder.binding.idImgIcon.setImageResource(R.mipmap.log_clean)
}
}
viewHolder.itemView.setOnClickListener {
viewHolder.binding.idImgSelect.isSelected = !viewHolder.binding.idImgSelect.isSelected
childBean.isChildSelected = viewHolder.binding.idImgSelect.isSelected
parentBean.isParentSelected = parentBean.childItem.all { it.isChildSelected }
notifyDataSetChanged()
chooseSizeChange()
}
}
@SuppressLint("NotifyDataSetChanged")
fun addChildData(position: Int, childBeanList: List<ChildBean>) {
val parentBean = parentBeanList[position]
parentBean.isfinish = true
parentBean.isParentSelected = true
parentBean.childItem.addAll(childBeanList)
parentBean.parentSize = childBeanList.sumOf { it.childSize }
LogEx.logDebug(TAG, "addChildData parentBean=$parentBean")
notifyDataSetChanged()
chooseSizeChange()
}
}
\ No newline at end of file
......@@ -2,8 +2,8 @@ package com.base.datarecovery.bean
data class ParentBean(
val title: String,
val childItem: List<ChildBean>,
var parentSize: Long,
val childItem: ArrayList<ChildBean> = arrayListOf(),
var parentSize: Long = 0,
var isParentSelected: Boolean,
var expanded: Boolean = true,
var isfinish: Boolean = false
......@@ -12,9 +12,9 @@ data class ParentBean(
data class ChildBean(
val image: Int? = null,
val childname: String,
val chilepath: String="",
val chilepath: String = "",
val childSize: Long = 0L,
var isChildSelected: Boolean = true,
var pathList: List<String>? = null,
var packageName:String?=""
var packageName: String? = ""
)
\ No newline at end of file
......@@ -11,15 +11,8 @@ import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity
import com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity
import com.base.datarecovery.activity.recovery.FileScanResultActivity
import com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.FragmentHomeBinding
import com.base.datarecovery.help.BaseFragment
......
......@@ -115,4 +115,32 @@ object FileHelp {
return result
}
fun getFileFolder(file: File): List<File> {
val set = HashSet<File>()
//添加第一层文件到链表
val linkList = LinkedList<File>()
val fileList = file.listFiles()
fileList?.forEach {
if (it.isDirectory) {
linkList.add(it)
set.add(it)
}
}
//链表取文件
var tempFile: File
while (!linkList.isEmpty()) {
tempFile = linkList.removeFirst()
val tempFileList = tempFile.listFiles()
tempFileList?.forEach {
if (it.isDirectory) {
linkList.add(it)
set.add(it)
}
}
}
return set.toList()
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="22dp"/>
<solid android:color="#EEEEEE"/>
</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="#FF852C" />
<corners android:radius="22dp" />
</shape>
\ No newline at end of file
......@@ -17,27 +17,33 @@
<View
android:layout_width="match_parent"
android:layout_height="40dp" />
android:layout_height="50dp" />
<RelativeLayout
android:id="@+id/id_top_rl"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_junks_back"
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="20dp"
android:src="@mipmap/fanhui" />
android:src="@mipmap/fanhui"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/id_tv_title_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:gravity="center"
android:text="Clean Junk"
android:textColor="@color/white"
......@@ -45,50 +51,70 @@
android:textStyle="bold"
tools:ignore="HardcodedText" />
</RelativeLayout>
</FrameLayout>
<androidx.appcompat.widget.LinearLayoutCompat
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:orientation="vertical"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="40dp"
android:layout_marginBottom="10dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/id_ke_cl"
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginEnd="7dp"
android:includeFontPadding="false"
android:text="0"
android:textColor="@color/white"
android:textSize="43sp"
android:textSize="45sp"
android:textStyle="bold"
tools:text="0" />
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/id_size_unit"
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginTop="10dp"
android:layout_marginTop="8dp"
android:includeFontPadding="false"
android:text="KB"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="KB" />
</androidx.appcompat.widget.LinearLayoutCompat>
tools:ignore="HardcodedText" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="45dp"
android:layout_marginBottom="35dp"
android:text="Cleanable"
android:textColor="@color/white"
android:textSize="14sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
......@@ -104,14 +130,20 @@
android:orientation="vertical">
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
android:id="@+id/id_ex_rl"
android:id="@+id/ex_rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="visible" />
android:visibility="visible"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/id_cl_btn"
android:id="@+id/tv_btn"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginHorizontal="40dp"
......@@ -126,6 +158,45 @@
android:visibility="gone"
tools:ignore="HardcodedText" />
<LinearLayout
android:id="@+id/ll_two_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginVertical="20dp"
android:visibility="gone">
<TextView
android:id="@+id/tv_got_it_2"
android:layout_width="165dp"
android:layout_height="45dp"
android:background="@drawable/bg_eeeeee_22"
android:gravity="center"
android:text="Got it"
android:textColor="@color/black"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_deep_scan"
android:layout_width="165dp"
android:layout_height="45dp"
android:layout_marginStart="20dp"
android:background="@drawable/bg_577dfd_22"
android:gravity="center"
android:text="Deep Scan"
android:textColor="@color/white"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</FrameLayout>
......
......@@ -32,7 +32,7 @@
android:gravity="center"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingBottom="15dp"
android:paddingBottom="10dp"
tools:ignore="UseCompoundDrawables">
<ImageView
......@@ -45,7 +45,7 @@
<TextView
android:id="@+id/tv_1"
android:layout_width="100dp"
android:layout_height="20dp"
android:layout_height="16dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Clean"
......@@ -63,7 +63,7 @@
android:gravity="center"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingBottom="15dp"
android:paddingBottom="10dp"
tools:ignore="UseCompoundDrawables">
<ImageView
......@@ -76,7 +76,7 @@
<TextView
android:id="@+id/tv_2"
android:layout_width="100dp"
android:layout_height="20dp"
android:layout_height="16dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Recovery"
......
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context=".fragment.RecoveryFragment">
......@@ -88,13 +88,104 @@
<androidx.cardview.widget.CardView
android:id="@+id/card_ry_document"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
app:cardBackgroundColor="#F8F8F8"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:src="@mipmap/recovery"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:text="Recovery\nDocuments"
android:textColor="@color/black"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/card_privacy_space"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:clickable="true"
android:focusable="true"
app:cardBackgroundColor="#F8F8F8"
app:cardCornerRadius="10dp"
app:cardElevation="0dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:src="@mipmap/space"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:text="Privacy\nSpace"
android:textColor="@color/black"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_marginHorizontal="8dp"
android:layout_weight="1">
android:layout_weight="1"
app:cardBackgroundColor="#F8F8F8"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<LinearLayout
......@@ -127,7 +218,6 @@
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/card_privacy_space"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_marginHorizontal="8dp"
......
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