diff --git a/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt b/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt index 03c6fe474..a9c77c290 100644 --- a/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt +++ b/app/src/main/java/com/aurora/store/data/providers/PermissionProvider.kt @@ -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 { private fun knownPermissions(): Map { 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 { 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 = diff --git a/app/src/main/java/com/aurora/store/util/PackageUtil.kt b/app/src/main/java/com/aurora/store/util/PackageUtil.kt index a8f24e286..9a8ce77b0 100644 --- a/app/src/main/java/com/aurora/store/util/PackageUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PackageUtil.kt @@ -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()) { diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt index cbc9bac01..c32818dd2 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt @@ -632,7 +632,9 @@ class AppDetailsFragment : BaseFragment() { } 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() { startDownload() } } + if (uninstallActionEnabled) { binding.layoutDetailsToolbar.toolbar.invalidateMenu() } diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt index 50af50775..3780c099e 100644 --- a/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt @@ -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() 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) + } ) ) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0807d589d..af3b6a4c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -198,6 +198,7 @@ "External Storage Manager" "Installer Permission" "Allow installing apps from Aurora Store" + "Allow installation of apps from unknown sources" "Notifications" "Send notifications regarding installations status" "Background Downloads"