Commit 48fa7c25 authored by wanglei's avatar wanglei

处理权限问题

parent 328eac6a
...@@ -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)
......
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()
}) })
......
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 allMobide = getNetworkStats( val allMobile = 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()
) )
AllList.clear() allList.clear()
mobileList.clear() mobileList.clear()
wifiList.clear() wifiList.clear()
var mobileSize = 0L var mobileSize = 0L
allMobide.forEach { key, value -> allMobile.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) {
AllList.add(value) allList.add(value)
} }
AllList.sortByDescending { it.mobileUsed + it.wifiUsed } allList.sortByDescending { it.mobileUsed + it.wifiUsed }
AllList.removeAll(AllList.filter { allList.removeAll(allList.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() = AllList.size override fun getItemCount() = allList.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 == AllList[position].packageName it.packageName == allList[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 + AllList[position].mobileUsed).toFormatSize() (allList[position].wifiUsed + allList[position].mobileUsed).toFormatSize()
holder.wifiPro.max = (AllList[0].wifiUsed + AllList[0].mobileUsed).toInt() holder.wifiPro.max = (allList[0].wifiUsed + allList[0].mobileUsed).toInt()
holder.mobilePro.max = (AllList[0].wifiUsed + AllList[0].mobileUsed).toInt() holder.mobilePro.max = (allList[0].wifiUsed + allList[0].mobileUsed).toInt()
holder.wifiPro.progress = holder.wifiPro.progress =
(AllList[position].wifiUsed + AllList[position].mobileUsed).toInt() (allList[position].wifiUsed + allList[position].mobileUsed).toInt()
holder.mobilePro.progress = (AllList[position].mobileUsed).toInt() holder.mobilePro.progress = (allList[position].mobileUsed).toInt()
holder.tvstop.isEnabled = holder.tvstop.isEnabled =
NetworkStatsHelper.canStop(this@NetWorkActivity, AllList[position].packageName) NetworkStatsHelper.canStop(this@NetWorkActivity, allList[position].packageName)
holder.tvstop.setOnClickListener { holder.tvstop.setOnClickListener {
AppUtils.launchAppDetailsSettings(AllList[position].packageName) AppUtils.launchAppDetailsSettings(allList[position].packageName)
} }
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
......
...@@ -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()
}) })
......
...@@ -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() {
......
...@@ -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
......
...@@ -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()
}) })
......
...@@ -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))
} }
......
...@@ -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
...@@ -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) {
......
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?,
......
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,
result: (flag: Boolean) -> Unit resolveNoAction: (() -> 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 {
result.invoke(checkStorePermission()) resolveNoAction?.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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment