AppDetails: Make install app permission check a must before requesting an install

This commit is contained in:
Rahul Patel
2024-07-29 02:28:41 +05:30
parent 799b71f5d2
commit a4567a6460
5 changed files with 37 additions and 15 deletions

View File

@@ -20,7 +20,6 @@ import com.aurora.extensions.checkManifestPermission
import com.aurora.extensions.isDomainVerified
import com.aurora.extensions.isExternalStorageAccessible
import com.aurora.extensions.isMAndAbove
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.toast
import com.aurora.store.BuildConfig
import com.aurora.store.PermissionCallback
@@ -77,10 +76,7 @@ class PermissionProvider : ActivityResultCallback<ActivityResult> {
private fun knownPermissions(): Map<PermissionType, Intent> {
return mapOf(
PermissionType.STORAGE_MANAGER to PackageUtil.getStorageManagerIntent(context),
PermissionType.INSTALL_UNKNOWN_APPS to Intent(
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
),
PermissionType.INSTALL_UNKNOWN_APPS to PackageUtil.getInstallUnknownAppsIntent(),
PermissionType.DOZE_WHITELIST to Intent(
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
@@ -122,14 +118,7 @@ class PermissionProvider : ActivityResultCallback<ActivityResult> {
PermissionType.STORAGE_MANAGER -> context.isExternalStorageAccessible()
PermissionType.POST_NOTIFICATIONS -> context.checkManifestPermission(Manifest.permission.POST_NOTIFICATIONS)
PermissionType.INSTALL_UNKNOWN_APPS -> {
if (isOAndAbove()) {
context.packageManager.canRequestPackageInstalls()
} else {
true
}
}
PermissionType.INSTALL_UNKNOWN_APPS -> PackageUtil.canRequestPackageInstalls(context)
PermissionType.DOZE_WHITELIST -> {
if (isMAndAbove()) {
val powerManager =

View File

@@ -144,6 +144,30 @@ object PackageUtil {
}
}
fun getInstallUnknownAppsIntent(): Intent {
return if (isOAndAbove()) {
Intent(
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
)
} else {
Intent(Settings.ACTION_SECURITY_SETTINGS)
}
}
fun canRequestPackageInstalls(context: Context): Boolean {
return if (isOAndAbove()) {
context.packageManager.canRequestPackageInstalls()
} else {
val secureResult = Settings.Secure.getInt(
context.contentResolver,
Settings.Secure.INSTALL_NON_MARKET_APPS, 0
)
return secureResult == 1
}
}
@Throws(Exception::class)
fun getPackageInfo(context: Context, packageName: String, flags: Int = 0): PackageInfo {
return if (isTAndAbove()) {

View File

@@ -632,7 +632,9 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
}
btn.addOnClickListener {
if (authProvider.isAnonymous && !app.isFree) {
if (!permissionProvider.isGranted(PermissionType.INSTALL_UNKNOWN_APPS)) {
permissionProvider.request(PermissionType.INSTALL_UNKNOWN_APPS)
} else if (authProvider.isAnonymous && !app.isFree) {
toast(R.string.toast_purchase_blocked)
} else if (app.versionCode == 0) {
toast(R.string.toast_app_unavailable)
@@ -641,6 +643,7 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
startDownload()
}
}
if (uninstallActionEnabled) {
binding.layoutDetailsToolbar.toolbar.invalidateMenu()
}

View File

@@ -23,6 +23,7 @@ package com.aurora.store.view.ui.onboarding
import android.os.Bundle
import android.view.View
import com.aurora.extensions.isMAndAbove
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isRAndAbove
import com.aurora.extensions.isSAndAbove
import com.aurora.extensions.isTAndAbove
@@ -65,7 +66,11 @@ class PermissionsFragment : BaseFragment<FragmentOnboardingPermissionsBinding>()
Permission(
PermissionType.INSTALL_UNKNOWN_APPS,
getString(R.string.onboarding_permission_installer),
getString(R.string.onboarding_permission_installer_desc)
if (isOAndAbove()) {
getString(R.string.onboarding_permission_installer_desc)
} else {
getString(R.string.onboarding_permission_installer_legacy_desc)
}
)
)

View File

@@ -198,6 +198,7 @@
<string name="onboarding_permission_esm">"External Storage Manager"</string>
<string name="onboarding_permission_installer">"Installer Permission"</string>
<string name="onboarding_permission_installer_desc">"Allow installing apps from Aurora Store"</string>
<string name="onboarding_permission_installer_legacy_desc">"Allow installation of apps from unknown sources"</string>
<string name="onboarding_permission_notifications">"Notifications"</string>
<string name="onboarding_permission_notifications_desc">"Send notifications regarding installations status"</string>
<string name="onboarding_permission_doze">"Background Downloads"</string>