1
0
Fork 0

For #7154 - Fix crash when tapping on "Blocked" in the site info panel (#7404)

master
Rushab Kumar 2020-01-09 03:21:45 +05:30 committed by Sawyer Blatz
parent 1e00b88e78
commit e6791b5c08
3 changed files with 62 additions and 9 deletions

View File

@ -95,17 +95,22 @@ class DefaultQuickSettingsController(
when (permission.isBlockedByAndroid) { when (permission.isBlockedByAndroid) {
true -> handleAndroidPermissionRequest(featureToggled.androidPermissionsList) true -> handleAndroidPermissionRequest(featureToggled.androidPermissionsList)
false -> { false -> {
sitePermissions = sitePermissions!!.toggle(featureToggled).also { val permissions = sitePermissions
handlePermissionsChange(it) if (permissions != null) {
} val newPermissions = permissions.toggle(featureToggled).also {
handlePermissionsChange(it)
}
quickSettingsStore.dispatch( quickSettingsStore.dispatch(
WebsitePermissionAction.TogglePermission( WebsitePermissionAction.TogglePermission(
permission, permission,
featureToggled.getActionLabel(context, sitePermissions, settings), featureToggled.getActionLabel(context, newPermissions, settings),
featureToggled.shouldBeEnabled(context, sitePermissions, settings) featureToggled.shouldBeEnabled(context, newPermissions, settings)
)
) )
) } else {
navigateToManagePhoneFeature(featureToggled)
}
} }
} }
} }
@ -189,4 +194,15 @@ class DefaultQuickSettingsController(
PhoneFeature.AUTOPLAY -> defaultWebsitePermission!! // fail-fast PhoneFeature.AUTOPLAY -> defaultWebsitePermission!! // fail-fast
} }
} }
/**
* Navigate to toggle [SitePermissions] for the specified [PhoneFeature]
*
* @param phoneFeature [PhoneFeature] to toggle [SitePermissions] for.
*/
private fun navigateToManagePhoneFeature(phoneFeature: PhoneFeature) {
val directions = QuickSettingsSheetDialogFragmentDirections
.actionQuickSettingsSheetDialogFragmentToSitePermissionsManagePhoneFeature(phoneFeature.id)
navController.navigate(directions)
}
} }

View File

@ -596,6 +596,10 @@
android:name="gravity" android:name="gravity"
android:defaultValue="80" android:defaultValue="80"
app:argType="integer" /> app:argType="integer" />
<action
android:id="@+id/action_quickSettingsSheetDialogFragment_to_SitePermissionsManagePhoneFeature"
app:destination="@id/SitePermissionsManagePhoneFeature"
app:popUpTo="@id/quickSettingsSheetDialogFragment" />
</dialog> </dialog>
<fragment <fragment
android:id="@+id/accountProblemFragment" android:id="@+id/accountProblemFragment"

View File

@ -5,6 +5,7 @@
package org.mozilla.fenix.settings.quicksettings package org.mozilla.fenix.settings.quicksettings
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavDirections
import assertk.assertAll import assertk.assertAll
import assertk.assertThat import assertk.assertThat
import assertk.assertions.isEqualTo import assertk.assertions.isEqualTo
@ -12,7 +13,9 @@ import assertk.assertions.isFailure
import assertk.assertions.isInstanceOf import assertk.assertions.isInstanceOf
import assertk.assertions.isSameAs import assertk.assertions.isSameAs
import assertk.assertions.isTrue import assertk.assertions.isTrue
import io.mockk.Runs
import io.mockk.every import io.mockk.every
import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
import io.mockk.mockkStatic import io.mockk.mockkStatic
import io.mockk.slot import io.mockk.slot
@ -137,6 +140,36 @@ class DefaultQuickSettingsControllerTest {
} }
} }
@Test
fun `handlePermissionToggled blocked by user should navigate to site permission manager`() {
val websitePermission = mockk<WebsitePermission.Camera>()
val invalidSitePermissionsController = DefaultQuickSettingsController(
context = context,
quickSettingsStore = store,
coroutineScope = coroutinesScope,
navController = navController,
session = browserSession,
sitePermissions = null,
settings = appSettings,
permissionStorage = permissionStorage,
reload = reload,
addNewTab = addNewTab,
requestRuntimePermissions = requestPermissions,
reportSiteIssue = reportIssue,
displayPermissions = displayPermissions,
dismiss = dismiss
)
every { websitePermission.isBlockedByAndroid } returns false
every { navController.navigate(any<NavDirections>()) } just Runs
invalidSitePermissionsController.handlePermissionToggled(websitePermission)
verify {
navController.navigate(any<NavDirections>())
}
}
@Test @Test
fun `handleAndroidPermissionGranted should update the View's state`() { fun `handleAndroidPermissionGranted should update the View's state`() {
val featureGranted = PhoneFeature.CAMERA val featureGranted = PhoneFeature.CAMERA