Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
F
File Recovery RecycleBin
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
File Recovery RecycleBin
Commits
ea161f3e
Commit
ea161f3e
authored
Jul 18, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
f60cbf70
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
283 additions
and
121 deletions
+283
-121
MainActivity.kt
.../com/base/filerecoveryrecyclebin/activity/MainActivity.kt
+24
-5
FileRecoveredActivity.kt
...veryrecyclebin/activity/recovery/FileRecoveredActivity.kt
+7
-2
FileRecoveryActivity.kt
...overyrecyclebin/activity/recovery/FileRecoveryActivity.kt
+3
-2
MeidaContentObserver.kt
...eryrecyclebin/activity/recyclebin/MeidaContentObserver.kt
+10
-1
AdMaxInterstitialUtils.kt
.../filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
+5
-0
AdMaxOpenUtils.kt
...com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
+1
-0
RecycleBinFragment.kt
...ase/filerecoveryrecyclebin/fragment/RecycleBinFragment.kt
+2
-9
ConfigHelper.kt
...java/com/base/filerecoveryrecyclebin/help/ConfigHelper.kt
+2
-2
StayNotificationService.kt
...filerecoveryrecyclebin/service/StayNotificationService.kt
+20
-18
DialogViews.kt
.../java/com/base/filerecoveryrecyclebin/view/DialogViews.kt
+40
-1
PermissionDialog.kt
.../com/base/filerecoveryrecyclebin/view/PermissionDialog.kt
+1
-0
bg_transparent.xml
app/src/main/res/drawable/bg_transparent.xml
+5
-0
dialog_exit_app.xml
app/src/main/res/layout/dialog_exit_app.xml
+79
-0
fragment_home_3.xml
app/src/main/res/layout/fragment_home_3.xml
+84
-81
junk_exit.png
app/src/main/res/mipmap-xxhdpi/junk_exit.png
+0
-0
No files found.
app/src/main/java/com/base/filerecoveryrecyclebin/activity/MainActivity.kt
View file @
ea161f3e
package
com.base.filerecoveryrecyclebin.activity
package
com.base.filerecoveryrecyclebin.activity
import
android.content.Intent
import
android.graphics.Color
import
android.graphics.Color
import
android.graphics.Typeface
import
android.graphics.Typeface
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
androidx.core.view.updatePadding
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
...
@@ -13,8 +15,10 @@ import com.base.filerecoveryrecyclebin.fragment.HomeFragment
...
@@ -13,8 +15,10 @@ import com.base.filerecoveryrecyclebin.fragment.HomeFragment
import
com.base.filerecoveryrecyclebin.fragment.RecycleBinFragment
import
com.base.filerecoveryrecyclebin.fragment.RecycleBinFragment
import
com.base.filerecoveryrecyclebin.help.BaseActivity
import
com.base.filerecoveryrecyclebin.help.BaseActivity
import
com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import
com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import
com.base.filerecoveryrecyclebin.service.StayNotificationService
import
com.base.filerecoveryrecyclebin.utils.BarUtils
import
com.base.filerecoveryrecyclebin.utils.BarUtils
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.view.DialogViews.showExitDialog
import
com.base.filerecoveryrecyclebin.view.PermissionDialog.showPermissionBottomSheet
import
com.base.filerecoveryrecyclebin.view.PermissionDialog.showPermissionBottomSheet
import
com.base.filerecoveryrecyclebin.view.RateStarPop.showRateStarPopDialog
import
com.base.filerecoveryrecyclebin.view.RateStarPop.showRateStarPopDialog
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
...
@@ -40,11 +44,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
...
@@ -40,11 +44,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override
fun
initView
()
{
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
parseColor
(
"#F2F3F7"
)
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
// showRateStarPopDialog()
// showExitFunctionDialog()
binding
.
viewpager2
.
run
{
binding
.
viewpager2
.
run
{
adapter
=
object
:
FragmentStateAdapter
(
this
@MainActivity
)
{
adapter
=
object
:
FragmentStateAdapter
(
this
@MainActivity
)
{
...
@@ -67,11 +68,25 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
...
@@ -67,11 +68,25 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding
.
ll1
.
setOnClickListener
{
binding
.
ll1
.
setOnClickListener
{
binding
.
viewpager2
.
currentItem
=
0
binding
.
viewpager2
.
currentItem
=
0
BarUtils
.
setStatusBarColor
(
this
,
Color
.
parseColor
(
"#F2F3F7"
))
}
}
binding
.
ll2
.
setOnClickListener
{
binding
.
ll2
.
setOnClickListener
{
binding
.
viewpager2
.
currentItem
=
1
binding
.
viewpager2
.
currentItem
=
1
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
}
}
}
private
fun
initStayServiceObserver
()
{
startService
(
Intent
(
this
,
StayNotificationService
::
class
.
java
).
apply
{
this
.
action
=
StayNotificationService
.
MEDIA_OBSERVER_ACTION
})
startService
(
Intent
(
this
,
StayNotificationService
::
class
.
java
).
apply
{
this
.
action
=
StayNotificationService
.
FILE_OBSERVER_ACTION
putExtra
(
"isStart"
,
true
)
})
}
}
private
fun
setPage
(
p
:
Int
)
{
private
fun
setPage
(
p
:
Int
)
{
...
@@ -94,7 +109,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
...
@@ -94,7 +109,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override
fun
initListener
()
{
override
fun
initListener
()
{
super
.
initListener
()
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
showExitDialog
()
}
}
}
override
fun
onResume
()
{
override
fun
onResume
()
{
...
@@ -103,6 +120,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
...
@@ -103,6 +120,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if
(
dialog
==
null
)
{
if
(
dialog
==
null
)
{
dialog
=
showPermissionBottomSheet
(
launcher
)
dialog
=
showPermissionBottomSheet
(
launcher
)
}
}
}
else
{
initStayServiceObserver
()
}
}
lifecycleScope
.
launch
(
Dispatchers
.
Main
)
{
lifecycleScope
.
launch
(
Dispatchers
.
Main
)
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/recovery/FileRecoveredActivity.kt
View file @
ea161f3e
...
@@ -5,6 +5,7 @@ import android.graphics.Color
...
@@ -5,6 +5,7 @@ import android.graphics.Color
import
android.os.Environment
import
android.os.Environment
import
androidx.activity.addCallback
import
androidx.activity.addCallback
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
...
@@ -51,10 +52,14 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
...
@@ -51,10 +52,14 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
onBackPressedDispatcher
.
onBackPressed
()
onBackPressedDispatcher
.
onBackPressed
()
}
}
onBackPressedDispatcher
.
addCallback
{
onBackPressedDispatcher
.
addCallback
{
finishToMain
()
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
@FileRecoveredActivity
)
{
finishToMain
()
}
}
}
binding
.
tvContinue
.
setOnClickListener
{
binding
.
tvContinue
.
setOnClickListener
{
finish
()
AdmobMaxHelper
.
admobMaxShowInterstitialAd
(
this
)
{
finish
()
}
}
}
binding
.
tvFinish
.
setOnClickListener
{
binding
.
tvFinish
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
onBackPressedDispatcher
.
onBackPressed
()
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/recovery/FileRecoveryActivity.kt
View file @
ea161f3e
...
@@ -114,9 +114,11 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -114,9 +114,11 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
filterDismiss
(
bean
)
filterDismiss
(
bean
)
}
}
binding
.
rvFilter
.
adapter
=
filterAdapter
binding
.
rvFilter
.
adapter
=
filterAdapter
}
override
fun
onResume
()
{
super
.
onResume
()
initData
()
initData
()
}
}
override
fun
initListener
()
{
override
fun
initListener
()
{
...
@@ -168,7 +170,6 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
...
@@ -168,7 +170,6 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
showRecoveringDialog
(
lifecycleScope
,
list
,
dir
,
copyProgressAction
=
{
showRecoveringDialog
(
lifecycleScope
,
list
,
dir
,
copyProgressAction
=
{
},
finish
=
{
},
finish
=
{
adapter
.
toggleAllSelect
(
false
)
startActivity
(
Intent
(
this
,
FileRecoveredActivity
::
class
.
java
).
apply
{
startActivity
(
Intent
(
this
,
FileRecoveredActivity
::
class
.
java
).
apply
{
putExtra
(
"Number"
,
list
.
size
)
putExtra
(
"Number"
,
list
.
size
)
putExtra
(
"ScanType"
,
scanType
)
putExtra
(
"ScanType"
,
scanType
)
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/recyclebin/MeidaContentObserver.kt
View file @
ea161f3e
...
@@ -12,7 +12,9 @@ import com.base.filerecoveryrecyclebin.utils.LogEx
...
@@ -12,7 +12,9 @@ import com.base.filerecoveryrecyclebin.utils.LogEx
import
com.google.gson.Gson
import
com.google.gson.Gson
import
java.io.File
import
java.io.File
/**
* Observer MediaContent add
*/
class
MediaContentObserver
(
val
context
:
Context
,
val
handler
:
Handler
?
=
null
)
:
ContentObserver
(
null
)
{
class
MediaContentObserver
(
val
context
:
Context
,
val
handler
:
Handler
?
=
null
)
:
ContentObserver
(
null
)
{
private
val
TAG
=
"MediaContentObserver"
private
val
TAG
=
"MediaContentObserver"
...
@@ -21,9 +23,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) :
...
@@ -21,9 +23,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) :
override
fun
onChange
(
selfChange
:
Boolean
,
uri
:
Uri
?)
{
override
fun
onChange
(
selfChange
:
Boolean
,
uri
:
Uri
?)
{
super
.
onChange
(
selfChange
,
uri
)
super
.
onChange
(
selfChange
,
uri
)
LogEx
.
logDebug
(
TAG
,
"uri=${uri.toString()}"
)
LogEx
.
logDebug
(
TAG
,
"uri=${uri.toString()}"
)
if
(
uri
.
toString
().
contains
(
"images"
))
{
}
if
(
uri
.
toString
().
contains
(
"video"
))
{
}
uri
?.
let
{
queryNewMediaFiles
(
it
)
}
uri
?.
let
{
queryNewMediaFiles
(
it
)
}
}
}
@SuppressLint
(
"Range"
)
@SuppressLint
(
"Range"
)
private
fun
queryNewMediaFiles
(
uri
:
Uri
)
{
private
fun
queryNewMediaFiles
(
uri
:
Uri
)
{
// 查询新添加的媒体文件
// 查询新添加的媒体文件
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
View file @
ea161f3e
...
@@ -82,6 +82,11 @@ object AdMaxInterstitialUtils {
...
@@ -82,6 +82,11 @@ object AdMaxInterstitialUtils {
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdDisplayFailed"
)
LogEx
.
logDebug
(
TAG
,
"onAdDisplayFailed"
)
val
obj2
=
JSONObject
()
obj2
.
put
(
"code"
,
p1
.
code
)
obj2
.
put
(
"reason"
,
p1
.
message
)
obj2
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj2
)
}
}
})
})
}
}
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
View file @
ea161f3e
...
@@ -65,6 +65,7 @@ object AdMaxOpenUtils {
...
@@ -65,6 +65,7 @@ object AdMaxOpenUtils {
onHidden
?.
invoke
()
onHidden
?.
invoke
()
appOpenAd
?.
loadAd
()
appOpenAd
?.
loadAd
()
val
obj
=
JSONObject
()
val
obj
=
JSONObject
()
obj
.
put
(
"code"
,
p1
.
code
)
obj
.
put
(
"reason"
,
p1
.
message
)
obj
.
put
(
"reason"
,
p1
.
message
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/fragment/RecycleBinFragment.kt
View file @
ea161f3e
...
@@ -2,9 +2,7 @@ package com.base.filerecoveryrecyclebin.fragment
...
@@ -2,9 +2,7 @@ package com.base.filerecoveryrecyclebin.fragment
import
android.content.Intent
import
android.content.Intent
import
android.os.Build
import
android.os.Build
import
android.os.Bundle
import
android.os.Handler
import
android.os.Handler
import
android.view.View
import
androidx.annotation.RequiresApi
import
androidx.annotation.RequiresApi
import
androidx.core.view.isVisible
import
androidx.core.view.isVisible
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
...
@@ -52,13 +50,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
...
@@ -52,13 +50,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
}
}
StayNotificationService
.
mainHandler
=
handler
StayNotificationService
.
mainHandler
=
handler
requireActivity
().
startService
(
Intent
(
requireActivity
(),
StayNotificationService
::
class
.
java
).
apply
{
this
.
action
=
StayNotificationService
.
MEDIA_OBSERVER_ACTION
})
requireActivity
().
startService
(
Intent
(
requireContext
(),
StayNotificationService
::
class
.
java
).
apply
{
this
.
action
=
StayNotificationService
.
FILE_OBSERVER_ACTION
putExtra
(
"isStart"
,
true
)
})
recycleBinAdapter
=
RecycleBinAdapter
{
bean
->
recycleBinAdapter
=
RecycleBinAdapter
{
bean
->
startActivity
(
Intent
(
requireContext
(),
RecycleBinDetailActivity
::
class
.
java
).
apply
{
startActivity
(
Intent
(
requireContext
(),
RecycleBinDetailActivity
::
class
.
java
).
apply
{
putExtra
(
"Json"
,
Gson
().
toJson
(
bean
))
putExtra
(
"Json"
,
Gson
().
toJson
(
bean
))
...
@@ -80,6 +72,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
...
@@ -80,6 +72,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
}
}
}
}
@RequiresApi
(
Build
.
VERSION_CODES
.
Q
)
override
fun
setListener
()
{
override
fun
setListener
()
{
super
.
setListener
()
super
.
setListener
()
binding
.
flGengduo
.
setOnClickListener
{
binding
.
flGengduo
.
setOnClickListener
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/help/ConfigHelper.kt
View file @
ea161f3e
...
@@ -18,9 +18,9 @@ object ConfigHelper {
...
@@ -18,9 +18,9 @@ object ConfigHelper {
const
val
nativeAdmobId
=
"ca-app-pub-3940256099942544/2247696110"
const
val
nativeAdmobId
=
"ca-app-pub-3940256099942544/2247696110"
const
val
openAdmobId
=
"/6499/example/app-open"
const
val
openAdmobId
=
"/6499/example/app-open"
const
val
interAdMaxId
=
"
ca-app-pub-3940256099942544/1033173712
"
const
val
interAdMaxId
=
"
YOUR_AD_UNIT_ID
"
const
val
nativeAdMaxId
=
"YOUR_AD_UNIT_ID"
const
val
nativeAdMaxId
=
"YOUR_AD_UNIT_ID"
const
val
openAdMaxId
=
"
/6499/example/app-open
"
const
val
openAdMaxId
=
"
YOUR_AD_UNIT_ID
"
//一定展示大图广告
//一定展示大图广告
var
mustShowNativeAd
:
Boolean
=
false
var
mustShowNativeAd
:
Boolean
=
false
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/service/StayNotificationService.kt
View file @
ea161f3e
...
@@ -73,20 +73,14 @@ class StayNotificationService : Service() {
...
@@ -73,20 +73,14 @@ class StayNotificationService : Service() {
}
}
if
(
action
==
FILE_OBSERVER_ACTION
)
{
if
(
action
==
FILE_OBSERVER_ACTION
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
val
flag
=
intent
.
extras
?.
getBoolean
(
"isStart"
)
?:
false
startMyFileObserver
()
LogEx
.
logDebug
(
TAG
,
"action=$action flag=$flag"
)
startMyFileObserver
(
flag
)
}
}
}
}
if
(!
isRunning
)
{
if
(
isRunning
)
{
val
notification
=
createPermanentNotification
(
applicationContext
)
st
opSelf
(
)
st
artForeground
(
1
,
notification
)
return
START_NOT_STICKY
isRunning
=
true
}
}
val
notification
=
createPermanentNotification
(
applicationContext
)
startForeground
(
1
,
notification
)
return
START_STICKY
return
START_STICKY
}
}
...
@@ -94,12 +88,18 @@ class StayNotificationService : Service() {
...
@@ -94,12 +88,18 @@ class StayNotificationService : Service() {
private
fun
observerMediaContentObserver
()
{
private
fun
observerMediaContentObserver
()
{
if
(
mediaContentObserver
==
null
)
{
if
(
mediaContentObserver
==
null
)
{
mediaContentObserver
=
MediaContentObserver
(
this
,
mainHandler
)
LogEx
.
logDebug
(
TAG
,
"observerMediaContentObserver"
)
mediaContentObserver
=
MediaContentObserver
(
this
,
mainHandler
)
mediaContentObserver
?.
let
{
mediaContentObserver
?.
let
{
this
.
contentResolver
.
registerContentObserver
(
this
.
contentResolver
.
registerContentObserver
(
MediaStore
.
Images
.
Media
.
EXTERNAL_CONTENT_URI
,
true
,
it
MediaStore
.
Images
.
Media
.
EXTERNAL_CONTENT_URI
,
true
,
it
)
)
this
.
contentResolver
.
registerContentObserver
(
MediaStore
.
Video
.
Media
.
EXTERNAL_CONTENT_URI
,
true
,
it
)
}
}
}
}
}
}
...
@@ -107,23 +107,25 @@ class StayNotificationService : Service() {
...
@@ -107,23 +107,25 @@ class StayNotificationService : Service() {
private
var
myFileObserver
:
MyFileObserver
?
=
null
private
var
myFileObserver
:
MyFileObserver
?
=
null
@RequiresApi
(
Build
.
VERSION_CODES
.
Q
)
@RequiresApi
(
Build
.
VERSION_CODES
.
Q
)
fun
startMyFileObserver
(
isStart
:
Boolean
)
{
fun
startMyFileObserver
()
{
if
(
myFileObserver
==
null
)
{
if
(
myFileObserver
==
null
)
{
LogEx
.
logDebug
(
TAG
,
"startMyFileObserver"
)
val
dcimList
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DCIM
))
val
dcimList
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DCIM
))
val
pictureList
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_PICTURES
))
val
downloadList
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
))
val
videoList
=
FileHelp
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MOVIES
))
val
watchList
=
arrayListOf
<
File
>()
val
watchList
=
arrayListOf
<
File
>()
watchList
.
addAll
(
dcimList
)
watchList
.
addAll
(
dcimList
)
watchList
.
addAll
(
pictureList
)
watchList
.
addAll
(
downloadList
)
watchList
.
addAll
(
videoList
)
watchList
.
forEach
{
watchList
.
forEach
{
LogEx
.
logDebug
(
TAG
,
"watchList=${it.absolutePath}"
)
LogEx
.
logDebug
(
TAG
,
"watchList=${it.absolutePath}"
)
}
}
myFileObserver
=
MyFileObserver
(
handler
=
mainHandler
,
watchList
)
myFileObserver
=
MyFileObserver
(
handler
=
mainHandler
,
watchList
)
LogEx
.
logDebug
(
TAG
,
"watchList=${dcimList.size}"
)
LogEx
.
logDebug
(
TAG
,
"watchList=${dcimList.size}"
)
}
if
(
isStart
)
{
myFileObserver
?.
startWatching
()
myFileObserver
?.
startWatching
()
}
else
{
myFileObserver
?.
stopWatching
()
}
}
}
}
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/view/DialogViews.kt
View file @
ea161f3e
package
com.base.filerecoveryrecyclebin.view
package
com.base.filerecoveryrecyclebin.view
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.Activity
import
android.app.AlertDialog
import
android.app.AlertDialog
import
android.app.Dialog
import
android.app.Dialog
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.graphics.Color
import
android.graphics.Color
import
android.graphics.drawable.ColorDrawable
import
android.graphics.drawable.ColorDrawable
import
android.view.Gravity
import
android.view.Gravity
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
import
android.view.WindowManager
import
androidx.lifecycle.LifecycleCoroutineScope
import
androidx.lifecycle.LifecycleCoroutineScope
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import
com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogDeletePermanentlyBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogDeletePermanentlyBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogExitAppBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogExitFunctionBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogExitFunctionBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogImageTakeBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogImageTakeBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogPermissonOpenBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogPermissonOpenBinding
...
@@ -24,7 +29,6 @@ import com.base.filerecoveryrecyclebin.databinding.DialogRemoveFileTipBinding
...
@@ -24,7 +29,6 @@ import com.base.filerecoveryrecyclebin.databinding.DialogRemoveFileTipBinding
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.view.DialogViews.showDeletePermanentlyDialog
import
com.google.android.material.bottomsheet.BottomSheetBehavior
import
com.google.android.material.bottomsheet.BottomSheetBehavior
import
com.google.android.material.bottomsheet.BottomSheetDialog
import
com.google.android.material.bottomsheet.BottomSheetDialog
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
...
@@ -38,6 +42,7 @@ import kotlinx.coroutines.launch
...
@@ -38,6 +42,7 @@ import kotlinx.coroutines.launch
import
java.io.File
import
java.io.File
import
kotlin.random.Random
import
kotlin.random.Random
object
DialogViews
{
object
DialogViews
{
private
val
TAG
=
"DialogViews"
private
val
TAG
=
"DialogViews"
...
@@ -312,5 +317,39 @@ object DialogViews {
...
@@ -312,5 +317,39 @@ object DialogViews {
}
}
}
}
fun
Activity
.
showExitDialog
()
{
val
dialog
=
BottomSheetDialog
(
this
)
val
binding
=
DialogExitAppBinding
.
inflate
(
LayoutInflater
.
from
(
this
))
dialog
.
setContentView
(
binding
.
root
)
dialog
.
setCanceledOnTouchOutside
(
false
)
dialog
.
setCancelable
(
false
)
dialog
.
show
()
// dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
// dialog.window?.findViewById<View?>(com.google.android.material.R.id.design_bottom_sheet)
// ?.setBackgroundResource(android.R.color.transparent)
// (binding.root.parent as ViewGroup).background =
// ColorDrawable(Color.TRANSPARENT)
dialog
.
window
?.
setBackgroundDrawableResource
(
android
.
R
.
color
.
transparent
)
val
lp
:
WindowManager
.
LayoutParams
?
=
dialog
.
window
?.
attributes
lp
?.
alpha
=
0f
lp
?.
dimAmount
=
0.0f
window
.
setAttributes
(
lp
)
// val parentView = binding.root.parent as View
// BottomSheetBehavior.from(parentView).state = BottomSheetBehavior.STATE_EXPANDED
binding
.
tvY
.
setOnClickListener
{
startActivity
(
Intent
(
this
,
ScanJunkActivity
::
class
.
java
))
}
binding
.
tvExit
.
setOnClickListener
{
this
.
finish
()
}
}
}
}
app/src/main/java/com/base/filerecoveryrecyclebin/view/PermissionDialog.kt
View file @
ea161f3e
...
@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.view
...
@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.view
import
android.content.Context
import
android.content.Context
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
import
com.base.filerecoveryrecyclebin.activity.MainActivity
import
com.base.filerecoveryrecyclebin.databinding.DialogPermissionBottomsheetBinding
import
com.base.filerecoveryrecyclebin.databinding.DialogPermissionBottomsheetBinding
import
com.base.filerecoveryrecyclebin.help.ActivityLauncher
import
com.base.filerecoveryrecyclebin.help.ActivityLauncher
import
com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
import
com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
...
...
app/src/main/res/drawable/bg_transparent.xml
0 → 100644
View file @
ea161f3e
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"@android:color/transparent"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/dialog_exit_app.xml
0 → 100644
View file @
ea161f3e
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<LinearLayout
android:id=
"@+id/ll"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"40dp"
android:background=
"@drawable/bg_ffffff_tlr20"
android:orientation=
"vertical"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<TextView
android:id=
"@+id/tv_tittle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"25dp"
android:layout_marginTop=
"100dp"
android:text=
"Junk files are slowing down your phone"
android:textColor=
"@android:color/black"
android:textSize=
"22sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"25dp"
android:layout_marginTop=
"30dp"
android:text=
"Remove them now and release your phone space with one click!"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_y"
android:layout_width=
"300dp"
android:layout_height=
"45dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"50dp"
android:background=
"@drawable/bg_4773ff_22"
android:gravity=
"center"
android:text=
"Remove now"
android:textColor=
"@color/white"
android:textSize=
"17sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_exit"
android:layout_width=
"300dp"
android:layout_height=
"45dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginVertical=
"15dp"
android:gravity=
"center"
android:text=
"Exit"
android:textColor=
"#999999"
android:textSize=
"17sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
<ImageView
android:id=
"@+id/iv"
android:layout_width=
"95dp"
android:layout_height=
"95dp"
android:layout_marginStart=
"30dp"
android:layout_marginBottom=
"-30dp"
android:src=
"@mipmap/junk_exit"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_home_3.xml
View file @
ea161f3e
...
@@ -103,87 +103,6 @@
...
@@ -103,87 +103,6 @@
android:visibility=
"gone"
android:visibility=
"gone"
tools:text=
"Scanned junk files 29.69MB"
/>
tools:text=
"Scanned junk files 29.69MB"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"15dp"
android:text=
"File"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginTop=
"8dp"
android:orientation=
"horizontal"
tools:ignore=
"DisableBaselineAlignment"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_screenshot"
android:layout_width=
"0dp"
android:layout_height=
"80dp"
android:layout_margin=
"8dp"
android:layout_weight=
"1"
android:background=
"@mipmap/photo"
app:cardBackgroundColor=
"@color/white"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"12dp"
android:text=
"Screenshot\nCleaner"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"8dp"
android:src=
"@mipmap/h_screenshot"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_repeat_photos"
android:layout_width=
"0dp"
android:layout_height=
"80dp"
android:layout_margin=
"8dp"
android:layout_weight=
"1"
android:background=
"@mipmap/videos"
app:cardBackgroundColor=
"@color/white"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"12dp"
android:text=
"Duplicate\nPhotos"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"8dp"
android:src=
"@mipmap/h_similar"
/>
</androidx.cardview.widget.CardView>
</LinearLayout>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -439,6 +358,90 @@
...
@@ -439,6 +358,90 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"8dp"
/>
android:layout_marginTop=
"8dp"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"15dp"
android:text=
"File"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
tools:ignore=
"HardcodedText"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginTop=
"8dp"
android:orientation=
"horizontal"
tools:ignore=
"DisableBaselineAlignment"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_screenshot"
android:layout_width=
"0dp"
android:layout_height=
"80dp"
android:layout_margin=
"8dp"
android:layout_weight=
"1"
android:background=
"@mipmap/photo"
app:cardBackgroundColor=
"@color/white"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"12dp"
android:text=
"Screenshot\nCleaner"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"8dp"
android:src=
"@mipmap/h_screenshot"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id=
"@+id/card_repeat_photos"
android:layout_width=
"0dp"
android:layout_height=
"80dp"
android:layout_margin=
"8dp"
android:layout_weight=
"1"
android:background=
"@mipmap/videos"
app:cardBackgroundColor=
"@color/white"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"0dp"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"12dp"
android:text=
"Duplicate\nPhotos"
android:textColor=
"@color/black"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"8dp"
android:src=
"@mipmap/h_similar"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.core.widget.NestedScrollView>
...
...
app/src/main/res/mipmap-xxhdpi/junk_exit.png
0 → 100644
View file @
ea161f3e
17.8 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