Switch to ActivityResultContracts for requesting permissions

QuickPermissions hasn't been updated since past few years hinting its
deprecated status

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-05-18 16:32:23 +05:30
parent f3b7ea6d58
commit 28a6758087
6 changed files with 87 additions and 65 deletions

View File

@@ -137,9 +137,6 @@ dependencies {
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
//Easy Permission
implementation "com.github.quickpermissions:quickpermissions-kotlin:0.4.1"
//Glide
def glide_version = '4.15.1'
implementation "com.github.bumptech.glide:glide:$glide_version"

View File

@@ -22,6 +22,7 @@ package com.aurora.store
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.os.Build
import android.os.Bundle
@@ -33,7 +34,9 @@ import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.activity.addCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.IdRes
import androidx.core.content.ContextCompat
import androidx.core.graphics.ColorUtils
import androidx.core.view.GravityCompat
import androidx.navigation.NavController
@@ -63,7 +66,6 @@ import com.aurora.store.view.ui.sheets.SelfUpdateSheet
import com.aurora.store.view.ui.spoof.SpoofActivity
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
import nl.komponents.kovenant.task
import nl.komponents.kovenant.ui.successUi
@@ -76,6 +78,11 @@ class MainActivity : BaseActivity() {
private var lastBackPressed = 0L
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (!it) toast(R.string.permissions_denied)
}
override fun onConnected() {
hideNetworkConnectivitySheet()
}
@@ -125,7 +132,13 @@ class MainActivity : BaseActivity() {
if (isRAndAbove()) {
checkExternalStorageManagerPermission()
} else {
checkExternalStorageAccessPermission()
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
}
@@ -238,13 +251,6 @@ class MainActivity : BaseActivity() {
return navController.navigateUp()
}
private fun checkExternalStorageAccessPermission() = runWithPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) {
Log.i("Required permissions available")
}
private fun checkExternalStorageManagerPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager())

View File

@@ -25,6 +25,7 @@ import android.content.ActivityNotFoundException
import android.content.ComponentName
import android.content.Intent
import android.content.ServiceConnection
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.os.Environment
@@ -35,6 +36,8 @@ import android.view.MenuItem
import android.view.View
import android.widget.LinearLayout
import androidx.activity.addCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.aurora.Constants
import com.aurora.extensions.*
import com.aurora.gplayapi.data.models.App
@@ -60,7 +63,6 @@ import com.aurora.store.view.ui.sheets.ManualDownloadSheet
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
import com.tonyodev.fetch2.*
import com.tonyodev.fetch2core.DownloadBlock
import nl.komponents.kovenant.task
@@ -76,6 +78,11 @@ class AppDetailsActivity : BaseDetailsActivity() {
private lateinit var B: ActivityDetailsBinding
private lateinit var bottomSheetBehavior: BottomSheetBehavior<LinearLayout>
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) updateApp(app) else toast(R.string.permissions_denied)
}
private lateinit var authData: AuthData
private lateinit var app: App
private var fetch: Fetch? = null
@@ -496,11 +503,14 @@ class AppDetailsActivity : BaseDetailsActivity() {
updateApp(app)
}
} else {
runWithPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
updateApp(app)
} else {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
}

View File

@@ -24,13 +24,13 @@ import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityCompat
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isRAndAbove
@@ -42,13 +42,36 @@ import com.aurora.store.data.model.Permission
import com.aurora.store.databinding.FragmentOnboardingPermissionsBinding
import com.aurora.store.view.epoxy.views.preference.PermissionViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
class PermissionsFragment : BaseFragment() {
private lateinit var B: FragmentOnboardingPermissionsBinding
private val startForPackageManagerResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (isOAndAbove() && requireContext().packageManager.canRequestPackageInstalls()) {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
}
}
private val startForStorageManagerResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (isRAndAbove() && Environment.isExternalStorageManager()) {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
}
}
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
} else {
toast(R.string.permissions_denied)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -137,8 +160,8 @@ class PermissionsFragment : BaseFragment() {
.click { _ ->
when (it.id) {
0 -> checkStorageAccessPermission()
1 -> checkStorageManagerPermission()
2 -> checkUnknownResourceInstallation()
1 -> requestStorageManagerPermission()
2 -> requestPackageManagerPermission()
3 -> checkPostNotificationsPermission()
}
}
@@ -147,59 +170,32 @@ class PermissionsFragment : BaseFragment() {
}
}
private fun checkStorageAccessPermission() = runWithPermissions(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
) {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
private fun checkStorageAccessPermission() {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
private fun checkPostNotificationsPermission() {
if (isTAndAbove()) {
runWithPermissions(
Manifest.permission.POST_NOTIFICATIONS
) {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
}
startForPermissions.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
private fun checkStorageManagerPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
toast("Permission granted")
} else {
startActivityForResult(
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION),
99
)
}
private fun requestStorageManagerPermission() {
if (isRAndAbove()) {
startForStorageManagerResult.launch(
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
)
}
}
private fun checkUnknownResourceInstallation() {
private fun requestPackageManagerPermission() {
if (isOAndAbove()) {
startActivityForResult(
startForPackageManagerResult.launch(
Intent(
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
),
999
)
)
} else {
toast("Permission granted")
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
99, 999 -> {
toast(R.string.toast_permission_granted)
B.epoxyRecycler.requestModelBuild()
}
}
}

View File

@@ -22,6 +22,7 @@ package com.aurora.store.view.ui.sheets
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
@@ -29,6 +30,8 @@ import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.aurora.Constants
import com.aurora.extensions.isRAndAbove
import com.aurora.gplayapi.data.models.App
@@ -41,7 +44,6 @@ import com.aurora.store.util.ApkCopier
import com.aurora.store.util.PackageUtil
import com.aurora.extensions.openInfo
import com.aurora.extensions.toast
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
import nl.komponents.kovenant.task
import org.greenrobot.eventbus.EventBus
@@ -50,6 +52,15 @@ class AppMenuSheet : BaseBottomSheet() {
private lateinit var B: SheetAppMenuBinding
private lateinit var app: App
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) {
task { ApkCopier(requireContext(), app.packageName).copy() }
} else {
toast(R.string.permissions_denied)
}
}
override fun onCreateContentView(
inflater: LayoutInflater,
container: ViewGroup,
@@ -138,13 +149,14 @@ class AppMenuSheet : BaseBottomSheet() {
}
}
} else {
runWithPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
if (ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
task {
ApkCopier(requireContext(), app.packageName).copy()
}
task { ApkCopier(requireContext(), app.packageName).copy() }
} else {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
}

View File

@@ -411,4 +411,5 @@
<string name="expand">Expand</string>
<string name="open_in_aurora">Open in Aurora Store</string>
<string name="spoof_property"><xliff:g id="manufacturer">%1$s</xliff:g> • API <xliff:g id="api">%2$s</xliff:g></string>
<string name="permissions_denied">Required permissions were denied. Please grant them in order to continue the action</string>
</resources>