Commit 492bcedd authored by songjianyu's avatar songjianyu

[调整] 视频清理,电池信息,大文件清理

parent 98e841a4
......@@ -119,6 +119,9 @@
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.videoclean.VideoCleanActivity"
android:exported="false" />
<provider
......
......@@ -38,6 +38,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
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.SIMILAR_PHOTOS
import com.base.appzxhy.bean.FeatureBean.Companion.VIDEO_CLEAN
import com.base.appzxhy.bean.FileBean
import com.base.appzxhy.bean.SimilarBean
import com.base.appzxhy.bean.config.AdConfigBean
......@@ -54,6 +55,7 @@ import com.base.appzxhy.ui.photocompression.PhotoCompressionActivity
import com.base.appzxhy.ui.recyclebin.RecycleBinUtils
import com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity
import com.base.appzxhy.ui.similar.SimilarPhotosActivity
import com.base.appzxhy.ui.videoclean.VideoCleanActivity
import com.base.appzxhy.utils.ActivityLauncher
import com.base.appzxhy.utils.ActivityManagerUtils
import com.base.appzxhy.utils.FileUtils
......@@ -434,6 +436,10 @@ fun Activity.jumpAction(key: String) {
goToAc(JunkCleanActivity::class.java)
}
VIDEO_CLEAN -> {
goToAc(VideoCleanActivity::class.java)
}
LARGE_FILE_CLEAN -> {
goToAc(LargeFileCleanActivity::class.java)
}
......
......@@ -10,6 +10,7 @@ class FeatureBean(
companion object {
const val JUNK_CLEAN = "junk_clean"
const val VIDEO_CLEAN = "video_clean"
const val BATTERY_INFO = "battery_info"
const val SCREENSHOT_CLEAN = "screenshot_clean"
const val LARGE_FILE_CLEAN = "large_file_clean"
......
......@@ -82,7 +82,7 @@ object LimitUtils {
fun isAdShow(adsType: AdsType, adEvent: AdEvent?): Boolean {
if (BuildConfig.DEBUG) {
return true
return false
}
val currentDate = System.currentTimeMillis().toFormatTime4()
......
......@@ -7,6 +7,7 @@ import android.text.SpannableString
import android.text.style.AbsoluteSizeSpan
import android.text.style.StyleSpan
import android.view.ViewGroup
import android.widget.TextView
import com.base.appzxhy.R
import com.base.appzxhy.databinding.ItemBatteryHeadBinding
import com.base.appzxhy.ui.adapter.CommonViewHolder
......@@ -14,8 +15,11 @@ import com.base.appzxhy.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class BatteryHead(
val hour: Int,
val min: Int,
val p: Float = 0.50f,
val temper: String = "36℃",
val v: String = "3.6V",
val power: String = "4753mAh",
)
class BatteryHeadAdapter : BaseQuickAdapter<BatteryHead, CommonViewHolder>() {
......@@ -23,28 +27,41 @@ class BatteryHeadAdapter : BaseQuickAdapter<BatteryHead, CommonViewHolder>() {
override fun onBindViewHolder(
holder: CommonViewHolder,
position: Int,
item: BatteryHead?
item: BatteryHead?,
) {
item ?: return
val binding = ItemBatteryHeadBinding.bind(holder.itemView)
binding.tvCapacity.text = "${(item.p * 100).toInt()}%"
val h = if (item.hour < 10) "0${item.hour}" else item.hour.toString()
val min = if (item.min < 10) "0${item.min}" else item.min.toString()
val text1 = "$h h "
val text2 = "$min m"
binding.iv.setImageLevel((item.p * 100).toInt())
binding.tvTime.text = buildSpannableString(text1, h)
binding.tvTime.append(buildSpannableString(text2, min))
setText(binding.tvTime, item.min)
setText(binding.tvVideo, (item.min * 0.5).toInt())
setText(binding.tvMusic, (item.min * 0.8).toInt())
binding.tvWendu.text = item.temper
binding.tvV.text = item.v
binding.tvAh.text = item.power
}
override fun onCreateViewHolder(
context: Context,
parent: ViewGroup,
viewType: Int
viewType: Int,
): CommonViewHolder {
return CommonViewHolder(R.layout.item_battery_head.inflate(parent))
}
fun setText(v: TextView, time: Int) {
var h = time / 60
var m = time % 60
val strH = if (h < 10) "0$h" else h.toString()
val strM = if (m < 10) "0$m" else m.toString()
val text1 = "$strH h "
val text2 = "$strM m"
v.text = buildSpannableString(text1, strH)
v.append(buildSpannableString(text2, strM))
}
fun buildSpannableString(fullString: String, tagString: String): SpannableString {
val spannableString = SpannableString(fullString)
val start = fullString.indexOf(tagString)
......@@ -57,7 +74,7 @@ class BatteryHeadAdapter : BaseQuickAdapter<BatteryHead, CommonViewHolder>() {
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannableString.setSpan(
AbsoluteSizeSpan(32, true),
AbsoluteSizeSpan(18, true),
start, end,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
)
......
......@@ -2,6 +2,7 @@ package com.base.appzxhy.ui.batteryinfo
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import androidx.recyclerview.widget.ConcatAdapter
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity
......@@ -10,7 +11,8 @@ import com.base.appzxhy.databinding.ActivityBatteryInfo2Binding
import com.base.appzxhy.ui.adapter.AdAdapter
import com.base.appzxhy.utils.Utils
class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBatteryInfo2Binding::inflate) {
class BatteryInfoActivity :
BaseActivity<ActivityBatteryInfo2Binding>(ActivityBatteryInfo2Binding::inflate) {
private val concatAdapter = ConcatAdapter()
private val batteryHeadAdapter = BatteryHeadAdapter()
......@@ -18,12 +20,10 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
private val adAdapter = AdAdapter(R.layout.item_ad)
private val batteryInfoList = listOf(
BatteryInfoBean(R.drawable.icon_current_average, "37.5℃", "Temperature"),
BatteryInfoBean(R.drawable.icon_voltage, "3.6V", "Voltage"),
BatteryInfoBean(R.drawable.icon_technology, "Li-Poly", "Technology"),
BatteryInfoBean(R.drawable.icon_battery, "0mAh", "Battery Capacity"),
BatteryInfoBean(R.drawable.icon_electric_current, "0mA", "Electric Current"),
BatteryInfoBean(R.drawable.icon_current_average, "0mA", "Current Average"),
BatteryInfoBean("Good", "Health"),
BatteryInfoBean("Normal", "Battery Status"),
BatteryInfoBean("Li-Poly", "Battery Type"),
BatteryInfoBean("0mAh", "Battery Capacity"),
)
private var batteryReceiver: BatteryReceiver? = null
......@@ -34,6 +34,7 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
}
override fun initView() {
setStatusBarColor(getColor(R.color.colorPrimary))
showAdAnimation(LottieEnum.BATTERY_INFO_LOTTIE) {
adAdapter.submitList(listOf(""))
}
......@@ -43,9 +44,10 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
binding.rv.adapter = concatAdapter
concatAdapter.addAdapter(batteryHeadAdapter)
batteryHeadAdapter.submitList(
listOf(BatteryHead(1, 0))
listOf(BatteryHead(1))
)
concatAdapter.addAdapter(adAdapter)
concatAdapter.addAdapter(batteryInfoAdapter)
batteryInfoAdapter.submitList(listOf(batteryInfoList))
......@@ -54,6 +56,9 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
override fun initListener() {
super.initListener()
binding.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.tvBtn.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
// @SuppressLint("SetTextI18n")
......@@ -97,26 +102,41 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
val percent = BatteryReceiver.level / BatteryReceiver.scale.toFloat()
val remainingCapacity = BatteryReceiver.mAh * percent
val wTime = (remainingCapacity / 3.0f).toInt()
val temperature = Utils.divide(BatteryReceiver.temperature, 10)
val voltage = Utils.divide(BatteryReceiver.voltage, 1000)
batteryHeadAdapter.submitList(
listOf(
BatteryHead(wTime / 60, wTime % 60)
BatteryHead(
min = wTime,
p = percent,
temper = "$temperature℃",
v = "${voltage}V",
power = "${(BatteryReceiver.mAh * percent).toInt()} mAh"
)
)
)
batteryInfoList[0].tvValue = when (80) {
in 0..20 -> {
"Bad"
}
val temperature = Utils.divide(BatteryReceiver.temperature, 10)
batteryInfoList[0].tvValue = "$temperature℃"
in 21..50 -> {
"Not Bad"
}
val voltage = Utils.divide(BatteryReceiver.voltage, 1000)
batteryInfoList[1].tvValue = "${voltage}V"
else -> {
"Good"
}
}
batteryInfoList[3].tvValue = "${BatteryReceiver.mAh.toInt()}mAh"
batteryInfoList[3].tvValue = "${(BatteryReceiver.mAh * percent).toInt()}mAh"
batteryInfoList[4].tvValue = "${BatteryReceiver.mA.toInt()}mA"
batteryInfoList[5].tvValue = "${BatteryReceiver.avmA.toInt()}mA"
batteryInfoAdapter.submitList(listOf(
batteryInfoList
))
batteryInfoAdapter.submitList(
listOf(
batteryInfoList
)
)
}
}
\ No newline at end of file
......@@ -11,7 +11,6 @@ import com.base.appzxhy.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
data class BatteryInfoBean(
val icon: Int,
var tvValue: String,
val title: String,
)
......@@ -54,7 +53,7 @@ class BatteryInfoAdapter : BaseQuickAdapter<List<BatteryInfoBean>, CommonViewHol
item ?: return
val binding = ItemBatteryInfoBinding.bind(holder.itemView)
binding.iv.setImageResource(item.icon)
// binding.iv.setImageResource(item.icon)
binding.tvValue.text = item.tvValue
binding.tvTitle.text = item.title
......
......@@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.datastore.dataStore
import com.base.appzxhy.R
import com.base.appzxhy.databinding.DialogConfirmBinding
......@@ -25,7 +26,7 @@ class ConfirmDialog(
val params = dialog.window?.attributes
params?.width = LinearLayout.LayoutParams.MATCH_PARENT
params?.height = LinearLayout.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.BOTTOM
params?.gravity = Gravity.CENTER
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
......
......@@ -198,6 +198,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
adapter.notifyDataSetChanged()
binding.rvLargeFile.visibility = if (list.isEmpty()) View.GONE else View.VISIBLE
binding.ivEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
binding.tvEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
binding.tvDelete.visibility = if (list.isEmpty()) View.GONE else View.VISIBLE
}
......@@ -332,6 +333,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
override fun initView() {
super.initView()
binding.llTitle.tvTitle.text=getString(R.string.large_file_clean)
binding.rvTab.adapter = tabAdapter
binding.rvTab.layoutManager = LinearLayoutManager(this)
binding.rvLargeFile.adapter = adapter
......@@ -351,7 +353,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
override fun initListener() {
super.initListener()
binding.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.llTitle.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.llType.setOnClickListener {
setTab(it, binding.tvType, binding.ivTypeArrow)
}
......
......@@ -15,6 +15,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
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.SIMILAR_PHOTOS
import com.base.appzxhy.bean.FeatureBean.Companion.VIDEO_CLEAN
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentHome3Binding
import com.base.appzxhy.ui.dialog.permissionStorageJump
......@@ -41,8 +42,7 @@ class Home3Fragment : BaseFragment<FragmentHome3Binding>(FragmentHome3Binding::i
(requireActivity() as MainActivity).jumpAction(BATTERY_INFO)
}
binding.ivVideoClean.setOnClickListener {
//TODO (视频清理)
(requireActivity() as MainActivity).permissionStorageJump(JUNK_CLEAN)
(requireActivity() as MainActivity).permissionStorageJump(VIDEO_CLEAN)
}
binding.tvLargeFileClean.setOnClickListener {
(requireActivity() as MainActivity).permissionStorageJump(LARGE_FILE_CLEAN)
......
......@@ -130,12 +130,16 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
binding.ivSelectAll.isSelected = isSelectAll
binding.tvDelete.isEnabled = isSelection
setTextSize(binding.tvDelete, getString(R.string.delete), total)
}
fun setTextSize(view: TextView, content: String, total: Long) {
view.text = if (total > 0) "$content (${Utils.getSizeFormat(total)})" else content
if (total > 0) {
binding.tvDelete.setTextColor(getColor(R.color.white))
binding.tvDelete.text =
"${getString(R.string.delete)} (${Utils.getSizeFormat(total)})"
binding.tvDelete.background = getDrawable(R.drawable.bg_primary_r4)
} else {
binding.tvDelete.setTextColor(getColor(R.color.fontsBlack))
binding.tvDelete.text = getString(R.string.delete)
binding.tvDelete.background = getDrawable(R.drawable.bg_f2f5f6_r4)
}
}
override fun useDefaultImmersive() {
......@@ -150,6 +154,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
override fun initView() {
super.initView()
binding.llTitle.tvTitle.text=getString(R.string.screenshot_clean)
binding.expandableFiles.adapter = adapter
val gridLayoutManager = GridLayoutManager(this, 3)
gridLayoutManager.spanSizeLookup = MediaImageSpanLookup(3, adapter)
......@@ -178,6 +183,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
adapter.expandAllGroup()
adapter.notifyDataSetChanged()
binding.ivEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
binding.tvEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
binding.llBottom.visibility = if (list.isEmpty()) View.GONE else View.VISIBLE
}
}
......@@ -187,7 +193,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
@SuppressLint("NotifyDataSetChanged")
override fun initListener() {
super.initListener()
binding.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.llTitle.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.llSelectAll.setOnClickListener {
isSelectAll = !isSelectAll
list.forEach { it.items.forEach { it.isSelected = isSelectAll } }
......
package com.base.appzxhy.ui.videoclean
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.base.appzxhy.R
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.SCREENSHOT_CLEAN
import com.base.appzxhy.bean.FileBean
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.ads.AdsShowCallBack
import com.base.appzxhy.databinding.ActivityScreenshotCleanBinding
import com.base.appzxhy.databinding.ActivityVideoCleanBinding
import com.base.appzxhy.databinding.ItemScreenshotCleanChildBinding
import com.base.appzxhy.databinding.ItemScreenshotCleanGroupBinding
import com.base.appzxhy.databinding.ItemVideoBinding
import com.base.appzxhy.ui.cleanresult.CleanResultActivity
import com.base.appzxhy.ui.dialog.ConfirmDialog
import com.base.appzxhy.utils.MediaUtils
import com.base.appzxhy.utils.Utils
import com.base.appzxhy.utils.loadCenterCropImg
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 kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import pokercc.android.expandablerecyclerview.ExpandableAdapter
import java.io.File
class VideoCleanActivity :
BaseActivity<ActivityVideoCleanBinding>(ActivityVideoCleanBinding::inflate) {
private var list = mutableListOf<FileBean>()
private var isSelectAll = false
private var total: Long = 0
private var selectedFiles = listOf<FileBean>()
private val adapter by lazy {
class VideoHolder(val item: ItemVideoBinding) : RecyclerView.ViewHolder(item.root)
object : RecyclerView.Adapter<VideoHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
): VideoHolder {
val bind = ItemVideoBinding.inflate(layoutInflater, parent, false)
return VideoHolder(bind)
}
override fun onBindViewHolder(holder: VideoHolder, position: Int) {
val bean = list[position]
val round = resources.getDimensionPixelSize(R.dimen.dp_8)
val options = RequestOptions().transform(CenterCrop(), RoundedCorners(round))
Glide.with(holder.itemView.context)
.asBitmap()
.load(File(bean.path))
.apply(options)
.into(holder.item.ivPreview)
holder.item.tvSize.text = Utils.getSizeFormat(bean.length)
holder.item.ivSelect.isSelected = bean.isSelected
holder.item.root.setOnClickListener {
val f = !bean.isSelected
holder.item.ivSelect.isSelected = f
bean.isSelected = f
updateSelection()
}
}
override fun getItemCount() = list.size
}
}
private fun updateSelection() {
selectedFiles = list.filter {
it.isSelected
}
isSelectAll = selectedFiles.size == list.size
total = selectedFiles.sumOf { it.length }
updateView(selectedFiles.isNotEmpty())
}
private fun updateView(isSelection: Boolean) {
binding.ivSelectAll.isSelected = isSelectAll
binding.tvDelete.isEnabled = isSelection
if (total > 0) {
binding.tvDelete.setTextColor(getColor(R.color.white))
binding.tvDelete.text =
"${getString(R.string.delete)} (${Utils.getSizeFormat(total)})"
binding.tvDelete.background = getDrawable(R.drawable.bg_primary_r4)
} else {
binding.tvDelete.setTextColor(getColor(R.color.fontsBlack))
binding.tvDelete.text = getString(R.string.delete)
binding.tvDelete.background = getDrawable(R.drawable.bg_f2f5f6_r4)
}
}
override fun useDefaultImmersive() {
setStatusBarColor()
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, 0, systemBars.right, systemBars.bottom)
binding.clTop.setPadding(0, systemBars.top, 0, 0)
insets
}
}
override fun initView() {
super.initView()
binding.expandableFiles.adapter = adapter
val gridLayoutManager = GridLayoutManager(this, 3)
binding.expandableFiles.layoutManager = gridLayoutManager
initData()
showAdAnimation(LottieEnum.SCREENSHOT_LOTTIE) {
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
}
}
override fun handleBackCallBack() {
super.handleBackCallBack()
}
@SuppressLint("NotifyDataSetChanged")
private fun initData() {
lifecycleScope.launch(Dispatchers.IO) {
list = MediaUtils.findVideoFiles(this@VideoCleanActivity)
updateSelection()
adapter.notifyDataSetChanged()
var size = 0L
list.forEach { size += it.length }
val value = Utils.getSizeArray(size)
binding.tvSize.text = value[0]
binding.tvUnit.text = value[1]
binding.ivEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE
binding.llBottom.visibility = if (list.isEmpty()) View.GONE else View.VISIBLE
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initListener() {
super.initListener()
binding.llTitle.ivBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.llSelectAll.setOnClickListener {
isSelectAll = !isSelectAll
list.forEach { it.isSelected = isSelectAll }
adapter.notifyDataSetChanged()
updateSelection()
}
binding.tvDelete.setOnClickListener {
if (total <= 0) return@setOnClickListener
val dialog = ConfirmDialog(this)
dialog.action = {
AdsMgr.showInsert(this, showCallBack = object : AdsShowCallBack() {
override fun next() {
cleanFileBeans(selectedFiles)
CleanResultActivity.total = total
CleanResultActivity.functionKey = SCREENSHOT_CLEAN
CleanResultActivity.titleName = getString(R.string.screenshot_clean)
goToAc(CleanResultActivity::class.java)
}
})
}
dialog.showDialog("delete")
}
}
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.appzxhy.utils
import android.view.View
import android.widget.ImageView
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 java.io.File
/**
* 加载图片文件 ,并添加圆角
*/
fun ImageView.loadImg(file: File, corner: Int) {
if (corner == 0) {
Glide.with(this).load(file).into(this)
} else {
val density = this.resources.displayMetrics.density
Glide.with(this).load(file)
.apply(RequestOptions.bitmapTransform(RoundedCorners((corner * density).toInt())))
.into(this)
}
}
/**
* 加载图片文件 centerCrop 并添加圆角
*/
fun ImageView.loadCenterCropImg(file: File, corner: Int) {
val density = this.resources.displayMetrics.density
Glide.with(this).load(file)
.transform(CenterCrop(), RoundedCorners((corner * density).toInt()))
.into(this)
}
/**
* 加载图片文件 centerCrop 并添加圆角
*/
fun ImageView.loadCenterCropImg(uri: String, corner: Int) {
val density = this.resources.displayMetrics.density
Glide.with(this).load(uri)
.transform(CenterCrop(), RoundedCorners((corner * density).toInt()))
.into(this)
}
\ 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:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp" />
<solid android:color="#4D000000" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/dianchi20"
android:minLevel="0"
android:maxLevel="20"
/>
<item android:drawable="@drawable/dianchi40"
android:minLevel="20"
android:maxLevel="40"
/>
<item android:drawable="@drawable/dianchi60"
android:minLevel="40"
android:maxLevel="60"
/>
<item android:drawable="@drawable/dianchi80"
android:minLevel="60"
android:maxLevel="80"
/>
<item android:drawable="@drawable/dianchi100"
android:minLevel="80"
android:maxLevel="100"
/>
</level-list>
\ 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="@color/colorDisEnable" />
<solid android:color="#EAF3F6" />
<corners android:radius="50dp" />
</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="#F2F5F6" />
<corners android:radius="4dp" />
</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="@color/colorPrimary" />
<corners android:radius="4dp" />
</shape>
\ No newline at end of file
......@@ -10,24 +10,26 @@
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/ripple_8"
android:padding="@dimen/dp_16"
android:src="@drawable/icon_back" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="53dp"
android:text="@string/battery_info"
android:textColor="@color/black"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
/>
android:textStyle="bold" />
</FrameLayout>
......
......@@ -25,15 +25,17 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack"
android:padding="@dimen/dp_16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_return_w" />
android:foreground="@drawable/ripple_8"
android:padding="16dp"
android:src="@drawable/icon_back" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="53dp"
android:text="@string/junk_clean"
android:textColor="@color/white"
android:textSize="20sp"
......@@ -80,6 +82,7 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/found"
......
......@@ -12,33 +12,9 @@
android:background="@color/colorPrimary"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
<include
android:id="@+id/ll_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="6dp"
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" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/large_file_clean"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
</FrameLayout>
layout="@layout/layout_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
......@@ -64,7 +40,6 @@
android:id="@+id/iv_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_filter_large_type"
android:src="@drawable/bg_filter_large_type" />
<androidx.appcompat.widget.AppCompatTextView
......@@ -176,13 +151,26 @@
android:id="@+id/iv_empty"
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_150"
android:src="@drawable/queshengtu"
android:src="@drawable/img_large_file_clean_placeholder"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="@string/Content_not_found"
android:textColor="#AEB4BD"
android:textSize="@dimen/sp_14"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_empty" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_large_file"
android:layout_width="match_parent"
......@@ -193,6 +181,7 @@
app:layout_constraintBottom_toTopOf="@id/tv_delete"
app:layout_constraintTop_toBottomOf="@id/flAd" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_delete"
android:layout_width="match_parent"
......
......@@ -12,33 +12,10 @@
android:background="@color/colorPrimary"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/ll_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="6dp"
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" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/screenshot_clean"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
</FrameLayout>
<include
android:id="@+id/ll_title"
layout="@layout/layout_title" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_size"
......@@ -122,13 +99,26 @@
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_150"
android:layout_marginTop="@dimen/dp_80"
android:src="@drawable/queshengtu"
android:src="@drawable/img_large_file_clean_placeholder"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="@string/Content_not_found"
android:textColor="#AEB4BD"
android:textSize="@dimen/sp_14"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_empty" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
......@@ -168,7 +158,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:background="@drawable/bg_enable_4"
android:background="@drawable/bg_primary_r4"
android:gravity="center"
android:paddingTop="12dp"
android:paddingBottom="12dp"
......
<?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.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:layout_constraintTop_toTopOf="parent">
<include layout="@layout/layout_title"
android:id="@+id/ll_title"
/>
<!-- <FrameLayout-->
<!-- android:id="@+id/ll_title"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:gravity="center_vertical"-->
<!-- android:orientation="horizontal"-->
<!-- app:layout_constraintTop_toTopOf="parent">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/ivBack"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:padding="16dp"-->
<!-- android:src="@drawable/icon_back" />-->
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="start|center_vertical"-->
<!-- android:layout_marginStart="53dp"-->
<!-- android:text="@string/Video_Clean"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="20sp"-->
<!-- android:textStyle="bold" />-->
<!-- </FrameLayout>-->
<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_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="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_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<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_constraintStart_toEndOf="@id/tv_size"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText,TextContrastCheck" />
</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/Cleanable"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_size"
tools:ignore="TextContrastCheck" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/zhanwei1"
tools:ignore="ImageContrastCheck" />
</com.base.appzxhy.business.ads.NativeParentView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/expandable_files"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/white"
android:paddingTop="8dp"
android:paddingBottom="12dp"
android:paddingHorizontal="12dp"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/flAd"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_empty"
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_150"
android:layout_marginTop="@dimen/dp_80"
android:src="@drawable/queshengtu"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:gravity="center"
android:orientation="horizontal"
android:padding="16dp"
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="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:src="@drawable/bg_select_yuan"
tools:ignore="ImageContrastCheck" />
<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_marginStart="16dp"
android:layout_weight="1"
android:background="@drawable/bg_primary_r4"
android:gravity="center"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:text="@string/delete"
android:textColor="@color/white"
android:textSize="14sp"
tools:ignore="TextContrastCheck" />
</androidx.appcompat.widget.LinearLayoutCompat>
<include
android:id="@+id/layout_animation"
layout="@layout/layout_animation"
android:visibility="gone" />
</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_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:background="@drawable/white_background">
<androidx.appcompat.widget.AppCompatTextView
......
......@@ -3,44 +3,31 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_90"
android:layout_height="75dp"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/bg_ffffff_8"
android:gravity="center_vertical"
android:orientation="horizontal">
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv"
android:layout_width="@dimen/dp_45"
android:layout_height="@dimen/dp_45"
android:layout_marginStart="@dimen/dp_15" />
<LinearLayout
android:layout_width="0dp"
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tvValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_18"
tool:text="3.6v" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_12"
tool:text="Voltage" />
</LinearLayout>
android:layout_marginStart="20dp"
android:layout_marginTop="16dp"
android:textColor="#AEB4BD"
android:textSize="@dimen/sp_12"
tool:text="3.6v" />
<TextView
android:id="@+id/tv_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="@dimen/dp_4"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
tool:text="Voltage" />
</LinearLayout>
\ No newline at end of file
......@@ -37,7 +37,7 @@
android:id="@+id/tv_size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/shadow_background"
android:background="@drawable/bg_4d000000_blr_8"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
......
......@@ -9,17 +9,17 @@
android:layout_width="match_parent"
android:layout_height="12dp"
android:background="@color/color_f7fafa"
app:layout_constraintTop_toTopOf="parent"/>
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:layout_marginVertical="16dp"
android:text="2024/10/10"
android:textColor="@color/color_666666"
android:textSize="16sp"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_bg" />
......
<?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="wrap_content"
android:layout_height="wrap_content">
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/iv_preview"
android:layout_width="110dp"
android:layout_height="110dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:round="8dp" />
<ImageView
android:id="@+id/iv_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_play_whatsapp"
app:layout_constraintBottom_toBottomOf="@id/iv_preview"
app:layout_constraintEnd_toEndOf="@id/iv_preview"
app:layout_constraintStart_toStartOf="@id/iv_preview"
app:layout_constraintTop_toTopOf="@id/iv_preview" />
<ImageView
android:id="@+id/iv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:src="@drawable/bg_select_yuan"
app:layout_constraintEnd_toEndOf="@id/iv_preview"
app:layout_constraintTop_toTopOf="@id/iv_preview" />
<TextView
android:id="@+id/tv_size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_4d000000_blr_8"
android:gravity="center"
android:paddingVertical="4dp"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="@id/iv_preview"
app:layout_constraintEnd_toEndOf="@id/iv_preview"
app:layout_constraintStart_toStartOf="@id/iv_preview"
tools:text="12.0M" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ 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:id="@+id/ll_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent"
tools:background="@color/colorPrimary">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/ripple_8"
android:padding="16dp"
android:src="@drawable/icon_back" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="53dp"
android:text="@string/Video_Clean"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
</FrameLayout>
......@@ -136,4 +136,11 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="Compress_Photos">Compress Photos</string>
<string name="View">View</string>
<string name="What_type_of_file_">What type of file do you want to clean?</string>
<string name="Battery_status">Battery status</string>
<string name="Power">Power</string>
<string name="Voltage">Voltage</string>
<string name="Temperature">Temperature</string>
<string name="Video_Messages">Video Messages</string>
<string name="Cleanable">Cleanable</string>
<string name="Content_not_found">Content not found</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