Commit d847feb0 authored by wanglei's avatar wanglei

...

parent 49d69b86
...@@ -11,6 +11,7 @@ import androidx.core.view.ViewCompat ...@@ -11,6 +11,7 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.base.datarecovery.R import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
...@@ -40,6 +41,7 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() { ...@@ -40,6 +41,7 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
SCAN_PHOTOS -> if (number == 1) "Photo" else "Photos" SCAN_PHOTOS -> if (number == 1) "Photo" else "Photos"
SCAN_VIDEOS -> if (number == 1) "Video" else "Videos" SCAN_VIDEOS -> if (number == 1) "Video" else "Videos"
SCAN_DOCUMENTS -> if (number == 1) "Document" else "Documents" SCAN_DOCUMENTS -> if (number == 1) "Document" else "Documents"
SCAN_AUDIOS -> if (number == 1) "Audio" else "Audios"
else -> "" else -> ""
} }
binding.tvType.text = type binding.tvType.text = type
......
...@@ -14,6 +14,7 @@ import androidx.lifecycle.lifecycleScope ...@@ -14,6 +14,7 @@ import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.R import com.base.datarecovery.R
import com.base.datarecovery.adapter.FileTimeColumnsAdapter import com.base.datarecovery.adapter.FileTimeColumnsAdapter
import com.base.datarecovery.adapter.RecoveryFilterAdapter import com.base.datarecovery.adapter.RecoveryFilterAdapter
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
...@@ -85,6 +86,10 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() { ...@@ -85,6 +86,10 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
binding.clThumbnails.visibility = View.GONE binding.clThumbnails.visibility = View.GONE
} }
SCAN_AUDIOS -> {
binding.clThumbnails.visibility = View.GONE
binding.llLayout.visibility = View.GONE
}
} }
adapter = FileTimeColumnsAdapter(scanType, adapter = FileTimeColumnsAdapter(scanType,
...@@ -158,6 +163,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() { ...@@ -158,6 +163,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
SCAN_PHOTOS -> dirType = "Photo" SCAN_PHOTOS -> dirType = "Photo"
SCAN_DOCUMENTS -> dirType = "Document" SCAN_DOCUMENTS -> dirType = "Document"
SCAN_VIDEOS -> dirType = "Video" SCAN_VIDEOS -> dirType = "Video"
SCAN_AUDIOS -> dirType = "Audio"
} }
val appName = this.resources.getString(R.string.app_name) val appName = this.resources.getString(R.string.app_name)
val appDir = File(Environment.getExternalStorageDirectory(), appName) val appDir = File(Environment.getExternalStorageDirectory(), appName)
......
...@@ -10,6 +10,7 @@ import androidx.core.view.isVisible ...@@ -10,6 +10,7 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.FileFolderAdapter import com.base.datarecovery.adapter.FileFolderAdapter
import com.base.datarecovery.ads.AdmobMaxHelper import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS import com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
...@@ -69,6 +70,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() { ...@@ -69,6 +70,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
binding.tvTittle.text = "Video Recovery" binding.tvTittle.text = "Video Recovery"
binding.tvFileType.text = "videos" binding.tvFileType.text = "videos"
} }
SCAN_AUDIOS -> {
binding.tvTittle.text = "Audio Recovery"
binding.tvFileType.text = "Audios"
}
} }
fileFolderAdapter = FileFolderAdapter(scanType) { folderBean -> fileFolderAdapter = FileFolderAdapter(scanType) { folderBean ->
FileRecoveryActivity.folderBean = null FileRecoveryActivity.folderBean = null
...@@ -145,6 +150,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() { ...@@ -145,6 +150,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
SCAN_PHOTOS -> FileHexEx::isImage SCAN_PHOTOS -> FileHexEx::isImage
SCAN_DOCUMENTS -> FileHexEx::isDocument SCAN_DOCUMENTS -> FileHexEx::isDocument
SCAN_VIDEOS -> FileHexEx::isVideo SCAN_VIDEOS -> FileHexEx::isVideo
SCAN_AUDIOS -> FileHexEx::isAudio
else -> FileHexEx::isImage else -> FileHexEx::isImage
} }
val root = Environment.getExternalStorageDirectory() val root = Environment.getExternalStorageDirectory()
......
...@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager ...@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.datarecovery.R import com.base.datarecovery.R
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.FolderBean import com.base.datarecovery.bean.FolderBean
import com.base.datarecovery.bean.RecoveryBean import com.base.datarecovery.bean.RecoveryBean
...@@ -55,7 +56,7 @@ class FileTimeColumnsAdapter( ...@@ -55,7 +56,7 @@ class FileTimeColumnsAdapter(
val subAdapter = MediaColumnsAdapter() val subAdapter = MediaColumnsAdapter()
if (scanType == SCAN_DOCUMENTS) { if (scanType == SCAN_DOCUMENTS || scanType == SCAN_AUDIOS) {
binding.rvMediaColumns.layoutManager = LinearLayoutManager(context) binding.rvMediaColumns.layoutManager = LinearLayoutManager(context)
} else { } else {
binding.rvMediaColumns.layoutManager = GridLayoutManager(context, columns) binding.rvMediaColumns.layoutManager = GridLayoutManager(context, columns)
...@@ -105,7 +106,7 @@ class FileTimeColumnsAdapter( ...@@ -105,7 +106,7 @@ class FileTimeColumnsAdapter(
4 -> R.layout.item_media_columns4 4 -> R.layout.item_media_columns4
else -> R.layout.item_media_columns2 else -> R.layout.item_media_columns2
} }
if (scanType == SCAN_DOCUMENTS) { if ((scanType == SCAN_DOCUMENTS) || (scanType == SCAN_AUDIOS)) {
layout = R.layout.item_document layout = R.layout.item_document
} }
return CS(layout.inflate(parent)) return CS(layout.inflate(parent))
...@@ -123,7 +124,7 @@ class FileTimeColumnsAdapter( ...@@ -123,7 +124,7 @@ class FileTimeColumnsAdapter(
val context = holder.itemView.context val context = holder.itemView.context
val data = list[position] val data = list[position]
if (scanType == SCAN_DOCUMENTS) { if ((scanType == SCAN_DOCUMENTS) or (scanType == SCAN_AUDIOS)) {
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
val binding = ItemDocumentBinding.bind(holder.itemView) val binding = ItemDocumentBinding.bind(holder.itemView)
binding.ivSelector.isSelected = data.isSelect binding.ivSelector.isSelected = data.isSelect
......
...@@ -135,7 +135,7 @@ object AdmobMaxHelper { ...@@ -135,7 +135,7 @@ object AdmobMaxHelper {
AdMaxInit.maxInitAction = { AdMaxInit.maxInitAction = {
Log.d(TAG, "max init suc") Log.d(TAG, "max init suc")
// AdMaxOpenUtils.loadAppOpenAd(activity) // AdMaxOpenUtils.loadAppOpenAd(activity)
AdMaxInterstitialUtils.loadInterstitialAd(activity) // AdMaxInterstitialUtils.loadInterstitialAd(activity)
} }
} }
} }
......
...@@ -44,7 +44,9 @@ object AdMaxInterstitialUtils { ...@@ -44,7 +44,9 @@ object AdMaxInterstitialUtils {
} }
override fun onAdLoadFailed(p0: String, p1: MaxError) { override fun onAdLoadFailed(p0: String, p1: MaxError) {
LogEx.logDebug(TAG, "onAdLoadFailed") LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p0)
LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p1.message.toString())
LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p1.code)
val reqId = UUID.randomUUID().toString() val reqId = UUID.randomUUID().toString()
AdMaxEvent.pullAd(null, "interAd", reqId = reqId, error = p1.message, code = p1.code) AdMaxEvent.pullAd(null, "interAd", reqId = reqId, error = p1.message, code = p1.code)
AdDisplayUtils.getInstance().incrementAdRequestFailCount() AdDisplayUtils.getInstance().incrementAdRequestFailCount()
......
...@@ -34,6 +34,7 @@ object ConstObject { ...@@ -34,6 +34,7 @@ object ConstObject {
const val SCAN_PHOTOS = 1 const val SCAN_PHOTOS = 1
const val SCAN_DOCUMENTS = 2 const val SCAN_DOCUMENTS = 2
const val SCAN_VIDEOS = 3 const val SCAN_VIDEOS = 3
const val SCAN_AUDIOS = 4
const val SELECT_FILE_ALL = "All types" const val SELECT_FILE_ALL = "All types"
const val SELECT_FILE_PICTURE = "Picture" const val SELECT_FILE_PICTURE = "Picture"
......
...@@ -39,6 +39,11 @@ class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>() { ...@@ -39,6 +39,11 @@ class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>() {
putExtra("ScanType", ConstObject.SCAN_DOCUMENTS) putExtra("ScanType", ConstObject.SCAN_DOCUMENTS)
}) })
} }
binding.cardRyAudio.setOnClickListener {
startActivity(Intent(requireContext(), FileScanResultActivity::class.java).apply {
putExtra("ScanType", ConstObject.SCAN_AUDIOS)
})
}
binding.cardPrivacySpace.setOnClickListener { binding.cardPrivacySpace.setOnClickListener {
if (ConstObject.privacyPinPassword.isNotEmpty()) { if (ConstObject.privacyPinPassword.isNotEmpty()) {
startActivity(Intent(requireContext(), PrivacyPinOneActivity::class.java)) startActivity(Intent(requireContext(), PrivacyPinOneActivity::class.java))
...@@ -51,6 +56,7 @@ class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>() { ...@@ -51,6 +56,7 @@ class RecoveryFragment : BaseFragment<FragmentRecoveryBinding>() {
binding.cardPhotosManager.setOnClickListener { binding.cardPhotosManager.setOnClickListener {
startActivity(Intent(requireContext(), PhotoManagerAnimationActivity::class.java)) startActivity(Intent(requireContext(), PhotoManagerAnimationActivity::class.java))
} }
} }
override fun onResume() { override fun onResume() {
......
...@@ -126,5 +126,33 @@ object FileHexEx { ...@@ -126,5 +126,33 @@ object FileHexEx {
} }
fun isAudio(file: File): Boolean {
return isMp3(file) || isFlac(file) || isWav(file)
}
fun isMp3(file: File): Boolean {
val mp3Hex1 = "49443303"
val hex1 = FileHelp.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 = FileHelp.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 = FileHelp.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
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