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:
@@ -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"
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user