For issue #7566 Handle deny & don't ask again for site permissions
parent
40fb6225d7
commit
0a23d66756
|
@ -399,6 +399,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
|||
sitePermissionsFeature.set(
|
||||
feature = SitePermissionsFeature(
|
||||
context = context,
|
||||
storage = context.components.core.permissionStorage.permissionsStorage,
|
||||
sessionManager = sessionManager,
|
||||
fragmentManager = parentFragmentManager,
|
||||
promptsStyling = SitePermissionsFeature.PromptsStyling(
|
||||
|
@ -407,10 +408,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
|||
positiveButtonBackgroundColor = accentHighContrastColor,
|
||||
positiveButtonTextColor = R.color.photonWhite
|
||||
),
|
||||
sessionId = customTabSessionId
|
||||
) { permissions ->
|
||||
requestPermissions(permissions, REQUEST_CODE_APP_PERMISSIONS)
|
||||
},
|
||||
sessionId = customTabSessionId,
|
||||
onNeedToRequestPermissions = { permissions ->
|
||||
requestPermissions(permissions, REQUEST_CODE_APP_PERMISSIONS)
|
||||
},
|
||||
onShouldShowRequestPermissionRationale = { shouldShowRequestPermissionRationale(it) }),
|
||||
owner = this,
|
||||
view = view
|
||||
)
|
||||
|
|
|
@ -15,7 +15,7 @@ import org.mozilla.fenix.utils.Mockable
|
|||
@Mockable
|
||||
class PermissionStorage(private val context: Context) {
|
||||
|
||||
private val permissionsStorage by lazy {
|
||||
val permissionsStorage by lazy {
|
||||
SitePermissionsStorage(context, context.components.core.engine)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.content.Intent
|
|||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity.BOTTOM
|
||||
import android.view.LayoutInflater
|
||||
|
@ -28,6 +29,7 @@ import kotlinx.android.synthetic.main.fragment_quick_settings_dialog_sheet.*
|
|||
import kotlinx.android.synthetic.main.fragment_quick_settings_dialog_sheet.view.*
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import mozilla.components.lib.state.ext.consumeFrom
|
||||
import org.mozilla.fenix.BuildConfig
|
||||
import org.mozilla.fenix.HomeActivity
|
||||
import org.mozilla.fenix.IntentReceiverActivity
|
||||
import org.mozilla.fenix.R
|
||||
|
@ -49,6 +51,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
|||
private lateinit var websiteInfoView: WebsiteInfoView
|
||||
private lateinit var websitePermissionsView: WebsitePermissionsView
|
||||
private lateinit var interactor: QuickSettingsInteractor
|
||||
private var tryToRequestPermissions: Boolean = false
|
||||
private val args by navArgs<QuickSettingsSheetDialogFragmentArgs>()
|
||||
|
||||
override fun onCreateView(
|
||||
|
@ -82,6 +85,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
|||
addNewTab = context.components.useCases.tabsUseCases.addTab,
|
||||
requestRuntimePermissions = { permissions ->
|
||||
requestPermissions(permissions, REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS)
|
||||
tryToRequestPermissions = true
|
||||
},
|
||||
reportSiteIssue = ::launchIntentReceiver,
|
||||
displayPermissions = ::showPermissionsView,
|
||||
|
@ -143,7 +147,18 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
|||
PhoneFeature.findFeatureBy(permissions)?.let {
|
||||
quickSettingsController.handleAndroidPermissionGranted(it)
|
||||
}
|
||||
} else {
|
||||
val shouldShowRequestPermissionRationale = permissions.all { shouldShowRequestPermissionRationale(it) }
|
||||
|
||||
if (!shouldShowRequestPermissionRationale && tryToRequestPermissions) {
|
||||
// The user has permanently blocked these permissions and he/she is trying to enabling them.
|
||||
// at this point, we are not able to request these permissions, the only way to allow
|
||||
// them, it is to take the user to the system app setting page, and there the user
|
||||
// can allow the permissions.
|
||||
openSystemSettings()
|
||||
}
|
||||
}
|
||||
tryToRequestPermissions = false
|
||||
}
|
||||
|
||||
private fun Dialog.applyCustomizationsForTopDialog(rootView: View): Dialog {
|
||||
|
@ -179,6 +194,13 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun openSystemSettings() {
|
||||
startActivity(Intent().apply {
|
||||
action = android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
|
||||
data = Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
|
||||
})
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS = 4
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue