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
03e87af4
Commit
03e87af4
authored
Jul 31, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
5e0851cd
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
816 additions
and
491 deletions
+816
-491
CleanJunkActivity.kt
...base/datarecovery/activity/junkclean/CleanJunkActivity.kt
+169
-394
CleaningActivity.kt
.../base/datarecovery/activity/junkclean/CleaningActivity.kt
+4
-2
JunkExpandAdapter.kt
...n/java/com/base/datarecovery/adapter/JunkExpandAdapter.kt
+221
-0
ParentBean.kt
app/src/main/java/com/base/datarecovery/bean/ParentBean.kt
+4
-4
HomeFragment.kt
.../main/java/com/base/datarecovery/fragment/HomeFragment.kt
+0
-7
FileHelp.kt
app/src/main/java/com/base/datarecovery/help/FileHelp.kt
+28
-0
bg_eeeeee_22.xml
app/src/main/res/drawable/bg_eeeeee_22.xml
+6
-0
bg_ff852c_22.xml
app/src/main/res/drawable/bg_ff852c_22.xml
+5
-0
activity_layout_clean_junk.xml
app/src/main/res/layout/activity_layout_clean_junk.xml
+132
-61
activity_main.xml
app/src/main/res/layout/activity_main.xml
+4
-4
fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+149
-15
fragment_recovery.xml
app/src/main/res/layout/fragment_recovery.xml
+94
-4
temp_clean.png
app/src/main/res/mipmap-hdpi/temp_clean.png
+0
-0
h_appprocess.png
app/src/main/res/mipmap-xxhdpi/h_appprocess.png
+0
-0
h_cleanjunk.png
app/src/main/res/mipmap-xxhdpi/h_cleanjunk.png
+0
-0
log_clean.png
app/src/main/res/mipmap-xxhdpi/log_clean.png
+0
-0
No files found.
app/src/main/java/com/base/datarecovery/activity/junkclean/CleanJunkActivity.kt
View file @
03e87af4
package
com.base.datarecovery.activity.junkclean
package
com.base.datarecovery.activity.junkclean
import
android.animation.ValueAnimator
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.content.Intent
import
android.content.pm.PackageManager
import
android.graphics.Color
import
android.graphics.Color
import
android.view.LayoutInflater
import
android.os.Environment
import
android.view.ViewGroup
import
android.view.View
import
android.view.animation.LinearInterpolator
import
androidx.activity.OnBackPressedCallback
import
androidx.activity.OnBackPressedCallback
import
androidx.core.view.isVisible
import
androidx.core.view.isVisible
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.lifecycle.lifecycleScope
import
com.base.datarecovery.BuildConfig
import
com.base.datarecovery.R
import
com.base.datarecovery.R
import
com.base.datarecovery.activity.ResultActivity
import
com.base.datarecovery.activity.ResultActivity
import
com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import
com.base.datarecovery.adapter.JunkExpandAdapter
import
com.base.datarecovery.ads.AdmobMaxHelper
import
com.base.datarecovery.ads.AdmobMaxHelper
import
com.base.datarecovery.ads.admob.AdmobInterstitialUtils
import
com.base.datarecovery.bean.ChildBean
import
com.base.datarecovery.bean.ChildBean
import
com.base.datarecovery.bean.ConstObject.JUNK_CLEANER
import
com.base.datarecovery.bean.ConstObject.JUNK_CLEANER
import
com.base.datarecovery.bean.ParentBean
import
com.base.datarecovery.databinding.ActivityLayoutCleanJunkBinding
import
com.base.datarecovery.databinding.ActivityLayoutCleanJunkBinding
import
com.base.datarecovery.databinding.ItemChildBinding
import
com.base.datarecovery.databinding.ItemParentBinding
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.BaseActivity
import
com.base.datarecovery.help.FileHelp
import
com.base.datarecovery.help.KotlinExt.toFormatSize
import
com.base.datarecovery.help.KotlinExt.toFormatSize
import
com.base.datarecovery.help.PermissionHelp.checkStorePermission
import
com.base.datarecovery.help.PermissionHelp.requestStorePermission
import
com.base.datarecovery.utils.BarUtils
import
com.base.datarecovery.utils.BarUtils
import
com.base.datarecovery.utils.MediaStoreUtils
import
com.base.datarecovery.utils.MediaStoreUtils
import
com.base.datarecovery.view.DialogViews.showExitFunctionDialog
import
com.base.datarecovery.view.DialogViews.showExitFunctionDialog
import
pokercc.android.expandablerecyclerview.ExpandableAdapter
import
com.base.datarecovery.view.DialogViews.showGerPermission
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.async
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
java.io.File
import
kotlin.random.Random
import
kotlin.random.Random
/**
/**
...
@@ -35,61 +37,63 @@ import kotlin.random.Random
...
@@ -35,61 +37,63 @@ import kotlin.random.Random
*/
*/
class
CleanJunkActivity
:
BaseActivity
<
ActivityLayoutCleanJunkBinding
>()
{
class
CleanJunkActivity
:
BaseActivity
<
ActivityLayoutCleanJunkBinding
>()
{
private
val
parentList
by
lazy
{
private
val
TAG
=
"CleanJunkActivity"
mutableListOf
(
ParentBean
(
title
=
"Useless installation package"
,
childItem
=
child3
,
parentSize
=
sizes
[
0
],
isParentSelected
=
true
,
expanded
=
false
),
ParentBean
(
title
=
"Temp File"
,
childItem
=
child4
,
parentSize
=
sizes
[
1
],
isParentSelected
=
true
,
expanded
=
false
),
ParentBean
(
title
=
"Log File"
,
childItem
=
child5
,
parentSize
=
sizes
[
2
],
isParentSelected
=
true
,
expanded
=
false
)
)
}
private
val
child1
=
ArrayList
<
ChildBean
>()
private
val
child2
=
ArrayList
<
ChildBean
>()
private
val
child3
=
ArrayList
<
ChildBean
>()
private
val
child4
=
ArrayList
<
ChildBean
>()
private
val
child5
=
ArrayList
<
ChildBean
>()
private
val
sizes
=
MutableList
(
3
)
{
0L
}
private
var
scanCount
=
0
private
val
selectList
=
mutableListOf
<
String
>()
private
var
selectSize
=
0L
override
val
binding
:
ActivityLayoutCleanJunkBinding
by
lazy
{
override
val
binding
:
ActivityLayoutCleanJunkBinding
by
lazy
{
ActivityLayoutCleanJunkBinding
.
inflate
(
layoutInflater
)
ActivityLayoutCleanJunkBinding
.
inflate
(
layoutInflater
)
}
}
private
lateinit
var
junkExpandAdapter
:
JunkExpandAdapter
@SuppressLint
(
"SetTextI18n"
,
"NotifyDataSetChanged"
)
override
fun
initView
()
{
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
setAdapter
()
junkExpandAdapter
=
JunkExpandAdapter
{
size
->
if
(
size
==
0L
)
{
binding
.
tvBtn
.
text
=
"Got it"
binding
.
tvSize
.
text
=
"0"
binding
.
tvUnit
.
text
=
"B"
}
else
{
binding
.
tvBtn
.
text
=
"Clean up ${size.toFormatSize(1)}"
val
split
=
size
.
toFormatSize
().
split
(
" "
)
binding
.
tvSize
.
text
=
split
[
0
]
binding
.
tvUnit
.
text
=
split
[
1
]
}
if
(
scanFinish
)
{
if
(
junkExpandAdapter
.
getAllChildItemCount
()
==
0
)
{
binding
.
tvBtn
.
visibility
=
View
.
GONE
binding
.
llTwoBtn
.
visibility
=
View
.
VISIBLE
}
else
{
binding
.
tvBtn
.
isVisible
=
true
binding
.
tvBtn
.
isEnabled
=
true
}
}
}
binding
.
exRv
.
adapter
=
junkExpandAdapter
if
(
checkStorePermission
())
{
scanJunk
()
}
else
{
showGerPermission
(
desc
=
""
,
deny
=
{
finishToMain
()
},
allow
=
{
requestStorePermission
(
launcher
)
{
scanJunk
()
}
})
}
}
}
override
fun
initListener
()
{
override
fun
initListener
()
{
binding
.
idJunksBack
.
setOnClickListener
{
binding
.
flFanhui
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
onBackPressedDispatcher
.
onBackPressed
()
}
}
onBackPressedDispatcher
.
addCallback
(
object
:
OnBackPressedCallback
(
true
)
{
onBackPressedDispatcher
.
addCallback
(
object
:
OnBackPressedCallback
(
true
)
{
override
fun
handleOnBackPressed
()
{
override
fun
handleOnBackPressed
()
{
showExitFunctionDialog
{
showExitFunctionDialog
{
if
(
it
)
{
if
(
it
)
{
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
@CleanJunkActivity
){
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
@CleanJunkActivity
)
{
finishToMain
()
finishToMain
()
}
}
}
else
{
}
else
{
...
@@ -99,368 +103,139 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
...
@@ -99,368 +103,139 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
}
}
})
})
binding
.
idClBtn
.
setOnClickListener
{
binding
.
tvBtn
.
setOnClickListener
{
if
(
binding
.
idClBtn
.
text
==
"Got it"
)
{
when
(
binding
.
tvBtn
.
text
)
{
"Got it"
->
{
startActivity
(
Intent
(
this
@CleanJunkActivity
,
ResultActivity
::
class
.
java
).
apply
{
startActivity
(
Intent
(
this
@CleanJunkActivity
,
ResultActivity
::
class
.
java
).
apply
{
putExtra
(
"clean_size"
,
JUNK_CLEANER
)
putExtra
(
"clean_size"
,
JUNK_CLEANER
)
putExtra
(
"from"
,
0
)
putExtra
(
"from"
,
0
)
})
})
}
else
{
startActivity
(
Intent
(
this
,
CleaningActivity
::
class
.
java
)
.
putExtra
(
"list"
,
selectList
.
toTypedArray
())
.
putExtra
(
"size"
,
selectSize
)
)
}
finish
()
}
}
private
fun
setAdapter
()
{
binding
.
idExRl
.
adapter
=
mAdapter
binding
.
idExRl
.
layoutManager
=
LinearLayoutManager
(
this
)
scanJunk
()
}
private
fun
scanJunk
()
{
val
apk
=
MediaStoreUtils
.
queryFiles
(
this
,
MediaStoreUtils
.
FileType
.
APK
)
?:
listOf
()
apk
.
forEach
{
l
->
sizes
[
0
]
+=
l
.
size
val
bean
=
ChildBean
(
R
.
mipmap
.
apk
,
l
.
name
,
l
.
path
,
l
.
size
)
child3
.
add
(
bean
)
}
// testApk()
scanCount
+=
1
updateSize
(
doneIndex
=
0
)
val
temp
=
MediaStoreUtils
.
queryFiles
(
this
,
MediaStoreUtils
.
FileType
.
TMP
)
?:
listOf
()
temp
.
forEach
{
l
->
sizes
[
1
]
+=
l
.
size
val
bean
=
ChildBean
(
null
,
l
.
name
,
l
.
path
,
l
.
size
)
child4
.
add
(
bean
)
}
// testTemp()
scanCount
+=
1
updateSize
(
doneIndex
=
1
)
val
log
=
MediaStoreUtils
.
queryFiles
(
this
,
MediaStoreUtils
.
FileType
.
LOG
)
?:
listOf
()
log
.
forEach
{
l
->
sizes
[
2
]
+=
l
.
size
val
bean
=
ChildBean
(
null
,
l
.
name
,
l
.
path
,
l
.
size
)
child5
.
add
(
bean
)
}
// testLog()
scanCount
+=
2
updateSize
(
doneIndex
=
2
)
}
private
fun
testLog
()
{
if
(
BuildConfig
.
DEBUG
)
{
repeat
(
5
)
{
sizes
[
2
]
+=
Random
.
nextLong
()
val
bean
=
ChildBean
(
null
,
"log"
,
""
,
Random
.
nextLong
())
child5
.
add
(
bean
)
}
}
}
private
fun
testTemp
()
{
if
(
BuildConfig
.
DEBUG
)
{
repeat
(
5
)
{
sizes
[
1
]
+=
Random
.
nextLong
()
val
bean
=
ChildBean
(
null
,
"temp"
,
""
,
Random
.
nextLong
())
child4
.
add
(
bean
)
}
}
}
private
fun
testApk
()
{
if
(
BuildConfig
.
DEBUG
)
{
repeat
(
5
)
{
sizes
[
0
]
+=
Random
.
nextLong
(
1500
)
val
bean
=
ChildBean
(
R
.
mipmap
.
apk
,
"apk"
,
""
,
Random
.
nextLong
())
child3
.
add
(
bean
)
}
}
}
@SuppressLint
(
"SetTextI18n"
)
private
fun
updateSize
(
doneIndex
:
Int
=
-
1
)
{
addData
(
index
=
doneIndex
)
val
split
=
sizes
.
sum
().
toFormatSize
(
1
).
split
(
' '
)
binding
.
idKeCl
.
text
=
split
[
0
]
binding
.
idSizeUnit
.
text
=
split
[
1
]
if
(
scanCount
>=
3
)
{
selectList
.
clear
()
selectSize
=
0L
for
(
i
in
parentList
.
indices
)
{
if
(
parentList
[
i
].
childItem
.
isNotEmpty
())
{
val
childSize
=
parentList
[
i
].
childItem
.
filter
{
it
.
isChildSelected
}.
sumOf
{
it
.
childSize
}
for
(
a
in
parentList
[
i
].
childItem
)
{
if
(
a
.
isChildSelected
)
{
if
(
a
.
pathList
?.
isNotEmpty
()
==
true
)
{
for
(
o
in
a
.
pathList
!!
)
{
selectList
.
add
(
o
)
}
}
}
}
selectSize
+=
childSize
}
else
{
if
(
parentList
[
i
].
isParentSelected
)
{
selectSize
+=
parentList
[
i
].
parentSize
}
}
}
parentList
.
forEach
{
parent
->
selectList
.
addAll
(
parent
.
childItem
.
filter
{
it
.
isChildSelected
}.
map
{
it
.
chilepath
})
}
}
binding
.
idClBtn
.
isVisible
=
scanCount
>=
3
binding
.
idClBtn
.
isEnabled
=
sizes
.
sum
()
>
0
if
(
scanCount
>=
3
&&
sizes
.
sum
().
toInt
()
==
0
)
{
binding
.
idClBtn
.
text
=
"Got it"
}
else
{
binding
.
idClBtn
.
text
=
"Clean up ${selectSize.toFormatSize(1)}"
}
binding
.
idClBtn
.
isEnabled
=
true
}
@SuppressLint
(
"NotifyDataSetChanged"
)
private
fun
addData
(
index
:
Int
)
{
if
(
parentList
.
isNotEmpty
())
{
parentList
[
index
].
isfinish
=
true
parentList
[
index
].
parentSize
=
sizes
[
index
]
mAdapter
.
notifyDataSetChanged
()
}
}
@SuppressLint
(
"SetTextI18n"
)
private
fun
updateView
()
{
selectList
.
clear
()
var
allSize
=
0L
for
(
i
in
parentList
.
indices
)
{
if
(
parentList
[
i
].
childItem
.
isNotEmpty
())
{
val
childSize
=
parentList
[
i
].
childItem
.
filter
{
it
.
isChildSelected
}.
sumOf
{
it
.
childSize
}
for
(
a
in
parentList
[
i
].
childItem
)
{
if
(
a
.
isChildSelected
)
{
if
(
a
.
pathList
?.
isNotEmpty
()
==
true
)
{
for
(
o
in
a
.
pathList
!!
)
{
selectList
.
add
(
o
)
}
}
}
}
allSize
+=
childSize
}
else
{
if
(
parentList
[
i
].
isParentSelected
)
{
allSize
+=
parentList
[
i
].
parentSize
}
}
}
selectSize
=
allSize
binding
.
idClBtn
.
text
=
"Clean up ${allSize.toFormatSize()}"
binding
.
idClBtn
.
isEnabled
=
allSize
>
0
parentList
.
forEach
{
parent
->
selectList
.
addAll
(
parent
.
childItem
.
filter
{
it
.
isChildSelected
}.
map
{
it
.
chilepath
})
}
}
}
private
val
mAdapter
by
lazy
{
else
->
{
startActivity
(
class
ParentViewHolder
(
val
binding
:
ItemParentBinding
)
:
Intent
(
this
,
CleaningActivity
::
class
.
java
).
apply
{
ExpandableAdapter
.
ViewHolder
(
binding
.
root
)
val
list
=
junkExpandAdapter
.
getChoosePath
()
putExtra
(
"list"
,
list
.
map
{
it
.
chilepath
}.
toTypedArray
())
class
ChildViewHolder
(
val
binding
:
ItemChildBinding
)
:
putExtra
(
"size"
,
list
.
sumOf
{
it
.
childSize
})
ExpandableAdapter
.
ViewHolder
(
binding
.
root
)
object
:
ExpandableAdapter
<
ExpandableAdapter
.
ViewHolder
>()
{
var
animators
=
mutableMapOf
<
Int
,
ValueAnimator
>()
override
fun
getChildCount
(
groupPosition
:
Int
):
Int
{
return
parentList
[
groupPosition
].
childItem
.
size
}
override
fun
getGroupCount
():
Int
{
return
parentList
.
size
}
override
fun
onViewDetachedFromWindow
(
holder
:
ViewHolder
)
{
super
.
onViewDetachedFromWindow
(
holder
)
animators
[
holder
.
adapterPosition
]
?.
pause
()
}
override
fun
onViewAttachedToWindow
(
holder
:
ViewHolder
)
{
super
.
onViewAttachedToWindow
(
holder
)
animators
[
holder
.
adapterPosition
]
?.
resume
()
}
override
fun
onCreateChildViewHolder
(
viewGroup
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
inflater
=
LayoutInflater
.
from
(
viewGroup
.
context
)
val
binding
=
ItemChildBinding
.
inflate
(
inflater
,
viewGroup
,
false
)
return
ChildViewHolder
(
binding
)
}
}
)
override
fun
onCreateGroupViewHolder
(
viewGroup
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
inflater
=
LayoutInflater
.
from
(
viewGroup
.
context
)
val
binding
=
ItemParentBinding
.
inflate
(
inflater
,
viewGroup
,
false
)
return
ParentViewHolder
(
binding
)
}
}
override
fun
onGroupViewHolderExpandChange
(
holder
:
ViewHolder
,
groupPosition
:
Int
,
animDuration
:
Long
,
expand
:
Boolean
)
{
}
}
finish
()
@SuppressLint
(
"NotifyDataSetChanged"
)
override
fun
onBindGroupViewHolder
(
holder
:
ViewHolder
,
groupPosition
:
Int
,
expand
:
Boolean
,
payloads
:
List
<
Any
>
)
{
val
viewHolder
=
holder
as
?
ParentViewHolder
?:
return
val
parentType
=
parentList
[
groupPosition
]
viewHolder
.
binding
.
idTypeName
.
text
=
parentType
.
title
parentType
.
expanded
=
expand
if
(
parentType
.
expanded
)
{
viewHolder
.
binding
.
idXiala
.
setImageResource
(
R
.
mipmap
.
zhankai
)
}
else
{
viewHolder
.
binding
.
idXiala
.
setImageResource
(
R
.
mipmap
.
shouqi
)
}
}
if
(
parentType
.
isfinish
)
{
viewHolder
.
binding
.
idImgLoad
.
isVisible
=
false
viewHolder
.
binding
.
idImgChoose
.
isVisible
=
true
}
else
{
val
animator
=
binding
.
tvGotIt2
.
setOnClickListener
{
animators
[
groupPosition
]
?:
ValueAnimator
.
ofFloat
(
0f
,
360f
).
apply
{
startActivity
(
Intent
(
this
@CleanJunkActivity
,
ResultActivity
::
class
.
java
).
apply
{
duration
=
1000
putExtra
(
"clean_size"
,
JUNK_CLEANER
)
repeatMode
=
ValueAnimator
.
RESTART
putExtra
(
"from"
,
0
)
repeatCount
=
ValueAnimator
.
INFINITE
})
interpolator
=
LinearInterpolator
()
finish
()
addUpdateListener
{
holder
.
binding
.
idImgLoad
.
rotation
=
it
.
animatedValue
as
Float
}
start
()
animators
[
groupPosition
]
=
this
}
}
viewHolder
.
binding
.
idImgLoad
.
isVisible
=
true
binding
.
tvDeepScan
.
setOnClickListener
{
viewHolder
.
binding
.
idImgChoose
.
isVisible
=
false
startActivity
(
Intent
(
this
,
PhotoManagerAnimationActivity
::
class
.
java
).
apply
{
putExtra
(
"tittle"
,
"Deep Scan"
)
})
finish
()
}
}
viewHolder
.
binding
.
idTypeSize
.
text
=
parentType
.
parentSize
.
toFormatSize
(
1
)
viewHolder
.
binding
.
idXiala
.
isVisible
=
parentType
.
childItem
.
isNotEmpty
()
viewHolder
.
binding
.
idImgChoose
.
isSelected
=
parentType
.
isParentSelected
viewHolder
.
binding
.
idImgChoose
.
setOnClickListener
{
viewHolder
.
binding
.
idImgChoose
.
isSelected
=
!
viewHolder
.
binding
.
idImgChoose
.
isSelected
parentType
.
isParentSelected
=
!
parentType
.
isParentSelected
if
(
parentType
.
isParentSelected
)
{
for
(
app
in
parentType
.
childItem
)
{
app
.
isChildSelected
=
true
notifyDataSetChanged
()
}
}
else
{
for
(
app
in
parentType
.
childItem
)
{
app
.
isChildSelected
=
false
notifyDataSetChanged
()
}
}
updateView
()
}
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
var
scanFinish
:
Boolean
=
false
override
fun
onBindChildViewHolder
(
private
fun
scanJunk
()
=
lifecycleScope
.
launch
(
Dispatchers
.
Main
)
{
holder
:
ViewHolder
,
groupPosition
:
Int
,
childPosition
:
Int
,
payloads
:
List
<
Any
>
)
{
val
viewHolder
=
holder
as
?
ChildViewHolder
?:
return
val
childType
=
parentList
[
groupPosition
].
childItem
[
childPosition
]
when
(
groupPosition
)
{
0
->
{
val
packageManager
:
PackageManager
=
this
@CleanJunkActivity
.
packageManager
val
apkFilePath
=
childType
.
chilepath
// 替换成您的APK文件路径
val
packageInfo
=
packageManager
.
getPackageArchiveInfo
(
apkFilePath
,
PackageManager
.
GET_ACTIVITIES
)
if
(
packageInfo
!=
null
)
{
val
applicationInfo
=
packageInfo
.
applicationInfo
val
appIcon
=
packageManager
.
getApplicationIcon
(
applicationInfo
)
viewHolder
.
binding
.
idImgIcon
.
setImageDrawable
(
appIcon
)
}
else
{
viewHolder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
apk
)
}
}
1
->
{
var
totalSize
=
0L
viewHolder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
qingchuicon
)
}
2
->
{
val
list
=
arrayListOf
<
ChildBean
>()
viewHolder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
del
)
async
{
val
emptyFolder1
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DCIM
))
val
emptyFolder2
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
))
val
emptyFolder3
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOCUMENTS
))
val
emptyFolder4
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_PICTURES
))
val
emptyFolder5
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MOVIES
))
val
emptyFolder6
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MUSIC
))
val
emptyFolder
=
arrayListOf
<
File
>()
emptyFolder
.
addAll
(
emptyFolder1
)
emptyFolder
.
addAll
(
emptyFolder2
)
emptyFolder
.
addAll
(
emptyFolder3
)
emptyFolder
.
addAll
(
emptyFolder4
)
emptyFolder
.
addAll
(
emptyFolder5
)
emptyFolder
.
addAll
(
emptyFolder6
)
emptyFolder
.
forEach
{
l
->
list
.
add
(
ChildBean
(
R
.
mipmap
.
kongwenjian
,
l
.
name
,
l
.
path
,
1
))
}
}
delay
(
Random
.
nextLong
(
1500
,
2000
))
}.
await
()
junkExpandAdapter
.
addChildData
(
0
,
list
)
3
->
{
list
.
clear
()
async
{
val
apk
=
MediaStoreUtils
.
queryFiles
(
this
@CleanJunkActivity
,
MediaStoreUtils
.
FileType
.
APK
)
?:
listOf
()
apk
.
forEach
{
l
->
totalSize
+=
l
.
size
list
.
add
(
ChildBean
(
R
.
mipmap
.
apk
,
l
.
name
,
l
.
path
,
l
.
size
))
}
// if (BuildConfig.DEBUG) {
// repeat(5) {
// val size = Random.nextLong(500)
// totalSize += size
// list.add(ChildBean(R.mipmap.apk, "1", "apl$it", size))
// }
// }
delay
(
Random
.
nextLong
(
1500
,
2000
))
}.
await
()
junkExpandAdapter
.
addChildData
(
1
,
list
)
list
.
clear
()
async
{
val
temp
=
MediaStoreUtils
.
queryFiles
(
this
@CleanJunkActivity
,
MediaStoreUtils
.
FileType
.
TMP
)
?:
listOf
()
temp
.
forEach
{
l
->
totalSize
+=
l
.
size
list
.
add
(
ChildBean
(
R
.
mipmap
.
temp_clean
,
l
.
name
,
l
.
path
,
l
.
size
))
}
// if (BuildConfig.DEBUG) {
// repeat(5) {
// val size = Random.nextLong(500)
// totalSize += size
// list.add(ChildBean(R.mipmap.temp_clean, "1", "temp$it", size))
// }
// }
delay
(
Random
.
nextLong
(
1500
,
2000
))
}.
await
()
junkExpandAdapter
.
addChildData
(
2
,
list
)
list
.
clear
()
async
{
val
log
=
MediaStoreUtils
.
queryFiles
(
this
@CleanJunkActivity
,
MediaStoreUtils
.
FileType
.
LOG
)
?:
listOf
()
log
.
forEach
{
l
->
totalSize
+=
l
.
size
list
.
add
(
ChildBean
(
R
.
mipmap
.
log_clean
,
l
.
name
,
l
.
path
,
l
.
size
))
}
}
// if (BuildConfig.DEBUG) {
// repeat(5) {
// val size = Random.nextLong(500)
// totalSize += size
// list.add(ChildBean(R.mipmap.log_clean, "1", "log$it", size))
// }
// }
delay
(
Random
.
nextLong
(
1500
,
2000
))
}.
await
()
4
->
{
scanFinish
=
true
junkExpandAdapter
.
addChildData
(
3
,
list
)
}
}
viewHolder
.
binding
.
idTvAppName
.
text
=
childType
.
childname
viewHolder
.
binding
.
idImgSelect
.
isSelected
=
childType
.
isChildSelected
viewHolder
.
binding
.
idTvSize
.
text
=
childType
.
childSize
.
toFormatSize
()
viewHolder
.
itemView
.
setOnClickListener
{
when
(
childPosition
)
{
childPosition
->
{
viewHolder
.
binding
.
idImgSelect
.
isSelected
=
!
viewHolder
.
binding
.
idImgSelect
.
isSelected
childType
.
isChildSelected
=
!
childType
.
isChildSelected
if
(!
childType
.
isChildSelected
)
{
parentList
[
groupPosition
].
isParentSelected
=
false
notifyDataSetChanged
()
}
updateView
()
}
}
}
}
}
}
}
override
fun
onDestroy
()
{
override
fun
onDestroy
()
{
super
.
onDestroy
()
super
.
onDestroy
()
for
(
animator
in
mAdapter
.
animators
.
values
)
{
junkExpandAdapter
.
animators
.
values
.
forEach
{
animator
.
cancel
()
it
.
cancel
()
}
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/datarecovery/activity/junkclean/CleaningActivity.kt
View file @
03e87af4
...
@@ -43,7 +43,9 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
...
@@ -43,7 +43,9 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
MainScope
().
launch
(
Dispatchers
.
IO
)
{
MainScope
().
launch
(
Dispatchers
.
IO
)
{
try
{
try
{
listPath
.
forEach
{
NewFileUtils
.
delete
(
it
)
}
listPath
.
forEach
{
runCatching
{
NewFileUtils
.
delete
(
it
)
}
}
MediaStoreUtils
.
updateMediaStore
(
this
@CleaningActivity
,
listPath
)
MediaStoreUtils
.
updateMediaStore
(
this
@CleaningActivity
,
listPath
)
}
catch
(
_
:
Exception
)
{
}
catch
(
_
:
Exception
)
{
}
finally
{
}
finally
{
...
@@ -78,7 +80,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
...
@@ -78,7 +80,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
binding
.
idTvJd
.
text
=
"${it.animatedValue as Int}"
binding
.
idTvJd
.
text
=
"${it.animatedValue as Int}"
}
}
doOnEnd
{
doOnEnd
{
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
@CleaningActivity
){
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
@CleaningActivity
)
{
startActivity
(
startActivity
(
Intent
(
this
@CleaningActivity
,
ResultActivity
::
class
.
java
).
putExtra
(
"from"
,
JUNK_CLEANER
)
Intent
(
this
@CleaningActivity
,
ResultActivity
::
class
.
java
).
putExtra
(
"from"
,
JUNK_CLEANER
)
.
putExtra
(
"clean_size"
,
intentSize
)
.
putExtra
(
"clean_size"
,
intentSize
)
...
...
app/src/main/java/com/base/datarecovery/adapter/JunkExpandAdapter.kt
0 → 100644
View file @
03e87af4
package
com.base.datarecovery.adapter
import
android.animation.ValueAnimator
import
android.annotation.SuppressLint
import
android.content.pm.PackageManager
import
android.graphics.drawable.Drawable
import
android.view.LayoutInflater
import
android.view.ViewGroup
import
android.view.animation.LinearInterpolator
import
androidx.core.view.isVisible
import
com.base.datarecovery.R
import
com.base.datarecovery.bean.ChildBean
import
com.base.datarecovery.databinding.ItemChildBinding
import
com.base.datarecovery.databinding.ItemParentBinding
import
com.base.datarecovery.bean.ParentBean
import
com.base.datarecovery.help.KotlinExt.toFormatSize
import
com.base.datarecovery.utils.LogEx
import
pokercc.android.expandablerecyclerview.ExpandableAdapter
class
JunkExpandAdapter
(
private
val
chooseAction
:
(
size
:
Long
)
->
Unit
)
:
ExpandableAdapter
<
ExpandableAdapter
.
ViewHolder
>()
{
private
val
TAG
=
"JunkExpandAdapter"
private
val
parentBeanList
by
lazy
{
mutableListOf
(
ParentBean
(
title
=
"Residual file"
,
isParentSelected
=
true
,
expanded
=
false
),
ParentBean
(
title
=
"Useless installation package"
,
isParentSelected
=
true
,
expanded
=
false
),
ParentBean
(
title
=
"Temp File"
,
isParentSelected
=
true
,
expanded
=
false
),
ParentBean
(
title
=
"Log File"
,
isParentSelected
=
true
,
expanded
=
false
)
)
}
var
animators
=
mutableMapOf
<
Int
,
ValueAnimator
>()
inner
class
ChildViewHolder
(
val
binding
:
ItemChildBinding
)
:
ViewHolder
(
binding
.
root
)
inner
class
ParentViewHolder
(
val
binding
:
ItemParentBinding
)
:
ViewHolder
(
binding
.
root
)
override
fun
getChildCount
(
groupPosition
:
Int
):
Int
{
return
parentBeanList
[
groupPosition
].
childItem
.
size
}
override
fun
getGroupCount
():
Int
{
return
parentBeanList
.
size
}
override
fun
onCreateChildViewHolder
(
viewGroup
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
inflater
=
LayoutInflater
.
from
(
viewGroup
.
context
)
val
binding
=
ItemChildBinding
.
inflate
(
inflater
,
viewGroup
,
false
)
return
ChildViewHolder
(
binding
)
}
override
fun
onCreateGroupViewHolder
(
viewGroup
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
inflater
=
LayoutInflater
.
from
(
viewGroup
.
context
)
val
binding
=
ItemParentBinding
.
inflate
(
inflater
,
viewGroup
,
false
)
return
ParentViewHolder
(
binding
)
}
@SuppressLint
(
"NotifyDataSetChanged"
,
"SetTextI18n"
)
override
fun
onBindGroupViewHolder
(
holder
:
ViewHolder
,
groupPosition
:
Int
,
expand
:
Boolean
,
payloads
:
List
<
Any
>)
{
val
viewHolder
=
holder
as
?
ParentViewHolder
?:
return
val
parentBean
=
parentBeanList
[
groupPosition
]
viewHolder
.
binding
.
idTypeName
.
text
=
parentBean
.
title
parentBean
.
expanded
=
expand
if
(
parentBean
.
expanded
)
{
viewHolder
.
binding
.
idXiala
.
setImageResource
(
R
.
mipmap
.
zhankai
)
}
else
{
viewHolder
.
binding
.
idXiala
.
setImageResource
(
R
.
mipmap
.
shouqi
)
}
if
(
parentBean
.
title
==
"Residual file"
)
{
viewHolder
.
binding
.
idTypeSize
.
text
=
parentBean
.
childItem
.
size
.
toString
()
+
" items"
}
else
{
viewHolder
.
binding
.
idTypeSize
.
text
=
parentBean
.
parentSize
.
toFormatSize
(
1
)
}
viewHolder
.
binding
.
idXiala
.
isVisible
=
true
viewHolder
.
binding
.
idImgChoose
.
isSelected
=
parentBean
.
isParentSelected
bindParentAnimation
(
parentBean
,
groupPosition
,
viewHolder
)
if
(
parentBean
.
childItem
.
isEmpty
())
{
viewHolder
.
binding
.
idImgChoose
.
setOnClickListener
{
}
}
else
{
viewHolder
.
binding
.
idImgChoose
.
setOnClickListener
{
viewHolder
.
binding
.
idImgChoose
.
isSelected
=
!
viewHolder
.
binding
.
idImgChoose
.
isSelected
parentBean
.
isParentSelected
=
viewHolder
.
binding
.
idImgChoose
.
isSelected
parentBean
.
childItem
.
forEach
{
it
.
isChildSelected
=
parentBean
.
isParentSelected
}
notifyDataSetChanged
()
chooseSizeChange
()
}
}
}
override
fun
onGroupViewHolderExpandChange
(
holder
:
ViewHolder
,
groupPosition
:
Int
,
animDuration
:
Long
,
expand
:
Boolean
)
{}
private
fun
chooseSizeChange
()
{
val
selectSize
=
parentBeanList
.
sumOf
{
it
.
childItem
.
filter
{
it
.
isChildSelected
}.
sumOf
{
it
.
childSize
}
}
chooseAction
.
invoke
(
selectSize
)
}
fun
getChoosePath
():
List
<
ChildBean
>
{
return
parentBeanList
.
flatMap
{
it
.
childItem
}.
filter
{
it
.
isChildSelected
}
}
fun
getAllChildItemCount
():
Int
{
return
parentBeanList
.
flatMap
{
it
.
childItem
}.
size
}
private
fun
bindParentAnimation
(
parentBean
:
ParentBean
,
groupPosition
:
Int
,
viewHolder
:
ParentViewHolder
)
{
if
(
parentBean
.
isfinish
)
{
viewHolder
.
binding
.
idImgLoad
.
isVisible
=
false
viewHolder
.
binding
.
idImgChoose
.
isVisible
=
true
animators
[
groupPosition
]
?.
cancel
()
}
else
{
LogEx
.
logDebug
(
TAG
,
"play parent ValueAnimator"
)
animators
[
groupPosition
]
?:
ValueAnimator
.
ofFloat
(
0f
,
360f
).
apply
{
duration
=
1000
repeatMode
=
ValueAnimator
.
RESTART
repeatCount
=
ValueAnimator
.
INFINITE
interpolator
=
LinearInterpolator
()
addUpdateListener
{
viewHolder
.
binding
.
idImgLoad
.
rotation
=
it
.
animatedValue
as
Float
}
start
()
animators
[
groupPosition
]
=
this
}
viewHolder
.
binding
.
idImgLoad
.
isVisible
=
true
viewHolder
.
binding
.
idImgChoose
.
isVisible
=
false
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
override
fun
onBindChildViewHolder
(
holder
:
ViewHolder
,
groupPosition
:
Int
,
childPosition
:
Int
,
payloads
:
List
<
Any
>)
{
val
viewHolder
=
holder
as
?
ChildViewHolder
?:
return
val
childBean
=
parentBeanList
[
groupPosition
].
childItem
[
childPosition
]
val
parentBean
=
parentBeanList
[
groupPosition
]
val
context
=
holder
.
itemView
.
context
viewHolder
.
binding
.
idTvAppName
.
text
=
childBean
.
childname
viewHolder
.
binding
.
idImgSelect
.
isSelected
=
childBean
.
isChildSelected
viewHolder
.
binding
.
idTvSize
.
text
=
childBean
.
childSize
.
toFormatSize
()
when
(
groupPosition
)
{
0
->
{
holder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
kongwenjian
)
viewHolder
.
binding
.
idTvAppName
.
text
=
childBean
.
chilepath
}
1
->
{
try
{
val
apkFilePath
=
childBean
.
chilepath
// 替换成您的APK文件路径
val
packageInfo
=
context
.
packageManager
.
getPackageArchiveInfo
(
apkFilePath
,
PackageManager
.
GET_ACTIVITIES
)
if
(
packageInfo
!=
null
)
{
val
applicationInfo
=
packageInfo
.
applicationInfo
val
appIcon
:
Drawable
=
context
.
packageManager
.
getApplicationIcon
(
applicationInfo
)
viewHolder
.
binding
.
idImgIcon
.
setImageDrawable
(
appIcon
)
}
else
{
holder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
apk
)
}
}
catch
(
e
:
Exception
)
{
holder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
apk
)
}
}
2
->
{
holder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
temp_clean
)
}
3
->
{
holder
.
binding
.
idImgIcon
.
setImageResource
(
R
.
mipmap
.
log_clean
)
}
}
viewHolder
.
itemView
.
setOnClickListener
{
viewHolder
.
binding
.
idImgSelect
.
isSelected
=
!
viewHolder
.
binding
.
idImgSelect
.
isSelected
childBean
.
isChildSelected
=
viewHolder
.
binding
.
idImgSelect
.
isSelected
parentBean
.
isParentSelected
=
parentBean
.
childItem
.
all
{
it
.
isChildSelected
}
notifyDataSetChanged
()
chooseSizeChange
()
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
fun
addChildData
(
position
:
Int
,
childBeanList
:
List
<
ChildBean
>)
{
val
parentBean
=
parentBeanList
[
position
]
parentBean
.
isfinish
=
true
parentBean
.
isParentSelected
=
true
parentBean
.
childItem
.
addAll
(
childBeanList
)
parentBean
.
parentSize
=
childBeanList
.
sumOf
{
it
.
childSize
}
LogEx
.
logDebug
(
TAG
,
"addChildData parentBean=$parentBean"
)
notifyDataSetChanged
()
chooseSizeChange
()
}
}
\ No newline at end of file
app/src/main/java/com/base/datarecovery/bean/ParentBean.kt
View file @
03e87af4
...
@@ -2,8 +2,8 @@ package com.base.datarecovery.bean
...
@@ -2,8 +2,8 @@ package com.base.datarecovery.bean
data class
ParentBean
(
data class
ParentBean
(
val
title
:
String
,
val
title
:
String
,
val
childItem
:
List
<
ChildBean
>
,
val
childItem
:
ArrayList
<
ChildBean
>
=
arrayListOf
()
,
var
parentSize
:
Long
,
var
parentSize
:
Long
=
0
,
var
isParentSelected
:
Boolean
,
var
isParentSelected
:
Boolean
,
var
expanded
:
Boolean
=
true
,
var
expanded
:
Boolean
=
true
,
var
isfinish
:
Boolean
=
false
var
isfinish
:
Boolean
=
false
...
@@ -12,9 +12,9 @@ data class ParentBean(
...
@@ -12,9 +12,9 @@ data class ParentBean(
data class
ChildBean
(
data class
ChildBean
(
val
image
:
Int
?
=
null
,
val
image
:
Int
?
=
null
,
val
childname
:
String
,
val
childname
:
String
,
val
chilepath
:
String
=
""
,
val
chilepath
:
String
=
""
,
val
childSize
:
Long
=
0L
,
val
childSize
:
Long
=
0L
,
var
isChildSelected
:
Boolean
=
true
,
var
isChildSelected
:
Boolean
=
true
,
var
pathList
:
List
<
String
>?
=
null
,
var
pathList
:
List
<
String
>?
=
null
,
var
packageName
:
String
?=
""
var
packageName
:
String
?
=
""
)
)
\ No newline at end of file
app/src/main/java/com/base/datarecovery/fragment/HomeFragment.kt
View file @
03e87af4
...
@@ -11,15 +11,8 @@ import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
...
@@ -11,15 +11,8 @@ import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
import
com.base.datarecovery.activity.junkclean.ScanJunkActivity
import
com.base.datarecovery.activity.junkclean.ScanJunkActivity
import
com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
import
com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
import
com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import
com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import
com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity
import
com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity
import
com.base.datarecovery.activity.recovery.FileScanResultActivity
import
com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
import
com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
import
com.base.datarecovery.ads.AdmobMaxHelper
import
com.base.datarecovery.ads.AdmobMaxHelper
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.bean.ConstObject.privacyPinPassword
import
com.base.datarecovery.databinding.FragmentHomeBinding
import
com.base.datarecovery.databinding.FragmentHomeBinding
import
com.base.datarecovery.help.BaseFragment
import
com.base.datarecovery.help.BaseFragment
...
...
app/src/main/java/com/base/datarecovery/help/FileHelp.kt
View file @
03e87af4
...
@@ -115,4 +115,32 @@ object FileHelp {
...
@@ -115,4 +115,32 @@ object FileHelp {
return
result
return
result
}
}
fun
getFileFolder
(
file
:
File
):
List
<
File
>
{
val
set
=
HashSet
<
File
>()
//添加第一层文件到链表
val
linkList
=
LinkedList
<
File
>()
val
fileList
=
file
.
listFiles
()
fileList
?.
forEach
{
if
(
it
.
isDirectory
)
{
linkList
.
add
(
it
)
set
.
add
(
it
)
}
}
//链表取文件
var
tempFile
:
File
while
(!
linkList
.
isEmpty
())
{
tempFile
=
linkList
.
removeFirst
()
val
tempFileList
=
tempFile
.
listFiles
()
tempFileList
?.
forEach
{
if
(
it
.
isDirectory
)
{
linkList
.
add
(
it
)
set
.
add
(
it
)
}
}
}
return
set
.
toList
()
}
}
}
\ No newline at end of file
app/src/main/res/drawable/bg_eeeeee_22.xml
0 → 100644
View file @
03e87af4
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"22dp"
/>
<solid
android:color=
"#EEEEEE"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_ff852c_22.xml
0 → 100644
View file @
03e87af4
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#FF852C"
/>
<corners
android:radius=
"22dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_layout_clean_junk.xml
View file @
03e87af4
...
@@ -17,27 +17,33 @@
...
@@ -17,27 +17,33 @@
<View
<View
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"
4
0dp"
/>
android:layout_height=
"
5
0dp"
/>
<RelativeLayout
<FrameLayout
android:id=
"@+id/id_top_rl"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"12dp"
app:layout_constraintTop_toTopOf=
"parent"
>
app:layout_constraintTop_toTopOf=
"parent"
>
<androidx.appcompat.widget.AppCompatImageView
<FrameLayout
android:id=
"@+id/id_junks_back"
android:id=
"@+id/fl_fanhui"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"15dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingHorizontal=
"20dp"
android:src=
"@mipmap/fanhui"
android:src=
"@mipmap/fanhui"
/>
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<TextView
<TextView
android:id=
"@+id/id_tv_title_back"
android:id=
"@+id/id_tv_title_back"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_
centerInParent=
"true
"
android:layout_
gravity=
"center
"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"Clean Junk"
android:text=
"Clean Junk"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
...
@@ -45,50 +51,70 @@
...
@@ -45,50 +51,70 @@
android:textStyle=
"bold"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
</
Relativ
eLayout>
</
Fram
eLayout>
<androidx.appcompat.widget.LinearLayoutCompat
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"60dp"
android:orientation=
"vertical"
tools:ignore=
"UselessParent"
>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"40dp"
android:layout_marginBottom=
"10dp"
android:layout_marginBottom=
"10dp"
android:gravity=
"center_horizontal"
>
android:gravity=
"center_horizontal"
>
<TextView
<TextView
android:id=
"@+id/id_ke_cl
"
android:id=
"@+id/tv_size
"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
android:layout_gravity=
"bottom"
android:layout_marginEnd=
"7dp"
android:layout_marginEnd=
"7dp"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:text=
"0"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"43
sp"
android:textSize=
"45
sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
tools:text=
"0
"
/>
tools:ignore=
"HardcodedText
"
/>
<TextView
<TextView
android:id=
"@+id/id_size
_unit"
android:id=
"@+id/tv
_unit"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"top"
android:layout_gravity=
"top"
android:layout_marginTop=
"10
dp"
android:layout_marginTop=
"8
dp"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:text=
"KB"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"12sp"
android:textSize=
"12sp"
tools:text=
"KB"
/>
tools:ignore=
"HardcodedText"
/>
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginBottom=
"4
5dp"
android:layout_marginBottom=
"3
5dp"
android:text=
"Cleanable"
android:text=
"Cleanable"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"14sp"
android:textSize=
"14sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
...
@@ -104,14 +130,20 @@
...
@@ -104,14 +130,20 @@
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
<pokercc.android.expandablerecyclerview.ExpandableRecyclerView
android:id=
"@+id/
id_ex_rl
"
android:id=
"@+id/
ex_rv
"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"0dp"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:visibility=
"visible"
/>
android:visibility=
"visible"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<TextView
<TextView
android:id=
"@+id/id_cl
_btn"
android:id=
"@+id/tv
_btn"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_marginHorizontal=
"40dp"
android:layout_marginHorizontal=
"40dp"
...
@@ -126,6 +158,45 @@
...
@@ -126,6 +158,45 @@
android:visibility=
"gone"
android:visibility=
"gone"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
<LinearLayout
android:id=
"@+id/ll_two_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginVertical=
"20dp"
android:visibility=
"gone"
>
<TextView
android:id=
"@+id/tv_got_it_2"
android:layout_width=
"165dp"
android:layout_height=
"45dp"
android:background=
"@drawable/bg_eeeeee_22"
android:gravity=
"center"
android:text=
"Got it"
android:textColor=
"@color/black"
android:textSize=
"17sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_deep_scan"
android:layout_width=
"165dp"
android:layout_height=
"45dp"
android:layout_marginStart=
"20dp"
android:background=
"@drawable/bg_577dfd_22"
android:gravity=
"center"
android:text=
"Deep Scan"
android:textColor=
"@color/white"
android:textSize=
"17sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</FrameLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</FrameLayout>
</FrameLayout>
...
...
app/src/main/res/layout/activity_main.xml
View file @
03e87af4
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
android:gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:paddingTop=
"10dp"
android:paddingTop=
"10dp"
android:paddingBottom=
"1
5
dp"
android:paddingBottom=
"1
0
dp"
tools:ignore=
"UseCompoundDrawables"
>
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
<ImageView
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
<TextView
<TextView
android:id=
"@+id/tv_1"
android:id=
"@+id/tv_1"
android:layout_width=
"100dp"
android:layout_width=
"100dp"
android:layout_height=
"
20
dp"
android:layout_height=
"
16
dp"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"Clean"
android:text=
"Clean"
...
@@ -63,7 +63,7 @@
...
@@ -63,7 +63,7 @@
android:gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:paddingTop=
"10dp"
android:paddingTop=
"10dp"
android:paddingBottom=
"1
5
dp"
android:paddingBottom=
"1
0
dp"
tools:ignore=
"UseCompoundDrawables"
>
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
<ImageView
...
@@ -76,7 +76,7 @@
...
@@ -76,7 +76,7 @@
<TextView
<TextView
android:id=
"@+id/tv_2"
android:id=
"@+id/tv_2"
android:layout_width=
"100dp"
android:layout_width=
"100dp"
android:layout_height=
"
20
dp"
android:layout_height=
"
16
dp"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"Recovery"
android:text=
"Recovery"
...
...
app/src/main/res/layout/fragment_home.xml
View file @
03e87af4
...
@@ -66,10 +66,50 @@
...
@@ -66,10 +66,50 @@
</FrameLayout>
</FrameLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"20dp"
android:orientation=
"horizontal"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:text=
"Used Space"
android:textColor=
"#666666"
android:textSize=
"16sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_storage"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"12dp"
android:textColor=
"#FF0C0C"
android:textSize=
"16sp"
android:textStyle=
"bold"
tools:text=
"52.0 GB / 128.0 GB"
/>
</LinearLayout>
<TextView
android:id=
"@+id/tv_clean"
android:layout_width=
"285dp"
android:layout_height=
"45dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginVertical=
"20dp"
android:background=
"@drawable/bg_ff852c_22"
android:gravity=
"center"
android:text=
"Clean Junk"
android:textColor=
"@color/white"
android:textSize=
"19sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
...
@@ -79,7 +119,7 @@
...
@@ -79,7 +119,7 @@
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_
large_file
"
android:id=
"@+id/card_
clean_junk
"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_marginHorizontal=
"8dp"
...
@@ -102,7 +142,7 @@
...
@@ -102,7 +142,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/
large
"
android:src=
"@mipmap/
h_cleanjunk
"
tools:ignore=
"ContentDescription"
/>
tools:ignore=
"ContentDescription"
/>
<TextView
<TextView
...
@@ -110,7 +150,7 @@
...
@@ -110,7 +150,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:text=
"
Large File\nCleanerr
"
android:text=
"
Clean Junk
"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"15sp"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -120,8 +160,9 @@
...
@@ -120,8 +160,9 @@
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_
app_manager
"
android:id=
"@+id/card_
whats_app
"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_marginHorizontal=
"8dp"
...
@@ -144,7 +185,7 @@
...
@@ -144,7 +185,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/app"
android:src=
"@mipmap/
whats
app"
tools:ignore=
"ContentDescription"
/>
tools:ignore=
"ContentDescription"
/>
<TextView
<TextView
...
@@ -152,7 +193,7 @@
...
@@ -152,7 +193,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:text=
"
App\nProcess
"
android:text=
"
WhatsAPP\nCleaner
"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"15sp"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -162,7 +203,6 @@
...
@@ -162,7 +203,6 @@
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout>
<LinearLayout
<LinearLayout
...
@@ -172,17 +212,18 @@
...
@@ -172,17 +212,18 @@
android:layout_marginTop=
"12dp"
android:layout_marginTop=
"12dp"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_whats_app"
android:id=
"@+id/card_large_file"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:clickable=
"true"
android:clickable=
"true"
android:focusable=
"true"
>
android:focusable=
"true"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<LinearLayout
<LinearLayout
...
@@ -196,7 +237,7 @@
...
@@ -196,7 +237,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/
whatsapp
"
android:src=
"@mipmap/
large
"
tools:ignore=
"ContentDescription"
/>
tools:ignore=
"ContentDescription"
/>
<TextView
<TextView
...
@@ -204,7 +245,7 @@
...
@@ -204,7 +245,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:layout_marginStart=
"8dp"
android:text=
"
WhatsAPP\nCleane
r"
android:text=
"
Large File\nCleaner
r"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"15sp"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -214,7 +255,6 @@
...
@@ -214,7 +255,6 @@
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_photos_manager"
android:id=
"@+id/card_photos_manager"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
...
@@ -259,6 +299,100 @@
...
@@ -259,6 +299,100 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginTop=
"12dp"
android:orientation=
"horizontal"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_app_manager"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:clickable=
"true"
android:focusable=
"true"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/app"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:text=
"App\nManager"
android:textColor=
"@color/black"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_app_process"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:clickable=
"true"
android:focusable=
"true"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/h_appprocess"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:text=
"App Process"
android:textColor=
"@color/black"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
<FrameLayout
<FrameLayout
android:id=
"@+id/fl_ad"
android:id=
"@+id/fl_ad"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
...
...
app/src/main/res/layout/fragment_recovery.xml
View file @
03e87af4
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:orientation=
"vertical"
android:orientation=
"vertical"
tools:context=
".fragment.RecoveryFragment"
>
tools:context=
".fragment.RecoveryFragment"
>
...
@@ -88,13 +88,104 @@
...
@@ -88,13 +88,104 @@
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_ry_document"
android:id=
"@+id/card_ry_document"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/recovery"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:text=
"Recovery\nDocuments"
android:textColor=
"@color/black"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_privacy_space"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:clickable=
"true"
android:focusable=
"true"
app:cardBackgroundColor=
"#F8F8F8"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
app:cardElevation=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:src=
"@mipmap/space"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"8dp"
android:text=
"Privacy\nSpace"
android:textColor=
"@color/black"
android:textSize=
"15sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginTop=
"16dp"
android:orientation=
"horizontal"
>
<androidx.cardview.widget.CardView
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
>
android:layout_weight=
"1"
app:cardBackgroundColor=
"#F8F8F8"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<LinearLayout
<LinearLayout
...
@@ -127,7 +218,6 @@
...
@@ -127,7 +218,6 @@
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
<androidx.cardview.widget.CardView
android:id=
"@+id/card_privacy_space"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"70dp"
android:layout_height=
"70dp"
android:layout_marginHorizontal=
"8dp"
android:layout_marginHorizontal=
"8dp"
...
...
app/src/main/res/mipmap-hdpi/temp_clean.png
0 → 100644
View file @
03e87af4
4.37 KB
app/src/main/res/mipmap-xxhdpi/h_appprocess.png
0 → 100644
View file @
03e87af4
7.25 KB
app/src/main/res/mipmap-xxhdpi/h_cleanjunk.png
View replaced file @
5e0851cd
View file @
03e87af4
3.99 KB
|
W:
|
H:
6.7 KB
|
W:
|
H:
2-up
Swipe
Onion skin
app/src/main/res/mipmap-xxhdpi/log_clean.png
0 → 100644
View file @
03e87af4
3.93 KB
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