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-fragment-ktx:$nav_version"
|
||||||
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
|
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
|
||||||
|
|
||||||
//Easy Permission
|
|
||||||
implementation "com.github.quickpermissions:quickpermissions-kotlin:0.4.1"
|
|
||||||
|
|
||||||
//Glide
|
//Glide
|
||||||
def glide_version = '4.15.1'
|
def glide_version = '4.15.1'
|
||||||
implementation "com.github.bumptech.glide:glide:$glide_version"
|
implementation "com.github.bumptech.glide:glide:$glide_version"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package com.aurora.store
|
|||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -33,7 +34,9 @@ import android.widget.ImageView
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.graphics.ColorUtils
|
import androidx.core.graphics.ColorUtils
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.navigation.NavController
|
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.aurora.store.view.ui.spoof.SpoofActivity
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
|
|
||||||
import nl.komponents.kovenant.task
|
import nl.komponents.kovenant.task
|
||||||
import nl.komponents.kovenant.ui.successUi
|
import nl.komponents.kovenant.ui.successUi
|
||||||
|
|
||||||
@@ -76,6 +78,11 @@ class MainActivity : BaseActivity() {
|
|||||||
|
|
||||||
private var lastBackPressed = 0L
|
private var lastBackPressed = 0L
|
||||||
|
|
||||||
|
private val startForPermissions =
|
||||||
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||||
|
if (!it) toast(R.string.permissions_denied)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onConnected() {
|
override fun onConnected() {
|
||||||
hideNetworkConnectivitySheet()
|
hideNetworkConnectivitySheet()
|
||||||
}
|
}
|
||||||
@@ -125,7 +132,13 @@ class MainActivity : BaseActivity() {
|
|||||||
if (isRAndAbove()) {
|
if (isRAndAbove()) {
|
||||||
checkExternalStorageManagerPermission()
|
checkExternalStorageManagerPermission()
|
||||||
} else {
|
} 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()
|
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() {
|
private fun checkExternalStorageManagerPermission() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
if (!Environment.isExternalStorageManager())
|
if (!Environment.isExternalStorageManager())
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import android.content.ActivityNotFoundException
|
|||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.ServiceConnection
|
import android.content.ServiceConnection
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
@@ -35,6 +36,8 @@ import android.view.MenuItem
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import com.aurora.Constants
|
import com.aurora.Constants
|
||||||
import com.aurora.extensions.*
|
import com.aurora.extensions.*
|
||||||
import com.aurora.gplayapi.data.models.App
|
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.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
||||||
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
|
|
||||||
import com.tonyodev.fetch2.*
|
import com.tonyodev.fetch2.*
|
||||||
import com.tonyodev.fetch2core.DownloadBlock
|
import com.tonyodev.fetch2core.DownloadBlock
|
||||||
import nl.komponents.kovenant.task
|
import nl.komponents.kovenant.task
|
||||||
@@ -76,6 +78,11 @@ class AppDetailsActivity : BaseDetailsActivity() {
|
|||||||
private lateinit var B: ActivityDetailsBinding
|
private lateinit var B: ActivityDetailsBinding
|
||||||
private lateinit var bottomSheetBehavior: BottomSheetBehavior<LinearLayout>
|
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 authData: AuthData
|
||||||
private lateinit var app: App
|
private lateinit var app: App
|
||||||
private var fetch: Fetch? = null
|
private var fetch: Fetch? = null
|
||||||
@@ -496,11 +503,14 @@ class AppDetailsActivity : BaseDetailsActivity() {
|
|||||||
updateApp(app)
|
updateApp(app)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
runWithPermissions(
|
if (ContextCompat.checkSelfPermission(
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
this,
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
) == PackageManager.PERMISSION_GRANTED
|
||||||
) {
|
) {
|
||||||
updateApp(app)
|
updateApp(app)
|
||||||
|
} else {
|
||||||
|
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ import android.Manifest
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import com.aurora.extensions.isOAndAbove
|
import com.aurora.extensions.isOAndAbove
|
||||||
import com.aurora.extensions.isRAndAbove
|
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.databinding.FragmentOnboardingPermissionsBinding
|
||||||
import com.aurora.store.view.epoxy.views.preference.PermissionViewModel_
|
import com.aurora.store.view.epoxy.views.preference.PermissionViewModel_
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionsFragment : BaseFragment() {
|
class PermissionsFragment : BaseFragment() {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingPermissionsBinding
|
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(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
@@ -137,8 +160,8 @@ class PermissionsFragment : BaseFragment() {
|
|||||||
.click { _ ->
|
.click { _ ->
|
||||||
when (it.id) {
|
when (it.id) {
|
||||||
0 -> checkStorageAccessPermission()
|
0 -> checkStorageAccessPermission()
|
||||||
1 -> checkStorageManagerPermission()
|
1 -> requestStorageManagerPermission()
|
||||||
2 -> checkUnknownResourceInstallation()
|
2 -> requestPackageManagerPermission()
|
||||||
3 -> checkPostNotificationsPermission()
|
3 -> checkPostNotificationsPermission()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,59 +170,32 @@ class PermissionsFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkStorageAccessPermission() = runWithPermissions(
|
private fun checkStorageAccessPermission() {
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
|
||||||
) {
|
|
||||||
toast(R.string.toast_permission_granted)
|
|
||||||
B.epoxyRecycler.requestModelBuild()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkPostNotificationsPermission() {
|
private fun checkPostNotificationsPermission() {
|
||||||
if (isTAndAbove()) {
|
if (isTAndAbove()) {
|
||||||
runWithPermissions(
|
startForPermissions.launch(Manifest.permission.POST_NOTIFICATIONS)
|
||||||
Manifest.permission.POST_NOTIFICATIONS
|
|
||||||
) {
|
|
||||||
toast(R.string.toast_permission_granted)
|
|
||||||
B.epoxyRecycler.requestModelBuild()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkStorageManagerPermission() {
|
private fun requestStorageManagerPermission() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (isRAndAbove()) {
|
||||||
if (Environment.isExternalStorageManager()) {
|
startForStorageManagerResult.launch(
|
||||||
toast("Permission granted")
|
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
|
||||||
} else {
|
)
|
||||||
startActivityForResult(
|
|
||||||
Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION),
|
|
||||||
99
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkUnknownResourceInstallation() {
|
private fun requestPackageManagerPermission() {
|
||||||
if (isOAndAbove()) {
|
if (isOAndAbove()) {
|
||||||
startActivityForResult(
|
startForPackageManagerResult.launch(
|
||||||
Intent(
|
Intent(
|
||||||
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
|
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
|
||||||
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
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.Manifest
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
@@ -29,6 +30,8 @@ import android.view.LayoutInflater
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import com.aurora.Constants
|
import com.aurora.Constants
|
||||||
import com.aurora.extensions.isRAndAbove
|
import com.aurora.extensions.isRAndAbove
|
||||||
import com.aurora.gplayapi.data.models.App
|
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.store.util.PackageUtil
|
||||||
import com.aurora.extensions.openInfo
|
import com.aurora.extensions.openInfo
|
||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.livinglifetechway.quickpermissions_kotlin.runWithPermissions
|
|
||||||
import nl.komponents.kovenant.task
|
import nl.komponents.kovenant.task
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
|
||||||
@@ -50,6 +52,15 @@ class AppMenuSheet : BaseBottomSheet() {
|
|||||||
private lateinit var B: SheetAppMenuBinding
|
private lateinit var B: SheetAppMenuBinding
|
||||||
private lateinit var app: App
|
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(
|
override fun onCreateContentView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup,
|
container: ViewGroup,
|
||||||
@@ -138,13 +149,14 @@ class AppMenuSheet : BaseBottomSheet() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
runWithPermissions(
|
if (ContextCompat.checkSelfPermission(
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
requireContext(),
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
) == PackageManager.PERMISSION_GRANTED
|
||||||
) {
|
) {
|
||||||
task {
|
task { ApkCopier(requireContext(), app.packageName).copy() }
|
||||||
ApkCopier(requireContext(), app.packageName).copy()
|
} else {
|
||||||
}
|
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,4 +411,5 @@
|
|||||||
<string name="expand">Expand</string>
|
<string name="expand">Expand</string>
|
||||||
<string name="open_in_aurora">Open in Aurora Store</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="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>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user