OOBE: another attemp to fix issues on Android 11 & 12
This commit is contained in:
@@ -12,6 +12,7 @@ import android.util.Log
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.activity.result.ActivityResultCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.aurora.extensions.checkManifestPermission
|
||||
import com.aurora.extensions.isDomainVerified
|
||||
@@ -73,7 +74,22 @@ class PermissionProvider(private val fragment: Fragment) :
|
||||
if (!isGranted(PermissionType.INSTALL_UNKNOWN_APPS)) {
|
||||
context.toast(R.string.toast_permission_installer_required)
|
||||
} else {
|
||||
/**
|
||||
* I don't know why, but for storage manager permission on Android 11 & 12,
|
||||
* we need to request both permissions otherwise the permission is not granted,
|
||||
* even though OS says it is granted.
|
||||
*/
|
||||
ActivityCompat.requestPermissions(
|
||||
fragment.requireActivity(),
|
||||
arrayOf(
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
),
|
||||
1
|
||||
)
|
||||
|
||||
// TODO: Verify & remove this after testing
|
||||
context.toast(R.string.toast_permission_esm_restart)
|
||||
|
||||
intentLauncher.launch(intent)
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -174,18 +174,11 @@ object PackageUtil {
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun getStorageManagerIntent(context: Context): Intent {
|
||||
var intent = Intent(
|
||||
val intent = Intent(
|
||||
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
|
||||
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
||||
)
|
||||
|
||||
if (isHuawei) {
|
||||
intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
||||
)
|
||||
}
|
||||
|
||||
// Check if the intent can be resolved
|
||||
val packageManager = context.packageManager
|
||||
val isIntentAvailable = packageManager.queryIntentActivities(
|
||||
|
||||
@@ -61,6 +61,7 @@ import com.aurora.gplayapi.data.models.StreamCluster
|
||||
import com.aurora.gplayapi.data.models.datasafety.EntryType
|
||||
import com.aurora.store.AppStreamStash
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.MainActivity
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.event.BusEvent
|
||||
import com.aurora.store.data.event.Event
|
||||
@@ -87,6 +88,7 @@ import com.aurora.store.view.epoxy.views.details.ScreenshotViewModel_
|
||||
import com.aurora.store.view.ui.commons.BaseFragment
|
||||
import com.aurora.store.viewmodel.details.AppDetailsViewModel
|
||||
import com.aurora.store.viewmodel.details.DetailsClusterViewModel
|
||||
import com.jakewharton.processphoenix.ProcessPhoenix
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@@ -538,8 +540,16 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
|
||||
viewModel.download(app)
|
||||
} else {
|
||||
permissionProvider.request(PermissionType.STORAGE_MANAGER) {
|
||||
if (it) viewModel.download(app) else {
|
||||
// TODO: Ask for permission again or redirect to Permission Manager
|
||||
if (it) {
|
||||
// Restart the app to ensure all permissions are granted
|
||||
val intent = Intent(
|
||||
requireContext(),
|
||||
MainActivity::class.java
|
||||
)
|
||||
// Pass the packageName so we're back to same app
|
||||
intent.putExtra("packageName", app.packageName)
|
||||
|
||||
ProcessPhoenix.triggerRebirth(requireContext(), intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -604,9 +614,13 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
|
||||
binding.layoutDetailsApp.btnSecondaryAction.isEnabled = true
|
||||
|
||||
if (app.isInstalled) {
|
||||
val isUpdatable = PackageUtil.isUpdatable(requireContext(), app.packageName, app.versionCode.toLong())
|
||||
val isUpdatable =
|
||||
PackageUtil.isUpdatable(requireContext(), app.packageName, app.versionCode.toLong())
|
||||
val hasValidCert = app.certificateSetList.any {
|
||||
it.certificateSet in CertUtil.getEncodedCertificateHashes(requireContext(), app.packageName)
|
||||
it.certificateSet in CertUtil.getEncodedCertificateHashes(
|
||||
requireContext(),
|
||||
app.packageName
|
||||
)
|
||||
}
|
||||
|
||||
if ((isUpdatable && hasValidCert) || (isUpdatable && isExtendedUpdateEnabled)) {
|
||||
|
||||
@@ -29,9 +29,9 @@ import android.os.Looper
|
||||
import android.util.Base64
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
@@ -240,7 +240,8 @@ class SplashFragment : BaseFragment<FragmentSplashBinding>() {
|
||||
}
|
||||
|
||||
private fun navigateToDefaultTab() {
|
||||
val defaultDestination = Preferences.getInteger(requireContext(), PREFERENCE_DEFAULT_SELECTED_TAB)
|
||||
val defaultDestination =
|
||||
Preferences.getInteger(requireContext(), PREFERENCE_DEFAULT_SELECTED_TAB)
|
||||
val directions =
|
||||
when (requireArguments().getInt("destinationId", defaultDestination)) {
|
||||
R.id.updatesFragment -> {
|
||||
@@ -263,6 +264,8 @@ class SplashFragment : BaseFragment<FragmentSplashBinding>() {
|
||||
} else if (requireActivity().intent != null && requireActivity().intent.action == Intent.ACTION_SEND) {
|
||||
val clipData = requireActivity().intent.getStringExtra(Intent.EXTRA_TEXT) ?: ""
|
||||
UrlQuerySanitizer(clipData).getValue("id") ?: ""
|
||||
} else if (requireActivity().intent != null && requireActivity().intent.extras != null) {
|
||||
requireActivity().intent.extras?.getString("packageName") ?: ""
|
||||
} else {
|
||||
requireArguments().getString("packageName") ?: ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user