Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
D
Data Recovery White
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Data Recovery White
Commits
7d3cd81b
Commit
7d3cd81b
authored
Jul 04, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...ui
parent
239af647
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
535 additions
and
55 deletions
+535
-55
MyApplication.kt
app/src/main/java/com/base/datarecovery/MyApplication.kt
+16
-12
FileRecoveredActivity.kt
...a/com/base/datarecovery/activity/FileRecoveredActivity.kt
+37
-0
FileRecoveryActivity.kt
...va/com/base/datarecovery/activity/FileRecoveryActivity.kt
+8
-6
FileScanResultActivity.kt
.../com/base/datarecovery/activity/FileScanResultActivity.kt
+5
-0
SplashActivity.kt
...ain/java/com/base/datarecovery/activity/SplashActivity.kt
+21
-2
FileTimeColumnsAdapter.kt
...a/com/base/datarecovery/adapter/FileTimeColumnsAdapter.kt
+72
-20
AdmobOpenUtils.kt
...src/main/java/com/base/datarecovery/ads/AdmobOpenUtils.kt
+124
-0
RecoveryBean.kt
app/src/main/java/com/base/datarecovery/bean/RecoveryBean.kt
+28
-0
ConfigHelper.kt
app/src/main/java/com/base/datarecovery/help/ConfigHelper.kt
+0
-1
LogEx.kt
app/src/main/java/com/base/datarecovery/utils/LogEx.kt
+1
-0
DialogViews.kt
app/src/main/java/com/base/datarecovery/view/DialogViews.kt
+2
-2
bg_ffffff_22.xml
app/src/main/res/drawable/bg_ffffff_22.xml
+7
-0
bg_stroke_ffffff_22.xml
app/src/main/res/drawable/bg_stroke_ffffff_22.xml
+8
-0
activity_file_recovered.xml
app/src/main/res/layout/activity_file_recovered.xml
+128
-2
activity_file_recovery.xml
app/src/main/res/layout/activity_file_recovery.xml
+16
-7
item_document.xml
app/src/main/res/layout/item_document.xml
+56
-0
item_time_media.xml
app/src/main/res/layout/item_time_media.xml
+2
-3
doc.png
app/src/main/res/mipmap-xxhdpi/doc.png
+0
-0
fanhui.png
app/src/main/res/mipmap-xxhdpi/fanhui.png
+0
-0
pdf.png
app/src/main/res/mipmap-xxhdpi/pdf.png
+0
-0
ppt.png
app/src/main/res/mipmap-xxhdpi/ppt.png
+0
-0
tu_yanhua.png
app/src/main/res/mipmap-xxhdpi/tu_yanhua.png
+0
-0
tubg_yanhua.png
app/src/main/res/mipmap-xxhdpi/tubg_yanhua.png
+0
-0
xls.png
app/src/main/res/mipmap-xxhdpi/xls.png
+0
-0
dimens.xml
app/src/main/res/values/dimens.xml
+4
-0
No files found.
app/src/main/java/com/base/datarecovery/MyApplication.kt
View file @
7d3cd81b
...
@@ -2,7 +2,10 @@ package com.base.datarecovery
...
@@ -2,7 +2,10 @@ package com.base.datarecovery
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.Activity
import
android.app.Activity
import
android.content.Intent
import
android.os.Bundle
import
android.os.Bundle
import
com.base.datarecovery.activity.SplashActivity
import
com.base.datarecovery.ads.AdmobOpenUtils
import
com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import
com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import
com.base.datarecovery.help.BaseApplication
import
com.base.datarecovery.help.BaseApplication
import
com.base.datarecovery.help.ConfigHelper
import
com.base.datarecovery.help.ConfigHelper
...
@@ -25,6 +28,7 @@ class MyApplication : BaseApplication() {
...
@@ -25,6 +28,7 @@ class MyApplication : BaseApplication() {
MobileAds
.
initialize
(
this
)
{
initializationStatus
->
MobileAds
.
initialize
(
this
)
{
initializationStatus
->
}
}
}
}
initLifeListener
()
}
}
...
@@ -58,18 +62,18 @@ class MyApplication : BaseApplication() {
...
@@ -58,18 +62,18 @@ class MyApplication : BaseApplication() {
}
}
if
(
flag
)
{
if
(
flag
)
{
// if (Admob
Utils.isOpenAdLoaded()) {
if
(
AdmobOpen
Utils
.
isOpenAdLoaded
())
{
// Admob
Utils.showAppOpenAd(activity)
AdmobOpen
Utils
.
showAppOpenAd
(
activity
)
//
} else {
}
else
{
//
topActivity?.startActivity(
topActivity
?.
startActivity
(
//
Intent(
Intent
(
//
topActivity,
topActivity
,
// New
SplashActivity::class.java
SplashActivity
::
class
.
java
//
).apply {
).
apply
{
//
putExtra("isHotLaunch", true)
putExtra
(
"isHotLaunch"
,
true
)
//
putExtra("type", -1)
putExtra
(
"type"
,
-
1
)
//
})
})
//
}
}
}
}
}
}
}
}
...
...
app/src/main/java/com/base/datarecovery/activity/FileRecoveredActivity.kt
View file @
7d3cd81b
package
com.base.datarecovery.activity
package
com.base.datarecovery.activity
import
android.graphics.Color
import
android.os.Bundle
import
android.os.Bundle
import
androidx.activity.addCallback
import
androidx.activity.enableEdgeToEdge
import
androidx.activity.enableEdgeToEdge
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.view.ViewCompat
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.bean.ConstObject.SCAN_DOCUMENTS
import
com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import
com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
import
com.base.datarecovery.databinding.ActivityFileRecoveredBinding
import
com.base.datarecovery.databinding.ActivityFileRecoveredBinding
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.utils.BarUtils
class
FileRecoveredActivity
:
BaseActivity
<
ActivityFileRecoveredBinding
>()
{
class
FileRecoveredActivity
:
BaseActivity
<
ActivityFileRecoveredBinding
>()
{
...
@@ -17,6 +23,37 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
...
@@ -17,6 +23,37 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
override
fun
initView
()
{
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
val
number
=
intent
.
extras
?.
getInt
(
"Number"
)
?:
0
val
scanType
=
intent
.
extras
?.
getInt
(
"ScanType"
)
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"
else
->
""
}
binding
.
tvType
.
text
=
type
}
override
fun
initListener
()
{
binding
.
flFanhui
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
onBackPressedDispatcher
.
addCallback
{
finishToMain
()
}
binding
.
tvContinue
.
setOnClickListener
{
finish
()
}
binding
.
tvFinish
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/datarecovery/activity/FileRecoveryActivity.kt
View file @
7d3cd81b
...
@@ -6,13 +6,12 @@ import android.graphics.BitmapFactory
...
@@ -6,13 +6,12 @@ import android.graphics.BitmapFactory
import
android.graphics.Color
import
android.graphics.Color
import
android.os.Environment
import
android.os.Environment
import
android.view.View
import
android.view.View
import
android.widget.Toast
import
androidx.activity.addCallback
import
androidx.activity.addCallback
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
androidx.core.view.isVisible
import
androidx.core.view.isVisible
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
com.base.datarecovery.R
import
com.base.datarecovery.R
import
com.base.datarecovery.adapter.File
Media
ColumnsAdapter
import
com.base.datarecovery.adapter.File
Time
ColumnsAdapter
import
com.base.datarecovery.adapter.RecoveryFilterAdapter
import
com.base.datarecovery.adapter.RecoveryFilterAdapter
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
...
@@ -39,7 +38,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -39,7 +38,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
}
}
private
var
folderBean
:
FolderBean
?
=
null
private
var
folderBean
:
FolderBean
?
=
null
private
lateinit
var
adapter
:
File
Media
ColumnsAdapter
private
lateinit
var
adapter
:
File
Time
ColumnsAdapter
private
lateinit
var
filterAdapter
:
RecoveryFilterAdapter
private
lateinit
var
filterAdapter
:
RecoveryFilterAdapter
...
@@ -95,7 +94,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -95,7 +94,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
}
}
adapter
=
File
MediaColumnsAdapter
(
adapter
=
File
TimeColumnsAdapter
(
scanType
,
select
=
{
all
,
size
->
select
=
{
all
,
size
->
binding
.
ivSelectAll
.
isSelected
=
all
binding
.
ivSelectAll
.
isSelected
=
all
binding
.
tvRecover
.
text
=
"Recover($size)"
binding
.
tvRecover
.
text
=
"Recover($size)"
...
@@ -125,7 +124,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -125,7 +124,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
binding
.
switchThumbnails
.
setOnCheckedChangeListener
{
buttonView
,
isChecked
->
binding
.
switchThumbnails
.
setOnCheckedChangeListener
{
buttonView
,
isChecked
->
adapter
.
toggleThumbnails
(
isChecked
)
adapter
.
toggleThumbnails
(
isChecked
)
}
}
binding
.
iv
SelectAll
.
setOnClickListener
{
binding
.
fl
SelectAll
.
setOnClickListener
{
binding
.
ivSelectAll
.
isSelected
=
!
binding
.
ivSelectAll
.
isSelected
binding
.
ivSelectAll
.
isSelected
=
!
binding
.
ivSelectAll
.
isSelected
adapter
.
toggleAllSelect
(
binding
.
ivSelectAll
.
isSelected
)
adapter
.
toggleAllSelect
(
binding
.
ivSelectAll
.
isSelected
)
}
}
...
@@ -161,7 +160,10 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -161,7 +160,10 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
},
finish
=
{
},
finish
=
{
adapter
.
toggleAllSelect
(
false
)
adapter
.
toggleAllSelect
(
false
)
startActivity
(
Intent
(
this
,
FileRecoveredActivity
::
class
.
java
))
startActivity
(
Intent
(
this
,
FileRecoveredActivity
::
class
.
java
).
apply
{
putExtra
(
"Number"
,
list
.
size
)
putExtra
(
"ScanType"
,
scanType
)
})
})
})
}
}
...
...
app/src/main/java/com/base/datarecovery/activity/FileScanResultActivity.kt
View file @
7d3cd81b
...
@@ -10,6 +10,7 @@ import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
...
@@ -10,6 +10,7 @@ import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
import
com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
import
com.base.datarecovery.bean.ConstObject.SCAN_VIDEOS
import
com.base.datarecovery.bean.FolderBean
import
com.base.datarecovery.bean.FolderBean
import
com.base.datarecovery.bean.RecoveryBean
import
com.base.datarecovery.bean.RecoveryBean
import
com.base.datarecovery.bean.RecoveryBean.Companion.setType
import
com.base.datarecovery.databinding.ActivityFileScanResultBinding
import
com.base.datarecovery.databinding.ActivityFileScanResultBinding
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.utils.BarUtils
import
com.base.datarecovery.utils.BarUtils
...
@@ -90,6 +91,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
...
@@ -90,6 +91,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
val
list
=
hashMap
.
map
{
val
list
=
hashMap
.
map
{
val
folder
=
it
.
key
.
split
(
"/"
).
last
()
val
folder
=
it
.
key
.
split
(
"/"
).
last
()
if
(
scanType
==
SCAN_DOCUMENTS
)
{
it
.
value
.
forEach
{
bean
->
bean
.
setType
()
}
}
FolderBean
(
folder
,
recoveryList
=
it
.
value
)
FolderBean
(
folder
,
recoveryList
=
it
.
value
)
}
}
binding
.
tvFolderNumber
.
text
=
list
.
size
.
toString
()
binding
.
tvFolderNumber
.
text
=
list
.
size
.
toString
()
...
...
app/src/main/java/com/base/datarecovery/activity/SplashActivity.kt
View file @
7d3cd81b
...
@@ -10,10 +10,12 @@ import android.text.style.UnderlineSpan
...
@@ -10,10 +10,12 @@ import android.text.style.UnderlineSpan
import
android.view.View
import
android.view.View
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
com.base.datarecovery.ads.AdmobNativeUtils
import
com.base.datarecovery.ads.AdmobNativeUtils
import
com.base.datarecovery.ads.AdmobOpenUtils
import
com.base.datarecovery.databinding.ActivitySplashBinding
import
com.base.datarecovery.databinding.ActivitySplashBinding
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.ConfigHelper
import
com.base.datarecovery.help.ConfigHelper
import
com.base.datarecovery.utils.BarUtils
import
com.base.datarecovery.utils.BarUtils
import
com.base.datarecovery.utils.LogEx
import
com.base.datarecovery.utils.SPUtils
import
com.base.datarecovery.utils.SPUtils
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.delay
...
@@ -27,6 +29,7 @@ import kotlin.random.Random
...
@@ -27,6 +29,7 @@ import kotlin.random.Random
@SuppressLint
(
"CustomSplashScreen"
)
@SuppressLint
(
"CustomSplashScreen"
)
class
SplashActivity
:
BaseActivity
<
ActivitySplashBinding
>()
{
class
SplashActivity
:
BaseActivity
<
ActivitySplashBinding
>()
{
private
val
TAG
=
"SplashActivity"
private
var
job
:
Job
?
=
null
private
var
job
:
Job
?
=
null
private
val
progress
=
MutableSharedFlow
<
Int
>()
private
val
progress
=
MutableSharedFlow
<
Int
>()
private
val
progressFlow
:
SharedFlow
<
Int
>
=
progress
private
val
progressFlow
:
SharedFlow
<
Int
>
=
progress
...
@@ -77,6 +80,9 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
...
@@ -77,6 +80,9 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
}
}
AdmobNativeUtils
.
loadNativeAd
()
AdmobNativeUtils
.
loadNativeAd
()
AdmobOpenUtils
.
loadAppOpenAd
{
LogEx
.
logDebug
(
TAG
,
"load where=$it"
)
}
}
}
private
fun
jumpNext
()
{
private
fun
jumpNext
()
{
...
@@ -105,12 +111,25 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
...
@@ -105,12 +111,25 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
}
}
}
}
fun
startProgress
()
=
lifecycleScope
.
launch
{
var
processTime
=
0L
private
fun
startProgress
()
=
lifecycleScope
.
launch
{
while
(
isActive
)
{
while
(
isActive
)
{
delay
(
Random
.
nextLong
(
50
,
150
))
val
value
=
binding
.
pb
.
progress
+
Random
.
nextInt
(
3
,
5
)
val
value
=
binding
.
pb
.
progress
+
Random
.
nextInt
(
3
,
5
)
binding
.
pb
.
setProgress
(
value
,
true
)
binding
.
pb
.
setProgress
(
value
,
true
)
progress
.
emit
(
value
)
progress
.
emit
(
value
)
val
delayTime
=
Random
.
nextLong
(
300
,
550
)
delay
(
delayTime
)
processTime
+=
delayTime
if
(
processTime
>=
3000
)
{
AdmobOpenUtils
.
showAppOpenAd
(
this
@SplashActivity
)
{
LogEx
.
logDebug
(
TAG
,
"where $it"
)
binding
.
pb
.
progress
=
100
startActivity
(
Intent
(
this
@SplashActivity
,
MainActivity
::
class
.
java
))
finish
()
}
}
}
}
}
}
...
...
app/src/main/java/com/base/datarecovery/adapter/File
Media
ColumnsAdapter.kt
→
app/src/main/java/com/base/datarecovery/adapter/File
Time
ColumnsAdapter.kt
View file @
7d3cd81b
package
com.base.datarecovery.adapter
package
com.base.datarecovery.adapter
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.view.Gravity
import
android.view.View
import
android.view.View
import
android.view.ViewGroup
import
android.view.ViewGroup
import
android.widget.ImageView
import
android.widget.ImageView
import
android.widget.LinearLayout
import
android.widget.TextView
import
android.widget.TextView
import
androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.GridLayoutManager
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_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
import
com.base.datarecovery.databinding.ItemMediaBinding
import
com.base.datarecovery.databinding.ItemDocumentBinding
import
com.base.datarecovery.databinding.ItemTimeMediaBinding
import
com.base.datarecovery.help.KotlinExt.toFormatSize
import
com.base.datarecovery.help.KotlinExt.toFormatSize
import
com.base.datarecovery.view.XmlEx.inflate
import
com.base.datarecovery.view.XmlEx.inflate
import
com.bumptech.glide.Glide
import
com.bumptech.glide.Glide
import
java.io.File
import
java.io.File
import
java.text.SimpleDateFormat
import
java.util.Locale
class
FileMediaColumnsAdapter
(
class
FileTimeColumnsAdapter
(
val
scanType
:
Int
,
val
select
:
(
all
:
Boolean
,
size
:
Int
)
->
Unit
,
val
select
:
(
all
:
Boolean
,
size
:
Int
)
->
Unit
,
)
:
RecyclerView
.
Adapter
<
File
Media
ColumnsAdapter
.
MCV
>()
{
)
:
RecyclerView
.
Adapter
<
File
Time
ColumnsAdapter
.
MCV
>()
{
private
val
beanList
=
arrayListOf
<
FolderBean
>()
private
val
beanList
=
arrayListOf
<
FolderBean
>()
private
var
hideThumbnails
:
Boolean
=
false
private
var
hideThumbnails
:
Boolean
=
false
...
@@ -28,7 +36,7 @@ class FileMediaColumnsAdapter(
...
@@ -28,7 +36,7 @@ class FileMediaColumnsAdapter(
class
MCV
(
view
:
View
)
:
ViewHolder
(
view
)
class
MCV
(
view
:
View
)
:
ViewHolder
(
view
)
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
MCV
{
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
MCV
{
return
MCV
(
R
.
layout
.
item_media
.
inflate
(
parent
))
return
MCV
(
R
.
layout
.
item_
time_
media
.
inflate
(
parent
))
}
}
override
fun
getItemCount
():
Int
{
override
fun
getItemCount
():
Int
{
...
@@ -36,7 +44,7 @@ class FileMediaColumnsAdapter(
...
@@ -36,7 +44,7 @@ class FileMediaColumnsAdapter(
}
}
override
fun
onBindViewHolder
(
holder
:
MCV
,
position
:
Int
)
{
override
fun
onBindViewHolder
(
holder
:
MCV
,
position
:
Int
)
{
val
binding
=
ItemMediaBinding
.
bind
(
holder
.
itemView
)
val
binding
=
Item
Time
MediaBinding
.
bind
(
holder
.
itemView
)
val
context
=
holder
.
itemView
.
context
val
context
=
holder
.
itemView
.
context
val
bean
=
beanList
[
position
]
val
bean
=
beanList
[
position
]
...
@@ -45,7 +53,17 @@ class FileMediaColumnsAdapter(
...
@@ -45,7 +53,17 @@ class FileMediaColumnsAdapter(
val
subAdapter
=
MediaColumnsAdapter
()
val
subAdapter
=
MediaColumnsAdapter
()
if
(
scanType
==
SCAN_DOCUMENTS
)
{
binding
.
rvMediaColumns
.
layoutManager
=
LinearLayoutManager
(
context
)
}
else
{
binding
.
rvMediaColumns
.
layoutManager
=
GridLayoutManager
(
context
,
columns
)
binding
.
rvMediaColumns
.
layoutManager
=
GridLayoutManager
(
context
,
columns
)
binding
.
rvMediaColumns
.
layoutParams
=
LinearLayout
.
LayoutParams
(
RecyclerView
.
LayoutParams
.
WRAP_CONTENT
,
RecyclerView
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
topMargin
=
context
.
resources
.
getDimensionPixelOffset
(
R
.
dimen
.
dp_8
)
gravity
=
Gravity
.
CENTER_HORIZONTAL
}
}
binding
.
rvMediaColumns
.
adapter
=
subAdapter
binding
.
rvMediaColumns
.
adapter
=
subAdapter
val
list
=
if
(
hideThumbnails
)
bean
.
recoveryList
.
filter
{
!
it
.
isThumbnails
}
else
bean
.
recoveryList
val
list
=
if
(
hideThumbnails
)
bean
.
recoveryList
.
filter
{
!
it
.
isThumbnails
}
else
bean
.
recoveryList
if
(
list
.
isEmpty
())
{
if
(
list
.
isEmpty
())
{
...
@@ -80,12 +98,15 @@ class FileMediaColumnsAdapter(
...
@@ -80,12 +98,15 @@ class FileMediaColumnsAdapter(
}
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
CS
{
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
CS
{
va
l
layout
=
when
(
columns
)
{
va
r
layout
=
when
(
columns
)
{
2
->
R
.
layout
.
item_media_columns2
2
->
R
.
layout
.
item_media_columns2
3
->
R
.
layout
.
item_media_columns3
3
->
R
.
layout
.
item_media_columns3
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
)
{
layout
=
R
.
layout
.
item_document
}
return
CS
(
layout
.
inflate
(
parent
))
return
CS
(
layout
.
inflate
(
parent
))
}
}
...
@@ -101,11 +122,40 @@ class FileMediaColumnsAdapter(
...
@@ -101,11 +122,40 @@ class FileMediaColumnsAdapter(
val
context
=
holder
.
itemView
.
context
val
context
=
holder
.
itemView
.
context
val
data
=
list
[
position
]
val
data
=
list
[
position
]
if
(
scanType
==
SCAN_DOCUMENTS
)
{
if
(
payloads
.
isEmpty
())
{
val
binding
=
ItemDocumentBinding
.
bind
(
holder
.
itemView
)
binding
.
ivSelector
.
isSelected
=
data
.
isSelect
val
icon
=
when
(
data
.
type
)
{
"PDF"
->
R
.
mipmap
.
pdf
"DOC"
->
R
.
mipmap
.
doc
"XLS"
->
R
.
mipmap
.
xls
"PPT"
->
R
.
mipmap
.
ppt
else
->
0
}
binding
.
ivType
.
setImageResource
(
icon
)
val
file
=
File
(
data
.
path
)
binding
.
tvName
.
text
=
file
.
name
val
time
=
SimpleDateFormat
(
"MMM-dd-yyyy"
,
Locale
.
getDefault
()).
format
(
file
.
lastModified
())
val
size
=
file
.
length
().
toFormatSize
()
val
info
=
"$time $size"
binding
.
tvInfo
.
text
=
info
binding
.
root
.
setOnClickListener
{
data
.
isSelect
=
!
data
.
isSelect
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
notifyItemChanged
(
position
,
"asdada"
)
subItemClick
(
data
)
}
}
else
{
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
super
.
onBindViewHolder
(
holder
,
position
,
payloads
)
}
}
else
{
if
(
payloads
.
isEmpty
())
{
if
(
payloads
.
isEmpty
())
{
Glide
.
with
(
context
).
asBitmap
().
load
(
data
.
path
).
centerCrop
().
into
(
holder
.
iv
)
Glide
.
with
(
context
).
asBitmap
().
load
(
data
.
path
).
centerCrop
().
into
(
holder
.
iv
)
holder
.
iv
.
tag
=
data
.
path
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
holder
.
ivSelector
.
setOnClickListener
{
holder
.
itemView
.
setOnClickListener
{
data
.
isSelect
=
!
data
.
isSelect
data
.
isSelect
=
!
data
.
isSelect
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
holder
.
ivSelector
.
isSelected
=
data
.
isSelect
notifyItemChanged
(
position
,
"changeIv"
)
notifyItemChanged
(
position
,
"changeIv"
)
...
@@ -120,6 +170,8 @@ class FileMediaColumnsAdapter(
...
@@ -120,6 +170,8 @@ class FileMediaColumnsAdapter(
}
}
}
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
@SuppressLint
(
"NotifyDataSetChanged"
)
fun
setData
(
bean
:
List
<
RecoveryBean
>)
{
fun
setData
(
bean
:
List
<
RecoveryBean
>)
{
list
.
clear
()
list
.
clear
()
...
...
app/src/main/java/com/base/datarecovery/ads/AdmobOpenUtils.kt
0 → 100644
View file @
7d3cd81b
package
com.base.datarecovery.ads
import
android.app.Activity
import
com.base.datarecovery.ads.AdmobCommonUtils.isMultiClick
import
com.base.datarecovery.ads.AdmobEvent.clickAd
import
com.base.datarecovery.ads.AdmobEvent.pullAd
import
com.base.datarecovery.ads.AdmobEvent.showAd
import
com.base.datarecovery.help.BaseApplication
import
com.base.datarecovery.help.ConfigHelper
import
com.base.datarecovery.utils.LogEx
import
com.google.android.gms.ads.AdError
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.appopen.AppOpenAd
import
org.json.JSONObject
import
java.util.UUID
object
AdmobOpenUtils
{
private
val
TAG
=
"AdmobOpenUtils"
private
val
mRequest
=
AdRequest
.
Builder
().
build
()
private
var
openLoadTime
=
Long
.
MAX_VALUE
private
var
mOpenAd
:
AppOpenAd
?
=
null
fun
isOpenAdLoaded
()
=
mOpenAd
!=
null
fun
loadAppOpenAd
(
skip
:
Boolean
=
false
,
onLoad
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
if
(
mOpenAd
!=
null
||
skip
)
{
onLoad
?.
invoke
(
1
)
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
())
{
onLoad
?.
invoke
(
2
)
return
}
val
reqId
=
UUID
.
randomUUID
().
toString
()
val
obj
=
JSONObject
()
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"ad_type"
,
"openAd"
)
// EventUtils.event("ad_pull_start", ext = obj)
AppOpenAd
.
load
(
BaseApplication
.
context
,
ConfigHelper
.
openAdmobId
,
mRequest
,
object
:
AppOpenAd
.
AppOpenAdLoadCallback
()
{
override
fun
onAdLoaded
(
ad
:
AppOpenAd
)
{
openLoadTime
=
System
.
currentTimeMillis
()
mOpenAd
=
ad
onLoad
?.
invoke
(
3
)
pullAd
(
ad
.
responseInfo
,
"openAd"
,
reqId
=
reqId
)
ad
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
ad
)
}
override
fun
onAdFailedToLoad
(
p0
:
LoadAdError
)
{
LogEx
.
logDebug
(
TAG
,
"LoadAdError ${p0.message}"
)
mOpenAd
=
null
onLoad
?.
invoke
(
4
)
pullAd
(
p0
.
responseInfo
,
"openAd"
,
p0
.
message
,
reqId
=
reqId
)
}
})
}
fun
showAppOpenAd
(
activity
:
Activity
,
skip
:
Boolean
=
false
,
onHidden
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
())
{
onHidden
?.
invoke
(
1
)
return
}
val
obj
=
JSONObject
()
obj
.
put
(
"ad_unit"
,
"openAd"
)
// EventUtils.event("ad_prepare_show", ext = obj)
if
(
System
.
currentTimeMillis
()
-
openLoadTime
>
1000
*
60
*
60
)
{
mOpenAd
=
null
loadAppOpenAd
()
onHidden
?.
invoke
(
2
)
val
obj
=
JSONObject
()
obj
.
put
(
"ad_unit"
,
"openAd"
)
// EventUtils.event("ad_expire", ext = obj)
return
}
if
(
mOpenAd
!=
null
)
{
val
thisMOpenAd
=
mOpenAd
mOpenAd
=
null
thisMOpenAd
?.
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
override
fun
onAdClicked
()
{
clickAd
(
thisMOpenAd
?.
responseInfo
,
"openAd"
)
isMultiClick
(
thisMOpenAd
)
}
override
fun
onAdDismissedFullScreenContent
()
{
mOpenAd
=
null
onHidden
?.
invoke
(
3
)
loadAppOpenAd
()
}
override
fun
onAdFailedToShowFullScreenContent
(
p0
:
AdError
)
{
mOpenAd
=
null
onHidden
?.
invoke
(
4
)
loadAppOpenAd
()
val
obj
=
JSONObject
()
obj
.
put
(
"reason"
,
p0
.
message
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
// EventUtils.event("ad_show_error", ext = obj)
}
override
fun
onAdShowedFullScreenContent
()
{
showAd
(
thisMOpenAd
?.
responseInfo
,
"openAd"
,
activity
)
}
}
thisMOpenAd
?.
show
(
activity
)
}
else
{
onHidden
?.
invoke
(
5
)
loadAppOpenAd
()
val
obj
=
JSONObject
()
obj
.
put
(
"reason"
,
"no_ad"
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
// EventUtils.event("ad_show_error", ext = obj)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/datarecovery/bean/RecoveryBean.kt
View file @
7d3cd81b
package
com.base.datarecovery.bean
package
com.base.datarecovery.bean
import
com.base.datarecovery.utils.FileHexEx.isDoc
import
com.base.datarecovery.utils.FileHexEx.isDocx
import
com.base.datarecovery.utils.FileHexEx.isPPT
import
com.base.datarecovery.utils.FileHexEx.isPPTX
import
com.base.datarecovery.utils.FileHexEx.isPdf
import
com.base.datarecovery.utils.FileHexEx.isXls
import
com.base.datarecovery.utils.FileHexEx.isXlsx
import
java.io.File
data class
RecoveryBean
(
data class
RecoveryBean
(
val
path
:
String
=
""
,
val
path
:
String
=
""
,
)
{
)
{
var
isSelect
:
Boolean
=
false
var
isSelect
:
Boolean
=
false
var
isThumbnails
:
Boolean
=
false
var
isThumbnails
:
Boolean
=
false
var
type
:
String
=
""
companion
object
{
fun
RecoveryBean
.
setType
()
{
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"
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/datarecovery/help/ConfigHelper.kt
View file @
7d3cd81b
package
com.base.datarecovery.help
package
com.base.datarecovery.help
import
com.base.datarecovery.activity.SplashActivity
import
com.base.datarecovery.activity.SplashActivity
import
com.base.datarecovery.utils.SPUtils
object
ConfigHelper
{
object
ConfigHelper
{
...
...
app/src/main/java/com/base/datarecovery/utils/LogEx.kt
View file @
7d3cd81b
...
@@ -7,6 +7,7 @@ object LogEx {
...
@@ -7,6 +7,7 @@ object LogEx {
val
isOpen
=
true
val
isOpen
=
true
val
filterTAG
=
arrayOf
(
val
filterTAG
=
arrayOf
(
"FileScanActivity"
,
"FileScanActivity"
,
"FileHexEx"
)
)
fun
logDebug
(
tag
:
String
,
content
:
String
,
isMust
:
Boolean
=
false
)
{
fun
logDebug
(
tag
:
String
,
content
:
String
,
isMust
:
Boolean
=
false
)
{
...
...
app/src/main/java/com/base/datarecovery/view/DialogViews.kt
View file @
7d3cd81b
...
@@ -108,9 +108,9 @@ object DialogViews {
...
@@ -108,9 +108,9 @@ object DialogViews {
val
recoveryFile
=
File
(
dir
,
file
.
name
)
val
recoveryFile
=
File
(
dir
,
file
.
name
)
file
.
copyTo
(
recoveryFile
,
true
)
file
.
copyTo
(
recoveryFile
,
true
)
}
}
mutableSharedFlow
.
emit
(
index
+
1
)
mutableSharedFlow
.
emit
(
index
)
index
++
delay
(
Random
.
nextLong
(
500
,
1500
))
delay
(
Random
.
nextLong
(
500
,
1500
))
index
++
}
}
mutableSharedFlow
.
emit
(-
1
)
mutableSharedFlow
.
emit
(-
1
)
}
}
...
...
app/src/main/res/drawable/bg_ffffff_22.xml
0 → 100644
View file @
7d3cd81b
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"@color/white"
/>
<corners
android:radius=
"22.5dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_stroke_ffffff_22.xml
0 → 100644
View file @
7d3cd81b
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<stroke
android:width=
"2dp"
android:color=
"@color/white"
/>
<corners
android:radius=
"22.5dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_file_recovered.xml
View file @
7d3cd81b
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.Constraint
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main"
android:id=
"@+id/main"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"#577DFD"
android:orientation=
"vertical"
tools:context=
".activity.FileRecoveredActivity"
>
tools:context=
".activity.FileRecoveredActivity"
>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
\ No newline at end of file
android:id=
"@+id/cl_top"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
tools:layout_editor_absoluteX=
"0dp"
>
<View
android:id=
"@+id/v_top"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
app:layout_constraintTop_toTopOf=
"parent"
/>
<FrameLayout
android:id=
"@+id/fl_fanhui"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"15dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/v_top"
tools:ignore=
"UselessParent"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/fanhui"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<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=
"@mipmap/tu_yanhua"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/fl_fanhui"
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=
"@color/white"
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=
"@color/white"
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:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"35dp"
android:text=
"Recovered successfully!"
android:textColor=
"@color/white"
android:textSize=
"25sp"
android:textStyle=
"bold"
app:layout_constraintStart_toStartOf=
"@id/iv_yanhua"
app:layout_constraintTop_toBottomOf=
"@id/iv_yanhua"
tools:ignore=
"HardcodedText"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"25dp"
android:src=
"@mipmap/tubg_yanhua"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/v_top"
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=
"@color/white"
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
app/src/main/res/layout/activity_file_recovery.xml
View file @
7d3cd81b
...
@@ -165,7 +165,8 @@
...
@@ -165,7 +165,8 @@
android:id=
"@+id/ll_all_select"
android:id=
"@+id/ll_all_select"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"16dp"
android:layout_marginStart=
"6dp"
android:layout_marginEnd=
"16dp"
android:background=
"@color/white"
android:background=
"@color/white"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:paddingTop=
"20dp"
android:paddingTop=
"20dp"
...
@@ -173,6 +174,12 @@
...
@@ -173,6 +174,12 @@
app:layout_constraintTop_toBottomOf=
"@id/cl_top"
app:layout_constraintTop_toBottomOf=
"@id/cl_top"
app:layout_scrollFlags=
"scroll|enterAlways"
>
app:layout_scrollFlags=
"scroll|enterAlways"
>
<FrameLayout
android:id=
"@+id/fl_select_all"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"10dp"
>
<ImageView
<ImageView
android:id=
"@+id/iv_select_all"
android:id=
"@+id/iv_select_all"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -181,6 +188,8 @@
...
@@ -181,6 +188,8 @@
android:src=
"@drawable/bg_circle_selector"
android:src=
"@drawable/bg_circle_selector"
tools:ignore=
"ContentDescription"
/>
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<TextView
<TextView
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
...
@@ -271,7 +280,7 @@
...
@@ -271,7 +280,7 @@
<androidx.recyclerview.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:id=
"@+id/rv"
android:layout_width=
"
wrap_cont
ent"
android:layout_width=
"
match_par
ent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:background=
"#FDFDFD"
android:background=
"#FDFDFD"
...
...
app/src/main/res/layout/item_document.xml
0 → 100644
View file @
7d3cd81b
<?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=
"@color/black"
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
app/src/main/res/layout/item_media.xml
→
app/src/main/res/layout/item_
time_
media.xml
View file @
7d3cd81b
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"
8
dp"
android:layout_marginStart=
"
16
dp"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"16sp"
android:textSize=
"16sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
@@ -25,11 +25,10 @@
...
@@ -25,11 +25,10 @@
<LinearLayout
<LinearLayout
android:id=
"@+id/ll_select"
android:id=
"@+id/ll_select"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"
8
dp"
android:layout_marginEnd=
"
16
dp"
tools:ignore=
"UseCompoundDrawables"
>
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
<ImageView
...
...
app/src/main/res/mipmap-xxhdpi/doc.png
0 → 100644
View file @
7d3cd81b
4.13 KB
app/src/main/res/mipmap-xxhdpi/fanhui.png
0 → 100644
View file @
7d3cd81b
649 Bytes
app/src/main/res/mipmap-xxhdpi/pdf.png
0 → 100644
View file @
7d3cd81b
2.96 KB
app/src/main/res/mipmap-xxhdpi/ppt.png
0 → 100644
View file @
7d3cd81b
2.54 KB
app/src/main/res/mipmap-xxhdpi/tu_yanhua.png
0 → 100644
View file @
7d3cd81b
10.7 KB
app/src/main/res/mipmap-xxhdpi/tubg_yanhua.png
0 → 100644
View file @
7d3cd81b
12.7 KB
app/src/main/res/mipmap-xxhdpi/xls.png
0 → 100644
View file @
7d3cd81b
3.89 KB
app/src/main/res/values/dimens.xml
0 → 100644
View file @
7d3cd81b
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen
name=
"dp_8"
>
8dp
</dimen>
</resources>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment