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(
|
sitePermissionsFeature.set(
|
||||||
feature = SitePermissionsFeature(
|
feature = SitePermissionsFeature(
|
||||||
context = context,
|
context = context,
|
||||||
|
storage = context.components.core.permissionStorage.permissionsStorage,
|
||||||
sessionManager = sessionManager,
|
sessionManager = sessionManager,
|
||||||
fragmentManager = parentFragmentManager,
|
fragmentManager = parentFragmentManager,
|
||||||
promptsStyling = SitePermissionsFeature.PromptsStyling(
|
promptsStyling = SitePermissionsFeature.PromptsStyling(
|
||||||
|
@ -407,10 +408,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
positiveButtonBackgroundColor = accentHighContrastColor,
|
positiveButtonBackgroundColor = accentHighContrastColor,
|
||||||
positiveButtonTextColor = R.color.photonWhite
|
positiveButtonTextColor = R.color.photonWhite
|
||||||
),
|
),
|
||||||
sessionId = customTabSessionId
|
sessionId = customTabSessionId,
|
||||||
) { permissions ->
|
onNeedToRequestPermissions = { permissions ->
|
||||||
requestPermissions(permissions, REQUEST_CODE_APP_PERMISSIONS)
|
requestPermissions(permissions, REQUEST_CODE_APP_PERMISSIONS)
|
||||||
},
|
},
|
||||||
|
onShouldShowRequestPermissionRationale = { shouldShowRequestPermissionRationale(it) }),
|
||||||
owner = this,
|
owner = this,
|
||||||
view = view
|
view = view
|
||||||
)
|
)
|
||||||
|
|
|
@ -15,7 +15,7 @@ import org.mozilla.fenix.utils.Mockable
|
||||||
@Mockable
|
@Mockable
|
||||||
class PermissionStorage(private val context: Context) {
|
class PermissionStorage(private val context: Context) {
|
||||||
|
|
||||||
private val permissionsStorage by lazy {
|
val permissionsStorage by lazy {
|
||||||
SitePermissionsStorage(context, context.components.core.engine)
|
SitePermissionsStorage(context, context.components.core.engine)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.content.Intent
|
||||||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Gravity.BOTTOM
|
import android.view.Gravity.BOTTOM
|
||||||
import android.view.LayoutInflater
|
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.android.synthetic.main.fragment_quick_settings_dialog_sheet.view.*
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import mozilla.components.lib.state.ext.consumeFrom
|
import mozilla.components.lib.state.ext.consumeFrom
|
||||||
|
import org.mozilla.fenix.BuildConfig
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.IntentReceiverActivity
|
import org.mozilla.fenix.IntentReceiverActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
@ -49,6 +51,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
||||||
private lateinit var websiteInfoView: WebsiteInfoView
|
private lateinit var websiteInfoView: WebsiteInfoView
|
||||||
private lateinit var websitePermissionsView: WebsitePermissionsView
|
private lateinit var websitePermissionsView: WebsitePermissionsView
|
||||||
private lateinit var interactor: QuickSettingsInteractor
|
private lateinit var interactor: QuickSettingsInteractor
|
||||||
|
private var tryToRequestPermissions: Boolean = false
|
||||||
private val args by navArgs<QuickSettingsSheetDialogFragmentArgs>()
|
private val args by navArgs<QuickSettingsSheetDialogFragmentArgs>()
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
@ -82,6 +85,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
||||||
addNewTab = context.components.useCases.tabsUseCases.addTab,
|
addNewTab = context.components.useCases.tabsUseCases.addTab,
|
||||||
requestRuntimePermissions = { permissions ->
|
requestRuntimePermissions = { permissions ->
|
||||||
requestPermissions(permissions, REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS)
|
requestPermissions(permissions, REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS)
|
||||||
|
tryToRequestPermissions = true
|
||||||
},
|
},
|
||||||
reportSiteIssue = ::launchIntentReceiver,
|
reportSiteIssue = ::launchIntentReceiver,
|
||||||
displayPermissions = ::showPermissionsView,
|
displayPermissions = ::showPermissionsView,
|
||||||
|
@ -143,7 +147,18 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
|
||||||
PhoneFeature.findFeatureBy(permissions)?.let {
|
PhoneFeature.findFeatureBy(permissions)?.let {
|
||||||
quickSettingsController.handleAndroidPermissionGranted(it)
|
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 {
|
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 {
|
private companion object {
|
||||||
const val REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS = 4
|
const val REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS = 4
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue