Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
F
Fast Cleaner Junk
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
Fast Cleaner Junk
Commits
48fa7c25
Commit
48fa7c25
authored
Jun 13, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
处理权限问题
parent
328eac6a
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
202 additions
and
410 deletions
+202
-410
AppManagerActivity.kt
.../test/basd/fastcleanerjunk/activity/AppManagerActivity.kt
+4
-4
LargeFileCleanActivity.kt
...t/basd/fastcleanerjunk/activity/LargeFileCleanActivity.kt
+10
-24
NetWorkActivity.kt
...com/test/basd/fastcleanerjunk/activity/NetWorkActivity.kt
+52
-78
PrepareScanActivity.kt
...test/basd/fastcleanerjunk/activity/PrepareScanActivity.kt
+8
-16
PreparedPhotoActivity.kt
...st/basd/fastcleanerjunk/activity/PreparedPhotoActivity.kt
+8
-20
RecentAppActivity.kt
...m/test/basd/fastcleanerjunk/activity/RecentAppActivity.kt
+10
-31
ScanJunkActivity.kt
...om/test/basd/fastcleanerjunk/activity/ScanJunkActivity.kt
+10
-18
StartCompressionPhotoActivity.kt
...vity/photocompress/photo/StartCompressionPhotoActivity.kt
+24
-16
AppListFragment.kt
...com/test/basd/fastcleanerjunk/fragment/AppListFragment.kt
+12
-29
BaseActivity.kt
.../java/com/test/basd/fastcleanerjunk/helps/BaseActivity.kt
+1
-164
BaseFragment.kt
.../java/com/test/basd/fastcleanerjunk/helps/BaseFragment.kt
+2
-0
PermissionHelp.kt
...ava/com/test/basd/fastcleanerjunk/helps/PermissionHelp.kt
+61
-10
No files found.
app/src/main/java/com/test/basd/fastcleanerjunk/activity/AppManagerActivity.kt
View file @
48fa7c25
...
@@ -256,10 +256,10 @@ class AppManagerActivity : BaseActivity<ActivityAppManagerBinding>() {
...
@@ -256,10 +256,10 @@ class AppManagerActivity : BaseActivity<ActivityAppManagerBinding>() {
}
}
private
fun
initViewPager
()
{
private
fun
initViewPager
()
{
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_NAME
,
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_NAME
,
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_INSTALL
,
false
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_INSTALL
,
false
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_SIZE
,
false
,
needPermission
=
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_SIZE
,
false
,
needPermission
=
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_LAST_USE
,
false
,
needPermission
=
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_LAST_USE
,
false
,
needPermission
=
true
)
})
pagerAdapter
=
ScreenSlidePagerAdapter
(
this
@AppManagerActivity
)
pagerAdapter
=
ScreenSlidePagerAdapter
(
this
@AppManagerActivity
)
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/LargeFileCleanActivity.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.activity
package
com.test.basd.fastcleanerjunk.activity
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.graphics.Color
import
android.graphics.Color
import
android.graphics.drawable.ColorDrawable
import
android.graphics.drawable.ColorDrawable
import
android.net.Uri
import
android.os.Build
import
android.os.Environment
import
android.provider.Settings
import
android.text.format.Formatter
import
android.text.format.Formatter
import
android.view.View
import
android.view.View
import
android.view.ViewGroup
import
android.view.ViewGroup
...
@@ -16,8 +11,6 @@ import androidx.activity.addCallback
...
@@ -16,8 +11,6 @@ import androidx.activity.addCallback
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
androidx.core.view.isVisible
import
androidx.core.view.isVisible
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.PermissionUtils
import
com.test.basd.fastcleanerjunk.R
import
com.test.basd.fastcleanerjunk.R
import
com.test.basd.fastcleanerjunk.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_MONTH
import
com.test.basd.fastcleanerjunk.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_MONTH
import
com.test.basd.fastcleanerjunk.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_WEEK
import
com.test.basd.fastcleanerjunk.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_WEEK
...
@@ -47,6 +40,7 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
...
@@ -47,6 +40,7 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.FileHelps
import
com.test.basd.fastcleanerjunk.helps.FileHelps
import
com.test.basd.fastcleanerjunk.helps.LogEx
import
com.test.basd.fastcleanerjunk.helps.LogEx
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkStorePermission
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkStorePermission
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.manageStoreIntent
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestStorePermission
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestStorePermission
import
com.test.basd.fastcleanerjunk.helps.TimeUtils
import
com.test.basd.fastcleanerjunk.helps.TimeUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
...
@@ -176,23 +170,15 @@ class LargeFileCleanActivity : BaseActivity<ActivityLayoutLargeFileBinding>() {
...
@@ -176,23 +170,15 @@ class LargeFileCleanActivity : BaseActivity<ActivityLayoutLargeFileBinding>() {
initList
()
initList
()
}
else
{
}
else
{
DialogViews
.
showGerPermission
(
this
,
{
DialogViews
.
showGerPermission
(
this
,
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
requestStorePermission
(
launcher
,
result
=
{
flag
->
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
if
(
flag
)
{
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
playLottie
()
initList
()
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
}
else
{
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
finishToMain
()
if
(
flag
)
{
}
playLottie
()
},
resolveNoAction
=
{
finishToMain
()
})
initList
()
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
},
{
finishToMain
()
finishToMain
()
})
})
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/NetWorkActivity.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.activity
package
com.test.basd.fastcleanerjunk.activity
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.AppOpsManager
import
android.app.usage.NetworkStats
import
android.app.usage.NetworkStats
import
android.app.usage.NetworkStatsManager
import
android.app.usage.NetworkStatsManager
import
android.content.Context
import
android.content.Context
import
android.graphics.Color
import
android.graphics.Color
import
android.net.ConnectivityManager
import
android.net.ConnectivityManager
import
android.os.Build
import
android.util.SparseLongArray
import
android.util.SparseLongArray
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
...
@@ -30,6 +28,8 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
...
@@ -30,6 +28,8 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.ConfigHelper
import
com.test.basd.fastcleanerjunk.helps.ConfigHelper
import
com.test.basd.fastcleanerjunk.helps.KotlinExt.toFormatSize
import
com.test.basd.fastcleanerjunk.helps.KotlinExt.toFormatSize
import
com.test.basd.fastcleanerjunk.helps.NetworkStatsHelper
import
com.test.basd.fastcleanerjunk.helps.NetworkStatsHelper
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkUsageAccessSettings
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestUsageAccessSettings
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.view.DialogViews
import
com.test.basd.fastcleanerjunk.view.DialogViews
import
kotlin.random.Random
import
kotlin.random.Random
...
@@ -40,57 +40,9 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -40,57 +40,9 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
private
val
wifiList
=
mutableListOf
<
TrafficBean
>()
private
val
wifiList
=
mutableListOf
<
TrafficBean
>()
private
val
mobileList
=
mutableListOf
<
TrafficBean
>()
private
val
mobileList
=
mutableListOf
<
TrafficBean
>()
private
val
AllList
=
mutableListOf
<
TrafficBean
>()
private
val
allList
=
mutableListOf
<
TrafficBean
>()
private
var
startTime
=
NetworkStatsHelper
.
getTimesMonthmorning
()
private
var
startTime
=
NetworkStatsHelper
.
getTimesMonthmorning
()
private
var
types
=
2
private
var
types
=
2
private
var
ifPlayAnimal
=
false
override
fun
onStart
()
{
super
.
onStart
()
if
(
ifPlayAnimal
)
{
hasAccessSettings
()
}
}
private
fun
hasAccessSettings
()
{
val
appOpsManager
=
getSystemService
(
Context
.
APP_OPS_SERVICE
)
as
AppOpsManager
if
(
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
)
{
binding
.
idLlNoAccpermion
.
isVisible
=
false
initList
()
}
else
{
binding
.
idLlNoAccpermion
.
isVisible
=
true
}
}
private
fun
playLottie
()
{
binding
.
idLlNetDh
.
isVisible
=
true
binding
.
idLottieNetwork
.
imageAssetsFolder
=
"wan_smax_gluo/images/"
binding
.
idLottieNetwork
.
setAnimation
(
"wan_smax_gluo/data.json"
)
binding
.
idLottieNetwork
.
playAnimation
()
binding
.
root
.
postDelayed
({
AdmobUtils
.
showInterstitialAd
(
this
)
{
binding
.
idLlNetDh
.
isVisible
=
false
ifPlayAnimal
=
true
hasAccessSettings
()
}
},
Random
.
nextLong
(
2500
,
4000
))
}
override
val
binding
:
ActivityLayoutNetworkBinding
by
lazy
{
override
val
binding
:
ActivityLayoutNetworkBinding
by
lazy
{
...
@@ -102,9 +54,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -102,9 +54,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idTvThisMonth
.
isSelected
=
true
binding
.
idTvThisMonth
.
isSelected
=
true
playLottie
()
playLottie
()
}
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
initListener
()
{
override
fun
initListener
()
{
binding
.
idBackNetwork
.
setOnClickListener
{
binding
.
idBackNetwork
.
setOnClickListener
{
...
@@ -119,7 +75,14 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -119,7 +75,14 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
})
})
binding
.
idGant
.
setOnClickListener
{
binding
.
idGant
.
setOnClickListener
{
checkAccesSettings
(
true
)
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
binding
.
idLlNoAccpermion
.
isVisible
=
false
setData
()
}
else
{
finishToMain
()
}
},
resolveNoAction
=
{
finishToMain
()
})
}
}
binding
.
idTvThisMonth
.
setOnClickListener
{
binding
.
idTvThisMonth
.
setOnClickListener
{
clickTop
(
0
)
clickTop
(
0
)
...
@@ -147,7 +110,6 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -147,7 +110,6 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
1
->
{
1
->
{
binding
.
idTvTypes
.
text
=
"Wi-Fi"
binding
.
idTvTypes
.
text
=
"Wi-Fi"
types
=
1
types
=
1
}
}
2
->
{
2
->
{
...
@@ -160,6 +122,24 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -160,6 +122,24 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
}
}
}
private
fun
playLottie
()
{
binding
.
idLlNetDh
.
isVisible
=
true
binding
.
idLottieNetwork
.
imageAssetsFolder
=
"wan_smax_gluo/images/"
binding
.
idLottieNetwork
.
setAnimation
(
"wan_smax_gluo/data.json"
)
binding
.
idLottieNetwork
.
playAnimation
()
binding
.
root
.
postDelayed
({
AdmobUtils
.
showInterstitialAd
(
this
)
{
binding
.
idLlNetDh
.
isVisible
=
false
if
(
checkUsageAccessSettings
())
{
binding
.
idLlNoAccpermion
.
isVisible
=
false
setData
()
}
else
{
binding
.
idLlNoAccpermion
.
isVisible
=
true
}
}
},
Random
.
nextLong
(
2500
,
4000
))
}
private
fun
clickTop
(
p
:
Int
)
{
private
fun
clickTop
(
p
:
Int
)
{
listOf
(
binding
.
idTvThisMonth
,
binding
.
id30Day
,
binding
.
id24Hours
).
forEachIndexed
{
index
,
view
->
listOf
(
binding
.
idTvThisMonth
,
binding
.
id30Day
,
binding
.
id24Hours
).
forEachIndexed
{
index
,
view
->
view
.
isSelected
=
p
==
index
view
.
isSelected
=
p
==
index
...
@@ -167,17 +147,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -167,17 +147,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
}
private
fun
initList
()
{
setData
()
// setMobileData(allMobide)
}
@SuppressLint
(
"NotifyDataSetChanged"
)
@Suppress
(
"DEPRECATION"
)
private
fun
setData
(
private
fun
setData
(
)
{
)
{
val
allMobi
d
e
=
getNetworkStats
(
val
allMobi
l
e
=
getNetworkStats
(
ConnectivityManager
.
TYPE_MOBILE
,
ConnectivityManager
.
TYPE_MOBILE
,
startTime
,
startTime
,
System
.
currentTimeMillis
()
System
.
currentTimeMillis
()
...
@@ -186,11 +162,11 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -186,11 +162,11 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
ConnectivityManager
.
TYPE_WIFI
,
ConnectivityManager
.
TYPE_WIFI
,
startTime
,
System
.
currentTimeMillis
()
startTime
,
System
.
currentTimeMillis
()
)
)
A
llList
.
clear
()
a
llList
.
clear
()
mobileList
.
clear
()
mobileList
.
clear
()
wifiList
.
clear
()
wifiList
.
clear
()
var
mobileSize
=
0L
var
mobileSize
=
0L
allMobi
d
e
.
forEach
{
key
,
value
->
allMobi
l
e
.
forEach
{
key
,
value
->
mobileSize
+=
value
mobileSize
+=
value
val
appPkg
=
packageManager
.
getPackagesForUid
(
key
)
val
appPkg
=
packageManager
.
getPackagesForUid
(
key
)
if
(
appPkg
?.
isNotEmpty
()
==
true
)
{
if
(
appPkg
?.
isNotEmpty
()
==
true
)
{
...
@@ -234,15 +210,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -234,15 +210,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
}
}
}
for
(
value
in
map
.
values
)
{
for
(
value
in
map
.
values
)
{
A
llList
.
add
(
value
)
a
llList
.
add
(
value
)
}
}
A
llList
.
sortByDescending
{
it
.
mobileUsed
+
it
.
wifiUsed
}
a
llList
.
sortByDescending
{
it
.
mobileUsed
+
it
.
wifiUsed
}
AllList
.
removeAll
(
A
llList
.
filter
{
allList
.
removeAll
(
a
llList
.
filter
{
it
.
packageName
==
this
.
packageName
it
.
packageName
==
this
.
packageName
})
})
// AllList.sortByDescending { it.wifiUsed }
if
(
allList
.
isNotEmpty
())
{
// Log.e("MXL", "所有的数据: " + AllList.size + AllList.toString())
if
(
AllList
.
isNotEmpty
())
{
binding
.
idTvNoData
.
isVisible
=
false
binding
.
idTvNoData
.
isVisible
=
false
binding
.
idRlNetworkTra
.
run
{
binding
.
idRlNetworkTra
.
run
{
layoutManager
=
LinearLayoutManager
(
context
)
layoutManager
=
LinearLayoutManager
(
context
)
...
@@ -256,7 +230,7 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -256,7 +230,7 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
}
fun
getNetworkStats
(
uid
:
Int
,
start
:
Long
,
end
:
Long
):
SparseLongArray
{
private
fun
getNetworkStats
(
uid
:
Int
,
start
:
Long
,
end
:
Long
):
SparseLongArray
{
val
result
=
SparseLongArray
()
val
result
=
SparseLongArray
()
val
bucket
=
NetworkStats
.
Bucket
()
val
bucket
=
NetworkStats
.
Bucket
()
try
{
try
{
...
@@ -316,27 +290,27 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
...
@@ -316,27 +290,27 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
return
ViewHolder
(
view
)
return
ViewHolder
(
view
)
}
}
override
fun
getItemCount
()
=
A
llList
.
size
override
fun
getItemCount
()
=
a
llList
.
size
@SuppressLint
(
"SetTextI18n"
)
@SuppressLint
(
"SetTextI18n"
)
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
val
c
=
ConfigHelper
.
appList
?.
firstOrNull
{
val
c
=
ConfigHelper
.
appList
?.
firstOrNull
{
it
.
packageName
==
A
llList
[
position
].
packageName
it
.
packageName
==
a
llList
[
position
].
packageName
}
}
holder
.
ivImage
.
setImageDrawable
(
c
?.
icon
)
holder
.
ivImage
.
setImageDrawable
(
c
?.
icon
)
holder
.
tvName
.
text
=
c
?.
name
holder
.
tvName
.
text
=
c
?.
name
holder
.
tvTraffic
.
text
=
holder
.
tvTraffic
.
text
=
(
AllList
[
position
].
wifiUsed
+
A
llList
[
position
].
mobileUsed
).
toFormatSize
()
(
allList
[
position
].
wifiUsed
+
a
llList
[
position
].
mobileUsed
).
toFormatSize
()
holder
.
wifiPro
.
max
=
(
AllList
[
0
].
wifiUsed
+
A
llList
[
0
].
mobileUsed
).
toInt
()
holder
.
wifiPro
.
max
=
(
allList
[
0
].
wifiUsed
+
a
llList
[
0
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
max
=
(
AllList
[
0
].
wifiUsed
+
A
llList
[
0
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
max
=
(
allList
[
0
].
wifiUsed
+
a
llList
[
0
].
mobileUsed
).
toInt
()
holder
.
wifiPro
.
progress
=
holder
.
wifiPro
.
progress
=
(
AllList
[
position
].
wifiUsed
+
A
llList
[
position
].
mobileUsed
).
toInt
()
(
allList
[
position
].
wifiUsed
+
a
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
progress
=
(
A
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
progress
=
(
a
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
tvstop
.
isEnabled
=
holder
.
tvstop
.
isEnabled
=
NetworkStatsHelper
.
canStop
(
this
@NetWorkActivity
,
A
llList
[
position
].
packageName
)
NetworkStatsHelper
.
canStop
(
this
@NetWorkActivity
,
a
llList
[
position
].
packageName
)
holder
.
tvstop
.
setOnClickListener
{
holder
.
tvstop
.
setOnClickListener
{
AppUtils
.
launchAppDetailsSettings
(
A
llList
[
position
].
packageName
)
AppUtils
.
launchAppDetailsSettings
(
a
llList
[
position
].
packageName
)
}
}
holder
.
itemView
.
setOnClickListener
{
holder
.
itemView
.
setOnClickListener
{
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/PrepareScanActivity.kt
View file @
48fa7c25
...
@@ -41,22 +41,14 @@ class PrepareScanActivity : BaseActivity<ActivityLayoutParepreScanBinding>() {
...
@@ -41,22 +41,14 @@ class PrepareScanActivity : BaseActivity<ActivityLayoutParepreScanBinding>() {
playLottie
()
playLottie
()
}
else
{
}
else
{
DialogViews
.
showGerPermission
(
this
,
{
DialogViews
.
showGerPermission
(
this
,
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
requestStorePermission
(
launcher
,
result
=
{
flag
->
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
if
(
flag
)
{
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
playLottie
()
}
else
{
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
finishToMain
()
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
}
if
(
flag
)
{
},
resolveNoAction
=
{
finishToMain
()
})
playLottie
()
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
},
{
finishToMain
()
finishToMain
()
})
})
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/PreparedPhotoActivity.kt
View file @
48fa7c25
...
@@ -47,22 +47,14 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
...
@@ -47,22 +47,14 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
initData
()
initData
()
}
else
{
}
else
{
DialogViews
.
showGerPermission
(
this
,
{
DialogViews
.
showGerPermission
(
this
,
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
requestStorePermission
(
launcher
,
result
=
{
flag
->
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
if
(
flag
)
{
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
initData
()
}
else
{
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
finishToMain
()
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
}
if
(
flag
)
{
},
resolveNoAction
=
{
finishToMain
()
})
initData
()
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
},
{
finishToMain
()
finishToMain
()
})
})
...
@@ -114,10 +106,6 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
...
@@ -114,10 +106,6 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
}
}
private
var
fileList
=
mutableListOf
<
ImageDataBean
>()
private
var
fileList
=
mutableListOf
<
ImageDataBean
>()
override
fun
onStart
()
{
super
.
onStart
()
checkPermission
()
}
private
fun
initData
()
{
private
fun
initData
()
{
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/RecentAppActivity.kt
View file @
48fa7c25
...
@@ -33,6 +33,8 @@ import com.test.basd.fastcleanerjunk.helps.TimeUtils.timePair
...
@@ -33,6 +33,8 @@ import com.test.basd.fastcleanerjunk.helps.TimeUtils.timePair
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.recentapp.LaunchTimeStat
import
com.test.basd.fastcleanerjunk.helps.recentapp.LaunchTimeStat
import
com.test.basd.fastcleanerjunk.databinding.ActivityRecentAppBinding
import
com.test.basd.fastcleanerjunk.databinding.ActivityRecentAppBinding
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkUsageAccessSettings
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestUsageAccessSettings
import
com.test.basd.fastcleanerjunk.helps.recentapp.ScreenTimeStat
import
com.test.basd.fastcleanerjunk.helps.recentapp.ScreenTimeStat
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
...
@@ -59,7 +61,6 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
...
@@ -59,7 +61,6 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
initPage
()
initPage
()
intTab
()
intTab
()
if
(
checkUsageAccessSettings
())
{
if
(
checkUsageAccessSettings
())
{
// Log.e("MXL", "onCreate: " + checkUsageAccessSettings())
intData
()
intData
()
}
else
{
}
else
{
binding
.
llContent
.
visibility
=
View
.
GONE
binding
.
llContent
.
visibility
=
View
.
GONE
...
@@ -71,7 +72,7 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
...
@@ -71,7 +72,7 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
override
fun
initListener
()
{
override
fun
initListener
()
{
binding
.
flBack
.
setOnClickListener
{
binding
.
flBack
.
setOnClickListener
{
AdmobUtils
.
showInterstitialAd
(
this
)
{
AdmobUtils
.
showInterstitialAd
(
this
)
{
finishToMain
()
finishToMain
()
}
}
}
}
onBackPressedDispatcher
.
addCallback
{
onBackPressedDispatcher
.
addCallback
{
...
@@ -81,22 +82,19 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
...
@@ -81,22 +82,19 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
}
}
}
}
binding
.
tvGrand
.
setOnClickListener
{
binding
.
tvGrand
.
setOnClickListener
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
intent
.
data
=
Uri
.
parse
(
"package:${context.packageName}"
)
if
(
flag
)
{
launcher
.
launch
(
intent
)
{
LogEx
.
logDebug
(
TAG
,
"launcher callback"
)
val
obj
=
JSONObject
()
obj
.
put
(
"activity"
,
javaClass
.
simpleName
)
if
(
checkUsageAccessSettings
())
{
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
llContent
.
visibility
=
View
.
VISIBLE
binding
.
llContent
.
visibility
=
View
.
VISIBLE
intData
()
intData
()
}
else
{
}
else
{
finishToMain
()
finishToMain
()
}
}
}
},
resolveNoAction
=
{
finishToMain
()
})
}
}
}
}
...
@@ -254,25 +252,6 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
...
@@ -254,25 +252,6 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
}
}
private
fun
checkUsageAccessSettings
():
Boolean
{
val
appOpsManager
=
getSystemService
(
Context
.
APP_OPS_SERVICE
)
as
AppOpsManager
return
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
}
private
fun
isLaunchApp
(
context
:
Context
,
app
:
PackageInfo
,
filterSystem
:
Boolean
=
true
):
Boolean
{
private
fun
isLaunchApp
(
context
:
Context
,
app
:
PackageInfo
,
filterSystem
:
Boolean
=
true
):
Boolean
{
val
flagSystem
=
(
app
.
applicationInfo
.
flags
and
ApplicationInfo
.
FLAG_SYSTEM
)
<
1
val
flagSystem
=
(
app
.
applicationInfo
.
flags
and
ApplicationInfo
.
FLAG_SYSTEM
)
<
1
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/ScanJunkActivity.kt
View file @
48fa7c25
...
@@ -32,26 +32,18 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
...
@@ -32,26 +32,18 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
})
})
if
(
checkStorePermission
()){
if
(
checkStorePermission
())
{
playLottie
()
playLottie
()
}
else
{
}
else
{
DialogViews
.
showGerPermission
(
this
,
{
DialogViews
.
showGerPermission
(
this
,
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
requestStorePermission
(
launcher
,
result
=
{
flag
->
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
if
(
flag
)
{
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
playLottie
()
}
else
{
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
finishToMain
()
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
}
if
(
flag
)
{
},
resolveNoAction
=
{
finishToMain
()
})
playLottie
()
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
},
{
finishToMain
()
finishToMain
()
})
})
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/photocompress/photo/StartCompressionPhotoActivity.kt
View file @
48fa7c25
...
@@ -2,14 +2,20 @@ package com.test.basd.fastcleanerjunk.activity.photocompress.photo
...
@@ -2,14 +2,20 @@ package com.test.basd.fastcleanerjunk.activity.photocompress.photo
import
android.content.Intent
import
android.content.Intent
import
android.graphics.Color
import
android.graphics.Color
import
android.net.Uri
import
android.os.Handler
import
android.os.Handler
import
android.provider.Settings
import
androidx.activity.OnBackPressedCallback
import
androidx.activity.OnBackPressedCallback
import
androidx.core.view.updatePadding
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
import
com.blankj.utilcode.util.BarUtils
import
com.blankj.utilcode.util.ToastUtils
import
com.blankj.utilcode.util.ToastUtils
import
com.test.basd.fastcleanerjunk.activity.PermissionTripActivity
import
com.test.basd.fastcleanerjunk.databinding.ActivityStartCompressionPhotoBinding
import
com.test.basd.fastcleanerjunk.databinding.ActivityStartCompressionPhotoBinding
import
com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkStorePermission
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestStorePermission
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.view.DialogViews
import
kotlin.random.Random
import
kotlin.random.Random
...
@@ -30,24 +36,26 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
...
@@ -30,24 +36,26 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
}
}
})
})
}
if
(
checkStorePermission
())
{
playLottie
()
override
fun
onStart
()
{
super
.
onStart
()
checkPermission
()
}
var
isplay
=
0
override
fun
onPermissionsResult
(
isGranted
:
Boolean
)
{
if
(
isGranted
)
{
isplay
+=
1
if
(
isplay
==
1
)
{
playLottie
()
}
}
else
{
}
else
{
finishToMain
()
DialogViews
.
showGerPermission
(
this
,
{
requestStorePermission
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
playLottie
()
}
else
{
finishToMain
()
}
},
resolveNoAction
=
{
finishToMain
()
})
PermissionTripActivity
.
launch
(
this
)
},
{
finishToMain
()
})
}
}
}
}
private
fun
playLottie
(){
private
fun
playLottie
()
{
binding
.
idLottie1
.
imageAssetsFolder
=
"ya_smax_suo/images/"
binding
.
idLottie1
.
imageAssetsFolder
=
"ya_smax_suo/images/"
binding
.
idLottie1
.
setAnimation
(
"ya_smax_suo/data.json"
)
binding
.
idLottie1
.
setAnimation
(
"ya_smax_suo/data.json"
)
binding
.
idLottie1
.
playAnimation
()
binding
.
idLottie1
.
playAnimation
()
...
@@ -61,7 +69,7 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
...
@@ -61,7 +69,7 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
ToastUtils
.
showShort
(
"Album photos not detected, no compression required."
)
ToastUtils
.
showShort
(
"Album photos not detected, no compression required."
)
}
}
}
}
},
Random
.
nextLong
(
3000
,
4000
))
},
Random
.
nextLong
(
3000
,
4000
))
}
}
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/fragment/AppListFragment.kt
View file @
48fa7c25
...
@@ -14,8 +14,11 @@ import com.test.basd.fastcleanerjunk.adapter.AppListAdapter
...
@@ -14,8 +14,11 @@ import com.test.basd.fastcleanerjunk.adapter.AppListAdapter
import
com.test.basd.fastcleanerjunk.bean.AppBean
import
com.test.basd.fastcleanerjunk.bean.AppBean
import
com.test.basd.fastcleanerjunk.databinding.FragmentAppListBinding
import
com.test.basd.fastcleanerjunk.databinding.FragmentAppListBinding
import
com.test.basd.fastcleanerjunk.helps.ActivityLauncher
import
com.test.basd.fastcleanerjunk.helps.ActivityLauncher
import
com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.BaseFragment
import
com.test.basd.fastcleanerjunk.helps.BaseFragment
import
com.test.basd.fastcleanerjunk.helps.LogEx
import
com.test.basd.fastcleanerjunk.helps.LogEx
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.checkUsageAccessSettings
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestUsageAccessSettings
import
com.test.basd.fastcleanerjunk.view.AppDetailDialog.showAppDetailDialog
import
com.test.basd.fastcleanerjunk.view.AppDetailDialog.showAppDetailDialog
import
net.sourceforge.pinyin4j.PinyinHelper
import
net.sourceforge.pinyin4j.PinyinHelper
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
...
@@ -32,29 +35,28 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
...
@@ -32,29 +35,28 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
private
var
list
=
arrayListOf
<
AppBean
>()
private
var
list
=
arrayListOf
<
AppBean
>()
private
var
isRefreshData
=
false
//是否需要更新数据
private
var
isRefreshData
=
false
//是否需要更新数据
private
lateinit
var
launcher
:
ActivityLauncher
private
var
type
:
Int
=
0
private
var
type
:
Int
=
0
var
isAsc
:
Boolean
=
true
var
isAsc
:
Boolean
=
true
private
var
needPermission
:
Boolean
=
false
private
var
needPermission
:
Boolean
=
false
private
lateinit
var
launcher
:
ActivityLauncher
override
val
binding
:
FragmentAppListBinding
by
lazy
{
override
val
binding
:
FragmentAppListBinding
by
lazy
{
FragmentAppListBinding
.
inflate
(
layoutInflater
)
FragmentAppListBinding
.
inflate
(
layoutInflater
)
}
}
fun
setInitData
(
fun
setInitData
(
launcher
:
ActivityLauncher
,
type
:
Int
=
0
,
type
:
Int
=
0
,
isAsc
:
Boolean
=
true
,
isAsc
:
Boolean
=
true
,
needPermission
:
Boolean
=
false
needPermission
:
Boolean
=
false
)
{
)
{
this
.
launcher
=
launcher
this
.
type
=
type
this
.
type
=
type
this
.
isAsc
=
isAsc
this
.
isAsc
=
isAsc
this
.
needPermission
=
needPermission
this
.
needPermission
=
needPermission
}
}
override
fun
setView
()
{
override
fun
setView
()
{
if
(
needPermission
&&
!
checkUsageAccessSettings
(
requireContext
()))
{
launcher
=
(
requireActivity
()
as
AppManagerActivity
).
launcher
if
(
needPermission
&&
!
requireContext
().
checkUsageAccessSettings
())
{
binding
.
flContent
.
visibility
=
View
.
GONE
binding
.
flContent
.
visibility
=
View
.
GONE
binding
.
flPermission
.
visibility
=
View
.
VISIBLE
binding
.
flPermission
.
visibility
=
View
.
VISIBLE
}
else
{
}
else
{
...
@@ -68,13 +70,11 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
...
@@ -68,13 +70,11 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
override
fun
setListener
()
{
override
fun
setListener
()
{
binding
.
tvAuthorization
.
setOnClickListener
{
binding
.
tvAuthorization
.
setOnClickListener
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
requireContext
().
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
if
(
flag
)
{
intent
.
data
=
Uri
.
parse
(
"package:${requireActivity().packageName}"
)
(
requireActivity
()
as
AppManagerActivity
).
refreshUsageAccessData
()
launcher
.
launch
(
intent
)
{
}
LogEx
.
logDebug
(
TAG
,
"launcher callback"
)
})
(
requireActivity
()
as
AppManagerActivity
).
refreshUsageAccessData
()
}
}
}
}
}
...
@@ -87,7 +87,7 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
...
@@ -87,7 +87,7 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
override
fun
onResume
()
{
override
fun
onResume
()
{
super
.
onResume
()
super
.
onResume
()
if
(
checkUsageAccessSettings
(
requireContext
()
))
{
if
(
requireContext
().
checkUsageAccessSettings
(
))
{
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
flContent
.
visibility
=
View
.
VISIBLE
binding
.
flContent
.
visibility
=
View
.
VISIBLE
}
}
...
@@ -280,21 +280,4 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
...
@@ -280,21 +280,4 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
}
}
private
fun
checkUsageAccessSettings
(
context
:
Context
):
Boolean
{
val
appOpsManager
=
context
.
getSystemService
(
Context
.
APP_OPS_SERVICE
)
as
AppOpsManager
return
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
context
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
context
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
}
}
}
\ No newline at end of file
app/src/main/java/com/test/basd/fastcleanerjunk/helps/BaseActivity.kt
View file @
48fa7c25
...
@@ -47,80 +47,6 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
...
@@ -47,80 +47,6 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
protected
open
fun
initListener
()
{}
protected
open
fun
initListener
()
{}
private
val
permissionLauncher
=
registerForActivityResult
(
ActivityResultContracts
.
StartActivityForResult
())
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
onPermissionsResult
(
Environment
.
isExternalStorageManager
())
}
}
open
fun
onPermissionsResult
(
isGranted
:
Boolean
)
{
val
obj
=
JSONObject
()
obj
.
put
(
"activity"
,
javaClass
.
simpleName
)
if
(
isGranted
)
{
EventHelper
.
event
(
"permission_allow"
,
ext
=
obj
)
}
else
{
EventHelper
.
event
(
"permission_deny"
,
ext
=
obj
)
}
}
private
var
isRequested
=
false
fun
checkPermission
(
needcheck
:
Boolean
=
false
)
{
if
(
needcheck
)
{
onPermissionsResult
(
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
Environment
.
isExternalStorageManager
()
}
else
{
PermissionUtils
.
isGranted
(
PermissionConstants
.
STORAGE
)
}
)
}
else
{
if
(
isRequested
)
{
onPermissionsResult
(
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
Environment
.
isExternalStorageManager
()
}
else
{
PermissionUtils
.
isGranted
(
PermissionConstants
.
STORAGE
)
}
)
return
}
isRequested
=
true
// requestPermissionCount--
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
if
(
Environment
.
isExternalStorageManager
())
{
onPermissionsResult
(
true
)
}
else
{
if
(
isFinishing
||
isDestroyed
)
{
return
}
dialog
=
DialogViews
.
showGerPermission
(
this
,
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
permissionLauncher
.
launch
(
intent
)
PermissionTripActivity
.
launch
(
this
)
},
{
finishToMain
()
})
}
}
else
{
PermissionUtils
.
permissionGroup
(
PermissionConstants
.
STORAGE
)
.
callback
{
isAllGranted
,
_
,
_
,
_
->
if
(
isAllGranted
)
{
onPermissionsResult
(
true
)
}
else
{
onPermissionsResult
(
false
)
}
}.
request
()
}
}
protected
fun
finishToMain
()
{
protected
fun
finishToMain
()
{
if
(
this
!
is
MainActivity
&&
!
ActivityUtils
.
isActivityExistsInStack
(
MainActivity
::
class
.
java
))
{
if
(
this
!
is
MainActivity
&&
!
ActivityUtils
.
isActivityExistsInStack
(
MainActivity
::
class
.
java
))
{
startActivity
(
Intent
(
this
,
MainActivity
::
class
.
java
))
startActivity
(
Intent
(
this
,
MainActivity
::
class
.
java
))
...
@@ -128,97 +54,8 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
...
@@ -128,97 +54,8 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
finish
()
finish
()
}
}
private
var
isRequestedAccess
=
false
private
val
accessLauncher
=
registerForActivityResult
(
ActivityResultContracts
.
StartActivityForResult
())
{
}
fun
checkAccesSettings
(
needcheck
:
Boolean
=
false
)
{
val
appOpsManager
=
getSystemService
(
Context
.
APP_OPS_SERVICE
)
as
AppOpsManager
if
(
needcheck
)
{
onAccesSettingsResult
(
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
)
}
else
{
if
(
isRequestedAccess
)
{
onAccesSettingsResult
(
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
)
return
}
isRequestedAccess
=
true
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
if
(
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
)
{
onAccesSettingsResult
(
true
)
}
else
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${this.packageName}"
)
accessLauncher
.
launch
(
intent
)
}
}
else
{
if
(
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
)
{
onAccesSettingsResult
(
true
)
}
else
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${this.packageName}"
)
accessLauncher
.
launch
(
intent
)
}
}
}
open
fun
onAccesSettingsResult
(
isGranted
:
Boolean
)
{
val
obj
=
JSONObject
()
obj
.
put
(
"activity"
,
javaClass
.
simpleName
)
if
(
isGranted
)
{
EventHelper
.
event
(
"permission_allow"
,
ext
=
obj
)
}
else
{
EventHelper
.
event
(
"permission_deny"
,
ext
=
obj
)
}
}
var
dialog
:
Dialog
?
=
null
var
dialog
:
Dialog
?
=
null
override
fun
onDestroy
()
{
override
fun
onDestroy
()
{
super
.
onDestroy
()
super
.
onDestroy
()
if
(
dialog
!=
null
)
{
if
(
dialog
!=
null
)
{
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/helps/BaseFragment.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.helps
package
com.test.basd.fastcleanerjunk.helps
import
android.content.Context
import
android.os.Bundle
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
...
@@ -10,6 +11,7 @@ import androidx.viewbinding.ViewBinding
...
@@ -10,6 +11,7 @@ import androidx.viewbinding.ViewBinding
abstract
class
BaseFragment
<
T
:
ViewBinding
>
:
Fragment
()
{
abstract
class
BaseFragment
<
T
:
ViewBinding
>
:
Fragment
()
{
protected
abstract
val
binding
:
T
protected
abstract
val
binding
:
T
override
fun
onCreateView
(
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
container
:
ViewGroup
?,
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/helps/PermissionHelp.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.helps
package
com.test.basd.fastcleanerjunk.helps
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.AppOpsManager
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
import
android.net.Uri
import
android.net.Uri
...
@@ -9,6 +10,7 @@ import android.os.Environment
...
@@ -9,6 +10,7 @@ import android.os.Environment
import
android.provider.Settings
import
android.provider.Settings
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.PermissionUtils
import
com.blankj.utilcode.util.PermissionUtils
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestUsageAccessSettings
object
PermissionHelp
{
object
PermissionHelp
{
fun
checkStorePermission
():
Boolean
{
fun
checkStorePermission
():
Boolean
{
...
@@ -19,20 +21,27 @@ object PermissionHelp {
...
@@ -19,20 +21,27 @@ object PermissionHelp {
}
}
}
}
fun
Context
.
manageStoreIntent
():
Intent
{
val
intent
=
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
return
intent
}
fun
Context
.
requestStorePermission
(
fun
Context
.
requestStorePermission
(
launcher
:
ActivityLauncher
,
launcher
:
ActivityLauncher
,
jumpAction
:
(()
->
Unit
)?
=
null
,
result
:
(
flag
:
Boolean
)
->
Unit
,
res
ult
:
(
flag
:
Boolean
)
->
Unit
res
olveNoAction
:
(()
->
Unit
)?
=
null
,
)
{
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
val
intent
=
val
intent
=
manageStoreIntent
()
Intent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
)
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
launcher
.
launch
(
intent
)
{
intent
.
data
=
Uri
.
parse
(
"package:${packageName}"
)
result
.
invoke
(
checkStorePermission
()
)
jumpAction
?.
invoke
()
}
launcher
.
launch
(
intent
)
{
}
else
{
res
ult
.
invoke
(
checkStorePermission
()
)
res
olveNoAction
?.
invoke
(
)
}
}
}
else
{
}
else
{
PermissionUtils
.
permissionGroup
(
PermissionConstants
.
STORAGE
).
callback
{
isAllGranted
,
_
,
_
,
_
->
PermissionUtils
.
permissionGroup
(
PermissionConstants
.
STORAGE
).
callback
{
isAllGranted
,
_
,
_
,
_
->
...
@@ -41,4 +50,46 @@ object PermissionHelp {
...
@@ -41,4 +50,46 @@ object PermissionHelp {
}
}
}
}
fun
Context
.
checkUsageAccessSettings
():
Boolean
{
val
appOpsManager
=
getSystemService
(
Context
.
APP_OPS_SERVICE
)
as
AppOpsManager
return
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
appOpsManager
.
unsafeCheckOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
else
{
appOpsManager
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
this
.
packageName
)
==
AppOpsManager
.
MODE_ALLOWED
}
}
fun
Context
.
usageAccessSettings
():
Intent
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${this.packageName}"
)
return
intent
}
fun
Context
.
requestUsageAccessSettings
(
launcher
:
ActivityLauncher
,
result
:
(
flag
:
Boolean
)
->
Unit
,
resolveNoAction
:
(()
->
Unit
)?
=
null
,
)
{
val
intent
=
usageAccessSettings
()
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
launcher
.
launch
(
intent
)
{
result
.
invoke
(
checkUsageAccessSettings
())
}
}
else
{
resolveNoAction
?.
invoke
()
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment