1
0
Fork 0

For issue #7566 Handle deny & don't ask again for site permissions

master
Arturo Mejia 2020-04-07 18:24:54 -04:00
parent 40fb6225d7
commit 0a23d66756
3 changed files with 29 additions and 5 deletions

View File

@ -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
) )

View File

@ -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)
} }

View File

@ -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
} }