parent
1e00b88e78
commit
e6791b5c08
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue