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
d16a160d
Commit
d16a160d
authored
Jul 23, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
....
parent
39d94c90
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
206 additions
and
58 deletions
+206
-58
MyApplication.kt
...ain/java/com/base/filerecoveryrecyclebin/MyApplication.kt
+3
-3
SplashActivity.kt
...om/base/filerecoveryrecyclebin/activity/SplashActivity.kt
+1
-0
RecycleBinDetailActivity.kt
...ecyclebin/activity/recyclebin/RecycleBinDetailActivity.kt
+38
-14
RecycleBinAdapter.kt
.../base/filerecoveryrecyclebin/adapter/RecycleBinAdapter.kt
+38
-17
AdmobMaxHelper.kt
...ava/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
+8
-0
RecycleBinBean.kt
...va/com/base/filerecoveryrecyclebin/bean/RecycleBinBean.kt
+20
-1
HomeFragment.kt
.../com/base/filerecoveryrecyclebin/fragment/HomeFragment.kt
+3
-1
RecycleBinFragment.kt
...ase/filerecoveryrecyclebin/fragment/RecycleBinFragment.kt
+2
-1
VideoPlayerUtil.java
...com/base/filerecoveryrecyclebin/help/VideoPlayerUtil.java
+35
-2
FileObserverExample.java
...e/filerecoveryrecyclebin/service/FileObserverExample.java
+11
-4
InstallHelps.kt
...ava/com/base/filerecoveryrecyclebin/utils/InstallHelps.kt
+8
-0
NewComUtils.kt
...java/com/base/filerecoveryrecyclebin/utils/NewComUtils.kt
+12
-4
activity_recycle_bin_detail.xml
app/src/main/res/layout/activity_recycle_bin_detail.xml
+21
-6
fragment_home_2.xml
app/src/main/res/layout/fragment_home_2.xml
+0
-1
item_recyclebin_file.xml
app/src/main/res/layout/item_recyclebin_file.xml
+6
-4
bg.png
app/src/main/res/mipmap-xxhdpi/bg.png
+0
-0
bg_music.png
app/src/main/res/mipmap-xxhdpi/bg_music.png
+0
-0
wendang.png
app/src/main/res/mipmap-xxhdpi/wendang.png
+0
-0
yuan_music.png
app/src/main/res/mipmap-xxhdpi/yuan_music.png
+0
-0
No files found.
app/src/main/java/com/base/filerecoveryrecyclebin/MyApplication.kt
View file @
d16a160d
...
...
@@ -54,6 +54,7 @@ class MyApplication : BaseApplication() {
FCMManager
.
initFirebase
(
this
)
FCMManager
.
subscribeToTopic
(
topic
)
LogEx
.
logDebug
(
TAG
,
"topic=${topic}"
)
InstallHelps
.
init
()
NewComUtils
.
requestCfg
{
ScreenStatusReceiver
.
setupScreenStatusListener
(
this
)
val
timerStatus
:
Int
=
AppPreferences
.
getInstance
().
getString
(
"timerS"
,
"1"
).
toIntOrNull
()
?:
1
...
...
@@ -70,7 +71,6 @@ class MyApplication : BaseApplication() {
}
}
}
InstallHelps
.
init
()
if
(
ifAgreePrivacy
)
{
AdmobMaxHelper
.
initAdmobMaxAd
()
...
...
@@ -124,8 +124,8 @@ class MyApplication : BaseApplication() {
LogEx
.
logDebug
(
TAG
,
"flag=$flag"
)
if
(
flag
)
{
if
(
Admob
OpenUtils
.
isOpenAdLoaded
())
{
Admob
OpenUtils
.
showAppOpenAd
(
activity
)
if
(
Admob
MaxHelper
.
isOpenAdLoaded
())
{
Admob
MaxHelper
.
admobMaxShowOpenAd
(
activity
,
{},
{}
)
}
else
{
topActivity
?.
startActivity
(
Intent
(
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/SplashActivity.kt
View file @
d16a160d
...
...
@@ -162,6 +162,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
}
}
finish
()
// intent?.extras?.clear()
}
private
fun
closeNotification
()
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/recyclebin/RecycleBinDetailActivity.kt
View file @
d16a160d
...
...
@@ -8,7 +8,9 @@ import android.util.Log
import
android.view.View
import
androidx.activity.addCallback
import
androidx.annotation.RequiresApi
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.activity.ResultActivity
import
com.base.filerecoveryrecyclebin.activity.recovery.FileRecoveredActivity
import
com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
...
...
@@ -16,6 +18,10 @@ import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.find
import
com.base.filerecoveryrecyclebin.bean.ConstObject
import
com.base.filerecoveryrecyclebin.bean.ConstObject.RECYCLE_BIN
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mAudioStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mDocumentStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mImageStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mVideoStr
import
com.base.filerecoveryrecyclebin.databinding.ActivityRecycleBinDetailBinding
import
com.base.filerecoveryrecyclebin.help.BaseActivity
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
...
...
@@ -36,35 +42,47 @@ class RecycleBinDetailActivity : BaseActivity<ActivityRecycleBinDetailBinding>()
ActivityRecycleBinDetailBinding
.
inflate
(
layoutInflater
)
}
private
var
recycleBinBean
:
RecycleBinBean
?
=
null
val
mImageStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".jpg"
,
".jpeg"
,
".png"
,
".gif"
,
".bmp"
)
)
val
mVideoStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".mp4"
,
".avi"
,
".mov"
,
".mkv"
)
)
@SuppressLint
(
"SetTextI18n"
)
@RequiresApi
(
Build
.
VERSION_CODES
.
Q
)
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
WHITE
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
val
json
=
intent
.
extras
?.
getString
(
"Json"
)
?:
""
LogEx
.
logDebug
(
TAG
,
"json=$json"
)
recycleBinBean
=
Gson
().
fromJson
(
json
,
RecycleBinBean
::
class
.
java
)
recycleBinBean
?.
let
{
bean
->
if
(
mImageStr
.
contains
(
"."
+
bean
.
mimeType
))
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
WHITE
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
ivBofang
.
visibility
=
View
.
GONE
}
if
(
mVideoStr
.
contains
(
"."
+
bean
.
mimeType
))
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
WHITE
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
ivBofang
.
visibility
=
View
.
VISIBLE
}
if
(
mAudioStr
.
contains
(
"."
+
bean
.
mimeType
))
{
BarUtils
.
setStatusBarLightMode
(
this
,
false
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding
.
flTop
.
setBackgroundColor
(
Color
.
TRANSPARENT
)
binding
.
root
.
setBackgroundResource
(
R
.
mipmap
.
bg_music
)
binding
.
ivIcon
.
isVisible
=
true
binding
.
ivIcon
.
setImageResource
(
R
.
mipmap
.
yuan_music
)
}
if
(
mDocumentStr
.
contains
(
"."
+
bean
.
mimeType
))
{
BarUtils
.
setStatusBarLightMode
(
this
,
false
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
flTop
.
setBackgroundColor
(
Color
.
TRANSPARENT
)
binding
.
root
.
setBackgroundColor
(
Color
.
parseColor
(
"#EDEDEE"
))
binding
.
ivBofang
.
visibility
=
View
.
GONE
binding
.
ivIcon
.
isVisible
=
true
binding
.
ivIcon
.
setImageResource
(
R
.
mipmap
.
wendang
)
}
Glide
.
with
(
this
).
load
(
bean
.
backupPath
).
centerCrop
().
into
(
binding
.
iv
)
binding
.
tvName
.
text
=
bean
.
path
...
...
@@ -99,6 +117,12 @@ class RecycleBinDetailActivity : BaseActivity<ActivityRecycleBinDetailBinding>()
if
(
mVideoStr
.
contains
(
"."
+
bean
.
mimeType
))
{
putExtra
(
"ScanType"
,
ConstObject
.
SCAN_VIDEOS
)
}
if
(
mAudioStr
.
contains
(
"."
+
bean
.
mimeType
))
{
putExtra
(
"ScanType"
,
ConstObject
.
SCAN_AUDIOS
)
}
if
(
mDocumentStr
.
contains
(
"."
+
bean
.
mimeType
))
{
putExtra
(
"ScanType"
,
ConstObject
.
SCAN_DOCUMENTS
)
}
putExtra
(
"Path"
,
bean
.
path
)
}
putExtra
(
"Number"
,
1
)
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/adapter/RecycleBinAdapter.kt
View file @
d16a160d
...
...
@@ -6,11 +6,16 @@ import android.os.Build
import
android.view.View
import
android.view.ViewGroup
import
androidx.annotation.RequiresApi
import
androidx.core.content.ContextCompat
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView.ViewHolder
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mAudioStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mDocumentStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mImageStr
import
com.base.filerecoveryrecyclebin.bean.RecycleBinBean.Companion.mVideoStr
import
com.base.filerecoveryrecyclebin.databinding.ItemRecyclebinFileBinding
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime
...
...
@@ -48,23 +53,39 @@ class RecycleBinAdapter(val click: (bean: RecycleBinBean) -> Unit) : RecyclerVie
val
bean
=
beanList
[
position
]
val
context
=
holder
.
itemView
.
context
Glide
.
with
(
context
).
load
(
bean
.
backupPath
).
listener
(
object
:
RequestListener
<
Drawable
>
{
override
fun
onLoadFailed
(
e
:
GlideException
?,
model
:
Any
?,
target
:
Target
<
Drawable
>,
isFirstResource
:
Boolean
):
Boolean
{
LogEx
.
logDebug
(
TAG
,
"Failed to load image: $model"
)
return
false
}
override
fun
onResourceReady
(
resource
:
Drawable
,
model
:
Any
,
target
:
Target
<
Drawable
>?,
dataSource
:
DataSource
,
isFirstResource
:
Boolean
):
Boolean
{
return
false
}
}).
centerCrop
().
into
(
binding
.
iv
)
if
(
mImageStr
.
contains
(
"."
+
bean
.
mimeType
)
or
mVideoStr
.
contains
(
"."
+
bean
.
mimeType
))
{
Glide
.
with
(
context
).
load
(
bean
.
backupPath
).
listener
(
object
:
RequestListener
<
Drawable
>
{
override
fun
onLoadFailed
(
e
:
GlideException
?,
model
:
Any
?,
target
:
Target
<
Drawable
>,
isFirstResource
:
Boolean
):
Boolean
{
LogEx
.
logDebug
(
TAG
,
"Failed to load image: $model"
)
return
false
}
override
fun
onResourceReady
(
resource
:
Drawable
,
model
:
Any
,
target
:
Target
<
Drawable
>?,
dataSource
:
DataSource
,
isFirstResource
:
Boolean
):
Boolean
{
return
false
}
}).
centerCrop
().
into
(
binding
.
iv
)
}
if
(
mAudioStr
.
contains
(
"."
+
bean
.
mimeType
))
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_audios
)
}
if
(
mDocumentStr
.
contains
(
"."
+
bean
.
mimeType
))
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_documents
)
}
binding
.
tvName
.
text
=
bean
.
name
binding
.
tvTime
.
text
=
"delete time:"
+
bean
.
deleteTime
.
toFormatTime
()
binding
.
tvSize
.
text
=
bean
.
size
.
toFormatSize
()
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
View file @
d16a160d
...
...
@@ -35,6 +35,14 @@ object AdmobMaxHelper {
}
}
fun
isOpenAdLoaded
():
Boolean
{
return
if
(
ConfigHelper
.
admobTrueMaxFlase
)
{
AdmobOpenUtils
.
isOpenAdLoaded
()
}
else
{
AdMaxOpenUtils
.
isOpenAdLoaded
()
}
}
fun
admobMaxShowInterstitialAd
(
activity
:
Activity
,
ifBackSp
:
Boolean
=
false
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
if
(
ConfigHelper
.
admobTrueMaxFlase
)
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/bean/RecycleBinBean.kt
View file @
d16a160d
...
...
@@ -9,5 +9,24 @@ data class RecycleBinBean(
val
size
:
Long
=
0
,
val
mimeType
:
String
=
""
,
var
deleted
:
Boolean
=
false
)
)
{
companion
object
{
val
mImageStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".jpg"
,
".jpeg"
,
".png"
,
".gif"
,
".bmp"
)
)
val
mVideoStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".mp4"
,
".avi"
,
".mov"
,
".mkv"
)
)
val
mAudioStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".mp3"
,
".flac"
,
".wav"
)
)
val
mDocumentStr
:
Set
<
String
>
=
HashSet
(
mutableListOf
(
".doc"
,
".docx"
,
".xls"
,
".xlsx"
,
".ppt"
,
".pptx"
,
".pdf"
)
)
}
}
app/src/main/java/com/base/filerecoveryrecyclebin/fragment/HomeFragment.kt
View file @
d16a160d
...
...
@@ -11,11 +11,13 @@ import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import
com.base.filerecoveryrecyclebin.activity.photomanager.PhotoManagerAnimationActivity
import
com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
import
com.base.filerecoveryrecyclebin.activity.whatsapp.WhatsAppCleanerAnimationActivity
import
com.base.filerecoveryrecyclebin.bean.ConstObject
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import
com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
import
com.base.filerecoveryrecyclebin.databinding.FragmentHome3Binding
import
com.base.filerecoveryrecyclebin.fcm.NotificationUtil.sendNotification
import
com.base.filerecoveryrecyclebin.help.BaseFragment
import
com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import
com.base.filerecoveryrecyclebin.utils.LogEx
...
...
@@ -39,7 +41,7 @@ class HomeFragment : BaseFragment<FragmentHome3Binding>() {
override
fun
setListener
()
{
binding
.
flScan
.
setOnClickListener
{
startActivity
(
Intent
(
requireContext
(),
ScanJunkActivity
::
class
.
java
))
// sendNotification(requireContext(), ConstObject.ID_
SCREENSHOT_CLEAN
)
// sendNotification(requireContext(), ConstObject.ID_
JUNK_CLEAN_PUSH
)
}
binding
.
cardRyPhotos
.
setOnClickListener
{
startActivity
(
Intent
(
requireContext
(),
FileScanResultActivity
::
class
.
java
).
apply
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/fragment/RecycleBinFragment.kt
View file @
d16a160d
...
...
@@ -65,7 +65,8 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
LogEx
.
logDebug
(
TAG
,
"initData"
)
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
beanList
=
BackUpUtils
.
getBackUpListObj
()
val
deleteFile
:
List
<
RecycleBinBean
>?
=
beanList
?.
filter
{
it
.
deleted
}
// val deleteFile: List<RecycleBinBean>? = beanList?.filter { it.deleted }
val
deleteFile
:
List
<
RecycleBinBean
>?
=
beanList
LogEx
.
logDebug
(
TAG
,
"deleteFile=$deleteFile"
)
deleteFile
?.
forEach
{
LogEx
.
logDebug
(
TAG
,
it
.
toString
())
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/help/VideoPlayerUtil.java
View file @
d16a160d
...
...
@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.help;
import
android.content.Context
;
import
android.content.Intent
;
import
android.net.Uri
;
import
java.io.File
;
import
android.os.Build
;
...
...
@@ -15,12 +16,12 @@ public class VideoPlayerUtil {
/**
* 打开外部视频播放器并播放指定路径的MP4文件。
*
* @param context 应用上下文
* @param context
应用上下文
* @param videoPath MP4文件的本地路径
*/
public
static
void
playVideo
(
Context
context
,
String
videoPath
)
{
File
videoFile
=
new
File
(
videoPath
);
Log
.
d
(
"glc"
,
videoPath
);
Log
.
d
(
"glc"
,
videoPath
);
if
(!
videoFile
.
exists
())
{
throw
new
IllegalArgumentException
(
"Video file does not exist: "
+
videoPath
);
}
...
...
@@ -43,4 +44,36 @@ public class VideoPlayerUtil {
// 处理异常,例如提示用户或记录日志
}
}
/**
* 打开外部视频播放器并播放指定路径的MP4文件。
*
* @param context 应用上下文
* @param audioPath MP4文件的本地路径
*/
public
static
void
playAudio
(
Context
context
,
String
audioPath
)
{
File
audioFile
=
new
File
(
audioPath
);
Log
.
d
(
"glc"
,
audioPath
);
if
(!
audioFile
.
exists
())
{
throw
new
IllegalArgumentException
(
"Video file does not exist: "
+
audioPath
);
}
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
);
Uri
audioUri
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
audioUri
=
FileProvider
.
getUriForFile
(
context
,
"com.base.filerecoveryrecyclebin.provider"
,
audioFile
);
intent
.
addFlags
(
Intent
.
FLAG_GRANT_READ_URI_PERMISSION
);
}
else
{
audioUri
=
Uri
.
fromFile
(
audioFile
);
}
intent
.
setDataAndType
(
audioUri
,
"audio/mp3"
);
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
try
{
context
.
startActivity
(
intent
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
// 处理异常,例如提示用户或记录日志
}
}
}
\ No newline at end of file
app/src/main/java/com/base/filerecoveryrecyclebin/service/FileObserverExample.java
View file @
d16a160d
...
...
@@ -45,19 +45,26 @@ public class FileObserverExample {
List
<
File
>
pictureList
=
FileHelp
.
INSTANCE
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_PICTURES
));
List
<
File
>
downloadList
=
FileHelp
.
INSTANCE
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
));
List
<
File
>
videoList
=
FileHelp
.
INSTANCE
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MOVIES
));
List
<
File
>
musicList
=
FileHelp
.
INSTANCE
.
getFileFolder
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MUSIC
));
watchList
=
new
ArrayList
();
watchList
.
add
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DCIM
));
watchList
.
add
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_PICTURES
));
watchList
.
add
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
));
watchList
.
add
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MOVIES
));
watchList
.
add
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_MUSIC
));
watchList
.
addAll
(
dcimList
);
watchList
.
addAll
(
pictureList
);
watchList
.
addAll
(
downloadList
);
watchList
.
addAll
(
videoList
);
watchList
.
addAll
(
musicList
);
fileHandlerThread
=
new
HandlerThread
(
"FileObserverThread"
);
fileHandlerThread
.
start
();
fileHandler
=
new
Handler
(
fileHandlerThread
.
getLooper
());
fileObserver
=
new
FileObserver
(
watchList
,
FileObserver
.
CREATE
|
FileObserver
.
DELETE
|
FileObserver
.
DELETE_SELF
|
FileObserver
.
MOVED_FROM
|
FileObserver
.
MOVED_TO
|
FileObserver
.
MODIFY
)
{
fileObserver
=
new
FileObserver
(
watchList
,
FileObserver
.
CREATE
|
FileObserver
.
DELETE
|
FileObserver
.
DELETE_SELF
|
FileObserver
.
MOVED_FROM
|
FileObserver
.
MOVED_TO
|
FileObserver
.
MODIFY
)
{
@Override
public
void
onEvent
(
int
event
,
String
path
)
{
Log
.
d
(
TAG
,
"onEvent "
+
event
+
" "
+
path
);
Log
.
e
(
TAG
,
"onEvent "
+
event
+
" "
+
path
);
if
(!
TextUtils
.
isEmpty
(
path
))
{
Log
.
d
(
TAG
,
"path: "
+
path
);
handleFileEvent
(
path
,
event
);
...
...
@@ -81,10 +88,10 @@ public class FileObserverExample {
Log
.
d
(
TAG
,
event
+
" "
+
FileObserver
.
DELETE_SELF
+
" "
+
path
);
// 检查文件扩展名是否在监听范围内
if
(
FILE_EXTENSIONS
.
contains
(
getFileExtension
(
path
)))
{
if
(
event
==
FileObserver
.
CREATE
||
event
==
FileObserver
.
MOVED_TO
||
event
==
FileObserver
.
MODIFY
)
{
if
(
event
==
FileObserver
.
CREATE
||
event
==
FileObserver
.
MOVED_TO
||
event
==
FileObserver
.
MODIFY
)
{
Log
.
d
(
TAG
,
"CREATE"
);
fileHandler
.
removeCallbacksAndMessages
(
null
);
fileHandler
.
postDelayed
(()
->
handleFileCreation
(
path
),
2000
);
fileHandler
.
postDelayed
(()
->
handleFileCreation
(
path
),
2000
);
}
else
if
(
event
==
FileObserver
.
DELETE
||
event
==
FileObserver
.
DELETE_SELF
||
event
==
FileObserver
.
MOVED_FROM
)
{
Log
.
d
(
TAG
,
event
+
" DELETE:"
+
path
);
BackUpUtils
.
INSTANCE
.
deleteFile
(
path
);
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/utils/InstallHelps.kt
View file @
d16a160d
...
...
@@ -9,6 +9,7 @@ import org.json.JSONObject
* call before agree
*/
object
InstallHelps
{
var
INSTALL_REFERRER_OK
=
false
fun
init
()
{
val
referrerClient
=
InstallReferrerClient
.
newBuilder
(
BaseApplication
.
context
).
build
()
referrerClient
.
startConnection
(
object
:
InstallReferrerStateListener
{
...
...
@@ -24,6 +25,13 @@ object InstallHelps {
obj
.
put
(
"appInstallTime"
,
response
.
installBeginTimestampSeconds
)
obj
.
put
(
"instantExperienceLaunched"
,
installInfo
.
toString
())
EventUtils
.
event
(
"install_referrer"
,
ext
=
obj
,
isSingleEvent
=
true
)
if
(
listOf
(
"gclid"
,
"facebook"
,
"instagram"
).
all
{
!
installInfo
.
contains
(
it
,
true
)
})
{
//自然用户
AppPreferences
.
getInstance
().
put
(
"install_source"
,
"origin"
)
}
else
{
//渠道用户
AppPreferences
.
getInstance
().
put
(
"install_source"
,
"channel"
)
}
}
else
->
{
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/utils/NewComUtils.kt
View file @
d16a160d
...
...
@@ -26,7 +26,14 @@ object NewComUtils {
private
val
url
:
String
by
lazy
{
val
packageName
=
ConfigHelper
.
packageName
val
appCode
=
packageName
.
substringAfter
(
PACKAGE_NAME_PREFIX
).
take
(
5
).
toLowerCase
(
Locale
.
getDefault
())
"$API_URL/$appCode spk?pkg=$packageName"
"$API_URL/${appCode}spk?pkg=$packageName"
}
//origin user = only pick &source=origin
private
fun
getOriginUrl
():
String
{
val
packageName
=
ConfigHelper
.
packageName
val
appCode
=
packageName
.
substringAfter
(
PACKAGE_NAME_PREFIX
).
take
(
5
).
toLowerCase
(
Locale
.
getDefault
())
return
"$API_URL/${appCode}spk?pkg=$packageName&source=origin"
}
fun
requestCfg
(
callback
:
(
ConfigBean
?)
->
Unit
)
{
...
...
@@ -55,8 +62,9 @@ object NewComUtils {
}
}
private
fun
doGet
():
String
?
{
val
urlPath
=
url
private
fun
doGet
():
String
?
{
val
originFlag
=
AppPreferences
.
getInstance
().
getString
(
"install_source"
,
""
)
==
"origin"
val
urlPath
=
if
(
originFlag
)
getOriginUrl
()
else
url
Log
.
d
(
"okhttp"
,
urlPath
)
try
{
val
conn
:
HttpURLConnection
=
URL
(
urlPath
).
openConnection
()
as
HttpURLConnection
...
...
@@ -81,7 +89,7 @@ object NewComUtils {
}
private
fun
parseConfigBean
(
json
:
String
)
{
Log
.
d
(
"okhttp"
,
json
)
Log
.
d
(
"okhttp"
,
json
)
val
gson
=
Gson
()
val
type
=
object
:
TypeToken
<
Map
<
String
,
String
>>()
{}.
type
val
configMap
=
gson
.
fromJson
<
Map
<
String
,
String
>>(
json
,
type
)
...
...
app/src/main/res/layout/activity_recycle_bin_detail.xml
View file @
d16a160d
...
...
@@ -54,18 +54,33 @@
tools:ignore=
"ContentDescription"
tools:layout_editor_absoluteX=
"0dp"
/>
<ImageView
android:id=
"@+id/iv_bofang"
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:clickable=
"true"
android:focusable=
"true"
android:src=
"@mipmap/bofang"
android:orientation=
"vertical"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
/>
app:layout_constraintVertical_bias=
"0.4"
tools:ignore=
"ContentDescription"
>
<ImageView
android:id=
"@+id/iv_icon"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"30dp"
android:visibility=
"gone"
/>
<ImageView
android:id=
"@+id/iv_bofang"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:clickable=
"true"
android:focusable=
"true"
android:src=
"@mipmap/bofang"
/>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width=
"@dimen/dp_345"
...
...
app/src/main/res/layout/fragment_home_2.xml
View file @
d16a160d
...
...
@@ -16,7 +16,6 @@
<ImageView
android:layout_width=
"match_parent"
android:layout_height=
"232dp"
android:background=
"@mipmap/bg"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
/>
...
...
app/src/main/res/layout/item_recyclebin_file.xml
View file @
d16a160d
...
...
@@ -4,13 +4,14 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"
20
dp"
android:layout_marginHorizontal=
"
15
dp"
android:layout_marginVertical=
"6dp"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card"
android:layout_width=
"55dp"
android:layout_height=
"55dp"
android:layout_width=
"50dp"
android:layout_height=
"50dp"
android:layout_marginStart=
"5dp"
app:cardCornerRadius=
"8dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
...
...
@@ -20,7 +21,7 @@
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:
layout_margin=
"5dp
"
android:
scaleType=
"fitXY
"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
...
...
@@ -30,6 +31,7 @@
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"12dp"
android:layout_marginEnd=
"5dp"
android:orientation=
"vertical"
app:layout_constraintBottom_toBottomOf=
"@id/card"
app:layout_constraintEnd_toEndOf=
"parent"
...
...
app/src/main/res/mipmap-xxhdpi/bg.png
deleted
100644 → 0
View file @
39d94c90
220 KB
app/src/main/res/mipmap-xxhdpi/bg_music.png
0 → 100644
View file @
d16a160d
903 KB
app/src/main/res/mipmap-xxhdpi/wendang.png
0 → 100644
View file @
d16a160d
122 KB
app/src/main/res/mipmap-xxhdpi/yuan_music.png
0 → 100644
View file @
d16a160d
339 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