Commit fe8ef929 authored by wanglei's avatar wanglei

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/res/values/strings.xml
parents 658fc74b b34a0be1
......@@ -165,6 +165,12 @@
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".luma.CleanJunkActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
......
......@@ -2,6 +2,8 @@ package com.base.scanqrclear.luma
import android.app.Activity
import android.content.Context
import android.content.Intent
import com.base.scanqrclear.R
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
......@@ -19,11 +21,11 @@ object ActivityJumpHelps {
nameId: Int
) {
when(nameId) {
// R.string.junk_scan -> requestPermission(context, launcher) { CleanJunkActivity.start(context) }
R.string.junk_scan -> requestPermission(context, launcher) { CleanJunkActivity.start(context) }
// R.string.battery_info -> BatteryInfoActivity.start(context)
// R.string.app_process -> com.base.scanqrclear.luma.AppProcessActivity.start(context)
// R.string.app_process -> AppProcessActivity.start(context)
// R.string.whatsapp_clean -> requestPermission(context, launcher) { com.base.scanqrclear.luma.WhatsappCleanActivity.start(context) }
// R.string.screenshot_clean -> requestPermission(context, launcher) { com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context) }
// R.string.screenshot_clean -> requestPermission(context, launcher) { 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) }
......@@ -41,7 +43,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) { com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context) }
// ID_SCREENSHOT_CLEAN -> requestPermission(context, launcher) { ScreenshotCleanActivity.start(context) }
}
}
......@@ -62,7 +64,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 -> com.base.scanqrclear.luma.ScreenshotCleanActivity.start(context)
// ID_SCREENSHOT_CLEAN -> ScreenshotCleanActivity.start(context)
// ID_APP_INSTALL -> AppManagerActivity.start(context)
// ID_APP_UNINSTALL -> AppManagerActivity.start(context)
// ID_NOT_CLEANED -> CleanJunkActivity.start(context)
......
package com.base.scanqrclear.luma
import android.animation.ValueAnimator
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.ActivityCleanJunkBinding
import com.base.scanqrclear.luma.AdmobHelps.KEY_CLEANUP_SIZE
import com.base.scanqrclear.luma.AdmobHelps.KEY_CLEAN_LAST_TIME
import com.base.scanqrclear.luma.Utils.toDate
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import pokercc.android.expandablerecyclerview.ExpandableItemAnimator
import java.util.Locale
import kotlin.random.Random
class CleanJunkActivity : BaseActivity2() {
companion object {
fun start(context: Context) {
val intent = Intent(context, CleanJunkActivity::class.java)
context.startActivity(intent)
}
}
private val binding by lazy {
ActivityCleanJunkBinding.inflate(layoutInflater)
}
private lateinit var adapter: CleanJunkAdapter
private var total: Long = 0
private var groupData = mutableListOf<FileBean>()
private var childData = mutableListOf<List<FileBean>>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
initView()
showAdInterstitial(AdmobHelps.isShowAdInter()) { initData() }
}
private fun initView() {
adapter = CleanJunkAdapter()
adapter.selectionData.observe(this) { list ->
total = list.filter { it.isSelected }.sumOf { it.length }
setClean()
}
binding.expandableFiles.adapter = adapter
binding.expandableFiles.layoutManager = LinearLayoutManager(this)
binding.expandableFiles.itemAnimator = ExpandableItemAnimator(binding.expandableFiles)
binding.flBack.setOnClickListener { backPressed() }
binding.tvClean.setOnClickListener {
if (isDisableBack) return@setOnClickListener
showAnimationAd(LottieType.CLEAN, total > 0) {
if (total > 0) SpUtils.getInstance().putInt("${KEY_CLEANUP_SIZE}_${toDate()}", 1)
SpUtils.getInstance().putLong(KEY_CLEAN_LAST_TIME, System.currentTimeMillis())
toCleanResult(total, getString(R.string.junk_scan))
}
cleanFiles(adapter.child.flatten())
}
}
private fun initData() {
binding.tvPath.text = ""
binding.tvClean.visibility = View.GONE
isDisableBack = true
lifecycleScope.launch(Dispatchers.IO) {
val emptyFoldersDeferred = async { FileHelps.findEmptyFolders() }
val filesDeferred = async { MediaHelps.findSpecifiedFiles(this@CleanJunkActivity) }
val emptyFolder = emptyFoldersDeferred.await()
val files = filesDeferred.await()
emptyFolder.forEach { it.isSelected = true }
files.forEach { it.isSelected = true }
val apkFiles = files.filter {
it.name.lowercase(Locale.ROOT).endsWith(".apk") || it.name.lowercase(Locale.ROOT).endsWith(".aab")
}
val tempFiles = files.filter { it.name.lowercase(Locale.ROOT).endsWith(".temp") }
val logsFiles = files.filter { it.name.lowercase(Locale.ROOT).endsWith(".log") }
groupData = getGroupData()
groupData[0].length = emptyFolder.sumOf { it.length }
groupData[1].length = apkFiles.sumOf { it.length }
groupData[2].length = tempFiles.sumOf { it.length }
groupData[3].length = logsFiles.sumOf { it.length }
total = groupData.sumOf { it.length }
childData = mutableListOf<List<FileBean>>().apply {
add(emptyFolder)
add(apkFiles)
add(tempFiles)
add(logsFiles)
}
showScan()
}
}
private fun showScan() {
lifecycleScope.launch(Dispatchers.IO) {
val list = childData.flatten().sortedByDescending { it.length }
val totalSize = list.sumOf { it.length }
val random = Random.nextLong(2500, 3000)
withContext(Dispatchers.Main) {
AnimationHelps.progress(binding.pbProgress, 0, 100, random)
ValueAnimator.ofFloat(0f, totalSize.toFloat()).apply {
duration = random
interpolator = LinearInterpolator()
addUpdateListener { animation ->
val value = animation.animatedValue as Float
setSize(value.toLong())
}
}.start()
}
for (index in list.indices) {
if (binding.pbProgress.progress == 100) break
withContext(Dispatchers.Main) {
if (list.size > index) {
binding.tvPath.text = list[index].path
}
}
}
delay(random)
withContext(Dispatchers.Main) {
scanComplete()
adapter.setData(groupData, childData)
}
}
}
private fun setSize(size: Long) {
val values = Utils.getSizeArray(size)
binding.tvLength.text = values[0]
binding.tvUnit.text = values[1]
}
private fun scanComplete() {
isDisableBack = false
binding.expandableFiles.visibility = View.VISIBLE
binding.tvClean.visibility = View.VISIBLE
binding.tvPath.text = getString(R.string.clean_tips)
setClean()
}
private fun setClean() {
binding.tvClean.text = if (total > 0) "${getString(R.string.clean)} (${Utils.getSize(total)})" else getString(R.string.go_it)
binding.tvClean.setBackgroundResource(if (total > 0) R.drawable.gradient else R.drawable.gradient_unselected)
}
private fun getGroupData(): MutableList<FileBean> {
return mutableListOf<FileBean>().apply {
add(FileBean(getString(R.string.empty_folder), icon = R.mipmap.icon_empty_junk_nor, isSelected = true))
add(FileBean(getString(R.string.apk_files), icon = R.mipmap.icon_apk_junk_nor, isSelected = true))
add(FileBean(getString(R.string.temp_files), icon = R.mipmap.icon_temp_junk_nor, isSelected = true))
add(FileBean(getString(R.string.logs_files), icon = R.mipmap.icon_logs_junk_nor, isSelected = true))
}
}
}
\ No newline at end of file
package com.base.scanqrclear.luma
import android.animation.ObjectAnimator
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.ItemChildCleanJunkBinding
import com.base.scanqrclear.databinding.ItemGroupCleanJunkBinding
import pokercc.android.expandablerecyclerview.ExpandableAdapter
class CleanJunkAdapter(
var group: List<FileBean>,
var child: List<List<FileBean>>
) : ExpandableAdapter<ExpandableAdapter.ViewHolder>() {
private class ChildViewHolder(val binding: ItemChildCleanJunkBinding) :
ExpandableAdapter.ViewHolder(binding.root)
private class GroupViewHolder(val binding: ItemGroupCleanJunkBinding) :
ExpandableAdapter.ViewHolder(binding.root)
constructor() : this(emptyList(), emptyList())
private val _selectionData = MutableLiveData<List<FileBean>>()
val selectionData: LiveData<List<FileBean>> = _selectionData
private var isInit = true
fun setData(group: List<FileBean>, child: List<List<FileBean>>) {
this.group = group
this.child = child
notifyDataSetChanged()
}
override fun getChildCount(groupPosition: Int): Int {
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 = ItemChildCleanJunkBinding.inflate(inflater, viewGroup, false)
return ChildViewHolder(view)
}
override fun onCreateGroupViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val view = ItemGroupCleanJunkBinding.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
val data = group[groupPosition]
holder.binding.tvName.text = data.name
holder.binding.tvLength.text = Utils.getSize(data.length)
holder.binding.ivIcon.setImageResource(data.icon)
holder.binding.ivIndicator.setImageResource(if (expand) R.mipmap.icon_up_setting else R.mipmap.icon_down_setting)
holder.binding.ivSelect.setImageResource(if (data.isSelected) R.mipmap.icon_yixuan_s else R.mipmap.icon_yixuan_n)
holder.binding.clItem.setBackgroundResource(if (expand && child[groupPosition].isNotEmpty()) R.drawable.white_background_top else R.drawable.white_background)
holder.binding.ivSelect.setOnClickListener {
data.isSelected = !data.isSelected
child[groupPosition].forEach { it.isSelected = data.isSelected }
_selectionData.value = child.flatten()
notifyGroupChange(groupPosition)
for (childPosition in 0 until child[groupPosition].size) {
notifyChildChange(groupPosition, childPosition)
}
}
if (isInit) {
val translationX =
holder.itemView.context.resources.displayMetrics.widthPixels.toFloat()
holder.itemView.translationX = -translationX
ObjectAnimator.ofFloat(holder.itemView, "translationX", -translationX, 0f).apply {
duration = 1000
startDelay = (groupPosition + 1) * 300L
start()
}
}
if (groupPosition == group.size - 1) isInit = false
}
override fun onBindChildViewHolder(
holder: ViewHolder,
groupPosition: Int,
childPosition: Int,
payloads: List<Any>
) {
holder as ChildViewHolder
val data = child[groupPosition][childPosition]
val groupData = group[groupPosition]
holder.binding.tvName.text = data.name
holder.binding.tvLength.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.itemView.setBackgroundResource(if (childPosition == child[groupPosition].size - 1) R.drawable.white_background_bottom else R.color.white)
holder.itemView.setOnClickListener {
data.isSelected = !data.isSelected
notifyChildChange(groupPosition, childPosition)
val isSelected = child[groupPosition].stream().allMatch(FileBean::isSelected)
if (groupData.isSelected != isSelected) {
groupData.isSelected = isSelected
notifyGroupChange(groupPosition)
}
_selectionData.value = child.flatten()
}
}
}
package com.base.scanqrclear.luma
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
......@@ -9,6 +10,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import androidx.core.animation.doOnEnd
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
......@@ -16,8 +18,8 @@ import com.base.scanqrclear.R
import com.base.scanqrclear.databinding.FragmentHomeBinding
import com.base.scanqrclear.luma.AdmobHelps.KEY_INSTALL_TIME
import com.base.scanqrclear.luma.AppHelps.dpToPx
import com.base.scanqrclear.utils.BarUtils
import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
......@@ -26,7 +28,7 @@ import java.util.concurrent.TimeUnit
class HomeFragment : BaseFragment() {
private val binding by lazy {
private val binding by lazy(LazyThreadSafetyMode.NONE) {
FragmentHomeBinding.inflate(layoutInflater)
}
......@@ -35,9 +37,17 @@ class HomeFragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding.tvAppName.updatePadding(top = BarUtils.getStatusBarHeight())
return binding.root
}
override fun onResume() {
super.onResume()
immersionBar {
statusBarColor("#ef7246")
statusBarDarkFont(true)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
......
......@@ -48,15 +48,19 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean(KEY_EVENT, R.mipmap.h_event, resources.getString(R.string.event)),
FunctionUIBean(KEY_CONTACT, R.mipmap.h_contact, resources.getString(R.string.contact)),
// FunctionUIBean(KEY_LOCATION, R.mipmap.h_loction, resources.getString(R.string.location)),
FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)),
FunctionUIBean(
KEY_TELEPHONE,
R.mipmap.h_telephone,
resources.getString(R.string.telephone)
),
FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)),
)
}
override fun initView() {
super.initView()
binding.tvTitle.updatePadding(top = BarUtils.getStatusBarHeight())
binding.ivVip.updatePadding(top = BarUtils.getStatusBarHeight())
binding.space.layoutParams.height = BarUtils.getStatusBarHeight()
// binding.ivVip.updatePadding(top = BarUtils.getStatusBarHeight())
adapter = FunctionAdapter()
binding.rv.layoutManager = GridLayoutManager(requireContext(), 3)
binding.rv.adapter = adapter
......@@ -144,7 +148,7 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
override fun initListener() {
super.initListener()
binding.tvTitle.setOnClickListener {
binding.tvLogo.setOnClickListener {
if (isContinuousTimesClick()) {
val sb = StringBuilder()
val gson = Gson()
......@@ -152,7 +156,8 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
sb.append("ut:${ConfigBean.configBean.ut}").append("\n")
val adLog = gson.toJson(ConfigBean.configBean.adConfigBean).replace(",", ",\n")
sb.append(adLog).append("\n")
val popupLog = gson.toJson(ConfigBean.configBean.popupConfigBean).replace(",", ",\n")
val popupLog =
gson.toJson(ConfigBean.configBean.popupConfigBean).replace(",", ",\n")
sb.append(popupLog).append("\n")
sb.append("uuid:").append(AppPreferences.getInstance().getString("uuid", "null"))
requireContext().showLogDialog(sb.toString())
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#FF6473F8"
android:endColor="#FF8757E9"
android:angle="0" />
<corners android:radius="20dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#FFFEAE25"
android:endColor="#FFFF790C"
android:angle="0" />
<corners android:radius="20dp"/>
</shape>
<?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="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/junk_scan"
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.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_title">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textColor="@color/white"
android:textSize="32sp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:text="B"
android:textColor="@color/white"
android:textSize="17sp"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/found"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_size" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_marginEnd="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_title" />
<ProgressBar
android:id="@+id/pb_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="32dp"
android:progress="0"
android:max="100"
android:progressDrawable="@drawable/clean_junk_progress"
app:layout_constraintTop_toBottomOf="@id/ll_size" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_path"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:ellipsize="end"
android:maxLines="1"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="@string/clean_tips"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/pb_progress" />
</androidx.constraintlayout.widget.ConstraintLayout>
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
android:id="@+id/expandable_files"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:scrollbars="none"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/cl_top"
app:layout_constraintBottom_toTopOf="@id/tv_clean" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_clean"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:gravity="center"
android:background="@drawable/gradient"
android:text="@string/clean"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"/>
<include
android:id="@+id/animation"
android:visibility="gone"
layout="@layout/custom_animation" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -38,7 +38,7 @@
android:layout_marginTop="17dp"
android:layout_marginHorizontal="15dp"
android:adjustViewBounds="true"
android:src="@mipmap/img_quanxian_pop"
android:src="@mipmap/ic_quanxian_pop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_content" />
......
......@@ -7,30 +7,67 @@
android:background="@color/white"
tools:context=".ui.main.CreateFragment">
<Space
android:id="@+id/space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvTitle"
android:id="@+id/tv_weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:text="@string/create"
android:textColor="@color/black"
android:includeFontPadding="false"
android:background="@drawable/bg_gradient_weather"
android:paddingHorizontal="17dp"
android:paddingVertical="8dp"
android:textColor="@color/white"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/space"
tools:text="30℃" />
<ImageView
android:visibility="gone"
android:id="@+id/ivVip"
<TextView
android:id="@+id/tv_zodiac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:src="@mipmap/h_vip"
app:layout_constraintBottom_toBottomOf="@id/tvTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/tvTitle"
tools:ignore="ContentDescription" />
android:includeFontPadding="false"
android:background="@drawable/bg_gradient_zodiac"
android:paddingHorizontal="17dp"
android:paddingVertical="8dp"
android:layout_marginEnd="16dp"
android:text="@string/zodiac"
android:textColor="@color/white"
android:textSize="19sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_weather" />
<TextView
android:id="@+id/tv_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="13dp"
android:text="@string/app_name"
android:textColor="@color/black"
android:textSize="19sp"
app:drawableTopCompat="@mipmap/codescan"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_zodiac" />
<!-- <ImageView-->
<!-- android:id="@+id/ivVip"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginEnd="20dp"-->
<!-- android:src="@mipmap/h_vip"-->
<!-- android:visibility="gone"-->
<!-- app:layout_constraintBottom_toBottomOf="@id/tvTitle"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="@id/tvTitle"-->
<!-- tools:ignore="ContentDescription" />-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
......@@ -41,6 +78,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
app:layout_constraintTop_toBottomOf="@id/tv_logo" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -174,7 +174,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/junk_files"
android:textColor="@color/colorPrimary"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/iv_shan"
......
<?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:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:background="@color/white">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_empty_junk_nor"
android:visibility="invisible"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:text="@string/app_name"
android:textColor="@color/color_666666"
android:textSize="14sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_icon"
app:layout_constraintEnd_toStartOf="@id/tv_length" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="67.4MB"
android:textSize="12sp"
android:textColor="@color/color_aeb4bd"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_select" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_all_photo_off"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</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">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:paddingVertical="16dp"
android:paddingHorizontal="16dp"
android:background="@drawable/white_background"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_empty_junk_nor"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/app_name"
android:textColor="@color/color_181b1f"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_icon" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:src="@mipmap/icon_down_setting"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_name" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="67.4MB"
android:textSize="12sp"
android:textColor="@color/color_aeb4bd"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_select" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_weixuan_junk"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -123,4 +123,5 @@
<string name="whatsapp_clean">WhatsApp Clean</string>
<string name="app_process">App Process</string>
<string name="files">Files</string>
<string name="zodiac">Zodiac</string>
</resources>
\ No newline at end of file
......@@ -123,4 +123,5 @@
<string name="whatsapp_clean">WhatsApp Clean</string>
<string name="app_process">App Process</string>
<string name="files">Files</string>
<string name="zodiac">Zodiac</string>
</resources>
\ No newline at end of file
......@@ -124,4 +124,5 @@
<string name="whatsapp_clean">WhatsApp Clean</string>
<string name="app_process">App Process</string>
<string name="files">Files</string>
<string name="zodiac">Zodiac</string>
</resources>
\ No newline at end of file
......@@ -123,4 +123,5 @@
<string name="whatsapp_clean">WhatsApp Clean</string>
<string name="app_process">App Process</string>
<string name="files">Files</string>
<string name="zodiac">Zodiac</string>
</resources>
\ No newline at end of file
......@@ -124,4 +124,5 @@
<string name="whatsapp_clean">WhatsApp Clean</string>
<string name="app_process">App Process</string>
<string name="files">Files</string>
<string name="zodiac">Zodiac</string>
</resources>
\ No newline at end of file
......@@ -286,5 +286,6 @@
<string name="whatsapp_pop">Clear whatsapp file to free up space!</string>
<string name="screen_pop">Clear screenshot clutter to free up space!</string>
<string name="similar_pop">Clear similar file to free up space!</string>
<string name="zodiac">Zodiac</string>
</resources>
\ 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