Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
Smart Cleaner-Junk Cleaner
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
Smart Cleaner-Junk Cleaner
Commits
a7e7e820
Commit
a7e7e820
authored
Jun 07, 2024
by
maxiaoliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
删除无关代码,修改ui
parent
87e6f8a4
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
57 additions
and
546 deletions
+57
-546
MyApplication.kt
...main/java/com/test/basd/smartjunkcleaner/MyApplication.kt
+0
-1
AppManagerActivity.kt
...test/basd/smartjunkcleaner/activity/AppManagerActivity.kt
+6
-6
GuestActivity.kt
.../com/test/basd/smartjunkcleaner/activity/GuestActivity.kt
+0
-48
ResultActivity.kt
...com/test/basd/smartjunkcleaner/activity/ResultActivity.kt
+0
-10
SpeakerCleanerActivity.kt
.../basd/smartjunkcleaner/activity/SpeakerCleanerActivity.kt
+0
-43
SpeakerCleaningActivity.kt
...basd/smartjunkcleaner/activity/SpeakerCleaningActivity.kt
+0
-101
BatteryOptimizerActivity.kt
...artjunkcleaner/activity/speed/BatteryOptimizerActivity.kt
+0
-60
SpeedActivity.kt
...est/basd/smartjunkcleaner/activity/speed/SpeedActivity.kt
+0
-86
SpeedFinishActivity.kt
...sd/smartjunkcleaner/activity/speed/SpeedFinishActivity.kt
+0
-54
SplashJumpUtils.kt
.../basd/smartjunkcleaner/activity/splash/SplashJumpUtils.kt
+3
-7
ToolsAdapter.kt
...va/com/test/basd/smartjunkcleaner/adapter/ToolsAdapter.kt
+1
-3
ConfigBean.kt
...in/java/com/test/basd/smartjunkcleaner/bean/ConfigBean.kt
+1
-2
NotificationHelper.kt
.../test/basd/smartjunkcleaner/display/NotificationHelper.kt
+6
-8
FCMCheckReceiver.kt
...est/basd/smartjunkcleaner/display/fcm/FCMCheckReceiver.kt
+0
-25
FcmHelper.kt
...a/com/test/basd/smartjunkcleaner/display/fcm/FcmHelper.kt
+0
-27
MyFirebaseMessagingService.kt
...martjunkcleaner/display/fcm/MyFirebaseMessagingService.kt
+1
-1
HomeFragment.kt
...a/com/test/basd/smartjunkcleaner/fragment/HomeFragment.kt
+7
-10
ToolsFragment.kt
.../com/test/basd/smartjunkcleaner/fragment/ToolsFragment.kt
+1
-5
AFunOb.kt
...c/main/java/com/test/basd/smartjunkcleaner/view/AFunOb.kt
+1
-4
activity_app_manager.xml
app/src/main/res/layout/activity_app_manager.xml
+1
-1
activity_battery_info.xml
app/src/main/res/layout/activity_battery_info.xml
+2
-1
activity_layout_large_file.xml
app/src/main/res/layout/activity_layout_large_file.xml
+1
-1
activity_layout_parepre_scan.xml
app/src/main/res/layout/activity_layout_parepre_scan.xml
+3
-2
activity_layout_scan_junk.xml
app/src/main/res/layout/activity_layout_scan_junk.xml
+1
-1
activity_recent_app.xml
app/src/main/res/layout/activity_recent_app.xml
+1
-1
activity_start_compression_photo.xml
app/src/main/res/layout/activity_start_compression_photo.xml
+4
-3
fragment_layout_home.xml
app/src/main/res/layout/fragment_layout_home.xml
+17
-35
No files found.
app/src/main/java/com/test/basd/smartjunkcleaner/MyApplication.kt
View file @
a7e7e820
...
...
@@ -73,7 +73,6 @@ class MyApplication : BaseApplication() {
FirebaseApp
.
initializeApp
(
this
)
FcmHelper
.
getToken
()
FcmHelper
.
subscribeToTopic
()
FcmHelper
.
startFCMCheckAlarm
(
this
)
}
private
fun
initJob
()
{
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/activity/AppManagerActivity.kt
View file @
a7e7e820
...
...
@@ -9,6 +9,7 @@ import android.content.Intent
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageInfo
import
android.content.pm.PackageManager
import
android.graphics.Color
import
android.net.Uri
import
android.os.Build
import
android.util.Log
...
...
@@ -17,11 +18,13 @@ import androidx.activity.addCallback
import
androidx.core.view.ViewCompat
import
androidx.core.view.WindowInsetsCompat
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.FragmentActivity
import
androidx.lifecycle.lifecycleScope
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
androidx.viewpager2.widget.ViewPager2
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.R
import
com.test.basd.smartjunkcleaner.bean.AppBean
import
com.test.basd.smartjunkcleaner.databinding.ActivityAppManagerBinding
...
...
@@ -74,12 +77,9 @@ class AppManagerActivity : BaseActivity<ActivityAppManagerBinding>() {
override
fun
initView
()
{
context
=
this
launcher
=
ActivityLauncher
(
this
)
setContentView
(
binding
.
root
)
ViewCompat
.
setOnApplyWindowInsetsListener
(
findViewById
(
R
.
id
.
main
))
{
v
,
insets
->
val
systemBars
=
insets
.
getInsets
(
WindowInsetsCompat
.
Type
.
systemBars
())
v
.
setPadding
(
systemBars
.
left
,
systemBars
.
top
,
systemBars
.
right
,
systemBars
.
bottom
)
insets
}
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
initViewPager
()
playLottie
()
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/activity/GuestActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity
import
android.content.Intent
import
android.graphics.Color
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutGuestBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.ConfigHelper
import
kotlin.random.Random
/**
* 引导动画页面
*/
class
GuestActivity
:
BaseActivity
<
ActivityLayoutGuestBinding
>()
{
override
val
binding
:
ActivityLayoutGuestBinding
by
lazy
{
ActivityLayoutGuestBinding
.
inflate
(
layoutInflater
)
}
private
var
mProgress
=
0
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
ConfigHelper
.
ifGuest
=
true
binding
.
idLottie
.
imageAssetsFolder
=
"sao_sjunk_miao/images/"
binding
.
idLottie
.
setAnimation
(
"sao_sjunk_miao/data.json"
)
binding
.
idLottie
.
playAnimation
()
loadPro
()
}
private
fun
loadPro
()
{
if
(
mProgress
>=
100
)
{
binding
.
idSJindu
.
progress
=
mProgress
startActivity
(
Intent
(
this
,
CleanGuestActivity
::
class
.
java
))
finish
()
return
}
binding
.
idSJindu
.
postDelayed
({
mProgress
+=
Random
.
nextInt
(
5
)
binding
.
idSJindu
.
progress
=
mProgress
loadPro
()
},
80
)
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/ResultActivity.kt
View file @
a7e7e820
...
...
@@ -11,12 +11,9 @@ import com.test.basd.smartjunkcleaner.adapter.AppFunctionAdapter
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutResultBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.KotlinExt.toFormatSize
import
com.test.basd.smartjunkcleaner.notificationclean.NotificationCleanActivity
import
com.test.basd.smartjunkcleaner.notificationclean.NotificationGuestActivity
import
com.test.basd.smartjunkcleaner.view.AFunOb.APP_MANAGER
import
com.test.basd.smartjunkcleaner.view.AFunOb.APP_SPEED
import
com.test.basd.smartjunkcleaner.view.AFunOb.BATTERY_INFO
import
com.test.basd.smartjunkcleaner.view.AFunOb.BATTERY_OPTIMIZER
import
com.test.basd.smartjunkcleaner.view.AFunOb.EMPTY_FILE_CLEANER
import
com.test.basd.smartjunkcleaner.view.AFunOb.JUNK_CLEANER
import
com.test.basd.smartjunkcleaner.view.AFunOb.LARGE_FILE_CLEANER
...
...
@@ -143,13 +140,6 @@ class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
}
space
freed
"
}
BATTERY_OPTIMIZER
->
{
binding
.
tvInfo
.
text
=
"Optimization completed"
}
APP_SPEED
->
{
binding
.
tvInfo
.
text
=
"Optimization completed"
}
else
->
{}
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/activity/SpeakerCleanerActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity
import
android.content.Intent
import
android.graphics.Color
import
androidx.activity.OnBackPressedCallback
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutSpeakerCleanBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.ads.AdmobUtils
class
SpeakerCleanerActivity
:
BaseActivity
<
ActivityLayoutSpeakerCleanBinding
>()
{
override
val
binding
:
ActivityLayoutSpeakerCleanBinding
by
lazy
{
ActivityLayoutSpeakerCleanBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
initListener
()
}
override
fun
initListener
()
{
binding
.
idBackSpeakCleaner
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
onBackPressedDispatcher
.
addCallback
(
object
:
OnBackPressedCallback
(
true
)
{
override
fun
handleOnBackPressed
()
{
AdmobUtils
.
showInterstitialAd
(
this
@SpeakerCleanerActivity
){
finishToMain
()
}
}
})
binding
.
idCleanDust
.
setOnClickListener
{
startActivity
(
Intent
(
this
,
SpeakerCleaningActivity
::
class
.
java
))
}
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/SpeakerCleaningActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity
import
android.animation.Animator
import
android.content.Intent
import
android.graphics.Color
import
android.media.AudioManager
import
android.media.MediaPlayer
import
androidx.activity.OnBackPressedCallback
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.blankj.utilcode.util.ToastUtils
import
com.test.basd.smartjunkcleaner.R
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutSpeakerCleaningBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.ads.AdmobUtils
class
SpeakerCleaningActivity
:
BaseActivity
<
ActivityLayoutSpeakerCleaningBinding
>()
{
private
val
zAudio
by
lazy
{
MediaPlayer
.
create
(
this
,
R
.
raw
.
z
)
}
override
val
binding
:
ActivityLayoutSpeakerCleaningBinding
by
lazy
{
ActivityLayoutSpeakerCleaningBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
val
audioManager
=
this
.
getSystemService
(
AUDIO_SERVICE
)
as
AudioManager
val
maxVolume
=
audioManager
.
getStreamMaxVolume
(
AudioManager
.
STREAM_MUSIC
)
audioManager
.
setStreamVolume
(
AudioManager
.
STREAM_MUSIC
,
maxVolume
,
0
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idSpeakCleanLottie
.
imageAssetsFolder
=
"speaker_sjunk_clean/images/"
binding
.
idSpeakCleanLottie
.
setAnimation
(
"speaker_sjunk_clean/data.json"
)
binding
.
idSpeakCleanLottie
.
playAnimation
()
binding
.
root
.
postDelayed
({
zAudio
.
stop
()
binding
.
idLlP1
.
isVisible
=
false
binding
.
idLlP2
.
isVisible
=
true
playComplete
()
},
30000
)
onBackPressedDispatcher
.
addCallback
(
object
:
OnBackPressedCallback
(
true
)
{
override
fun
handleOnBackPressed
()
{
ToastUtils
.
showShort
(
"Cleaning,Please wait a moment"
)
}
})
}
override
fun
onStart
()
{
super
.
onStart
()
zAudio
.
start
()
}
override
fun
onStop
()
{
super
.
onStop
()
try
{
zAudio
.
pause
()
}
catch
(
e
:
Exception
)
{
zAudio
.
stop
()
}
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
zAudio
.
release
()
}
private
fun
playComplete
()
{
binding
.
idLottieComplete
.
playAnimation
()
binding
.
idLottieComplete
.
addLottieOnCompositionLoadedListener
{
}
binding
.
idLottieComplete
.
addAnimatorListener
(
object
:
Animator
.
AnimatorListener
{
override
fun
onAnimationStart
(
p0
:
Animator
)
{
}
override
fun
onAnimationEnd
(
p0
:
Animator
)
{
AdmobUtils
.
showInterstitialAd
(
this
@SpeakerCleaningActivity
)
{
startActivity
(
Intent
(
this
@SpeakerCleaningActivity
,
SpeakerCleanerActivity
::
class
.
java
))
finish
()
}
}
override
fun
onAnimationCancel
(
p0
:
Animator
)
{
}
override
fun
onAnimationRepeat
(
p0
:
Animator
)
{
}
})
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/speed/BatteryOptimizerActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity.speed
import
android.animation.Animator
import
android.content.Intent
import
android.graphics.Color
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutSpeedBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.view.AFunOb.BATTERY_OPTIMIZER
class
BatteryOptimizerActivity
:
BaseActivity
<
ActivityLayoutSpeedBinding
>()
{
override
val
binding
:
ActivityLayoutSpeedBinding
by
lazy
{
ActivityLayoutSpeedBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idOneLottie
.
imageAssetsFolder
=
"dian_sjunk_chi/images/"
binding
.
idOneLottie
.
setAnimation
(
"dian_sjunk_chi/data.json"
)
binding
.
idOneLottie
.
playAnimation
()
binding
.
root
.
postDelayed
({
binding
.
idOneLottie
.
isVisible
=
false
binding
.
idScaning
.
text
=
"Optimizing"
playRocket
()
},
3000
)
}
private
fun
playRocket
()
{
binding
.
idRocket
.
imageAssetsFolder
=
"battery_sjunk_save/images/"
binding
.
idRocket
.
setAnimation
(
"battery_sjunk_save/data.json"
)
binding
.
idRocket
.
playAnimation
()
binding
.
idRocket
.
addAnimatorListener
(
object
:
Animator
.
AnimatorListener
{
override
fun
onAnimationStart
(
p0
:
Animator
)
{
}
override
fun
onAnimationEnd
(
p0
:
Animator
)
{
startActivity
(
Intent
(
this
@BatteryOptimizerActivity
,
SpeedFinishActivity
::
class
.
java
).
putExtra
(
"type"
,
BATTERY_OPTIMIZER
))
finish
()
}
override
fun
onAnimationCancel
(
p0
:
Animator
)
{
}
override
fun
onAnimationRepeat
(
p0
:
Animator
)
{
}
})
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/speed/SpeedActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity.speed
import
android.animation.Animator
import
android.content.Intent
import
android.graphics.Color
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.AppUtils
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutSpeedBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.ConfigHelper
import
com.test.basd.smartjunkcleaner.view.AFunOb.APP_SPEED
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.MainScope
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
kotlin.random.Random
class
SpeedActivity
:
BaseActivity
<
ActivityLayoutSpeedBinding
>()
{
override
val
binding
:
ActivityLayoutSpeedBinding
by
lazy
{
ActivityLayoutSpeedBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idOneLottie
.
imageAssetsFolder
=
"guan_sjunk_li/images/"
binding
.
idOneLottie
.
setAnimation
(
"guan_sjunk_li/data.json"
)
binding
.
idOneLottie
.
playAnimation
()
binding
.
root
.
postDelayed
({
binding
.
idOneLottie
.
isVisible
=
false
binding
.
idScaning
.
text
=
"Optimizing"
playRocket
()
},
3000
)
}
private
fun
playRocket
()
{
binding
.
idRocket
.
imageAssetsFolder
=
"fast_sjunk/images/"
binding
.
idRocket
.
setAnimation
(
"fast_sjunk/data.json"
)
binding
.
idRocket
.
playAnimation
()
MainScope
().
launch
(
Dispatchers
.
Main
)
{
launch
{
if
(
ConfigHelper
.
appList
.
isNullOrEmpty
())
{
withContext
(
Dispatchers
.
IO
)
{
ConfigHelper
.
appList
=
AppUtils
.
getAppsInfo
().
shuffled
()
}
}
val
icons
=
ConfigHelper
.
appList
?.
filter
{
!
it
.
isSystem
}
?.
map
{
it
.
icon
}
var
index
=
0
binding
.
idSpeedIcon
.
isVisible
=
true
while
(
binding
.
idRocket
.
isVisible
)
{
binding
.
idSpeedIcon
.
setImageDrawable
(
icons
?.
getOrNull
(
index
++
%
icons
.
size
))
delay
(
Random
.
nextLong
(
100
,
200
))
}
}
}
binding
.
idRocket
.
addAnimatorListener
(
object
:
Animator
.
AnimatorListener
{
override
fun
onAnimationStart
(
p0
:
Animator
)
{
}
override
fun
onAnimationEnd
(
p0
:
Animator
)
{
startActivity
(
Intent
(
this
@SpeedActivity
,
SpeedFinishActivity
::
class
.
java
).
putExtra
(
"type"
,
APP_SPEED
)
)
finish
()
}
override
fun
onAnimationCancel
(
p0
:
Animator
)
{
}
override
fun
onAnimationRepeat
(
p0
:
Animator
)
{
}
})
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/speed/SpeedFinishActivity.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.activity.speed
import
android.animation.Animator
import
android.content.Intent
import
android.graphics.Color
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.test.basd.smartjunkcleaner.activity.ResultActivity
import
com.test.basd.smartjunkcleaner.databinding.ActivityLayoutSpeedFinishBinding
import
com.test.basd.smartjunkcleaner.helps.BaseActivity
import
com.test.basd.smartjunkcleaner.helps.ads.AdmobUtils
class
SpeedFinishActivity
:
BaseActivity
<
ActivityLayoutSpeedFinishBinding
>()
{
override
val
binding
:
ActivityLayoutSpeedFinishBinding
by
lazy
{
ActivityLayoutSpeedFinishBinding
.
inflate
(
layoutInflater
)
}
override
fun
initView
()
{
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
val
type
=
intent
.
getStringExtra
(
"type"
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idSpeedFinish
.
addAnimatorListener
(
object
:
Animator
.
AnimatorListener
{
override
fun
onAnimationStart
(
p0
:
Animator
)
{
}
override
fun
onAnimationEnd
(
p0
:
Animator
)
{
AdmobUtils
.
showInterstitialAd
(
this
@SpeedFinishActivity
)
{
startActivity
(
Intent
(
this
@SpeedFinishActivity
,
ResultActivity
::
class
.
java
).
putExtra
(
"from"
,
type
)
)
finish
()
}
}
override
fun
onAnimationCancel
(
p0
:
Animator
)
{
}
override
fun
onAnimationRepeat
(
p0
:
Animator
)
{
}
})
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/activity/splash/SplashJumpUtils.kt
View file @
a7e7e820
...
...
@@ -3,21 +3,19 @@ package com.test.basd.smartjunkcleaner.activity.splash
import
android.app.Activity
import
android.content.Intent
import
com.blankj.utilcode.util.SPUtils
import
com.test.basd.smartjunkcleaner.activity.GuestActivity
import
com.test.basd.smartjunkcleaner.activity.AppManagerActivity
import
com.test.basd.smartjunkcleaner.activity.BatteryInfoActivity
import
com.test.basd.smartjunkcleaner.activity.CleanGuestActivity
import
com.test.basd.smartjunkcleaner.activity.LargeFileCleanActivity
import
com.test.basd.smartjunkcleaner.activity.MainActivity
import
com.test.basd.smartjunkcleaner.activity.NetWorkActivity
import
com.test.basd.smartjunkcleaner.activity.RecentAppActivity
import
com.test.basd.smartjunkcleaner.activity.RepeaterdPhotoActivity
import
com.test.basd.smartjunkcleaner.activity.ScanJunkActivity
import
com.test.basd.smartjunkcleaner.activity.SpeakerCleanerActivity
import
com.test.basd.smartjunkcleaner.activity.photocompress.photo.StartCompressionPhotoActivity
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_APP_MANAGER
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CHARGE
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CLEAN_NOTIFICATION
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CLEAN_SPEAKER
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_INSTALL_PACKAGE_PUSH
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_JUNK_CLEAN_PUSH
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_LARGE_FILE_PUSH
...
...
@@ -88,9 +86,7 @@ object SplashJumpUtils {
context
.
startActivity
(
Intent
(
context
,
RepeaterdPhotoActivity
::
class
.
java
))
}
ID_CLEAN_SPEAKER
->
{
context
.
startActivity
(
Intent
(
context
,
SpeakerCleanerActivity
::
class
.
java
))
}
// ID_BATTERY_OPTIMIZATION -> {
// context.startActivity(Intent(context, BatteryOptimizerActivity::class.java))
...
...
@@ -122,7 +118,7 @@ object SplashJumpUtils {
val
isHotLaunch
=
context
.
intent
?.
extras
?.
getBoolean
(
"isHotLaunch"
,
false
)
?:
false
if
(!
isHotLaunch
)
{
if
(!
ConfigHelper
.
ifGuest
)
{
context
.
startActivity
(
Intent
(
context
,
GuestActivity
::
class
.
java
))
context
.
startActivity
(
Intent
(
context
,
Clean
GuestActivity
::
class
.
java
))
}
else
{
context
.
startActivity
(
Intent
(
context
,
MainActivity
::
class
.
java
))
}
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/adapter/ToolsAdapter.kt
View file @
a7e7e820
...
...
@@ -18,7 +18,6 @@ import com.test.basd.smartjunkcleaner.view.AFunOb.NOTIFICATION_CLEANER
import
com.test.basd.smartjunkcleaner.view.AFunOb.PHOTO_COMPRESS
import
com.test.basd.smartjunkcleaner.view.AFunOb.RECENT_APP_USAGE
import
com.test.basd.smartjunkcleaner.view.AFunOb.SIMILAR_PHOTOS
import
com.test.basd.smartjunkcleaner.view.AFunOb.SPEAK_CLEANER
import
com.test.basd.smartjunkcleaner.view.XmlEx.inflate
class
ToolsAdapter
(
...
...
@@ -33,8 +32,7 @@ class ToolsAdapter(
ToolUI
(
PHOTO_COMPRESS
,
context
.
getString
(
R
.
string
.
photo_compress
),
R
.
mipmap
.
photo_tools
),
ToolUI
(
SIMILAR_PHOTOS
,
"Similar Photos"
,
R
.
mipmap
.
similar_tools
),
ToolUI
(
LARGE_FILE_CLEANER
,
context
.
getString
(
R
.
string
.
large_file_cleaner
),
R
.
mipmap
.
large_tools
),
ToolUI
(
APP_MANAGER
,
context
.
getString
(
R
.
string
.
app_manager
),
R
.
mipmap
.
appmanager_tools
),
ToolUI
(
SPEAK_CLEANER
,
context
.
getString
(
R
.
string
.
speaker_cleaner
),
R
.
mipmap
.
speaker_tools
),
ToolUI
(
APP_MANAGER
,
context
.
getString
(
R
.
string
.
app_manager
),
R
.
mipmap
.
appmanager_tools
)
)
),
// ToolsUI(isAd = true),
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/bean/ConfigBean.kt
View file @
a7e7e820
...
...
@@ -53,7 +53,7 @@ data class ConfigBean(
const
val
ID_CLEAN_NOTIFICATION
=
11013
//清理通知栏
const
val
ID_RECENT_USE_APP
=
11014
//最近使用APP
const
val
ID_SIMILAR_IMAGE
=
11015
//清理相似图片
const
val
ID_CLEAN_SPEAKER
=
11016
//清理扬声器
//
const val ID_CLEAN_SPEAKER = 11016//清理扬声器
// const val ID_BATTERY_OPTIMIZATION = 11017//电池优化,目前是虚假功能
//场景触发push actionId 被动发送
...
...
@@ -82,7 +82,6 @@ data class ConfigBean(
ID_CLEAN_NOTIFICATION
->
push_interval_11013
ID_RECENT_USE_APP
->
push_interval_11014
ID_SIMILAR_IMAGE
->
push_interval_11015
ID_CLEAN_SPEAKER
->
push_interval_11016
// ID_BATTERY_OPTIMIZATION -> push_interval_11017
ID_WIFI_PUSH
->
push_interval_22001
ID_INSTALL_PACKAGE_PUSH
->
push_interval_22002
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/display/NotificationHelper.kt
View file @
a7e7e820
...
...
@@ -20,7 +20,6 @@ import com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_APP_MANAGER
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_BATTERY_PUSH
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CHARGE
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CLEAN_NOTIFICATION
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_CLEAN_SPEAKER
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_INSTALL_PACKAGE_PUSH
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_JUNK_CLEAN_PUSH
import
com.test.basd.smartjunkcleaner.bean.ConfigBean.Companion.ID_LARGE_FILE_PUSH
...
...
@@ -61,8 +60,7 @@ object NotificationHelper {
ID_NETWORK_TRAFFIC
,
ID_CLEAN_NOTIFICATION
,
ID_RECENT_USE_APP
,
ID_SIMILAR_IMAGE
,
ID_CLEAN_SPEAKER
,
ID_SIMILAR_IMAGE
// ID_BATTERY_OPTIMIZATION,
// ID_PHONE_ACCELERATE,//被动推送加入主动推送列表
)
...
...
@@ -184,11 +182,11 @@ object NotificationHelper {
remoteViews
.
setTextViewText
(
R
.
id
.
tv_btn
,
"Clean up"
)
}
ID_CLEAN_SPEAKER
->
{
remoteViews
.
setImageViewResource
(
R
.
id
.
iv_icon
,
R
.
mipmap
.
speaker_home
)
remoteViews
.
setTextViewText
(
R
.
id
.
tv_desc
,
"Clean the speaker dust and fix the low volume problem"
)
remoteViews
.
setTextViewText
(
R
.
id
.
tv_btn
,
"Clean up"
)
}
//
ID_CLEAN_SPEAKER -> {
//
remoteViews.setImageViewResource(R.id.iv_icon, R.mipmap.speaker_home)
//
remoteViews.setTextViewText(R.id.tv_desc, "Clean the speaker dust and fix the low volume problem")
//
remoteViews.setTextViewText(R.id.tv_btn, "Clean up")
//
}
//==================================下面是被动推送的情况===============================================
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/display/fcm/FCMCheckReceiver.kt
deleted
100644 → 0
View file @
87e6f8a4
package
com.test.basd.smartjunkcleaner.display.fcm
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.Intent
import
android.util.Log
import
com.google.firebase.messaging.FirebaseMessaging
import
com.test.basd.smartjunkcleaner.helps.EventHelper
class
FCMCheckReceiver
:
BroadcastReceiver
()
{
override
fun
onReceive
(
context
:
Context
?,
intent
:
Intent
?)
{
// 检查FCM连接并重新连接(如果需要)
// 这里可以根据具体需求自行实现
val
boolean
=
FirebaseMessaging
.
getInstance
().
isAutoInitEnabled
FcmHelper
.
getToken
()
if
(
boolean
)
{
EventHelper
.
event
(
"fcm_autoInit_suc"
)
}
else
{
EventHelper
.
event
(
"fcm_autoInit_fail"
)
}
Log
.
d
(
"FcmHelper"
,
"FCMCheckReceiver: $boolean"
)
}
}
app/src/main/java/com/test/basd/smartjunkcleaner/display/fcm/FcmHelper.kt
View file @
a7e7e820
...
...
@@ -45,33 +45,6 @@ object FcmHelper {
})
}
@SuppressLint
(
"UnspecifiedImmutableFlag"
)
fun
startFCMCheckAlarm
(
context
:
Context
)
{
val
intervalMillis
=
(
15
*
60
*
1000
).
toLong
()
// 1分钟
// 判断是否已经在运行
val
intent
=
Intent
(
context
,
FCMCheckReceiver
::
class
.
java
)
val
isRunning
=
PendingIntent
.
getBroadcast
(
context
,
0
,
intent
,
PendingIntent
.
FLAG_IMMUTABLE
)
!=
null
if
(
isRunning
)
{
Log
.
d
(
TAG
,
"FCM check alarm is already running"
)
return
}
// 获取AlarmManager实例
val
alarmManager
=
context
.
getSystemService
(
Context
.
ALARM_SERVICE
)
as
AlarmManager
// 创建PendingIntent,用于在指定时间触发广播
val
pendingIntent
=
PendingIntent
.
getBroadcast
(
context
,
0
,
intent
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
// 设置每隔一段时间触发一次广播
val
triggerAtMillis
=
System
.
currentTimeMillis
()
+
intervalMillis
alarmManager
.
setRepeating
(
AlarmManager
.
RTC_WAKEUP
,
triggerAtMillis
,
intervalMillis
,
pendingIntent
)
Log
.
d
(
TAG
,
"FCM check alarm is started"
)
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/smartjunkcleaner/display/fcm/MyFirebaseMessagingService.kt
View file @
a7e7e820
...
...
@@ -19,7 +19,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
EventHelper
.
event
(
"fcm_message_received"
,
pushStayTime
.
toString
())
NotificationUtils
.
sendTimerPush
(
pushStayTime
)
FcmHelper
.
startFCMCheckAlarm
(
this
)
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
S
)
{
return
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/fragment/HomeFragment.kt
View file @
a7e7e820
...
...
@@ -7,25 +7,21 @@ import android.os.Environment
import
android.os.StatFs
import
android.util.Log
import
android.view.animation.LinearInterpolator
import
android.widget.ScrollView
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.blankj.utilcode.util.SPUtils
import
com.test.basd.smartjunkcleaner.activity.AppManagerActivity
import
com.test.basd.smartjunkcleaner.activity.BatteryInfoActivity
import
com.test.basd.smartjunkcleaner.activity.LargeFileCleanActivity
import
com.test.basd.smartjunkcleaner.activity.NetWorkActivity
import
com.test.basd.smartjunkcleaner.activity.RecentAppActivity
import
com.test.basd.smartjunkcleaner.activity.RepeaterdPhotoActivity
import
com.test.basd.smartjunkcleaner.activity.ScanJunkActivity
import
com.test.basd.smartjunkcleaner.activity.SpeakerCleanerActivity
import
com.test.basd.smartjunkcleaner.activity.SpeakerCleaningActivity
import
com.test.basd.smartjunkcleaner.activity.photocompress.photo.StartCompressionPhotoActivity
import
com.test.basd.smartjunkcleaner.databinding.FragmentLayoutHomeBinding
import
com.test.basd.smartjunkcleaner.helps.BaseFragment
import
com.test.basd.smartjunkcleaner.helps.KotlinExt.setOnClickListener
import
com.test.basd.smartjunkcleaner.helps.KotlinExt.toFormatSize
import
com.test.basd.smartjunkcleaner.helps.NetWorkSpeed
import
com.test.basd.smartjunkcleaner.notificationclean.NotificationCleanActivity
import
com.test.basd.smartjunkcleaner.notificationclean.NotificationGuestActivity
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.MainScope
...
...
@@ -58,12 +54,10 @@ class HomeFragment : BaseFragment<FragmentLayoutHomeBinding>() {
@SuppressLint
(
"SetTextI18n"
)
override
fun
setListener
()
{
listOf
(
binding
.
idCleanJunk
,
binding
.
idFlClean
).
setOnClickListener
{
listOf
(
binding
.
idCleanJunk
,
binding
.
idFlClean
,
binding
.
idCleanJunk2
).
setOnClickListener
{
startActivity
(
Intent
(
requireContext
(),
ScanJunkActivity
::
class
.
java
))
}
binding
.
idSpeakClean
.
setOnClickListener
{
startActivity
(
Intent
(
requireActivity
(),
SpeakerCleaningActivity
::
class
.
java
))
}
binding
.
idPhotoCompress
.
setOnClickListener
{
startActivity
(
Intent
(
requireActivity
(),
StartCompressionPhotoActivity
::
class
.
java
))
}
...
...
@@ -74,10 +68,13 @@ class HomeFragment : BaseFragment<FragmentLayoutHomeBinding>() {
startActivity
(
Intent
(
requireContext
(),
LargeFileCleanActivity
::
class
.
java
))
}
binding
.
idBatteryInfo
.
setOnClickListener
{
startActivity
(
Intent
(
requireContext
(),
BatteryInfoActivity
::
class
.
java
))
}
binding
.
llSimilar
.
setOnClickListener
{
startActivity
(
Intent
(
requireActivity
(),
RepeaterdPhotoActivity
::
class
.
java
))
}
binding
.
idNotificationCleaner
.
setOnClickListener
{
startActivity
(
Intent
(
requireActivity
(),
NotificationGuestActivity
::
class
.
java
))
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/fragment/ToolsFragment.kt
View file @
a7e7e820
...
...
@@ -8,7 +8,6 @@ import com.test.basd.smartjunkcleaner.activity.NetWorkActivity
import
com.test.basd.smartjunkcleaner.activity.RecentAppActivity
import
com.test.basd.smartjunkcleaner.activity.RepeaterdPhotoActivity
import
com.test.basd.smartjunkcleaner.activity.ScanJunkActivity
import
com.test.basd.smartjunkcleaner.activity.SpeakerCleaningActivity
import
com.test.basd.smartjunkcleaner.activity.photocompress.photo.StartCompressionPhotoActivity
import
com.test.basd.smartjunkcleaner.adapter.ToolsAdapter
import
com.test.basd.smartjunkcleaner.databinding.FragmentLayoutToolsBinding
...
...
@@ -25,7 +24,6 @@ import com.test.basd.smartjunkcleaner.view.AFunOb.NOTIFICATION_CLEANER
import
com.test.basd.smartjunkcleaner.view.AFunOb.PHOTO_COMPRESS
import
com.test.basd.smartjunkcleaner.view.AFunOb.RECENT_APP_USAGE
import
com.test.basd.smartjunkcleaner.view.AFunOb.SIMILAR_PHOTOS
import
com.test.basd.smartjunkcleaner.view.AFunOb.SPEAK_CLEANER
class
ToolsFragment
:
BaseFragment
<
FragmentLayoutToolsBinding
>()
{
private
lateinit
var
adapter
:
ToolsAdapter
...
...
@@ -65,9 +63,7 @@ class ToolsFragment : BaseFragment<FragmentLayoutToolsBinding>() {
startActivity
(
Intent
(
requireContext
(),
RepeaterdPhotoActivity
::
class
.
java
))
}
SPEAK_CLEANER
->
{
startActivity
(
Intent
(
requireContext
(),
SpeakerCleaningActivity
::
class
.
java
))
}
PHOTO_COMPRESS
->
{
startActivity
(
Intent
(
requireActivity
(),
StartCompressionPhotoActivity
::
class
.
java
))
...
...
app/src/main/java/com/test/basd/smartjunkcleaner/view/AFunOb.kt
View file @
a7e7e820
...
...
@@ -10,10 +10,7 @@ object AFunOb {
const
val
BATTERY_INFO
=
"Battery Info"
const
val
EMPTY_FILE_CLEANER
=
"Empty File Cleaner"
const
val
SIMILAR_PHOTOS
=
"Similar Photos"
const
val
SPEAK_CLEANER
=
"Speaker Cleaner"
const
val
PHOTO_COMPRESS
=
"Photo Compress"
const
val
APP_LOCK
=
"App Lock"
const
val
APP_SPEED
=
"App Speed"
const
val
BATTERY_OPTIMIZER
=
"Battery Optimizer"
}
\ No newline at end of file
app/src/main/res/layout/activity_app_manager.xml
View file @
a7e7e820
...
...
@@ -313,7 +313,7 @@
android:layout_marginBottom=
"190dp"
android:gravity=
"center"
android:lineHeight=
"20dp"
android:text=
"
Scan app\n..
."
android:text=
"
Wait a moment please
."
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
...
...
app/src/main/res/layout/activity_battery_info.xml
View file @
a7e7e820
...
...
@@ -27,7 +27,8 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"19dp"
android:text=
"Analyzing battery status"
android:gravity=
"center"
android:text=
"Wait a moment please."
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textStyle=
"bold"
...
...
app/src/main/res/layout/activity_layout_large_file.xml
View file @
a7e7e820
...
...
@@ -241,7 +241,7 @@
android:layout_height=
"wrap_content"
android:layout_marginTop=
"40dp"
android:gravity=
"center"
android:text=
"
Scan large file\n..
."
android:text=
"
Wait a moment please
."
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
...
...
app/src/main/res/layout/activity_layout_parepre_scan.xml
View file @
a7e7e820
...
...
@@ -54,10 +54,11 @@
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:layout_gravity=
"center_horizontal"
android:text=
"
Scanning..
."
android:text=
"
Wait a moment please
."
android:textColor=
"#666666"
android:textSize=
"1
6
sp"
/>
android:textSize=
"1
2
sp"
/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width=
"match_parent"
...
...
app/src/main/res/layout/activity_layout_scan_junk.xml
View file @
a7e7e820
...
...
@@ -55,7 +55,7 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:text=
"
Scanning..
."
android:text=
"
Wait a moment please
."
android:textColor=
"#666666"
android:textSize=
"16sp"
/>
...
...
app/src/main/res/layout/activity_recent_app.xml
View file @
a7e7e820
...
...
@@ -141,7 +141,7 @@
android:layout_marginBottom=
"150dp"
android:gravity=
"center"
android:lineHeight=
"20dp"
android:text=
"
Scan recent app\n..
."
android:text=
"
Wait a moment please
."
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
...
...
app/src/main/res/layout/activity_start_compression_photo.xml
View file @
a7e7e820
...
...
@@ -21,10 +21,10 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"19dp"
android:text=
"Scanning"
android:gravity=
"center"
android:text=
"Wait a moment please."
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textStyle=
"bold"
android:textSize=
"14sp"
app:layout_constraintBottom_toTopOf=
"@+id/id_scan"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
...
...
@@ -66,6 +66,7 @@
android:text=
"Wait a moment please"
android:textColor=
"@color/white"
android:textSize=
"16sp"
android:visibility=
"invisible"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
...
...
app/src/main/res/layout/fragment_layout_home.xml
View file @
a7e7e820
...
...
@@ -68,6 +68,23 @@
</FrameLayout>
<com.noober.background.view.BLTextView
android:id=
"@+id/id_clean_junk2"
android:layout_width=
"match_parent"
android:layout_height=
"48dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginHorizontal=
"40dp"
android:layout_marginVertical=
"15dp"
android:gravity=
"center"
android:text=
"Clean Junk"
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textStyle=
"bold"
app:bl_corners_radius=
"24dp"
app:bl_gradient_angle=
"180"
app:bl_gradient_endColor=
"@color/theme_color"
app:bl_gradient_startColor=
"#8720eb"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
@@ -385,42 +402,7 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<!--Speaker Cleaner-->
<com.noober.background.view.BLLinearLayout
android:id=
"@+id/id_speak_clean"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"15dp"
android:layout_marginTop=
"16dp"
android:gravity=
"center_vertical"
android:paddingVertical=
"10dp"
android:paddingStart=
"10dp"
app:bl_corners_radius=
"10dp"
app:bl_solid_color=
"#F8F9FF"
tools:ignore=
"RtlSymmetry"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/speaker_home"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"10dp"
android:layout_weight=
"1"
android:text=
"@string/speaker_cleaner"
android:textColor=
"#000000"
android:textSize=
"13sp"
android:textStyle=
"bold"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"15dp"
android:src=
"@mipmap/jiantou"
/>
</com.noober.background.view.BLLinearLayout>
<!--Similar Photos-->
<com.noober.background.view.BLLinearLayout
...
...
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