Commit 66bd05ac authored by wanglei's avatar wanglei

..

parent 1f32d34b
......@@ -2,7 +2,6 @@ package com.base.scanqrclear.luma
import android.app.Activity
import android.content.Context
import android.content.Intent
import com.base.scanqrclear.luma.AdmobHelps.ID_CLEAN_JUNK
import com.base.scanqrclear.luma.AdmobHelps.ID_LARGE_FILE_CLEANER
import com.base.scanqrclear.luma.AdmobHelps.ID_PHOTO_COMPRESSION
......@@ -22,9 +21,9 @@ object ActivityJumpHelps {
when(nameId) {
// R.string.junk_scan -> requestPermission(context, launcher) { CleanJunkActivity.start(context) }
// R.string.battery_info -> BatteryInfoActivity.start(context)
// R.string.app_process -> AppProcessActivity.start(context)
// R.string.app_process -> com.base.scanqrclear.luma.AppProcessActivity.start(context)
// R.string.whatsapp_clean -> requestPermission(context, launcher) { com.base.scanqrclear.luma.WhatsappCleanActivity.start(context) }
// R.string.screenshot_clean -> requestPermission(context, launcher) { ScreenshotCleanActivity.start(context) }
// R.string.screenshot_clean -> requestPermission(context, launcher) { com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context) }
// R.string.app_manager -> AppManagerActivity.start(context)
// R.string.large_files -> requestPermission(context, launcher) { LargeFileCleanActivity.start(context) }
// R.string.image_compressor -> requestPermission(context, launcher) { PhotoCompressionActivity.start(context) }
......@@ -42,7 +41,7 @@ object ActivityJumpHelps {
// ID_WHATSAPP -> requestPermission(context, launcher) { com.base.scanqrclear.luma.WhatsappCleanActivity.start(context) }
// ID_LARGE_FILE_CLEANER -> requestPermission(context, launcher) { LargeFileCleanActivity.start(context) }
// ID_PHOTO_COMPRESSION -> requestPermission(context, launcher) { PhotoCompressionActivity.start(context) }
// ID_SCREENSHOT_CLEAN -> requestPermission(context, launcher) { ScreenshotCleanActivity.start(context) }
// ID_SCREENSHOT_CLEAN -> requestPermission(context, launcher) { com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context) }
}
}
......@@ -63,7 +62,7 @@ object ActivityJumpHelps {
// ID_BATTERY_INFO -> BatteryInfoActivity.start(context)
// ID_LARGE_FILE_CLEANER -> LargeFileCleanActivity.start(context)
// ID_PHOTO_COMPRESSION -> PhotoCompressionActivity.start(context)
// ID_SCREENSHOT_CLEAN -> ScreenshotCleanActivity.start(context)
// ID_SCREENSHOT_CLEAN -> com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context)
// ID_APP_INSTALL -> AppManagerActivity.start(context)
// ID_APP_UNINSTALL -> AppManagerActivity.start(context)
// ID_NOT_CLEANED -> CleanJunkActivity.start(context)
......
package com.tool.luma.smart.cleaner.ui.app.process
package com.base.scanqrclear.luma
import android.content.Context
import android.content.Intent
......@@ -15,13 +15,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.ActivityAppProcessBinding
import com.base.scanqrclear.luma.AppHelps
import com.base.scanqrclear.luma.AppInfoBean
import com.base.scanqrclear.luma.AppProcessAdapter
import com.base.scanqrclear.luma.BaseActivity2
import com.base.scanqrclear.luma.BaseAdapter
import com.base.scanqrclear.luma.LottieType
import com.base.scanqrclear.luma.Utils
import com.base.scanqrclear.utils.AnimationHelps
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
......
......@@ -227,7 +227,7 @@ open class BaseActivity2 : AppCompatActivity() {
// is BatteryInfoActivity -> exit(ExitType.BATTERY_INFO)
// is CleanJunkActivity -> exit(ExitType.CLEAN)
// is LargeFileCleanActivity -> exit(ExitType.LARGE_FILE)
// is ScreenshotCleanActivity -> exit(ExitType.SCREENSHOT)
// is com.base.scanqrclear.luma.ScreenshotCleanActivity -> exit(ExitType.SCREENSHOT)
// is SimilarPhotosActivity -> exit(ExitType.SIMILAR_PHOTOS)
// is com.base.scanqrclear.luma.WhatsappCleanActivity -> exit(ExitType.WHATSAPP)
// is PhotoCompressionActivity -> exit(ExitType.PHOTO_COMPRESSION)
......
package com.base.scanqrclear.luma
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.ActivityScreenshotCleanBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import pokercc.android.expandablerecyclerview.ExpandableAdapter
class ScreenshotCleanActivity : BaseActivity2() {
companion object {
fun start(context: Context) {
val intent = Intent(context, ScreenshotCleanActivity::class.java)
context.startActivity(intent)
}
}
private val binding by lazy {
ActivityScreenshotCleanBinding.inflate(layoutInflater)
}
private lateinit var adapter: ScreenshotCleanAdapter
private var total: Long = 0
private var isSelectAll = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
initView()
initData()
showAnimationAd(LottieType.SCREENSHOT)
}
private fun initView() {
adapter = ScreenshotCleanAdapter()
adapter.selectionData.observe(this) { list ->
isSelectAll = list.stream().allMatch(FileBean::isSelected)
val selectionList = list.filter { it.isSelected }
total = selectionList.sumOf { it.length }
updateView(selectionList.isNotEmpty())
}
binding.expandableFiles.adapter = adapter
val gridLayoutManager = GridLayoutManager(this, 3)
gridLayoutManager.spanSizeLookup = MediaImageSpanLookup(3, adapter)
binding.expandableFiles.layoutManager = gridLayoutManager
binding.flBack.setOnClickListener { backPressed() }
binding.llSelectAll.setOnClickListener {
isSelectAll = !isSelectAll
adapter.child.flatten().forEach { it.isSelected = isSelectAll }
adapter.setData(adapter.group, adapter.child)
total = adapter.child.flatten().filter { it.isSelected }.sumOf { it.length }
updateView(isSelectAll)
}
binding.tvDelete.setOnClickListener {
if (total <= 0) return@setOnClickListener
DialogHelps.showDeleteDialog(this, binding.tvDelete) {
showAnimationAd {
toCleanResult(total, getString(R.string.screenshot_clean))
}
cleanFiles(adapter.child.flatten())
}
}
}
private fun initData() {
lifecycleScope.launch(Dispatchers.IO) {
val screenFiles = MediaHelps.findScreenshotsFiles(this@ScreenshotCleanActivity)
val total = screenFiles.values.toList().flatten().sumOf { it.length }
val value = Utils.getSizeArray(total)
withContext(Dispatchers.Main) {
binding.tvSize.text = value[0]
binding.tvUnit.text = value[1]
adapter.setData(screenFiles.keys.toList(), screenFiles.values.toList())
adapter.expandAllGroup()
binding.ivEmpty.visibility = if (screenFiles.isEmpty()) View.VISIBLE else View.GONE
binding.llBottom.visibility = if (screenFiles.isEmpty()) View.GONE else View.VISIBLE
}
}
}
private fun updateView(isSelection: Boolean) {
binding.ivSelectAll.setImageResource(if (isSelectAll) R.mipmap.icon_yuan_junk_s else R.mipmap.icon_all_photo_off)
binding.tvDelete.setBackgroundResource(if (isSelection) R.drawable.gradient_4 else R.drawable.gradient_not_clickable_4)
val delete = getString(R.string.delete)
val text = if (total > 0) "${delete} (${Utils.getSize(total)})" else delete
binding.tvDelete.text = text
}
}
internal class MediaImageSpanLookup(
private val spanCount: Int,
private val expandableAdapter: ExpandableAdapter<*>
) :
GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
val viewType = expandableAdapter.getItemViewType(position)
return if (expandableAdapter.isGroup(viewType)) spanCount else 1
}
}
\ No newline at end of file
package com.base.scanqrclear.luma
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.ItemChildScreenshotCleanBinding
import com.base.scanqrclear.databinding.ItemGroupScreenshotCleanBinding
import com.base.scanqrclear.luma.AppHelps.dpToPx
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions
import pokercc.android.expandablerecyclerview.ExpandableAdapter
class ScreenshotCleanAdapter(
var group: List<String>,
var child: List<List<FileBean>>
) : ExpandableAdapter<ExpandableAdapter.ViewHolder>() {
constructor() : this(emptyList(), emptyList())
private val _selectionData = MutableLiveData<List<FileBean>>()
val selectionData: LiveData<List<FileBean>> = _selectionData
fun setData(group: List<String>, child: List<List<FileBean>>) {
this.group = group
this.child = child
notifyDataSetChanged()
}
override fun getChildCount(groupPosition: Int): Int {
if (child.isEmpty() || child.size <= groupPosition) {
return 0
}
return child[groupPosition].size
}
override fun getGroupCount(): Int {
return group.size
}
override fun onCreateChildViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val view = ItemChildScreenshotCleanBinding.inflate(inflater, viewGroup, false)
return ChildViewHolder(view)
}
override fun onCreateGroupViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val view = ItemGroupScreenshotCleanBinding.inflate(inflater, viewGroup, false)
return GroupViewHolder(view)
}
override fun onGroupViewHolderExpandChange(
holder: ViewHolder,
groupPosition: Int,
animDuration: Long,
expand: Boolean
) {
}
override fun onBindGroupViewHolder(
holder: ViewHolder,
groupPosition: Int,
expand: Boolean,
payloads: List<Any>
) {
holder as GroupViewHolder
holder.binding.tvName.text = group[groupPosition]
holder.binding.viewBg.visibility = if (groupPosition == 0) View.GONE else View.VISIBLE
holder.itemView.setOnClickListener { }
}
override fun onBindChildViewHolder(
holder: ViewHolder,
groupPosition: Int,
childPosition: Int,
payloads: List<Any>
) {
holder as ChildViewHolder
val data = child[groupPosition][childPosition]
val width = holder.itemView.context.resources.displayMetrics.widthPixels
var margin = holder.itemView.context.dpToPx(44).toInt()
val imageWidth = (width - margin) / 3
holder.binding.ivImage.layoutParams.width = imageWidth
holder.binding.ivImage.layoutParams.height = imageWidth
margin = holder.itemView.context.dpToPx(15).toInt()
if (childPosition % 3 == 0) {
holder.itemView.setPadding(margin, 0, 0, 0)
} else if (childPosition % 3 == 2) {
holder.itemView.setPadding(0, 0, margin, 0)
} else {
holder.itemView.setPadding(margin / 2, 0, margin / 2, 0)
}
val round = holder.itemView.context.dpToPx(8).toInt()
val options = RequestOptions().transform(CenterCrop(), RoundedCorners(round))
Glide.with(holder.itemView.context)
.load(data.path)
.apply(options)
.into(holder.binding.ivImage)
holder.binding.tvSize.text = Utils.getSize(data.length)
holder.binding.ivSelect.setImageResource(if (data.isSelected) R.mipmap.icon_yuan_junk_s else R.mipmap.icon_yuan_n)
holder.binding.clContainer.setOnClickListener {
data.isSelected = !data.isSelected
holder.binding.ivSelect.setImageResource(if (data.isSelected) R.mipmap.icon_yuan_junk_s else R.mipmap.icon_yuan_n)
_selectionData.value = child.flatten()
}
}
}
private class ChildViewHolder(val binding: ItemChildScreenshotCleanBinding) :
ExpandableAdapter.ViewHolder(binding.root)
private class GroupViewHolder(val binding: ItemGroupScreenshotCleanBinding) :
ExpandableAdapter.ViewHolder(binding.root)
\ 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"
android:background="@color/color_f7fafa">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gradient_background"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:padding="4dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_return_bar_nor" />
</FrameLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/screenshot_clean"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/fl_back"
app:layout_constraintBottom_toBottomOf="@id/fl_back"
app:layout_constraintStart_toEndOf="@id/fl_back" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="34dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_title">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textColor="@color/white"
android:textSize="32sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="KB"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_size" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="67dp"
android:text="@string/screenshots_totally"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_size" />
</androidx.constraintlayout.widget.ConstraintLayout>
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
android:id="@+id/expandable_files"
android:layout_width="match_parent"
android:layout_height="0dp"
android:paddingTop="8dp"
android:paddingBottom="12dp"
android:background="@color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_top"
app:layout_constraintBottom_toTopOf="@id/ll_bottom" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/kongzhuangtai"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:gravity="center"
android:background="@color/white"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_all_photo_off" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/select_all"
android:textColor="@color/color_666666"
android:textSize="12sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="16dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:gravity="center"
android:background="@drawable/gradient_not_clickable_4"
android:text="@string/delete"
android:textColor="@color/white"
android:textSize="14sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
<include
android:id="@+id/animation"
android:visibility="gone"
layout="@layout/custom_animation" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -81,8 +81,6 @@
android:layout_marginHorizontal="14dp"
android:layout_marginTop="24dp"
android:paddingVertical="22dp"
app:bl_corners_radius="10dp"
app:bl_solid_color="#26000000"
app:layout_constraintTop_toBottomOf="@+id/id_tv_tmp">
<androidx.appcompat.widget.LinearLayoutCompat
......@@ -182,8 +180,6 @@
android:layout_marginTop="24dp"
android:orientation="vertical"
android:paddingVertical="14dp"
app:bl_corners_radius="10dp"
app:bl_solid_color="#26000000"
app:layout_constraintTop_toBottomOf="@+id/id_fl_ad">
<TextView
......
<?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"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_image"
android:layout_width="110dp"
android:layout_height="110dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:src="@mipmap/icon_weixuanzhong_photo_off"
app:layout_constraintTop_toTopOf="@id/iv_image"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:gravity="center"
android:background="@drawable/shadow_background"
android:text="12.5MB"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintStart_toStartOf="@id/iv_image"
app:layout_constraintEnd_toEndOf="@id/iv_image"
app:layout_constraintBottom_toBottomOf="@id/iv_image" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white">
<View
android:id="@+id/view_bg"
android:layout_width="match_parent"
android:layout_height="12dp"
android:layout_marginTop="8dp"
android:background="@color/color_f7fafa"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="16dp"
android:layout_marginHorizontal="15dp"
android:text="2024/10/10"
android:textColor="@color/color_666666"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_bg" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
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