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) {
true -> handleAndroidPermissionRequest(featureToggled.androidPermissionsList)
false -> {
sitePermissions = sitePermissions!!.toggle(featureToggled).also {
handlePermissionsChange(it)
}
val permissions = sitePermissions
if (permissions != null) {
val newPermissions = permissions.toggle(featureToggled).also {
handlePermissionsChange(it)
}
quickSettingsStore.dispatch(
WebsitePermissionAction.TogglePermission(
permission,
featureToggled.getActionLabel(context, sitePermissions, settings),
featureToggled.shouldBeEnabled(context, sitePermissions, settings)
quickSettingsStore.dispatch(
WebsitePermissionAction.TogglePermission(
permission,
featureToggled.getActionLabel(context, newPermissions, settings),
featureToggled.shouldBeEnabled(context, newPermissions, settings)
)
)
)
} else {
navigateToManagePhoneFeature(featureToggled)
}
}
}
}
@ -189,4 +194,15 @@ class DefaultQuickSettingsController(
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:defaultValue="80"
app:argType="integer" />
<action
android:id="@+id/action_quickSettingsSheetDialogFragment_to_SitePermissionsManagePhoneFeature"
app:destination="@id/SitePermissionsManagePhoneFeature"
app:popUpTo="@id/quickSettingsSheetDialogFragment" />
</dialog>
<fragment
android:id="@+id/accountProblemFragment"

View File

@ -5,6 +5,7 @@
package org.mozilla.fenix.settings.quicksettings
import androidx.navigation.NavController
import androidx.navigation.NavDirections
import assertk.assertAll
import assertk.assertThat
import assertk.assertions.isEqualTo
@ -12,7 +13,9 @@ import assertk.assertions.isFailure
import assertk.assertions.isInstanceOf
import assertk.assertions.isSameAs
import assertk.assertions.isTrue
import io.mockk.Runs
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkStatic
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
fun `handleAndroidPermissionGranted should update the View's state`() {
val featureGranted = PhoneFeature.CAMERA