Commit 93a1ab78 authored by wanglei's avatar wanglei

[添加]文件恢复功能

parent 5bff48f7
......@@ -26,6 +26,7 @@
android:supportsRtl="true"
android:theme="@style/Theme.AppTheme"
tools:targetApi="31">
<activity
android:name=".ui.photocompression.PhotoCompressionDetailActivity"
android:exported="false" />
......@@ -90,6 +91,18 @@
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.recovery.FileScanResultActivity"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.recovery.FileRecoveredActivity"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.recovery.FileRecoveryActivity"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider
android:name="androidx.core.content.FileProvider"
......@@ -100,7 +113,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<receiver
android:name=".push.receiver.AlarmReceiver"
android:enabled="true"
......@@ -163,6 +175,7 @@
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
</application>
</manifest>
\ No newline at end of file
package com.base.appzxhy.bean.recovery
data class FolderBean(
val folder: String = "",
val time: String = "",
val recoveryList: ArrayList<RecoveryBean> = arrayListOf()
) {
var isSelect: Boolean = false
}
\ No newline at end of file
package com.base.appzxhy.bean.recovery
import com.base.appzxhy.ui.recovery.FileHexEx.isDoc
import com.base.appzxhy.ui.recovery.FileHexEx.isDocx
import com.base.appzxhy.ui.recovery.FileHexEx.isFlac
import com.base.appzxhy.ui.recovery.FileHexEx.isMp3
import com.base.appzxhy.ui.recovery.FileHexEx.isPPT
import com.base.appzxhy.ui.recovery.FileHexEx.isPPTX
import com.base.appzxhy.ui.recovery.FileHexEx.isPdf
import com.base.appzxhy.ui.recovery.FileHexEx.isWav
import com.base.appzxhy.ui.recovery.FileHexEx.isXls
import com.base.appzxhy.ui.recovery.FileHexEx.isXlsx
import java.io.File
data class RecoveryBean(
val path: String = "",
) {
var isSelect: Boolean = false
var isThumbnails: Boolean = false
var type: String = ""
companion object {
fun RecoveryBean.setDocumentType() {
val file = File(path)
if (isPdf(file)) {
type = "PDF"
}
if (isDocx(file) || isDoc(file)) {
type = "DOC"
}
if (isXlsx(file) || isXls(file)) {
type = "XLS"
}
if (isPPTX(file) || isPPT(file)) {
type = "PPT"
}
}
fun RecoveryBean.setAudioType() {
val file = File(path)
if (isMp3(file)) {
type = "MP3"
}
if (isWav(file)) {
type = "WAV"
}
if (isFlac(file)) {
type = "FLAC"
}
}
}
}
\ No newline at end of file
package com.base.appzxhy.bean.recovery
class RecoveryFilterBean(
val tittle: String = "ALL",
var type: String,
var isSelect: Boolean = false,
)
\ No newline at end of file
package com.base.appzxhy.ui.main
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentRecoveryBinding
class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>(FragmentRecoveryBinding::inflate) {
......@@ -8,9 +10,14 @@ class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>(FragmentRecoveryB
override fun initView() {
super.initView()
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
}
override fun initListener() {
super.initListener()
binding.llPhoto.setOnClickListener {
}
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.appzxhy.R
import com.base.appzxhy.bean.recovery.FolderBean
import com.base.appzxhy.databinding.ItemFolderBinding
import com.base.appzxhy.databinding.ItemFolderRecoveryBinding
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_PHOTOS
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_VIDEOS
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
class FileFolderAdapter(
private val scanType: Int, private val click: (bean: FolderBean) -> Unit
) : RecyclerView.Adapter<FileFolderAdapter.FF>() {
private val TAG = "FileFolderAdapter"
private val beanList = arrayListOf<FolderBean>()
class FF(view: View) : ViewHolder(view)
fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FF {
val layout = when (scanType) {
SCAN_PHOTOS, SCAN_VIDEOS -> R.layout.item_folder_recovery
else -> R.layout.item_folder
}
return FF(layout.inflate(parent))
}
override fun getItemCount(): Int {
return beanList.size
}
fun Context.dpToPx(dps: Int): Int {
return Math.round(resources.displayMetrics.density * dps)
}
@SuppressLint("SetTextI18n", "CheckResult")
override fun onBindViewHolder(holder: FF, position: Int) {
val bean = beanList[position]
val context = holder.itemView.context
when (scanType) {
SCAN_PHOTOS, SCAN_VIDEOS -> {
val binding = ItemFolderRecoveryBinding.bind(holder.itemView)
runCatching {
val options = RequestOptions().transform(CenterCrop(), RoundedCorners(context.dpToPx(10)))
val image1 = bean.recoveryList[0].path
val request1 = Glide.with(context).load(image1).apply(options)
if (scanType == SCAN_VIDEOS) {
request1.error(R.drawable.videotu)
}
request1.into(binding.iv1)
val image2 = bean.recoveryList[1].path
val request2 = Glide.with(context).load(image2).apply(options)
if (scanType == SCAN_VIDEOS) {
request2.error(R.drawable.videotu)
}
request2.into(binding.iv2)
val image3 = bean.recoveryList[2].path
val request3 = Glide.with(context).load(image3).apply(options)
if (scanType == SCAN_VIDEOS) {
request3.error(R.drawable.videotu)
}
request3.into(binding.iv3)
}
binding.tvFolder.text = bean.folder
binding.tvFolderNumber.text = "(${bean.recoveryList.size})"
binding.root.setOnClickListener {
click.invoke(bean)
}
}
else -> {
// LogEx.logDebug(TAG, "scanType=$scanType")
val binding = ItemFolderBinding.bind(holder.itemView)
binding.tvFolder.text = bean.folder
binding.tvFileNumber.text = "${bean.recoveryList.size}"
binding.root.setOnClickListener {
click.invoke(bean)
}
}
}
}
@SuppressLint("NotifyDataSetChanged")
fun setData(list: List<FolderBean>) {
beanList.clear()
beanList.addAll(list)
notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
fun addData(list: List<FolderBean>) {
beanList.addAll(list)
notifyDataSetChanged()
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import java.io.File
import java.io.IOException
import java.io.RandomAccessFile
object FileHexEx {
private val TAG = "FileHexEx"
private const val HEXES = "0123456789ABCDEF"
fun readFileRange(filePath: String, start: Long, end: Long): ByteArray {
var data = byteArrayOf()
try {
val file = RandomAccessFile(filePath, "r")
file.seek(start)
val length = end - start
data = ByteArray(length.toInt())
file.readFully(data)
file.close()
} catch (e: IOException) {
e.printStackTrace()
}
return data
}
fun ByteArray.byteArrayToHexString(): String {
val hex = StringBuilder(2 * this.size)
for (element in this) {
val high = element.toInt().and(0xFF).shr(4)
val low = element.toInt().and(0x0F)
hex.append(HEXES[high]).append(HEXES[low])
}
return hex.toString()
}
fun isImage(file: File): Boolean {
return isWebp(file) || isPngOrJpg(file)
}
fun isPngOrJpg(file: File): Boolean {
val pngHex = "89504E47"
val jpgHex1 = "FFD8FFE0"
val jpgHex2 = "FFD8FFE1"
val hex = readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
return (hex == pngHex || hex == jpgHex1 || hex == jpgHex2)
}
fun isWebp(file: File): Boolean {
val webpHex = "57454250"
val hex = readFileRange(file.absolutePath, 8, 11).byteArrayToHexString()
return hex == webpHex
}
fun isDocument(file: File): Boolean {
return isPdf(file) ||
isDocx(file) ||
isXlsx(file) ||
isPPTX(file) ||
isXls(file) ||
isPPT(file) ||
isDoc(file)
}
fun isDoc(file: File): Boolean {
val docHex = "57006F007200640044006F00630075006D0065006E007400"
val hex = readFileRange(file.absolutePath, 1408, 1432).byteArrayToHexString()
val flag = hex == docHex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isPPT(file: File): Boolean {
val pptHex = "50006F0077006500720050006F0069006E0074"
val hex = readFileRange(file.absolutePath, 1408, 1427).byteArrayToHexString()
val flag = pptHex == hex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isPdf(file: File): Boolean {
val pdfHex = "25504446"
val hex = readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
return pdfHex == hex
}
fun isXls(file: File): Boolean {
val xlsHex = "4500540045007800740044006100740061"
val hex = readFileRange(file.absolutePath, 1280, 1297).byteArrayToHexString()
val flag = hex == xlsHex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isDocx(file: File): Boolean {
val docxHex = "6F6350726F70732F504B"
val hex = readFileRange(file.absolutePath, 31, 41).byteArrayToHexString()
val flag = docxHex == hex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isPPTX(file: File): Boolean {
val pptxHex = "6CCD97CB6EDB301045F705FA0F02B785"
val hex = readFileRange(file.absolutePath, 48, 64).byteArrayToHexString()
val flag = hex == pptxHex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isXlsx(file: File): Boolean {
val xlsxHex = "6CCD94CD6A02311485F785BE43C8B6CC"
val hex = readFileRange(file.absolutePath, 48, 64).byteArrayToHexString()
val flag = hex == xlsxHex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isVideo(file: File): Boolean {
return isMp4(file) || isAvi(file) || isMkv(file)
}
fun isMp4(file: File): Boolean {
val mp4Hex = "6D70343269736F6D000061316D6F6F76"
val hex = readFileRange(file.absolutePath, 16, 32).byteArrayToHexString()
val flag = hex == mp4Hex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isAvi(file: File): Boolean {
val aviHex = "524946461C1BA900415649204C495354"
val hex = readFileRange(file.absolutePath, 0, 16).byteArrayToHexString()
val flag = hex == aviHex
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
fun isMkv(file: File): Boolean {
val mkvHex1 = "42F7810142F2810442F381084282886D"
val hex1 = readFileRange(file.absolutePath, 16, 32).byteArrayToHexString()
val flag1 = hex1 == mkvHex1
// LogEx.logDebug(TAG, "flag1=$flag1 hex=${hex1} ${file.absolutePath}")
return if (flag1) {
true
} else {
val mkvHex2 = "42F7810142F2810442F381084282886D6174726F736B614287"
val hex2 = readFileRange(file.absolutePath, 9, 34).byteArrayToHexString()
val flag2 = hex2 == mkvHex2
// LogEx.logDebug(TAG, "flag2=$flag2 hex=${hex2} ${file.absolutePath}")
flag2
}
}
fun isAudio(file: File): Boolean {
return isMp3(file) || isFlac(file) || isWav(file)
}
fun isMp3(file: File): Boolean {
val mp3Hex1 = "49443303"
val hex1 = readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
val flag1 = hex1 == mp3Hex1
// LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
fun isFlac(file: File): Boolean {
val flacHex = "664C6143"
val hex1 = readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
val flag1 = hex1 == flacHex
// LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
fun isWav(file: File): Boolean {
val wavHex = "5249464668E7820957415645666D74"
val hex1 = readFileRange(file.absolutePath, 0, 15).byteArrayToHexString()
val flag1 = hex1 == wavHex
// LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Environment
import androidx.activity.addCallback
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.ads.AdsShowCallBack
import com.base.appzxhy.databinding.ActivityFileRecoveredBinding
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_AUDIOS
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_DOCUMENTS
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_PHOTOS
import com.base.appzxhy.ui.recovery.FileScanResultActivity.Companion.SCAN_VIDEOS
import java.io.File
class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>(ActivityFileRecoveredBinding::inflate) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initView()
initListener()
}
@SuppressLint("SetTextI18n")
override fun initView() {
useDefaultImmersive()
val number = intent.extras?.getInt("Number") ?: 0
val scanType = intent.extras?.getInt("ScanType")
val path: String? = intent.extras?.getString("Path")
binding.tvNumber.text = number.toString()
val type = when (scanType) {
SCAN_PHOTOS -> if (number == 1) "Photo" else "Photos"
SCAN_VIDEOS -> if (number == 1) "Video" else "Videos"
SCAN_DOCUMENTS -> if (number == 1) "Document" else "Documents"
SCAN_AUDIOS -> if (number == 1) "Audio" else "Audios"
else -> ""
}
binding.tvType.text = type
val appName = getString(R.string.app_name).replace("/", " ")
val appDir = File(Environment.getExternalStorageDirectory(), appName)
binding.tvDir.text = "Recovered in $appDir"
}
override fun initListener() {
binding.ivBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback {
AdsMgr.showInsert(this@FileRecoveredActivity, showCallBack = object : AdsShowCallBack() {
override fun next() {
finishToMainTop()
}
})
}
binding.tvContinue.setOnClickListener {
AdsMgr.showInsert(this@FileRecoveredActivity, showCallBack = object : AdsShowCallBack() {
override fun next() {
finish()
}
})
}
binding.tvFinish.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.view.LayoutInflater
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.base.appzxhy.R
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.DialogFileScanBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
class FileScanDialog(
val activity: AppCompatActivity,
) {
private val TAG = "FileScanDialog"
private val a1 = ValueAnimator.ofFloat(0f, -360f)
private val dialog = AlertDialog.Builder(activity).create()
private val binding = DialogFileScanBinding.inflate(LayoutInflater.from(activity))
@SuppressLint("SetTextI18n")
fun showFileScanDialog(
pathFlow: SharedFlow<String>,
foundFlow: SharedFlow<Pair<Int, String>>,
foundAction: ((path: String) -> Unit)? = null
): AlertDialog {
dialog?.setView(binding.root)
dialog?.setCanceledOnTouchOutside(false)
dialog?.setCancelable(false)
dialog?.show()
dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
val params = dialog?.window?.attributes
params?.width = activity.resources.getDimensionPixelOffset(R.dimen.dp_300)
dialog?.window?.attributes = params
a1.run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.iv.rotation = it.animatedValue as Float
}
start()
}
dialog?.setOnDismissListener {
a1.cancel()
}
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
var pathShowed = false
activity.lifecycleScope.launch(Dispatchers.Main) {
pathFlow.collectLatest { path ->
if (!pathShowed) {
pathShowed = true
binding.tvPath.visibility = View.VISIBLE
}
binding.tvPath.text = path
}
}
activity.lifecycleScope.launch {
foundFlow.collectLatest {
binding.tvFoundNumber.text = "Found ${it.first} files"
foundAction?.invoke(it.second)
}
}
return dialog
}
@SuppressLint("SetTextI18n")
fun finishScan(clickAction: () -> Unit) {
a1.cancel()
binding.tvBtn.visibility = View.VISIBLE
binding.iv.visibility = View.GONE
binding.tvPath.visibility = View.GONE
binding.tvTitle.text = "Scan Completed"
binding.tvBtn.setOnClickListener {
clickAction.invoke()
}
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.appzxhy.R
import com.base.appzxhy.databinding.DialogRecoveringBinding
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.io.File
import kotlin.random.Random
object RecoveringDialog {
@SuppressLint("SetTextI18n")
fun Context.showRecoveringDialog(
lifecycleScope: LifecycleCoroutineScope,
list: List<String>,
dir: File,
copyProgressAction: () -> Unit,
finish: () -> Unit
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogRecoveringBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
val mutableSharedFlow = MutableSharedFlow<Int>(
replay = 5,//当新的订阅者Collect时,发送几个已经发送过的数据给它
extraBufferCapacity = 5,//减去replay,MutableSharedFlow还缓存多少数据,缓冲池容量 = replay + extraBufferCapacity
onBufferOverflow = BufferOverflow.SUSPEND//缓存策略,三种 丢掉最新值、丢掉最旧值和挂起
)
val sharedFlow: SharedFlow<Int> = mutableSharedFlow
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
// 设置禁止通过拖动来隐藏
behavior.isHideable = false
// 禁止点击外部区域关闭
dialog.setOnCancelListener { dialogInterface ->
dialogInterface.cancel() // 这里可以处理点击外部区域的逻辑
}
lifecycleScope.launch(Dispatchers.IO) {
val arrayList = arrayListOf<String>().apply {
addAll(list)
}
var index = 0
while (arrayList.isNotEmpty()) {
val path = arrayList[0]
arrayList.removeAt(0)
val file = File(path)
runCatching {
val recoveryFile = File(dir, file.name)
file.copyTo(recoveryFile, true)
}
mutableSharedFlow.emit(index)
delay(Random.nextLong(500, 1500))
index++
}
mutableSharedFlow.emit(-1)
}
lifecycleScope.launch(Dispatchers.Main) {
sharedFlow.collectLatest {
// LogEx.logDebug(TAG, "Flow $it")
if (it == -1) {
finish.invoke()
dialog.dismiss()
cancel()
} else {
val process = it.toFloat() / list.size.toFloat()
if (process > 0.3) {
copyProgressAction.invoke()
}
binding.tvNumber.text = "${it + 1}/${list.size}"
}
}
}
dialog.show()
}
}
\ No newline at end of file
package com.base.appzxhy.ui.recovery
import android.annotation.SuppressLint
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.Dimension
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.appzxhy.R
import com.base.appzxhy.bean.recovery.RecoveryFilterBean
import com.base.appzxhy.databinding.ItemRecoveryFilterBinding
import androidx.core.graphics.toColorInt
class RecoveryFilterAdapter(
val click: (bean: RecoveryFilterBean) -> Unit
) : RecyclerView.Adapter<RecoveryFilterAdapter.YYDS>() {
private val beanList = arrayListOf<RecoveryFilterBean>()
inner class YYDS(view: View) : ViewHolder(view)
fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YYDS {
return YYDS(R.layout.item_recovery_filter.inflate(parent))
}
override fun getItemCount(): Int {
return beanList.size
}
override fun onBindViewHolder(holder: YYDS, position: Int) {
val binding = ItemRecoveryFilterBinding.bind(holder.itemView)
val bean = beanList[position]
val context = holder.itemView.context
binding.tv.text = bean.tittle
binding.iv.isVisible = bean.isSelect
if (bean.isSelect) {
binding.tv.setTextColor(Color.BLACK)
binding.tv.setTextSize(Dimension.SP, 18f)
} else {
binding.tv.setTextColor("#747474".toColorInt())
binding.tv.setTextSize(Dimension.SP, 16f)
}
binding.root.setOnClickListener {
click.invoke(bean)
}
}
@SuppressLint("NotifyDataSetChanged")
fun setData(list: List<RecoveryFilterBean>) {
beanList.clear()
beanList.addAll(list)
notifyDataSetChanged()
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#2372FC" android:state_checked="true" />
<item android:color="#E3E6EB" android:state_checked="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="18dp" />
<solid android:color="#355BEA" />
</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="#577DFD" />
<corners android:radius="22dp" />
</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="#577DFD" />
<corners
android:topLeftRadius="20dp"
android:topRightRadius="20dp" />
</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="#801B1B1B" />
<corners android:topLeftRadius="15dp" android:topRightRadius="15dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/t_weixuan" android:state_selected="false" />
<item android:drawable="@drawable/t_xuan" android:state_selected="true" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/quanxuan_n" android:state_selected="false" />
<item android:drawable="@drawable/quanxuan_s" android:state_selected="true" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:endColor="#EDF5FF"
android:startColor="#E7ECFF" />
<corners
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
</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="#F5F5F5" />
<corners android:radius="18dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<solid android:color="#ffffff" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_stroke_bfbec4_15" android:state_enabled="false" />
<item android:drawable="@drawable/bg_stroke_black_15" android:state_enabled="true" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#577DFD" />
<corners android:radius="22dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#BFBEC4" />
<corners android:radius="15dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#000000" />
<corners android:radius="15dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="#ffffff" />
<corners android:radius="22.5dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#577DFD"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout_editor_absoluteX="0dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:src="@drawable/icon_return_w"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UselessParent" />
<ImageView
android:id="@+id/iv_yanhua"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="18dp"
android:layout_marginTop="25dp"
android:src="@drawable/tu_yanhua"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivBack"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_number"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="15sp"
android:includeFontPadding="false"
android:textColor="#ffffff"
android:textSize="59sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/iv_yanhua"
app:layout_constraintStart_toEndOf="@id/iv_yanhua"
app:layout_constraintTop_toTopOf="@id/iv_yanhua"
tools:text="2" />
<TextView
android:id="@+id/tv_type"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="14dp"
android:layout_marginBottom="10dp"
android:includeFontPadding="false"
android:textColor="#ffffff"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/tv_number"
app:layout_constraintStart_toEndOf="@id/tv_number"
tools:text="Photos" />
<TextView
android:id="@+id/tv_success"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
android:text="Recovered successfully!"
android:textColor="#ffffff"
android:textSize="25sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@id/iv_yanhua"
app:layout_constraintTop_toBottomOf="@id/iv_yanhua"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_dir"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="18dp"
android:textColor="#ffffff"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/iv_yanhua"
app:layout_constraintTop_toBottomOf="@id/tv_success"
tools:text="Recovered in " />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="25dp"
android:src="@drawable/tubg_yanhua"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="60dp">
<TextView
android:id="@+id/tv_continue"
android:layout_width="160dp"
android:layout_height="46dp"
android:layout_gravity="start"
android:background="@drawable/bg_stroke_ffffff_22"
android:gravity="center"
android:text="Continue"
android:textColor="#ffffff"
android:textSize="18sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_finish"
android:layout_width="160dp"
android:layout_height="46dp"
android:layout_marginStart="25dp"
android:background="@drawable/bg_f5f5f5_18"
android:gravity="center"
android:text="Finish"
android:textColor="#577DFD"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTop"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/quit"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/fl_fanhui"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/fl_fanhui"
tools:text="Photo Recovery" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="123dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
app:cardBackgroundColor="#F0F3FA"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv_wancheng"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="8dp"
android:src="@drawable/wancheng"
android:visibility="gone"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_scanning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Scanning"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
<View
android:id="@+id/line"
android:layout_width="1px"
android:layout_height="28dp"
android:background="#C8CBD2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_finish" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/line"
app:layout_constraintEnd_toStartOf="@+id/line"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/line">
<TextView
android:id="@+id/tv_file_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="0"
android:textColor="#000000"
android:textSize="23sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_file_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:textColor="#768294"
android:textSize="14sp"
android:textStyle="bold"
tools:text="Photos" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/line"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/line"
app:layout_constraintTop_toTopOf="@id/line">
<TextView
android:id="@+id/tv_folder_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="0"
android:textColor="#000000"
android:textSize="23sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="Folders"
android:textColor="#768294"
android:textSize="14sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_folder_recovery" />
<LinearLayout
android:id="@+id/fl_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/queshengye"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="File no found"
android:textColor="#000000"
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
......@@ -23,7 +23,7 @@
android:layout_gravity="center_vertical"
android:layout_marginStart="20dp"
android:scaleType="centerInside"
android:src="@mipmap/zhuanquan"
android:src="@drawable/zhuanquan"
tools:ignore="ContentDescription" />
<TextView
......
......@@ -20,7 +20,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="23dp"
android:src="@mipmap/jiazai_ad"
android:src="@drawable/jiazai_ad"
tools:ignore="ContentDescription" />
<TextView
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:gravity="center"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="345dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:cardBackgroundColor="#ffffff"
app:cardCornerRadius="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:text="Exit scanning"
android:textColor="#000000"
android:textSize="19sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="35dp"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="lf you exit, the scanning results will be discarded."
android:textColor="#000000"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="25dp">
<TextView
android:id="@+id/tv_n"
android:layout_width="145dp"
android:layout_height="45dp"
android:layout_marginHorizontal="8dp"
android:background="@drawable/bg_stroke_577dfd_22"
android:gravity="center"
android:text="Exit"
android:textColor="#577DFD"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_y"
android:layout_width="145dp"
android:layout_height="45dp"
android:layout_marginHorizontal="8dp"
android:background="@drawable/bg_577dfd_22"
android:gravity="center"
android:text="Continue"
android:textColor="#ffffff"
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="345dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp" />
</androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="300dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:cardCornerRadius="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="13dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/jiazai_scan"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="5dp"
android:text="Scanning"
android:textColor="#000000"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<TextView
android:id="@+id/tv_found_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginVertical="5dp"
android:text="Found 0 files"
android:textColor="#333333"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_path"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:ellipsize="middle"
android:singleLine="true"
android:textColor="#666666"
android:textSize="12sp"
android:visibility="gone" />
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp" />
<TextView
android:id="@+id/tv_btn"
android:layout_width="251dp"
android:layout_height="45dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="25dp"
android:background="@drawable/bg_577dfd_22"
android:gravity="center"
android:text="Finish"
android:textColor="#ffffff"
android:textSize="17sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:background="@drawable/bg_ffffff_10"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="Permission request"
android:textColor="#000000"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="22dp"
android:layout_marginBottom="38dp"
android:textSize="13sp" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_full_lottie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="23dp"
android:layout_marginTop="40dp"
android:layout_marginBottom="14dp">
<TextView
android:id="@+id/id_deny"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_marginEnd="13dp"
android:layout_weight="1"
android:background="@drawable/bg_f5f5f5_18"
android:gravity="center"
android:text="Deny"
android:textColor="#000000"
android:textSize="17sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/id_tv_allow"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_weight="1"
android:background="@drawable/bg_355bea_18"
android:gravity="center"
android:text="Allow"
android:textColor="#ffffff"
android:textSize="17sp"
tools:ignore="HardcodedText" />
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_577dfd_tlr20"
android:orientation="vertical">
<TextView
android:id="@+id/tv_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="18dp"
android:layout_marginTop="40dp"
android:textColor="#ffffff"
android:textSize="45sp"
android:textStyle="bold"
tools:text="0/1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="18dp"
android:layout_marginTop="25dp"
android:text="Recovering..."
android:textColor="#ffffff"
android:textSize="25sp"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="18dp"
android:layout_marginTop="15dp"
android:text="It may take a few seconds to recover the file(s), please wait.."
android:textColor="#ffffff"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="26dp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F4F5F9"
android:orientation="vertical"
tools:context=".ui.main.RecoveryFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/recovery"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_17"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_16"
android:text="@string/recover_tip"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
<com.base.appzxhy.business.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="@dimen/dp_10">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/zhanwei1" />
</com.base.appzxhy.business.ads.NativeParentView>
<LinearLayout
android:id="@+id/llPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
android:layout_height="@dimen/dp_80"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/bg_ffffff_8"
android:foreground="?attr/selectableItemBackground"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_15"
app:srcCompat="@drawable/icon_photos" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/photos"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recover_lost_photos"
android:textColor="#999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
app:srcCompat="@drawable/icon_next" />
</LinearLayout>
<LinearLayout
android:id="@+id/llVideo"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_80"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/bg_ffffff_8"
android:foreground="?attr/selectableItemBackground"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_15"
app:srcCompat="@drawable/icon_videos" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/videos"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recover_lost_videos"
android:textColor="#999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
app:srcCompat="@drawable/icon_next" />
</LinearLayout>
<LinearLayout
android:id="@+id/llAudio"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_80"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/bg_ffffff_8"
android:foreground="?attr/selectableItemBackground"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_15"
app:srcCompat="@drawable/icon_audios" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/audios"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recover_lost_photos"
android:textColor="#999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
app:srcCompat="@drawable/icon_next" />
</LinearLayout>
<LinearLayout
android:id="@+id/llDocument"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_80"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/bg_ffffff_8"
android:foreground="?attr/selectableItemBackground"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_15"
app:srcCompat="@drawable/icon_documents" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/documents"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recover_lost_documents"
android:textColor="#999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
app:srcCompat="@drawable/icon_next" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/bg_circle_selector"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
tools:ignore="ContentDescription"
tools:src="@mipmap/xls" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:textColor="#000000"
android:textSize="16sp"
tools:text="xxxx.xls" />
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:textColor="#768294"
android:textSize="12sp"
tools:text="2024-06-20 18.9 KB" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/wenjianjia"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_folder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="15dp"
android:layout_weight="1"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Documents" />
<TextView
android:id="@+id/tv_file_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="5dp"
android:textColor="#7D849E"
android:textStyle="bold"
tools:text="16" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/jianotu"
tools:ignore="ContentDescription" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_folder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Hidden Files" />
<TextView
android:id="@+id/tv_folder_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="9dp"
android:layout_weight="1"
android:ellipsize="middle"
android:singleLine="true"
android:textColor="#7D849E"
android:textSize="16sp"
android:textStyle="bold"
tools:text="(1786)" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/jianotu"
tools:ignore="ContentDescription" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:id="@+id/iv_1"
android:layout_width="106dp"
android:layout_height="106dp"
android:layout_gravity="start"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_2"
android:layout_width="106dp"
android:layout_height="106dp"
android:layout_gravity="center"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_3"
android:layout_width="106dp"
android:layout_height="106dp"
android:layout_gravity="end"
tools:ignore="ContentDescription" />
</FrameLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="164dp"
android:layout_height="164dp"
android:layout_margin="8dp"
app:cardCornerRadius="15dp">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<FrameLayout
android:id="@+id/fl_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:src="@drawable/bg_circle_border_selector"
tools:ignore="ContentDescription" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="36dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_801b1b1b_15">
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:textColor="#ffffff"
android:textSize="15sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@drawable/tuicon"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="105dp"
android:layout_height="105dp"
android:layout_margin="8dp"
app:cardCornerRadius="12.5dp">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<FrameLayout
android:id="@+id/fl_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:src="@drawable/bg_circle_border_selector"
tools:ignore="ContentDescription" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_801b1b1b_15">
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:textColor="@android:color/white"
android:textSize="12.5sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@drawable/tuicon"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="85dp"
android:layout_height="85dp"
android:layout_margin="8dp"
app:cardCornerRadius="12.5dp">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<FrameLayout
android:id="@+id/fl_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:src="@drawable/bg_circle_border_selector"
tools:ignore="ContentDescription" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_801b1b1b_15">
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:textColor="#ffffff"
android:textSize="10sp"
tools:ignore="SmallSp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@drawable/tuicon"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="6dp"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<TextView
android:id="@+id/tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center_vertical"
android:textSize="16sp"
android:textStyle="bold"
tools:text="All" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/gxuan"
tools:ignore="ContentDescription" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="8dp"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl_tittle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText"
tools:text="Today" />
<LinearLayout
android:id="@+id/ll_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="16dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="5dp"
android:src="@drawable/bg_circle_selector"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_media_columns"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
</LinearLayout>
\ No newline at end of file
......@@ -2,6 +2,7 @@
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="transparent">#00000000</color>
<color name="colorPrimary">#3e7bf7</color>
<color name="colorDisEnable">#FF7DB9FF</color>
......
......@@ -26,4 +26,5 @@
<dimen name="sp_18">18sp</dimen>
<dimen name="dp_4">4dp</dimen>
<dimen name="dp_60">60dp</dimen>
<dimen name="sp_14">14sp</dimen>
</resources>
\ No newline at end of file
......@@ -101,5 +101,13 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="compress_all">Compress All</string>
<string name="best_quality_photo">Best quality photo</string>
<string name="most_space_saved">Most space saved</string>
<string name="recover_tip">Recover lost data from unrooted Android devices</string>
<string name="photos">Photos</string>
<string name="recover_lost_photos">Recover lost photos</string>
<string name="videos">Videos</string>
<string name="recover_lost_videos">Recover lost videos</string>
<string name="audios">Audios</string>
<string name="documents">Documents</string>
<string name="recover_lost_documents">Recover lost Documents</string>
</resources>
......@@ -20,4 +20,13 @@
<item name="android:windowBackground">@drawable/splash_bp</item>
<item name="android:windowFullscreen">false</item>
</style>
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/BottomSheetStyleWrapper</item>
</style>
<style name="BottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
</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