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
Show 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>() {
}
private
fun
initViewPager
()
{
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_NAME
,
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
APP_LIST_TYPE_INSTALL
,
false
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
launcher
,
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_NAME
,
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_INSTALL
,
false
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_SIZE
,
false
,
needPermission
=
true
)
})
pages
.
add
(
AppListFragment
().
apply
{
setInitData
(
APP_LIST_TYPE_LAST_USE
,
false
,
needPermission
=
true
)
})
pagerAdapter
=
ScreenSlidePagerAdapter
(
this
@AppManagerActivity
)
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/LargeFileCleanActivity.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.activity
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.graphics.Color
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.view.View
import
android.view.ViewGroup
...
...
@@ -16,8 +11,6 @@ import androidx.activity.addCallback
import
androidx.core.content.ContextCompat
import
androidx.core.view.isVisible
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.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_MONTH
import
com.test.basd.fastcleanerjunk.activity.LargeFileCleanActivity.Filter.Companion.KEY_1_WEEK
...
...
@@ -47,6 +40,7 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.FileHelps
import
com.test.basd.fastcleanerjunk.helps.LogEx
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.TimeUtils
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
...
...
@@ -176,23 +170,15 @@ class LargeFileCleanActivity : BaseActivity<ActivityLayoutLargeFileBinding>() {
initList
()
}
else
{
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}"
)
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
requestStorePermission
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
playLottie
()
initList
()
}
else
{
finishToMain
()
}
})
},
resolveNoAction
=
{
finishToMain
()
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
finishToMain
()
})
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/NetWorkActivity.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.activity
import
android.annotation.SuppressLint
import
android.app.AppOpsManager
import
android.app.usage.NetworkStats
import
android.app.usage.NetworkStatsManager
import
android.content.Context
import
android.graphics.Color
import
android.net.ConnectivityManager
import
android.os.Build
import
android.util.SparseLongArray
import
android.view.LayoutInflater
import
android.view.View
...
...
@@ -30,6 +28,8 @@ import com.test.basd.fastcleanerjunk.helps.BaseActivity
import
com.test.basd.fastcleanerjunk.helps.ConfigHelper
import
com.test.basd.fastcleanerjunk.helps.KotlinExt.toFormatSize
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.view.DialogViews
import
kotlin.random.Random
...
...
@@ -40,57 +40,9 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
private
val
wifiList
=
mutableListOf
<
TrafficBean
>()
private
val
mobileList
=
mutableListOf
<
TrafficBean
>()
private
val
AllList
=
mutableListOf
<
TrafficBean
>()
private
val
allList
=
mutableListOf
<
TrafficBean
>()
private
var
startTime
=
NetworkStatsHelper
.
getTimesMonthmorning
()
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
{
...
...
@@ -102,9 +54,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
binding
.
idTvThisMonth
.
isSelected
=
true
playLottie
()
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
initListener
()
{
binding
.
idBackNetwork
.
setOnClickListener
{
...
...
@@ -119,7 +75,14 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
})
binding
.
idGant
.
setOnClickListener
{
checkAccesSettings
(
true
)
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
binding
.
idLlNoAccpermion
.
isVisible
=
false
setData
()
}
else
{
finishToMain
()
}
},
resolveNoAction
=
{
finishToMain
()
})
}
binding
.
idTvThisMonth
.
setOnClickListener
{
clickTop
(
0
)
...
...
@@ -147,7 +110,6 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
1
->
{
binding
.
idTvTypes
.
text
=
"Wi-Fi"
types
=
1
}
2
->
{
...
...
@@ -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
)
{
listOf
(
binding
.
idTvThisMonth
,
binding
.
id30Day
,
binding
.
id24Hours
).
forEachIndexed
{
index
,
view
->
view
.
isSelected
=
p
==
index
...
...
@@ -167,17 +147,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
private
fun
initList
()
{
setData
()
// setMobileData(allMobide)
}
@SuppressLint
(
"NotifyDataSetChanged"
)
@Suppress
(
"DEPRECATION"
)
private
fun
setData
(
)
{
val
allMobi
d
e
=
getNetworkStats
(
val
allMobi
l
e
=
getNetworkStats
(
ConnectivityManager
.
TYPE_MOBILE
,
startTime
,
System
.
currentTimeMillis
()
...
...
@@ -186,11 +162,11 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
ConnectivityManager
.
TYPE_WIFI
,
startTime
,
System
.
currentTimeMillis
()
)
A
llList
.
clear
()
a
llList
.
clear
()
mobileList
.
clear
()
wifiList
.
clear
()
var
mobileSize
=
0L
allMobi
d
e
.
forEach
{
key
,
value
->
allMobi
l
e
.
forEach
{
key
,
value
->
mobileSize
+=
value
val
appPkg
=
packageManager
.
getPackagesForUid
(
key
)
if
(
appPkg
?.
isNotEmpty
()
==
true
)
{
...
...
@@ -234,15 +210,13 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
}
}
for
(
value
in
map
.
values
)
{
A
llList
.
add
(
value
)
a
llList
.
add
(
value
)
}
A
llList
.
sortByDescending
{
it
.
mobileUsed
+
it
.
wifiUsed
}
AllList
.
removeAll
(
A
llList
.
filter
{
a
llList
.
sortByDescending
{
it
.
mobileUsed
+
it
.
wifiUsed
}
allList
.
removeAll
(
a
llList
.
filter
{
it
.
packageName
==
this
.
packageName
})
// AllList.sortByDescending { it.wifiUsed }
// Log.e("MXL", "所有的数据: " + AllList.size + AllList.toString())
if
(
AllList
.
isNotEmpty
())
{
if
(
allList
.
isNotEmpty
())
{
binding
.
idTvNoData
.
isVisible
=
false
binding
.
idRlNetworkTra
.
run
{
layoutManager
=
LinearLayoutManager
(
context
)
...
...
@@ -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
bucket
=
NetworkStats
.
Bucket
()
try
{
...
...
@@ -316,27 +290,27 @@ class NetWorkActivity : BaseActivity<ActivityLayoutNetworkBinding>() {
return
ViewHolder
(
view
)
}
override
fun
getItemCount
()
=
A
llList
.
size
override
fun
getItemCount
()
=
a
llList
.
size
@SuppressLint
(
"SetTextI18n"
)
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
val
c
=
ConfigHelper
.
appList
?.
firstOrNull
{
it
.
packageName
==
A
llList
[
position
].
packageName
it
.
packageName
==
a
llList
[
position
].
packageName
}
holder
.
ivImage
.
setImageDrawable
(
c
?.
icon
)
holder
.
tvName
.
text
=
c
?.
name
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
.
mobilePro
.
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
.
wifiPro
.
progress
=
(
AllList
[
position
].
wifiUsed
+
A
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
progress
=
(
A
llList
[
position
].
mobileUsed
).
toInt
()
(
allList
[
position
].
wifiUsed
+
a
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
mobilePro
.
progress
=
(
a
llList
[
position
].
mobileUsed
).
toInt
()
holder
.
tvstop
.
isEnabled
=
NetworkStatsHelper
.
canStop
(
this
@NetWorkActivity
,
A
llList
[
position
].
packageName
)
NetworkStatsHelper
.
canStop
(
this
@NetWorkActivity
,
a
llList
[
position
].
packageName
)
holder
.
tvstop
.
setOnClickListener
{
AppUtils
.
launchAppDetailsSettings
(
A
llList
[
position
].
packageName
)
AppUtils
.
launchAppDetailsSettings
(
a
llList
[
position
].
packageName
)
}
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>() {
playLottie
()
}
else
{
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}"
)
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
requestStorePermission
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
playLottie
()
}
else
{
finishToMain
()
}
})
},
resolveNoAction
=
{
finishToMain
()
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
finishToMain
()
})
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/activity/PreparedPhotoActivity.kt
View file @
48fa7c25
...
...
@@ -47,22 +47,14 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
initData
()
}
else
{
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}"
)
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
requestStorePermission
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
initData
()
}
else
{
finishToMain
()
}
})
},
resolveNoAction
=
{
finishToMain
()
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
finishToMain
()
}
},
{
finishToMain
()
})
...
...
@@ -114,10 +106,6 @@ class PreparedPhotoActivity : BaseActivity<ActivityLayoutRepeaterdPhotoBinding>(
}
private
var
fileList
=
mutableListOf
<
ImageDataBean
>()
override
fun
onStart
()
{
super
.
onStart
()
checkPermission
()
}
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
import
com.test.basd.fastcleanerjunk.helps.ads.AdmobUtils
import
com.test.basd.fastcleanerjunk.helps.recentapp.LaunchTimeStat
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
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Dispatchers
...
...
@@ -59,7 +61,6 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
initPage
()
intTab
()
if
(
checkUsageAccessSettings
())
{
// Log.e("MXL", "onCreate: " + checkUsageAccessSettings())
intData
()
}
else
{
binding
.
llContent
.
visibility
=
View
.
GONE
...
...
@@ -81,22 +82,19 @@ class RecentAppActivity : BaseActivity<ActivityRecentAppBinding>() {
}
}
binding
.
tvGrand
.
setOnClickListener
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${context.packageName}"
)
launcher
.
launch
(
intent
)
{
LogEx
.
logDebug
(
TAG
,
"launcher callback"
)
val
obj
=
JSONObject
()
obj
.
put
(
"activity"
,
javaClass
.
simpleName
)
if
(
checkUsageAccessSettings
())
{
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
llContent
.
visibility
=
View
.
VISIBLE
intData
()
}
else
{
finishToMain
()
}
}
},
resolveNoAction
=
{
finishToMain
()
})
}
}
...
...
@@ -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
{
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>() {
})
if
(
checkStorePermission
()){
if
(
checkStorePermission
())
{
playLottie
()
}
else
{
}
else
{
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}"
)
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
requestStorePermission
(
launcher
,
jumpAction
=
{},
result
=
{
flag
->
requestStorePermission
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
playLottie
()
}
else
{
finishToMain
()
}
})
},
resolveNoAction
=
{
finishToMain
()
})
PermissionTripActivity
.
launch
(
this
)
}
else
{
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
import
android.content.Intent
import
android.graphics.Color
import
android.net.Uri
import
android.os.Handler
import
android.provider.Settings
import
androidx.activity.OnBackPressedCallback
import
androidx.core.view.updatePadding
import
com.blankj.utilcode.util.BarUtils
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.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.view.DialogViews
import
kotlin.random.Random
...
...
@@ -30,24 +36,26 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
}
})
}
override
fun
onStart
()
{
super
.
onStart
()
checkPermission
()
}
var
isplay
=
0
override
fun
onPermissionsResult
(
isGranted
:
Boolean
)
{
if
(
isGranted
)
{
isplay
+=
1
if
(
isplay
==
1
)
{
if
(
checkStorePermission
())
{
playLottie
()
}
else
{
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
.
setAnimation
(
"ya_smax_suo/data.json"
)
binding
.
idLottie1
.
playAnimation
()
...
...
@@ -61,7 +69,7 @@ class StartCompressionPhotoActivity : BaseActivity<ActivityStartCompressionPhoto
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
import
com.test.basd.fastcleanerjunk.bean.AppBean
import
com.test.basd.fastcleanerjunk.databinding.FragmentAppListBinding
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.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
net.sourceforge.pinyin4j.PinyinHelper
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
...
...
@@ -32,29 +35,28 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
private
var
list
=
arrayListOf
<
AppBean
>()
private
var
isRefreshData
=
false
//是否需要更新数据
private
lateinit
var
launcher
:
ActivityLauncher
private
var
type
:
Int
=
0
var
isAsc
:
Boolean
=
true
private
var
needPermission
:
Boolean
=
false
private
lateinit
var
launcher
:
ActivityLauncher
override
val
binding
:
FragmentAppListBinding
by
lazy
{
FragmentAppListBinding
.
inflate
(
layoutInflater
)
}
fun
setInitData
(
launcher
:
ActivityLauncher
,
type
:
Int
=
0
,
isAsc
:
Boolean
=
true
,
needPermission
:
Boolean
=
false
)
{
this
.
launcher
=
launcher
this
.
type
=
type
this
.
isAsc
=
isAsc
this
.
needPermission
=
needPermission
}
override
fun
setView
()
{
if
(
needPermission
&&
!
checkUsageAccessSettings
(
requireContext
()))
{
launcher
=
(
requireActivity
()
as
AppManagerActivity
).
launcher
if
(
needPermission
&&
!
requireContext
().
checkUsageAccessSettings
())
{
binding
.
flContent
.
visibility
=
View
.
GONE
binding
.
flPermission
.
visibility
=
View
.
VISIBLE
}
else
{
...
...
@@ -68,13 +70,11 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
override
fun
setListener
()
{
binding
.
tvAuthorization
.
setOnClickListener
{
val
intent
=
Intent
(
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
)
intent
.
addCategory
(
"android.intent.category.DEFAULT"
)
intent
.
data
=
Uri
.
parse
(
"package:${requireActivity().packageName}"
)
launcher
.
launch
(
intent
)
{
LogEx
.
logDebug
(
TAG
,
"launcher callback"
)
requireContext
().
requestUsageAccessSettings
(
launcher
,
result
=
{
flag
->
if
(
flag
)
{
(
requireActivity
()
as
AppManagerActivity
).
refreshUsageAccessData
()
}
})
}
}
...
...
@@ -87,7 +87,7 @@ class AppListFragment : BaseFragment<FragmentAppListBinding>() {
override
fun
onResume
()
{
super
.
onResume
()
if
(
checkUsageAccessSettings
(
requireContext
()
))
{
if
(
requireContext
().
checkUsageAccessSettings
(
))
{
binding
.
flPermission
.
visibility
=
View
.
GONE
binding
.
flContent
.
visibility
=
View
.
VISIBLE
}
...
...
@@ -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() {
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
()
{
if
(
this
!
is
MainActivity
&&
!
ActivityUtils
.
isActivityExistsInStack
(
MainActivity
::
class
.
java
))
{
startActivity
(
Intent
(
this
,
MainActivity
::
class
.
java
))
...
...
@@ -128,97 +54,8 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
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
override
fun
onDestroy
()
{
super
.
onDestroy
()
if
(
dialog
!=
null
)
{
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/helps/BaseFragment.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.helps
import
android.content.Context
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
...
...
@@ -10,6 +11,7 @@ import androidx.viewbinding.ViewBinding
abstract
class
BaseFragment
<
T
:
ViewBinding
>
:
Fragment
()
{
protected
abstract
val
binding
:
T
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
...
...
app/src/main/java/com/test/basd/fastcleanerjunk/helps/PermissionHelp.kt
View file @
48fa7c25
package
com.test.basd.fastcleanerjunk.helps
import
android.annotation.SuppressLint
import
android.app.AppOpsManager
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
...
...
@@ -9,6 +10,7 @@ import android.os.Environment
import
android.provider.Settings
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.PermissionUtils
import
com.test.basd.fastcleanerjunk.helps.PermissionHelp.requestUsageAccessSettings
object
PermissionHelp
{
fun
checkStorePermission
():
Boolean
{
...
...
@@ -19,21 +21,28 @@ object PermissionHelp {
}
}
fun
Context
.
requestStorePermission
(
launcher
:
ActivityLauncher
,
jumpAction
:
(()
->
Unit
)?
=
null
,
result
:
(
flag
:
Boolean
)
->
Unit
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
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}"
)
jumpAction
?.
invoke
()
return
intent
}
fun
Context
.
requestStorePermission
(
launcher
:
ActivityLauncher
,
result
:
(
flag
:
Boolean
)
->
Unit
,
resolveNoAction
:
(()
->
Unit
)?
=
null
,
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
)
{
val
intent
=
manageStoreIntent
()
if
(
intent
.
resolveActivity
(
packageManager
)
!=
null
)
{
launcher
.
launch
(
intent
)
{
result
.
invoke
(
checkStorePermission
())
}
}
else
{
resolveNoAction
?.
invoke
()
}
}
else
{
PermissionUtils
.
permissionGroup
(
PermissionConstants
.
STORAGE
).
callback
{
isAllGranted
,
_
,
_
,
_
->
result
.
invoke
(
isAllGranted
)
...
...
@@ -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